Imported protobuf-csharp-port into csharp/ tree
diff --git a/csharp/.gitignore b/csharp/.gitignore
new file mode 100644
index 0000000..76c414f
--- /dev/null
+++ b/csharp/.gitignore
@@ -0,0 +1,40 @@
+#
+# 	Untracked directories
+#
+src/AddressBook/bin
+src/AddressBook/obj
+src/ProtocolBuffers/bin/
+src/ProtocolBuffers/obj/
+src/ProtocolBuffers/objCF
+src/ProtocolBuffers.Test/bin/
+src/ProtocolBuffers.Test/obj/
+src/ProtocolBuffersLite.Test/bin/
+src/ProtocolBuffersLite.Test/obj/
+src/ProtoBench/bin/
+src/ProtoBench/obj/
+src/ProtoDump/bin/
+src/ProtoDump/obj/
+src/ProtoGen/bin/
+src/ProtoGen/obj/
+src/ProtoGen.Test/bin/
+src/ProtoGen.Test/obj/
+src/ProtoMunge/bin/
+src/ProtoMunge/obj/
+mono/bin
+mono/tmp
+mono/protoc
+build_output
+build_temp
+build/msbuild*.log
+
+#
+# 	Untracked files
+#
+*.user
+*.suo
+_ReSharper.*
+*.sln.cache
+mono/TestResult.xml
+mono/.libs
+mono/*.exe
+mono/*.dll
diff --git a/csharp/.hgignore b/csharp/.hgignore
new file mode 100644
index 0000000..998d183
--- /dev/null
+++ b/csharp/.hgignore
@@ -0,0 +1,23 @@
+syntax: glob

+

+build_output/

+build_temp/

+bin/

+obj/

+*.cache

+_ReSharper.*

+*.user

+*.suo

+*.bat

+*.zip

+*.DotSettings

+build/*.log

+BenchmarkResults.txt

+

+lib/NUnit/tools/nunit-console.exe.config

+

+syntax: regexp

+build/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,5}/

+

+# Ignore Roslyn files

+^src/.*\.sln\.ide/
\ No newline at end of file
diff --git a/csharp/CHANGES.txt b/csharp/CHANGES.txt
new file mode 100644
index 0000000..90e9d77
--- /dev/null
+++ b/csharp/CHANGES.txt
@@ -0,0 +1,144 @@
+===============================================================================
+Welcome to the C# port of Google Protocol Buffers, written by Jon Skeet
+(skeet@pobox.com) based on the work of many talented people.
+
+For more information about this port, visit its homepage:
+http://protobuf-csharp-port.googlecode.com
+
+For more information about Protocol Buffers in general, visit the project page 
+for the C++, Java and Python project:
+http://protobuf.googlecode.com
+===============================================================================
+RELEASE NOTES - Version 2.4.1.555
+===============================================================================
+
+Changes:
+- Upgrade solution format to Visual Studio 2012.
+- Add the ability to print a builder (not just a message)
+- TextGenerator introduces a new overload of PrintTo
+- Munge protoc's error format into a VS-C#-compatible output format.
+- Work to make ProtoGen clone that acts as a protoc.exe plugin.
+- Added the AllowPartiallyTrustedCallers attribute
+- Optimized enum parsing.
+
+Fixes:
+- Fix for bug in limited input stream's Position, Introduced Position on 
+  output stream
+- Fix for writing a character to a JSON output overflows allocated buffer
+- Optimize FromBase64String to return Empty when presented with empty string.
+- Use string.Concat instead of operator to avoid potential import problems
+- Issue 81: quoting for NUnit parameters.
+- Issue 56: NuGet package is noisy
+- Issue 70: Portable library project has some invalid Nunit-based code.
+- Issue 71: CodedInputStream.ReadBytes go to slow path unnecessarily
+- Issue 84: warning CS0219: The variable `size' is assigned but never used
+
+===============================================================================
+RELEASE NOTES - Version 2.4.1.521
+===============================================================================
+
+Changes:
+- Add generated_code_attributes option, defaulted to false
+- Added support for Portable library
+- Added 'Unsafe' static type in ByteString to allow direct buffer access
+
+Fixes:
+- Issue 50: The XML serializer will fail to deserialize a message with empty 
+  child message
+- Issue 45: Use of 'item' as a field name causes AmbiguousMatchException
+- Issue 49: Generated nested static Types class should be partial
+- Issue 38: Disable CLSCompliant warnings (3021)
+- Issue 40: proto_path does not work for command-line file names
+- Issue 54: should retire all bytes in buffer (bufferSize)
+- Issue 43: Fix to correct identical 'umbrella_classname' options from trying 
+  to write to the same filename.
+
+===============================================================================
+RELEASE NOTES - Version 2.4.1.473
+===============================================================================
+
+Features:
+- Added option service_generator_type to control service generation with
+  NONE, GENERIC, INTERFACE, or IRPCDISPATCH
+- Added interfaces IRpcDispatch and IRpcServerStub to provide for blocking
+  services and implementations.
+- Added ProtoGen.exe command-line argument "--protoc_dir=" to specify the 
+  location of protoc.exe.
+- Extracted interfaces for ICodedInputStream and ICodedOutputStream to allow
+  custom implementation of writers with both speed and size optimizations.
+- Addition of the "Google.ProtoBuffers.Serialization" assembly to support
+  reading and writing messages to/from XML, JSON, IDictionary<,> and others.
+- Several performance related fixes and tweeks
+- Issue 3:	Add option to mark generated code with attribute
+- Issue 20:	Support for decorating classes [Serializable]
+- Issue 21:	Decorate fields with [deprecated=true] as [System.Obsolete]
+- Issue 22:	Reusable Builder classes
+- Issue 24:	Support for using Json/Xml formats with ICodedInputStream
+- Issue 25: Added support for NuGet packages
+- Issue 31: Upgraded protoc.exe and descriptor to 2.4.1
+
+Fixes:
+- Issue 13:	Message with Field same name as message causes uncompilable .cs
+- Issue 16:	Does not integrate well with other tooling
+- Issue 19:	Support for negative enum values
+- Issue 26:	AddRange in GeneratedBuilder iterates twice.
+- Issue 27:	Remove XML documentation output from test projects to clear 
+  warnings/errors.
+- Issue 28: Circular message dependencies result in null default values for 
+  Message fields.
+- Issue 29: Message classes generated have a public default constructor.  You
+  can disable private ctor generation with the option generate_private_ctor.
+- Issue 35: Fixed a bug in ProtoGen handling of arguments with trailing \
+- Big-endian support for float, and double on Silverlight
+- Packed and Unpacked parsing allow for all repeated, as per version 2.3
+- Fix for leaving Builder a public ctor on internal classes for use with
+  generic "where T: new()" constraints.
+
+Other:
+- Changed the code signing key to a privately held key
+- Reformatted all code and line-endings to C# defaults
+- Reworking of performance benchmarks to produce reliable results, option /v2
+- Issue 34: Silverlight assemblies are now unit tested
+
+===============================================================================
+RELEASE NOTES - Version 2.3.0.277
+===============================================================================
+
+Features:
+- Added cls_compliance option to generate attributes indicating 
+  non-CLS-compliance.
+- Added file_extension option to control the generated output file's extension.
+- Added umbrella_namespace option to place the umbrella class into a nested
+  namespace to address issues with proto files having the same name as a 
+  message it contains.
+- Added output_directory option to set the output path for the source file(s).
+- Added ignore_google_protobuf option to avoid generating code for includes 
+  from the google.protobuf package.
+- Added the LITE framework (Google.ProtoBuffersLite.dll) and the ability to
+  generate code with "option optimize_for = LITE_RUNTIME;".
+- Added ability to invoke protoc.exe from within ProtoGen.exe.
+- Upgraded to protoc.exe (2.3) compiler.
+
+Fixes:
+- Issue 9:	Class cannot be static and sealed error
+- Issue 12:	default value for enumerate fields must be filled out
+
+Other:
+- Rewrite of build using MSBbuild instead of NAnt
+- Moved to NUnit Version 2.2.8.0
+- Changed to using secure .snk for releases
+
+===============================================================================
+RELEASE NOTES - Version 0.9.1
+===============================================================================
+
+Fixes:
+- issue 10:	Incorrect encoding of packed fields when serialized
+
+===============================================================================
+RELEASE NOTES - Version 0.9.0
+===============================================================================
+
+- Initial release
+
+===============================================================================
\ No newline at end of file
diff --git a/csharp/README.md b/csharp/README.md
new file mode 100644
index 0000000..7844062
--- /dev/null
+++ b/csharp/README.md
@@ -0,0 +1,12 @@
+This repo was originally exported from http://code.google.com/p/protobuf-csharp-port,
+and represents the latest "legacy" version of protobuf-csharp-port.
+
+This project has now been folded into the [main Google Protocol Buffers project](http://github.com/google/protobuf),
+and is being revamped to support proto3. It is not expected to be fully backwardly-compatible with
+the code in this repo - in particular, some of the C#-specific options may not be supported in the new
+codebase, and some of the generated code may differ. A new major version offers an opportunity to spring-clean,
+as it were.
+
+This repo exists as an acknowledgement that not everyone will want to immediately use the newer codebase,
+and that they may wish to make changes to the legacy codebase. I do not expect to make any changes within this
+repo, but it can be forked for further changes.
diff --git a/csharp/build/BuildAll.bat b/csharp/build/BuildAll.bat
new file mode 100644
index 0000000..9bee73c
--- /dev/null
+++ b/csharp/build/BuildAll.bat
@@ -0,0 +1,8 @@
+@echo off

+SET BUILD_TARGET=%~1

+SET BUILD_CONFIG=%~2

+

+IF "%BUILD_TARGET%"=="" SET BUILD_TARGET=Rebuild

+IF "%BUILD_CONFIG%"=="" SET BUILD_CONFIG=Debug

+

+CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /nologo build.csproj /t:%BUILD_TARGET% /toolsversion:4.0 "/p:Configuration=%BUILD_CONFIG%" %3 %4 %5 %6

diff --git a/csharp/build/Common.targets b/csharp/build/Common.targets
new file mode 100644
index 0000000..2aa74df
--- /dev/null
+++ b/csharp/build/Common.targets
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+<!-- **********************************************************************************************
+Targets For Clean
+*********************************************************************************************** -->
+
+  <Target Name="_CleanFolder">
+    <Message Importance="normal" Text="Removing temporary directory '$(CleanFolderDirectory)'"/>
+    <Error Text="Can not remove empty directory name." Condition=" '$(CleanFolderDirectory)' == '' " />
+
+    <Exec WorkingDirectory="$(MSBuildProjectDirectory)" Condition="Exists($(CleanFolderDirectory))" Outputs="@(Ignore)"
+      Command="MOVE /Y &quot;$(CleanFolderDirectory)&quot; &quot;$(CleanFolderDirectory)-deleted&quot; > NUL" />
+    
+    <RemoveDir Directories="$(CleanFolderDirectory)-deleted" Condition="Exists('$(CleanFolderDirectory)-deleted')" />
+  </Target>
+
+  <Target Name="_CleanTempOutput">
+    <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="CleanFolderDirectory=%(TempBuildFolder.Identity);" Targets="_CleanFolder" />
+  </Target>
+  
+  <Target Name="_CleanAll" DependsOnTargets="_CleanTempOutput">
+    <MakeDir Directories="$(BuildTempDirectory)" />
+    <MakeDir Directories="$(BuildOutputDirectory)" />
+  </Target>
+
+<!-- **********************************************************************************************
+Targets For Build
+*********************************************************************************************** -->
+
+  <Target Name="_CompileAll">
+    <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=Rebuild;" Targets="_BuildAllConfigurations" />
+  </Target>
+
+  <Target Name="_BuildAllConfigurations">
+    <MSBuild Properties="TargetVersion=cf20;Configuration=$(Configuration);Platform=$(Platform);" Targets="$(SolutionTarget)" Projects="$(MSBuildProjectDirectory)\target.csproj" />
+    <MSBuild Properties="TargetVersion=cf35;Configuration=$(Configuration);Platform=$(Platform);" Targets="$(SolutionTarget)" Projects="$(MSBuildProjectDirectory)\target.csproj" />
+    <MSBuild Properties="TargetVersion=net20;Configuration=$(Configuration);Platform=$(Platform);" Targets="$(SolutionTarget)" Projects="$(MSBuildProjectDirectory)\target.csproj" />
+    <MSBuild Properties="TargetVersion=net35;Configuration=$(Configuration);Platform=$(Platform);" Targets="$(SolutionTarget)" Projects="$(MSBuildProjectDirectory)\target.csproj" />
+    <MSBuild Properties="TargetVersion=net40;Configuration=$(Configuration);Platform=$(Platform);" Targets="$(SolutionTarget)" Projects="$(MSBuildProjectDirectory)\target.csproj" />
+    <MSBuild Properties="TargetVersion=sl20;Configuration=$(Configuration);Platform=$(Platform);" Targets="$(SolutionTarget)" Projects="$(MSBuildProjectDirectory)\target.csproj" />
+    <MSBuild Properties="TargetVersion=sl30;Configuration=$(Configuration);Platform=$(Platform);" Targets="$(SolutionTarget)" Projects="$(MSBuildProjectDirectory)\target.csproj" />
+    <MSBuild Properties="TargetVersion=sl40;Configuration=$(Configuration);Platform=$(Platform);" Targets="$(SolutionTarget)" Projects="$(MSBuildProjectDirectory)\target.csproj" />
+    <MSBuild Properties="TargetVersion=pl40;Configuration=$(Configuration);Platform=$(Platform);" Targets="$(SolutionTarget)" Projects="$(MSBuildProjectDirectory)\target.csproj" />
+  </Target>
+
+<!-- **********************************************************************************************
+Targets For Tools
+*********************************************************************************************** -->
+
+  <Target Name="_BuildTools">
+    
+    <MSBuild Targets="Build" ToolsVersion="3.5" Projects="$(ProjectDirectory)\src\ProtocolBuffers.sln" Properties="Configuration=Release;Platform=Any CPU;" />
+    <Copy SourceFiles="%(ToolsOutputItem.Identity)" DestinationFolder="$(BuildOutputDirectory)\tools" />
+
+    <Copy SourceFiles="$(LibDirectory)\NUnit-config\nunit-console.v2.0.config" DestinationFiles="$(NUnitExePath).config" />
+    <Exec 
+      WorkingDirectory="%(ToolsTestContainer.RootDir)%(ToolsTestContainer.Directory)"
+      Command="&quot;$(NUnitExePath)&quot; /nologo /noshadow &quot;%(ToolsTestContainer.Identity)&quot; /xml:&quot;$(BuildTempDirectory)\%(ToolsTestContainer.Filename).xml&quot;" />
+    
+  </Target>
+
+<!-- **********************************************************************************************
+Targets For GenerateSource
+*********************************************************************************************** -->
+
+  <Target Name="_GenerateProjects">
+    <Exec Command="&quot;$(CsProjectProjector)&quot; csproj_templates src\ProtocolBuffersLibrary.sln" WorkingDirectory="$(ProjectDirectory)" />
+  </Target>
+  
+  <Target Name="_CleanTempSource">
+    <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="CleanFolderDirectory=$(SourceTempDirectory);" Targets="_CleanFolder" />
+    <MakeDir Directories="$(SourceTempDirectory)" />
+  </Target>
+  
+  <Target Name="_GenerateSource" DependsOnTargets="_CleanTempSource">
+    <Message Importance="high" Text="Generating source from proto files" />
+    <Exec Command="&quot;$(ProtocExePath)&quot; --proto_path=$(ProtosDirectory) --descriptor_set_out=compiled.pb @(Protos->'%(RelativeDir)%(Filename)%(Extension)', ' ')" WorkingDirectory="$(SourceTempDirectory)" />
+    <Exec Command="&quot;$(ProtogenExePath)&quot; compiled.pb" WorkingDirectory="$(SourceTempDirectory)" />
+  </Target>
+
+  <Target Name="_CopyGeneratedSource" DependsOnTargets="_GenerateSource">
+    <Copy SourceFiles="%(GeneratedSource.Identity)" DestinationFiles="%(GeneratedSource.TargetDirectory)\%(GeneratedSource.Filename)%(GeneratedSource.Extension)" />
+  </Target>
+
+<!-- **********************************************************************************************
+Targets For Package
+*********************************************************************************************** -->
+
+  <Target Name="_PackageAll">
+    <MSBuild Projects="$(MSBuildProjectFullPath)" Properties="SolutionTarget=_Publish;" Targets="_BuildAllConfigurations" />
+  </Target>
+
+  <Target Name="_GeneratePackage">
+    <Copy SourceFiles="@(StaticPackageItem)" DestinationFolder="$(BuildOutputPackage)\%(StaticPackageItem.TargetDirectory)\%(StaticPackageItem.RecursiveDir)" />
+    <Exec Command="&quot;$(ZipExePath)&quot; a -tzip $(BuildTempDirectory)\$(PackageName)-binaries.zip * -x!*.pdb -r" WorkingDirectory="$(BuildOutputPackage)" />
+    <Exec Command="&quot;$(ZipExePath)&quot; a -tzip $(BuildTempDirectory)\$(PackageName)-symbols.zip * -r" WorkingDirectory="$(BuildOutputPackage)" />
+  </Target>
+
+<!-- **********************************************************************************************
+Targets For Benchmark
+*********************************************************************************************** -->
+
+  <Target Name="_RunBenchmarks">
+    <ItemGroup>
+      <BenchmarkParameter Include="Google.ProtocolBuffers.ProtoBench.SizeMessage1,ProtoBench" />
+      <BenchmarkParameter Include="google_message1.dat" />
+      <BenchmarkParameter Include="Google.ProtocolBuffers.ProtoBench.SpeedMessage1,ProtoBench" />
+      <BenchmarkParameter Include="google_message1.dat" />
+      <BenchmarkParameter Include="Google.ProtocolBuffers.ProtoBench.SizeMessage2,ProtoBench" />
+      <BenchmarkParameter Include="google_message2.dat" />
+      <BenchmarkParameter Include="Google.ProtocolBuffers.ProtoBench.SpeedMessage2,ProtoBench" />
+      <BenchmarkParameter Include="google_message2.dat" />
+    </ItemGroup>
+
+    <Message Text="Running ProtoBench.exe" />
+    <Exec Command="ProtoBench.exe $(BenchmarkArgs) @(BenchmarkParameter->'%(Identity)', ' ') &quot;/log:$(BenchmarkOutputFile)&quot;"
+          WorkingDirectory="$(SourceDirectory)\ProtoBench\bin\NET35\Release" />
+
+  </Target>
+
+</Project>
\ No newline at end of file
diff --git a/csharp/build/Google.ProtocolBuffers.nuspec b/csharp/build/Google.ProtocolBuffers.nuspec
new file mode 100644
index 0000000..c355cd4
--- /dev/null
+++ b/csharp/build/Google.ProtocolBuffers.nuspec
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="nuspec.xsd">
+  <metadata>
+    <id>Google.ProtocolBuffers</id>
+    <version>$version$</version>
+    <owners>Jon Skeet</owners>
+    <authors>Jon Skeet</authors>
+    <licenseUrl>http://code.google.com/p/protobuf-csharp-port/source/browse/license.txt</licenseUrl>
+    <projectUrl>http://code.google.com/p/protobuf-csharp-port/</projectUrl>
+    <requireLicenseAcceptance>false</requireLicenseAcceptance>
+    <copyright>Copyright 2008 Google Inc.  All rights reserved.</copyright>
+    <tags>Protocol Buffers Binary Serialization Format Google</tags>
+
+    <title>Google.ProtocolBuffers</title>
+    <summary>A managed code generator and library for Google's data interchange format.</summary>
+    <description><![CDATA[
+Protocol Buffers is a binary serialization format and technology, released to the open source community by Google in 2008.  
+Its primary use is to produce small fast binary representations of a 'message' or object for serialization or transportation.
+There are various implementations of Protocol Buffers in .NET. This project is a fairly close port of the Google Java implementation.
+
+There are two main parts:
+
+tools/protoc.exe, which takes the textual representation of the protocol buffer and turns it into a binary representation for use with ProtoGen.exe.
+tools/ProtoGen.exe, which takes binary representations of protocol buffer descriptors (as generated by the "stock" protoc binary supplied by Google) and creates C# source code. This is only required at build time.
+
+lib/*/Google.ProtocolBuffers.dll, which is a supporting library. This is required at execution time.
+lib/*/Google.ProtocolBuffers.Serialization.dll, a supplementary library that provides extensions for reading and writing protocol buffers to xml, json, and others.
+
+LINKS:
+
+Project Home    - http://code.google.com/p/protobuf-csharp-port
+Online Help     - http://help.protobuffers.net
+Developer Guide - http://code.google.com/apis/protocolbuffers/docs/overview.html
+Language Guide  - http://code.google.com/apis/protocolbuffers/docs/proto.html
+
+    ]]></description>
+	
+    <references>
+      <reference file="Google.ProtocolBuffers.dll"/>
+      <reference file="Google.ProtocolBuffers.Serialization.dll"/>
+    </references>
+  
+  </metadata>
+  <files>
+    <!-- Release Binaries -->
+    <file src="..\build_output\Release\**\Google.ProtocolBuffers.???" target="lib\" />
+    <file src="..\build_output\Release\**\Google.ProtocolBuffers.Serialization.???" target="lib\" />
+    <!-- Tools -->
+    <file src="..\build_output\tools\**\*" target="tools\" />
+    <file src="..\build_output\protos\**\*" target="tools\" />
+    <!-- Content -->
+    <file src="..\build_output\CHANGES.txt" target="tools\"/>
+    <file src="..\build_output\license.txt" target="tools\"/>
+    <file src="..\build_output\tools\protoc-license.txt" target="tools\"/>
+    <!-- Source -->
+    <file src="..\src\ProtocolBuffers\**\*.cs" target="src\ProtocolBuffers\"/>
+    <file src="..\src\ProtocolBuffers.Serialization\**\*.cs" target="src\ProtocolBuffers.Serialization\"/>
+  </files>
+</package>
diff --git a/csharp/build/Google.ProtocolBuffersLite.nuspec b/csharp/build/Google.ProtocolBuffersLite.nuspec
new file mode 100644
index 0000000..8b9107f
--- /dev/null
+++ b/csharp/build/Google.ProtocolBuffersLite.nuspec
@@ -0,0 +1,60 @@
+<?xml version="1.0"?>
+<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="nuspec.xsd">
+  <metadata>
+    <id>Google.ProtocolBuffersLite</id>
+    <version>$version$</version>
+    <owners>Jon Skeet</owners>
+    <authors>Jon Skeet</authors>
+    <licenseUrl>http://code.google.com/p/protobuf-csharp-port/source/browse/license.txt</licenseUrl>
+    <projectUrl>http://code.google.com/p/protobuf-csharp-port/</projectUrl>
+    <requireLicenseAcceptance>false</requireLicenseAcceptance>
+    <copyright>Copyright 2008 Google Inc.  All rights reserved.</copyright>
+    <tags>Protocol Buffers Binary Serialization Format Google</tags>
+
+    <title>Google.ProtocolBuffersLite</title>
+    <summary>A managed code generator and library for Google's data interchange format.</summary>
+    <description><![CDATA[
+Protocol Buffers is a binary serialization format and technology, released to the open source community by Google in 2008.  
+Its primary use is to produce small fast binary representations of a 'message' or object for serialization or transportation.
+There are various implementations of Protocol Buffers in .NET. This project is a fairly close port of the Google Java implementation.
+
+There are two main parts:
+
+tools/protoc.exe, which takes the textual representation of the protocol buffer and turns it into a binary representation for use with ProtoGen.exe.
+tools/ProtoGen.exe, which takes binary representations of protocol buffer descriptors (as generated by the "stock" protoc binary supplied by Google) and creates C# source code. This is only required at build time.
+
+lib/*/Google.ProtocolBuffersLite.dll, which is a supporting library. This is required at execution time.
+lib/*/Google.ProtocolBuffersLite.Serialization.dll, a supplementary library that provides extensions for reading and writing protocol buffers to xml, json, and others.
+
+LINKS:
+
+Project Home    - http://code.google.com/p/protobuf-csharp-port
+Online Help     - http://help.protobuffers.net
+Developer Guide - http://code.google.com/apis/protocolbuffers/docs/overview.html
+Language Guide  - http://code.google.com/apis/protocolbuffers/docs/proto.html
+
+    ]]></description>
+	
+    <references>
+      <reference file="Google.ProtocolBuffersLite.dll"/>
+      <reference file="Google.ProtocolBuffersLite.Serialization.dll"/>
+    </references>
+  
+  </metadata>
+
+  <files>
+    <!-- Release Binaries -->
+    <file src="..\build_output\Release\**\Google.ProtocolBuffersLite.???" target="lib\" />
+    <file src="..\build_output\Release\**\Google.ProtocolBuffersLite.Serialization.???" target="lib\" />
+    <!-- Tools -->
+    <file src="..\build_output\tools\**\*" target="tools\" />
+    <file src="..\build_output\protos\**\*" target="tools\" />
+    <!-- Content -->
+    <file src="..\build_output\CHANGES.txt" target="tools\"/>
+    <file src="..\build_output\license.txt" target="tools\"/>
+    <file src="..\build_output\tools\protoc-license.txt" target="tools\"/>
+    <!-- Source -->
+    <file src="..\src\ProtocolBuffers\**\*.cs" target="src\ProtocolBuffers\"/>
+    <file src="..\src\ProtocolBuffers.Serialization\**\*.cs" target="src\ProtocolBuffers.Serialization\"/>
+  </files>
+</package>
diff --git a/csharp/build/RunBenchmarks.bat b/csharp/build/RunBenchmarks.bat
new file mode 100644
index 0000000..d0e6501
--- /dev/null
+++ b/csharp/build/RunBenchmarks.bat
@@ -0,0 +1,2 @@
+@echo off

+CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /nologo build.csproj /toolsversion:4.0 /t:RunBenchmarks %1 %2 %3 %4

diff --git a/csharp/build/build.bat b/csharp/build/build.bat
new file mode 100644
index 0000000..bd7bd2a
--- /dev/null
+++ b/csharp/build/build.bat
@@ -0,0 +1,20 @@
+@echo off

+SET BUILD_VERSION=%~1

+SET BUILD_TARGET=%~2

+SET BUILD_CONFIG=%~3

+

+IF NOT "%BUILD_VERSION%"=="" GOTO RUN

+ECHO.

+ECHO Usage: build.bat platform [target] [config] [msbuild arguments]

+ECHO.

+ECHO - platform:  CF20, CF35, NET20, NET35, NET40, PL40, SL20, SL30, or SL40

+ECHO - [target]:  Rebuild, Clean, Build, Test, or Publish

+ECHO - [config]:  Debug or Release

+ECHO.

+EXIT /B 1

+

+:RUN

+IF "%BUILD_TARGET%"=="" SET BUILD_TARGET=Rebuild

+IF "%BUILD_CONFIG%"=="" SET BUILD_CONFIG=Debug

+

+CMD.exe /Q /C "CD %~dp0 && %WINDIR%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe /nologo target.csproj /toolsversion:4.0 %4 %5 %6 "/t:%BUILD_TARGET%" "/p:Configuration=%BUILD_CONFIG%;TargetVersion=%BUILD_VERSION%"

diff --git a/csharp/build/build.csproj b/csharp/build/build.csproj
new file mode 100644
index 0000000..e78b2ef
--- /dev/null
+++ b/csharp/build/build.csproj
@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+  <!-- build targets -->
+  <Target Name="Clean" DependsOnTargets="_CleanAll" />
+  <Target Name="BuildTools" DependsOnTargets="_BuildTools" />
+  <Target Name="GenerateProjects" DependsOnTargets="_GenerateProjects" />
+  <Target Name="GenerateSource" DependsOnTargets="_GenerateSource;_CopyGeneratedSource" />
+  <Target Name="RebuildSource" DependsOnTargets="Clean;BuildTools;GenerateSource" />
+  <Target Name="Build" DependsOnTargets="GenerateProjects;BuildTools;GenerateSource;_CompileAll" />
+  <Target Name="Rebuild" DependsOnTargets="Clean;Build" />
+  <Target Name="GeneratePackage" DependsOnTargets="_PackageAll;_GeneratePackage" />
+  <Target Name="FullBuild" DependsOnTargets="Rebuild;GeneratePackage" />
+  <!-- misc targets -->
+  <Target Name="RunBenchmarks" DependsOnTargets="_CleanAll;_BuildTools;_RunBenchmarks" />
+
+  <PropertyGroup>
+    <ProjectName>Protocol Buffers</ProjectName>
+    <Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">Any CPU</Platform>
+    
+    <!--Directory Paths-->
+    <ProjectDirectory>$(MSBuildProjectDirectory)\..</ProjectDirectory>
+    <SourceDirectory>$(ProjectDirectory)\src</SourceDirectory>
+    <LibDirectory>$(ProjectDirectory)\lib</LibDirectory>
+    <ProtosDirectory>$(ProjectDirectory)\protos</ProtosDirectory>
+
+    <SourceTempDirectory>$(ProjectDirectory)\build_temp\GeneratedSource</SourceTempDirectory>
+    <BuildTempDirectory>$(ProjectDirectory)\build_temp</BuildTempDirectory>
+    <BuildOutputDirectory>$(ProjectDirectory)\build_output</BuildOutputDirectory>
+    <BuildOutputPackage>$(BuildOutputDirectory)</BuildOutputPackage>
+
+    <BenchmarkArgs>/v2 /fast /formats</BenchmarkArgs>
+    <BenchmarkOutputFile>$(BuildTempDirectory)\..\BenchmarkResults.txt</BenchmarkOutputFile>
+    <BenchmarkProtosDirectory>$(ProjectDirectory)\benchmarks</BenchmarkProtosDirectory>
+
+    <PackageName Condition=" '$(PackageName)' == '' ">$(Configuration)</PackageName>
+    
+    <!--Tool Paths-->
+    <ProtocExePath>$(BuildOutputDirectory)\tools\protoc.exe</ProtocExePath>
+    <ProtogenExePath>$(BuildOutputDirectory)\tools\protogen.exe</ProtogenExePath>
+    <NUnitExePath>$(LibDirectory)\NUnit\tools\nunit-console.exe</NUnitExePath>
+    <CsProjectProjector>$(LibDirectory)\CsProjectProjector\CsProjectProjector.exe</CsProjectProjector>
+    <ZipExePath>$(LibDirectory)\7-Zip 9.20\7za.exe</ZipExePath>
+  
+</PropertyGroup>
+
+  <Import Project="Common.targets"/>
+
+  <!-- Proto Files -->
+  <ItemGroup>
+    <Protos Include="$(ProtosDirectory)\extest\unittest_issues.proto" />
+    <Protos Include="$(ProtosDirectory)\extest\unittest_extras.proto" />
+    <Protos Include="$(ProtosDirectory)\extest\unittest_extras_full.proto" />
+    <Protos Include="$(ProtosDirectory)\extest\unittest_extras_lite.proto" />
+    <Protos Include="$(ProtosDirectory)\extest\unittest_extras_xmltest.proto" />
+    <Protos Include="$(ProtosDirectory)\extest\unittest_generic_services.proto" />
+    <Protos Include="$(ProtosDirectory)\extest\unittest_rpc_interop.proto" />
+    <Protos Include="$(ProtosDirectory)\extest\unittest_rpc_interop_lite.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\descriptor.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\csharp_options.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\unittest.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\unittest_csharp_options.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\unittest_custom_options.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\unittest_embed_optimize_for.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\unittest_empty.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\unittest_import.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\unittest_import_lite.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\unittest_lite.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\unittest_lite_imports_nonlite.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\unittest_mset.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\unittest_no_generic_services.proto" />
+    <Protos Include="$(ProtosDirectory)\google\protobuf\unittest_optimize_for.proto" />
+    <Protos Include="$(ProtosDirectory)\google\test\google_size.proto" />
+    <Protos Include="$(ProtosDirectory)\google\test\google_speed.proto" />
+    <Protos Include="$(ProtosDirectory)\tutorial\addressbook.proto" />
+    <!-- for benchmark -->
+    <Protos Include="$(ProtosDirectory)\benchmarks\google_size.proto" />
+    <Protos Include="$(ProtosDirectory)\benchmarks\google_speed.proto" />
+  </ItemGroup>
+  <!-- Generated Source -->
+  <ItemGroup>
+    <!-- Main protos -->
+    <GeneratedSource Include="$(SourceTempDirectory)\CSharpOptions.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers\DescriptorProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\DescriptorProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers\DescriptorProtos</TargetDirectory>
+    </GeneratedSource>
+        
+    <!-- Address book sample -->
+    <GeneratedSource Include="$(SourceTempDirectory)\AddressBookProtos.cs">
+      <TargetDirectory>$(SourceDirectory)\AddressBook</TargetDirectory>
+    </GeneratedSource>
+    <!-- Unit test -->
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestExtrasProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestExtrasIssuesProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestXmlSerializerTestProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestCSharpOptionsProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestCustomOptionsProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestEmbedOptimizeForProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestEmptyProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestImportLiteProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>  
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestImportProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestMessageSetProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestNoGenericServicesProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestOptimizeForProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestRpcInterop.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestRpcInteropLite.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffersLite.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestGenericServices.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <!-- Lite unit test -->
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestExtrasFullProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffersLite.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestExtrasLiteProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffersLite.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestImportLiteProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffersLite.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestImportProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffersLite.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestLiteImportNonLiteProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffersLite.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestLiteProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffersLite.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffersLite.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestGoogleSizeProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestGoogleSpeedProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtocolBuffers.Test\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\GoogleSizeProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtoBench\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\GoogleSpeedProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtoBench\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestImportProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtoBench\TestProtos</TargetDirectory>
+    </GeneratedSource>
+    <GeneratedSource Include="$(SourceTempDirectory)\UnitTestProtoFile.cs">
+      <TargetDirectory>$(SourceDirectory)\ProtoBench\TestProtos</TargetDirectory>
+    </GeneratedSource>
+  </ItemGroup>
+  <!-- Package Items -->
+  <ItemGroup>
+    <StaticPackageItem Include="$(ProjectDirectory)\CHANGES.txt" />
+    <StaticPackageItem Include="$(ProjectDirectory)\license.txt" />
+    <StaticPackageItem Include="$(ProjectDirectory)\protos\google\protobuf\descriptor.proto">
+      <TargetDirectory>\protos\google\protobuf</TargetDirectory>
+    </StaticPackageItem>
+    <StaticPackageItem Include="$(ProjectDirectory)\protos\google\protobuf\compiler\plugin.proto">
+      <TargetDirectory>\protos\google\protobuf\compiler</TargetDirectory>
+    </StaticPackageItem>
+    <StaticPackageItem Include="$(ProjectDirectory)\protos\google\protobuf\csharp_options.proto">
+      <TargetDirectory>\protos\google\protobuf</TargetDirectory>
+    </StaticPackageItem>
+    <StaticPackageItem Include="$(ProjectDirectory)\protos\tutorial\addressbook.proto">
+      <TargetDirectory>\protos\tutorial</TargetDirectory>
+    </StaticPackageItem>
+  </ItemGroup>
+  <!-- Tools -->
+  <ItemGroup>
+    <ToolsTestContainer Include="$(SourceDirectory)\ProtoGen.Test\bin\NET35\Release\Google.ProtocolBuffers.ProtoGen.Test.dll" />
+
+    <ToolsOutputItem Include="$(SourceDirectory)\ProtocolBuffers\bin\NET35\Release\Google.ProtocolBuffers.dll" />
+    <ToolsOutputItem Include="$(SourceDirectory)\ProtocolBuffers.Serialization\bin\NET35\Release\Google.ProtocolBuffers.Serialization.dll" />
+    <ToolsOutputItem Include="$(SourceDirectory)\ProtoGen\bin\NET35\Release\ProtoGen.exe" />
+    <ToolsOutputItem Include="$(SourceDirectory)\ProtoGen\bin\NET35\Release\ProtoGen.exe.config" />
+    <ToolsOutputItem Include="$(SourceDirectory)\ProtoMunge\bin\NET35\Release\ProtoMunge.exe" />
+    <ToolsOutputItem Include="$(SourceDirectory)\ProtoDump\bin\NET35\Release\ProtoDump.exe" />
+    <ToolsOutputItem Include="$(SourceDirectory)\ProtoBench\bin\NET35\Release\ProtoBench.exe" />
+    <ToolsOutputItem Include="$(LibDirectory)\protoc.exe" />
+    <ToolsOutputItem Include="$(LibDirectory)\protoc-license.txt" />
+  </ItemGroup>
+  <!-- Temporary Directories -->
+  <ItemGroup>
+    <TempBuildFolder Include="$(BuildTempDirectory)" />
+    <TempBuildFolder Include="$(BuildOutputDirectory)" />
+    <TempBuildFolder Include="$(SourceDirectory)\AddressBook\obj" />
+    <TempBuildFolder Include="$(SourceDirectory)\AddressBook\bin" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtoBench\obj" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtoBench\bin" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtocolBuffers\obj" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtocolBuffers\bin" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtocolBuffers.Serialization\obj" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtocolBuffers.Serialization\bin" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtocolBuffers.Test\obj" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtocolBuffers.Test\bin" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtocolBuffersLite.Test\obj" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtocolBuffersLite.Test\bin" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtoDump\obj" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtoDump\bin" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtoGen\obj" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtoGen\bin" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtoGen.Test\obj" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtoGen.Test\bin" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtoMunge\obj" />
+    <TempBuildFolder Include="$(SourceDirectory)\ProtoMunge\bin" />
+  </ItemGroup>
+</Project>
diff --git a/csharp/build/googlecode_upload.py b/csharp/build/googlecode_upload.py
new file mode 100644
index 0000000..d2d5f97
--- /dev/null
+++ b/csharp/build/googlecode_upload.py
@@ -0,0 +1,248 @@
+#!/usr/bin/env python
+#
+# Copyright 2006, 2007 Google Inc. All Rights Reserved.
+# Author: danderson@google.com (David Anderson)
+#
+# Script for uploading files to a Google Code project.
+#
+# This is intended to be both a useful script for people who want to
+# streamline project uploads and a reference implementation for
+# uploading files to Google Code projects.
+#
+# To upload a file to Google Code, you need to provide a path to the
+# file on your local machine, a small summary of what the file is, a
+# project name, and a valid account that is a member or owner of that
+# project.  You can optionally provide a list of labels that apply to
+# the file.  The file will be uploaded under the same name that it has
+# in your local filesystem (that is, the "basename" or last path
+# component).  Run the script with '--help' to get the exact syntax
+# and available options.
+#
+# Note that the upload script requests that you enter your
+# googlecode.com password.  This is NOT your Gmail account password!
+# This is the password you use on googlecode.com for committing to
+# Subversion and uploading files.  You can find your password by going
+# to http://code.google.com/hosting/settings when logged in with your
+# Gmail account. If you have already committed to your project's
+# Subversion repository, the script will automatically retrieve your
+# credentials from there (unless disabled, see the output of '--help'
+# for details).
+#
+# If you are looking at this script as a reference for implementing
+# your own Google Code file uploader, then you should take a look at
+# the upload() function, which is the meat of the uploader.  You
+# basically need to build a multipart/form-data POST request with the
+# right fields and send it to https://PROJECT.googlecode.com/files .
+# Authenticate the request using HTTP Basic authentication, as is
+# shown below.
+#
+# Licensed under the terms of the Apache Software License 2.0:
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+# Questions, comments, feature requests and patches are most welcome.
+# Please direct all of these to the Google Code users group:
+#  http://groups.google.com/group/google-code-hosting
+
+"""Google Code file uploader script.
+"""
+
+__author__ = 'danderson@google.com (David Anderson)'
+
+import httplib
+import os.path
+import optparse
+import getpass
+import base64
+import sys
+
+
+def upload(file, project_name, user_name, password, summary, labels=None):
+  """Upload a file to a Google Code project's file server.
+
+  Args:
+    file: The local path to the file.
+    project_name: The name of your project on Google Code.
+    user_name: Your Google account name.
+    password: The googlecode.com password for your account.
+              Note that this is NOT your global Google Account password!
+    summary: A small description for the file.
+    labels: an optional list of label strings with which to tag the file.
+
+  Returns: a tuple:
+    http_status: 201 if the upload succeeded, something else if an
+                 error occured.
+    http_reason: The human-readable string associated with http_status
+    file_url: If the upload succeeded, the URL of the file on Google
+              Code, None otherwise.
+  """
+  # The login is the user part of user@gmail.com. If the login provided
+  # is in the full user@domain form, strip it down.
+  if user_name.endswith('@gmail.com'):
+    user_name = user_name[:user_name.index('@gmail.com')]
+
+  form_fields = [('summary', summary)]
+  if labels is not None:
+    form_fields.extend([('label', l.strip()) for l in labels])
+
+  content_type, body = encode_upload_request(form_fields, file)
+
+  upload_host = '%s.googlecode.com' % project_name
+  upload_uri = '/files'
+  auth_token = base64.b64encode('%s:%s'% (user_name, password))
+  headers = {
+    'Authorization': 'Basic %s' % auth_token,
+    'User-Agent': 'Googlecode.com uploader v0.9.4',
+    'Content-Type': content_type,
+    }
+
+  server = httplib.HTTPSConnection(upload_host)
+  server.request('POST', upload_uri, body, headers)
+  resp = server.getresponse()
+  server.close()
+
+  if resp.status == 201:
+    location = resp.getheader('Location', None)
+  else:
+    location = None
+  return resp.status, resp.reason, location
+
+
+def encode_upload_request(fields, file_path):
+  """Encode the given fields and file into a multipart form body.
+
+  fields is a sequence of (name, value) pairs. file is the path of
+  the file to upload. The file will be uploaded to Google Code with
+  the same file name.
+
+  Returns: (content_type, body) ready for httplib.HTTP instance
+  """
+  BOUNDARY = '----------Googlecode_boundary_reindeer_flotilla'
+  CRLF = '\r\n'
+
+  body = []
+
+  # Add the metadata about the upload first
+  for key, value in fields:
+    body.extend(
+      ['--' + BOUNDARY,
+       'Content-Disposition: form-data; name="%s"' % key,
+       '',
+       value,
+       ])
+
+  # Now add the file itself
+  file_name = os.path.basename(file_path)
+  f = open(file_path, 'rb')
+  file_content = f.read()
+  f.close()
+
+  body.extend(
+    ['--' + BOUNDARY,
+     'Content-Disposition: form-data; name="filename"; filename="%s"'
+     % file_name,
+     # The upload server determines the mime-type, no need to set it.
+     'Content-Type: application/octet-stream',
+     '',
+     file_content,
+     ])
+
+  # Finalize the form body
+  body.extend(['--' + BOUNDARY + '--', ''])
+
+  return 'multipart/form-data; boundary=%s' % BOUNDARY, CRLF.join(body)
+
+
+def upload_find_auth(file_path, project_name, summary, labels=None,
+                     user_name=None, password=None, tries=3):
+  """Find credentials and upload a file to a Google Code project's file server.
+
+  file_path, project_name, summary, and labels are passed as-is to upload.
+
+  Args:
+    file_path: The local path to the file.
+    project_name: The name of your project on Google Code.
+    summary: A small description for the file.
+    labels: an optional list of label strings with which to tag the file.
+    config_dir: Path to Subversion configuration directory, 'none', or None.
+    user_name: Your Google account name.
+    tries: How many attempts to make.
+  """
+
+  while tries > 0:
+    if user_name is None:
+      # Read username if not specified or loaded from svn config, or on
+      # subsequent tries.
+      sys.stdout.write('Please enter your googlecode.com username: ')
+      sys.stdout.flush()
+      user_name = sys.stdin.readline().rstrip()
+    if password is None:
+      # Read password if not loaded from svn config, or on subsequent tries.
+      print 'Please enter your googlecode.com password.'
+      print '** Note that this is NOT your Gmail account password! **'
+      print 'It is the password you use to access Subversion repositories,'
+      print 'and can be found here: http://code.google.com/hosting/settings'
+      password = getpass.getpass()
+
+    status, reason, url = upload(file_path, project_name, user_name, password,
+                                 summary, labels)
+    # Returns 403 Forbidden instead of 401 Unauthorized for bad
+    # credentials as of 2007-07-17.
+    if status in [httplib.FORBIDDEN, httplib.UNAUTHORIZED]:
+      # Rest for another try.
+      user_name = password = None
+      tries = tries - 1
+    else:
+      # We're done.
+      break
+
+  return status, reason, url
+
+
+def main():
+  parser = optparse.OptionParser(usage='googlecode-upload.py -s SUMMARY '
+                                 '-p PROJECT [options] FILE')
+  parser.add_option('-s', '--summary', dest='summary',
+                    help='Short description of the file')
+  parser.add_option('-p', '--project', dest='project',
+                    help='Google Code project name')
+  parser.add_option('-u', '--user', dest='user',
+                    help='Your Google Code username')
+  parser.add_option('-w', '--password', dest='password',
+                    help='Your Google Code password')
+  parser.add_option('-l', '--labels', dest='labels',
+                    help='An optional list of comma-separated labels to attach '
+                    'to the file')
+
+  options, args = parser.parse_args()
+
+  if not options.summary:
+    parser.error('File summary is missing.')
+  elif not options.project:
+    parser.error('Project name is missing.')
+  elif len(args) < 1:
+    parser.error('File to upload not provided.')
+  elif len(args) > 1:
+    parser.error('Only one file may be specified.')
+
+  file_path = args[0]
+
+  if options.labels:
+    labels = options.labels.split(',')
+  else:
+    labels = None
+
+  status, reason, url = upload_find_auth(file_path, options.project,
+                                         options.summary, labels,
+                                         options.user, options.password)
+  if url:
+    print 'The file was uploaded successfully.'
+    print 'URL: %s' % url
+    return 0
+  else:
+    print 'An error occurred. Your file was not uploaded.'
+    print 'Google Code upload server said: %s (%s)' % (reason, status)
+    return 1
+
+
+if __name__ == '__main__':
+  sys.exit(main())
diff --git a/csharp/build/nuspec.xsd b/csharp/build/nuspec.xsd
new file mode 100644
index 0000000..db744d1
--- /dev/null
+++ b/csharp/build/nuspec.xsd
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>

+<!-- original location: https://hg01.codeplex.com/nuget/raw-file/tip/src/Core/Authoring/nuspec.xsd -->

+<xs:schema id="nuspec" xmlns:xs="http://www.w3.org/2001/XMLSchema">

+    <xs:element name="package">

+        <xs:complexType>

+            <xs:sequence>

+                <xs:element name="metadata" maxOccurs="1" minOccurs="1">

+                    <xs:complexType>

+                        <xs:all>

+                            <xs:element name="id" maxOccurs="1" minOccurs="1" type="xs:string" />

+                            <xs:element name="version" maxOccurs="1" minOccurs="1" type="xs:string" />

+                            <xs:element name="title" maxOccurs="1" minOccurs="0" type="xs:string" />

+                            <xs:element name="authors" maxOccurs="1" minOccurs="1" type="xs:string" />

+                            <xs:element name="owners" maxOccurs="1" minOccurs="0" type="xs:string" />

+                            <xs:element name="licenseUrl" maxOccurs="1" minOccurs="0" type="xs:anyURI" />

+                            <xs:element name="projectUrl" maxOccurs="1" minOccurs="0" type="xs:anyURI" />

+                            <xs:element name="iconUrl" maxOccurs="1" minOccurs="0" type="xs:anyURI" />

+                            <xs:element name="requireLicenseAcceptance" maxOccurs="1" minOccurs="0" type="xs:boolean" />

+                            <xs:element name="description" maxOccurs="1" minOccurs="1" type="xs:string" />

+                            <xs:element name="summary" maxOccurs="1" minOccurs="0" type="xs:string" />

+                            <xs:element name="releaseNotes" maxOccurs="1" minOccurs="0" type="xs:string" />

+                            <xs:element name="copyright" maxOccurs="1" minOccurs="0" type="xs:string" />

+                            <xs:element name="language" maxOccurs="1" minOccurs="0" type="xs:string" default="en-US" />

+                            <xs:element name="tags" maxOccurs="1" minOccurs="0" type="xs:string" />

+                            <xs:element name="dependencies" maxOccurs="1" minOccurs="0">

+                                <xs:complexType>

+                                    <xs:sequence>

+                                        <xs:element name="dependency" minOccurs="0" maxOccurs="unbounded">

+                                            <xs:complexType>

+                                                <xs:attribute name="id" type="xs:string" use="required" />

+                                                <xs:attribute name="version" type="xs:string" use="optional" />

+                                            </xs:complexType>

+                                        </xs:element>

+                                    </xs:sequence>

+                                </xs:complexType>

+                            </xs:element>

+                            <xs:element name="frameworkAssemblies" maxOccurs="1" minOccurs="0">

+                                <xs:complexType>

+                                    <xs:sequence>

+                                        <xs:element name="frameworkAssembly" minOccurs="0" maxOccurs="unbounded">

+                                            <xs:complexType>

+                                                <xs:attribute name="assemblyName" type="xs:string" use="required" />

+                                                <xs:attribute name="targetFramework" type="xs:string" use="optional" />

+                                            </xs:complexType>

+                                        </xs:element>

+                                    </xs:sequence>

+                                </xs:complexType>

+                            </xs:element>

+                            <xs:element name="references" maxOccurs="1" minOccurs="0">

+                                <xs:complexType>

+                                    <xs:sequence>

+                                        <xs:element name="reference" minOccurs="0" maxOccurs="unbounded">

+                                            <xs:complexType>

+                                                <xs:attribute name="file" type="xs:string" use="required" />

+                                            </xs:complexType>

+                                        </xs:element>

+                                    </xs:sequence>

+                                </xs:complexType>

+                            </xs:element>

+                        </xs:all>

+                    </xs:complexType>

+                </xs:element>

+                <xs:element name="files" minOccurs="0" maxOccurs="1" nillable="true">

+                    <xs:complexType>

+                        <xs:sequence>

+                            <xs:element name="file" minOccurs="0" maxOccurs="unbounded">

+                                <xs:complexType>

+                                    <xs:attribute name="src" use="required" type="xs:string" />

+                                    <xs:attribute name="target" use="optional" type="xs:string" />

+                                    <xs:attribute name="exclude" use="optional" type="xs:string" />

+                                </xs:complexType>

+                            </xs:element>

+                        </xs:sequence>

+                    </xs:complexType>

+                </xs:element>

+            </xs:sequence>

+        </xs:complexType>

+    </xs:element>

+</xs:schema>

diff --git a/csharp/build/publish.csproj b/csharp/build/publish.csproj
new file mode 100644
index 0000000..bbe71df
--- /dev/null
+++ b/csharp/build/publish.csproj
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project DefaultTargets="Publish" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+

+  <!-- build targets -->

+  <Target Name="Clean" DependsOnTargets="_Clean" />

+  <Target Name="Build" DependsOnTargets="_Clean;_Prerequisites;_StampVersion;_GenerateSource;_Build" />

+  <Target Name="Label" DependsOnTargets="_HgLabel" />

+  <Target Name="Package" DependsOnTargets="_HgPack;_NugetPack" />

+  <Target Name="Prepare" DependsOnTargets="Clean;Build;Label;Package" />

+  <Target Name="PushAll" DependsOnTargets="_HgPush;_NugetPush" />

+  <Target Name="Publish" DependsOnTargets="Prepare;PushAll" />

+

+  <PropertyGroup>

+    <ProjectName>Protocol Buffers</ProjectName>

+    <VersionMajor>2</VersionMajor>

+    <VersionMinor>4</VersionMinor>

+    <VersionBuild>1</VersionBuild>

+    <VersionRevision></VersionRevision>

+    <VersionLabel></VersionLabel>

+

+    <PackagePrefix>protobuf-csharp-port-</PackagePrefix>

+    <PublishDebug>false</PublishDebug>

+    

+    <GoogleUsername></GoogleUsername>

+    <GooglePassword></GooglePassword>

+    

+    <!--Directory Paths-->

+    <ProjectDirectory>$(MSBuildProjectDirectory)\..</ProjectDirectory>

+    <BuildTempDirectory>$(ProjectDirectory)\build_temp</BuildTempDirectory>

+    <BuildOutputDirectory>$(ProjectDirectory)\build_output</BuildOutputDirectory>

+    <SourceDirectory>$(ProjectDirectory)\src</SourceDirectory>

+    <LibDirectory>$(ProjectDirectory)\lib</LibDirectory>

+    

+    <!-- File Paths -->

+    <SigningKey>$(ProjectDirectory)\release-key\Google.ProtocolBuffers.snk</SigningKey>

+    

+    <!--Tool Paths-->

+    <HgTool>hg.exe</HgTool>

+    <Python>C:\Python25\python.exe</Python>

+    <SnTool>$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A@InstallationFolder)Bin\sn.exe</SnTool>

+    <StampVer>$(LibDirectory)\StampVersion.exe</StampVer>

+    <ZipExePath>$(LibDirectory)\7-Zip 9.20\7za.exe</ZipExePath>

+    <NuGet>$(LibDirectory)\NuGet.exe</NuGet>

+    <ProtogenExePath>$(BuildOutputDirectory)\tools\protogen.exe</ProtogenExePath>

+  </PropertyGroup>

+  

+  <!-- Import user settings -->

+  <Import Project="$(MSBuildProjectFullPath).user" Condition="Exists('$(MSBuildProjectFullPath).user')" />

+

+  <!-- Files -->

+  <ItemGroup>

+  </ItemGroup>

+  

+  <!-- Tasks -->

+

+  <Target Name="_Prerequisites" DependsOnTargets="_CheckEnvironment;_ReadVersion" />

+  

+  <Target Name="_Clean">

+    <MSBuild Properties="Configuration=Debug;" Targets="Clean" Projects="$(MSBuildProjectDirectory)\target.csproj" />

+    <MSBuild Properties="Configuration=Release;" Targets="Clean" Projects="$(MSBuildProjectDirectory)\target.csproj" />

+    <MakeDir Directories="$(BuildTempDirectory)" />

+    <MakeDir Directories="$(BuildOutputDirectory)" />

+  </Target>

+

+  <Target Name="_WriteUserConfig">

+    <ItemGroup>

+      <Lines Include="&lt;Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>" />

+      <Lines Include="  &lt;PropertyGroup>"/>

+      <Lines Include="    &lt;GoogleUsername> (Enter your google-code user/password here) &lt;/GoogleUsername>"/>

+      <Lines Include="    &lt;GooglePassword>&lt;/GooglePassword>"/>

+      <Lines Include="  &lt;/PropertyGroup>" />

+      <Lines Include="&lt;/Project>" />

+    </ItemGroup>

+    <WriteLinesToFile File="$(MSBuildProjectFullPath).user" Lines="@(Lines)" Overwrite="true" Condition="!Exists('$(MSBuildProjectFullPath).user')" />

+    <Exec Command="Notepad.exe $(MSBuildProjectFullPath).user" />

+  </Target>

+  

+  <Target Name="_CheckEnvironment">

+    <!-- Require google credentials -->

+    <CallTarget Targets="_WriteUserConfig" Condition=" '$(GooglePassword)' == '' " />

+    <Error Text="Restart after you verify your credentials in $(MSBuildProjectFullPath).user" Condition=" '$(GooglePassword)' == '' " />

+    <!-- Require Win7.0A SDK to verify strong-name -->

+    <Error Text="Unable to locate Win7SDK Tools: $(SnTool)" Condition="!Exists($(SnTool))" />

+    <!-- Require Python 2.5 installed -->

+    <!-- Error Text="Unable to locate Python 2.5: $(Python)" Condition="!Exists($(Python))" / -->

+    <!-- Require production signing key -->

+    <Exec Command="$(HgTool) clone https://bitbucket.org/rknapp/protobuf-csharp-port-keyfile $(ProjectDirectory)\release-key" Condition="!Exists('$(SigningKey)')" />

+    <Error Text="Unable to locate release signing key: $(SigningKey)" Condition="!Exists($(SigningKey))" />

+  </Target>

+

+  <Target Name="_ReadVersion" Condition=" '$(VersionLabel)' == '' ">

+    <Exec Command="$(HgTool) log -l 1 --template &quot;{rev}&quot; > &quot;$(BuildTempDirectory)\revision.txt&quot;"></Exec>

+    <ReadLinesFromFile File="$(BuildTempDirectory)\revision.txt">

+      <Output TaskParameter="Lines" PropertyName="VersionRevision"/>

+    </ReadLinesFromFile>

+

+    <PropertyGroup>

+      <VersionLabel>$(VersionMajor).$(VersionMinor).$(VersionBuild).$(VersionRevision)</VersionLabel>

+    </PropertyGroup>

+    

+    <Message Text="Building version $(VersionLabel)" Importance="high" />

+  </Target>

+

+  <Target Name="_StampVersion" DependsOnTargets="_Prerequisites">

+    <Exec Command="$(StampVer) /major:$(VersionMajor) /minor:$(VersionMinor) /build:$(VersionBuild) /revision:$(VersionRevision)" WorkingDirectory="$(SourceDirectory)" />

+    <Exec Command="FIND &quot;$(VersionLabel)&quot; ProtocolBuffers\Properties\AssemblyInfo.cs" WorkingDirectory="$(SourceDirectory)" />

+  </Target>

+

+  <Target Name="_GenerateSource" DependsOnTargets="_Prerequisites">

+    <MSBuild Properties="Configuration=Release;AssemblyOriginatorKeyFile=$(SigningKey)" Targets="GenerateProjects;BuildTools;GenerateSource" Projects="$(MSBuildProjectDirectory)\build.csproj" />

+    <Exec Command="&quot;$(SnTool)&quot; -T &quot;$(ProtogenExePath)&quot; > signkey.txt" WorkingDirectory="$(BuildTempDirectory)" />

+    <!-- Make sure we are signing with the correct key -->

+    <Exec Command="FIND &quot;55f7125234beb589&quot; signkey.txt" WorkingDirectory="$(BuildTempDirectory)" />

+  </Target>

+  

+  <Target Name="_Build" DependsOnTargets="_Prerequisites">

+    <!-- Release Build -->

+    <MSBuild Properties="Configuration=Release;AssemblyOriginatorKeyFile=$(SigningKey)" Targets="_CompileAll" Projects="$(MSBuildProjectDirectory)\build.csproj" />

+    <MSBuild Properties="Configuration=Release;AssemblyOriginatorKeyFile=$(SigningKey);PackageName=$(PackagePrefix)$(VersionLabel)-release" Targets="GeneratePackage" Projects="$(MSBuildProjectDirectory)\build.csproj" />

+    <!-- Debug Build -->

+    <MSBuild Condition=" '$(PublishDebug)' == 'true' " Properties="Configuration=Debug;AssemblyOriginatorKeyFile=$(SigningKey)" Targets="_CompileAll" Projects="$(MSBuildProjectDirectory)\build.csproj" />

+    <MSBuild Condition=" '$(PublishDebug)' == 'true' " Properties="Configuration=Debug;AssemblyOriginatorKeyFile=$(SigningKey);PackageName=$(PackagePrefix)$(VersionLabel)-full" Targets="GeneratePackage" Projects="$(MSBuildProjectDirectory)\build.csproj" />

+  </Target>

+

+  <Target Name="_HgPack" DependsOnTargets="_Prerequisites">

+    <Exec Command="$(HgTool) archive $(BuildTempDirectory)\$(PackagePrefix)$(VersionLabel)-source.zip" WorkingDirectory="$(ProjectDirectory)" />

+  </Target>

+  

+  <Target Name="_HgLabel" DependsOnTargets="_Prerequisites">

+    <Exec Command="$(HgTool) commit -m &quot;version $(VersionLabel)&quot;" WorkingDirectory="$(ProjectDirectory)" />

+    <Exec Command="$(HgTool) tag $(VersionLabel)" WorkingDirectory="$(ProjectDirectory)" />

+  </Target>

+  

+  <Target Name="_HgPush" DependsOnTargets="_Prerequisites">

+    <Exec Command="$(HgTool) push" WorkingDirectory="$(ProjectDirectory)" />

+  </Target>

+

+  <Target Name="_PkgPush" DependsOnTargets="_Prerequisites">

+    <PropertyGroup>

+      <UploadPackage>$(Python) "$(MSBuildProjectDirectory)\googlecode_upload.py" --project protobuf-csharp-port --user "$(GoogleUsername)" --password "$(GooglePassword)"</UploadPackage>

+      

+      <SourcePackage>$(BuildTempDirectory)\$(PackagePrefix)$(VersionLabel)-source.zip</SourcePackage>

+      <ReleasePackageBin>$(BuildTempDirectory)\$(PackagePrefix)$(VersionLabel)-release-binaries.zip</ReleasePackageBin>

+      <ReleasePackageSyb>$(BuildTempDirectory)\$(PackagePrefix)$(VersionLabel)-release-symbols.zip</ReleasePackageSyb>

+      <DebugPackageBin>$(BuildTempDirectory)\$(PackagePrefix)$(VersionLabel)-full-binaries.zip</DebugPackageBin>

+      <DebugPackageSyb>$(BuildTempDirectory)\$(PackagePrefix)$(VersionLabel)-full-symbols.zip</DebugPackageSyb>

+    </PropertyGroup>

+

+    <Error Condition="!Exists('$(SourcePackage)')" Text="File not found: $(SourcePackage)" />

+    <Error Condition="!Exists('$(ReleasePackageBin)')" Text="File not found: $(ReleasePackageBin)" />

+    <Error Condition="!Exists('$(ReleasePackageSyb)')" Text="File not found: $(ReleasePackageSyb)" />

+    <Error Condition="'$(PublishDebug)' == 'true' And !Exists('$(DebugPackageBin)')" Text="File not found: $(DebugPackageBin)" />

+    <Error Condition="'$(PublishDebug)' == 'true' And !Exists('$(DebugPackageSyb)')" Text="File not found: $(DebugPackageSyb)" />

+

+    <Exec WorkingDirectory="$(ProjectDirectory)"

+          Command="$(UploadPackage) --labels Type-Source,Featured --summary &quot;Version $(VersionLabel) source&quot; $(SourcePackage)" />

+    

+    <Exec WorkingDirectory="$(ProjectDirectory)"

+          Command="$(UploadPackage) --labels Type-Executable,Featured --summary &quot;Version $(VersionLabel) release binaries only&quot; $(ReleasePackageBin)" />

+    <Exec WorkingDirectory="$(ProjectDirectory)"

+          Command="$(UploadPackage) --labels Type-Executable,Featured --summary &quot;Version $(VersionLabel) release binaries and symbols&quot; $(ReleasePackageSyb)" />

+

+    <Exec WorkingDirectory="$(ProjectDirectory)" Condition=" '$(PublishDebug)' == 'true' "

+          Command="$(UploadPackage) --labels Type-Executable,Featured --summary &quot;Version $(VersionLabel) all binaries&quot; $(DebugPackageBin)" />

+    <Exec WorkingDirectory="$(ProjectDirectory)" Condition=" '$(PublishDebug)' == 'true' "

+          Command="$(UploadPackage) --labels Type-Executable,Featured --summary &quot;Version $(VersionLabel) all binaries and symbols&quot; $(DebugPackageSyb)" />

+  </Target>

+

+  <Target Name="_NugetPack" DependsOnTargets="_Prerequisites">

+    <Exec WorkingDirectory="$(MSBuildProjectDirectory)"

+      Command="$(NuGet) update -self" />

+    <Exec WorkingDirectory="$(MSBuildProjectDirectory)"

+      Command="$(NuGet) pack Google.ProtocolBuffers.nuspec -Symbols -Version $(VersionLabel) -NoPackageAnalysis -OutputDirectory $(BuildTempDirectory)" />

+    <Exec WorkingDirectory="$(MSBuildProjectDirectory)"

+      Command="$(NuGet) pack Google.ProtocolBuffersLite.nuspec -Symbols -Version $(VersionLabel) -NoPackageAnalysis -OutputDirectory $(BuildTempDirectory)" />

+  </Target>

+

+  <Target Name="_NugetPush" DependsOnTargets="_Prerequisites">

+    <Exec WorkingDirectory="$(BuildTempDirectory)" Command="$(NuGet) push Google.ProtocolBuffers.$(VersionLabel).nupkg" ContinueOnError="true" />

+    <Exec WorkingDirectory="$(BuildTempDirectory)" Command="$(NuGet) push Google.ProtocolBuffersLite.$(VersionLabel).nupkg" ContinueOnError="true" />

+

+    <Exec WorkingDirectory="$(BuildTempDirectory)" Command="$(NuGet) push Google.ProtocolBuffers.$(VersionLabel).symbols.nupkg" ContinueOnError="true" />

+    <Exec WorkingDirectory="$(BuildTempDirectory)" Command="$(NuGet) push Google.ProtocolBuffersLite.$(VersionLabel).symbols.nupkg" ContinueOnError="true" />

+  </Target>

+  

+</Project>

diff --git a/csharp/build/target.csproj b/csharp/build/target.csproj
new file mode 100644
index 0000000..09a9d50
--- /dev/null
+++ b/csharp/build/target.csproj
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+<!-- **********************************************************************************************
+High-level Targets
+*********************************************************************************************** -->
+
+  <Target Name="Clean" DependsOnTargets="_Clean" />
+  <Target Name="Build" DependsOnTargets="_Compile;_Test" />
+  <Target Name="Test" DependsOnTargets="_Test" />
+  <Target Name="Rebuild" DependsOnTargets="Clean;Build" />
+  <Target Name="Publish" DependsOnTargets="Clean;Build;_Publish" />
+
+  <!-- **********************************************************************************************
+Properties
+*********************************************************************************************** -->
+
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">Any CPU</Platform>
+    <TargetVersion Condition=" '$(TargetVersion)' == '' ">NET20</TargetVersion>
+    <BuildParams></BuildParams>
+
+    <!--Directory Paths-->
+    <ProjectDirectory>$(MSBuildProjectDirectory)\..</ProjectDirectory>
+    <SourceDirectory>$(ProjectDirectory)\src</SourceDirectory>
+    <LibDirectory>$(ProjectDirectory)\lib</LibDirectory>
+
+    <!--File Paths-->
+    <BuildTempDirectory>$(ProjectDirectory)\build_temp\$(Configuration)\$(TargetVersion)</BuildTempDirectory>
+    <BuildOutputDirectory>$(ProjectDirectory)\build_output\$(Configuration)\$(TargetVersion)</BuildOutputDirectory>
+    <SolutionFile>$(SourceDirectory)\ProtocolBuffersLibrary.$(TargetVersion).sln</SolutionFile>
+
+    <!--Tool Paths-->
+    <NUnitExePath>$(LibDirectory)\NUnit\tools\nunit-console.exe</NUnitExePath>
+    <StatLightExePath>$(LibDirectory)\StatLight\tools\StatLight.exe</StatLightExePath>
+  </PropertyGroup>
+
+<!-- **********************************************************************************************
+Target Versions
+*********************************************************************************************** -->
+
+  <PropertyGroup Condition=" '$(TargetVersion)' == 'NET20' ">
+    <BuildTools>3.5</BuildTools>
+    <TestFramework>NUNIT</TestFramework>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(TargetVersion)' == 'NET35' ">
+    <BuildTools>3.5</BuildTools>
+    <TestFramework>NUNIT</TestFramework>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(TargetVersion)' == 'NET40' ">
+    <BuildTools>4.0</BuildTools>
+    <TestFramework>NUNIT</TestFramework>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(TargetVersion)' == 'CF20' ">
+    <BuildTools>3.5</BuildTools>
+    <TestFramework>NONE</TestFramework>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(TargetVersion)' == 'CF35' ">
+    <BuildTools>3.5</BuildTools>
+    <TestFramework>NONE</TestFramework>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(TargetVersion)' == 'SL20' ">
+    <BuildTools>3.5</BuildTools>
+    <TestFramework>SILVERLIGHT</TestFramework>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(TargetVersion)' == 'SL30' ">
+    <BuildTools>3.5</BuildTools>
+    <TestFramework>SILVERLIGHT</TestFramework>
+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(TargetVersion)' == 'SL40' ">
+    <BuildTools>4.0</BuildTools>
+    <TestFramework>SILVERLIGHT</TestFramework>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(TargetVersion)' == 'PL40' ">
+    <BuildTools>4.0</BuildTools>
+    <TestFramework>SILVERLIGHT</TestFramework>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <BuildOutputDirectory>$(ProjectDirectory)\build_output\$(Configuration)\portable-net40+sl4+sl5+wp7+wp8+win8</BuildOutputDirectory>
+  </PropertyGroup>
+
+<!-- **********************************************************************************************
+File Groups
+*********************************************************************************************** -->
+
+  <ItemGroup>
+    <WorkingDirectories Include="$(BuildTempDirectory)" />
+    <WorkingDirectories Include="$(BuildOutputDirectory)" />
+    
+    <TestContainer Include="$(SourceDirectory)\ProtocolBuffers.Test\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffers.Test.dll" />
+    <TestContainer Include="$(SourceDirectory)\ProtocolBuffersLite.Test\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffersLite.Test.dll" />
+    <TestContainer Include="$(SourceDirectory)\ProtocolBuffersLite.Test\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffersMixedLite.Test.dll" />
+
+    <StatLightTestContainer Include="$(SourceDirectory)\ProtocolBuffers.Test\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffers.Test.xap" />
+    <StatLightTestContainer Include="$(SourceDirectory)\ProtocolBuffersLite.Test\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffersLite.Test.xap" />
+    <StatLightTestContainer Include="$(SourceDirectory)\ProtocolBuffersLite.Test\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffersMixedLite.Test.xap" />
+
+    <PublishItem Include="$(SourceDirectory)\ProtocolBuffers\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffers.dll" />
+    <PublishItem Include="$(SourceDirectory)\ProtocolBuffers\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffers.pdb" />
+    <PublishItem Include="$(SourceDirectory)\ProtocolBuffers\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffers.xml" />
+    <PublishItem Include="$(SourceDirectory)\ProtocolBuffers\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffersLite.dll" />
+    <PublishItem Include="$(SourceDirectory)\ProtocolBuffers\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffersLite.pdb" />
+    <PublishItem Include="$(SourceDirectory)\ProtocolBuffers\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffersLite.xml" />
+    <PublishItem Include="$(SourceDirectory)\ProtocolBuffers.Serialization\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffers.Serialization.dll" />
+    <PublishItem Include="$(SourceDirectory)\ProtocolBuffers.Serialization\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffers.Serialization.pdb" />
+    <PublishItem Include="$(SourceDirectory)\ProtocolBuffers.Serialization\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffers.Serialization.xml" />
+    <PublishItem Include="$(SourceDirectory)\ProtocolBuffers.Serialization\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffersLite.Serialization.dll" />
+    <PublishItem Include="$(SourceDirectory)\ProtocolBuffers.Serialization\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffersLite.Serialization.pdb" />
+    <PublishItem Include="$(SourceDirectory)\ProtocolBuffers.Serialization\bin\$(TargetVersion)\$(Configuration)\Google.ProtocolBuffersLite.Serialization.xml" />
+  </ItemGroup>
+
+<!-- **********************************************************************************************
+Targets For Build
+*********************************************************************************************** -->
+
+  <Target Name="_Configured">
+    <Message Text="Building $(TargetVersion) for configuration $(Configuration), platform $(Platform)" Importance="normal" />
+    <Error Text="Unknown or missing value for TargetVersion=[value]" Condition=" '$(BuildTools)' == '' " />
+  </Target>
+  
+  <Target Name="_Clean" DependsOnTargets="_Configured">
+    <RemoveDir Directories="@(WorkingDirectories)" Condition="Exists(%(WorkingDirectories.Identity))" />
+    <MSBuild Targets="Clean" Projects="$(SolutionFile)" ToolsVersion="$(BuildTools)"
+             Properties="Configuration=$(Configuration);Platform=$(Platform);"
+             />
+  </Target>
+
+  <Target Name="_Compile" DependsOnTargets="_Configured">
+    <MSBuild Targets="Build" Projects="$(SolutionFile)" ToolsVersion="$(BuildTools)"
+             Properties="Configuration=$(Configuration);Platform=$(Platform);$(BuildParams)"
+             />
+  </Target>
+
+  <Target Name="_Publish" DependsOnTargets="_Configured">
+    <MakeDir Directories="$(BuildOutputDirectory)" />
+    <Copy SourceFiles="@(PublishItem)" DestinationFolder="$(BuildOutputDirectory)" />
+  </Target>
+
+<!-- **********************************************************************************************
+Targets For Test
+*********************************************************************************************** -->
+
+  <Target Name="_Test" DependsOnTargets="_Configured">
+    <MakeDir Directories="$(BuildTempDirectory)" />
+    <CallTarget Targets="_RunNunit" Condition=" '$(TestFramework)'=='NUNIT' " />
+    <CallTarget Targets="_RunStatLight" Condition=" '$(TestFramework)'=='SILVERLIGHT' " />
+  </Target>
+
+  <Target Name="_RunNunit">
+    <Copy SourceFiles="$(LibDirectory)\NUnit-config\nunit-console.$(TargetFrameworkVersion).config" DestinationFiles="$(NUnitExePath).config" />
+    <Exec Command="&quot;$(NUnitExePath)&quot; /nologo /noshadow &quot;%(TestContainer.Identity)&quot; /xml:&quot;$(BuildTempDirectory)\%(TestContainer.Filename).xml&quot;" />
+  </Target>
+
+  <Target Name="_RunStatLight">
+    <Exec
+      Command="&quot;$(StatLightExePath)&quot; -x %(StatLightTestContainer.Identity) --ReportOutputFileType=NUnit --ReportOutputFile=$(BuildTempDirectory)\%(StatLightTestContainer.Filename).xml" />
+  </Target>
+
+</Project>
diff --git a/csharp/csproj_templates/CF20.csproj b/csharp/csproj_templates/CF20.csproj
new file mode 100644
index 0000000..2968412
--- /dev/null
+++ b/csharp/csproj_templates/CF20.csproj
@@ -0,0 +1,41 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF20</EnvironmentTemplate>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+    <!--<OSVersion>5.2</OSVersion>-->

+    <!--<DeployDirSuffix>CF20</DeployDirSuffix>-->

+    <!--<NativePlatformName>Windows Mobile 6 Standard SDK</NativePlatformName>-->

+    <!--<FormFactorID></FormFactorID>-->

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <OutputPath>bin\CF20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Debug\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <OutputPath>bin\CF20\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Release\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/csproj_templates/CF35.csproj b/csharp/csproj_templates/CF35.csproj
new file mode 100644
index 0000000..eae866f
--- /dev/null
+++ b/csharp/csproj_templates/CF35.csproj
@@ -0,0 +1,44 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF35</EnvironmentTemplate>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+    <!--<OSVersion>5.2</OSVersion>-->

+    <!--<DeployDirSuffix>CF35</DeployDirSuffix>-->

+    <!--<NativePlatformName>Windows Mobile 6 Standard SDK</NativePlatformName>-->

+    <!--<FormFactorID></FormFactorID>-->

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <OutputPath>bin\CF35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Debug\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <OutputPath>bin\CF35\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Release\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/csproj_templates/NET20.csproj b/csharp/csproj_templates/NET20.csproj
new file mode 100644
index 0000000..f9e9392
--- /dev/null
+++ b/csharp/csproj_templates/NET20.csproj
@@ -0,0 +1,17 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET20</EnvironmentTemplate>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <OutputPath>bin\NET20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Debug\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOEXTENSIONS</DefineConstants>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <OutputPath>bin\NET20\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Release\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOEXTENSIONS</DefineConstants>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/csproj_templates/NET35.csproj b/csharp/csproj_templates/NET35.csproj
new file mode 100644
index 0000000..80ef69a
--- /dev/null
+++ b/csharp/csproj_templates/NET35.csproj
@@ -0,0 +1,20 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants)</DefineConstants>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants)</DefineConstants>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="System.Core" />

+  </ItemGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/csproj_templates/NET40.csproj b/csharp/csproj_templates/NET40.csproj
new file mode 100644
index 0000000..691845a
--- /dev/null
+++ b/csharp/csproj_templates/NET40.csproj
@@ -0,0 +1,20 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET40</EnvironmentTemplate>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <OutputPath>bin\NET40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Debug\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants)</DefineConstants>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <OutputPath>bin\NET40\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Release\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants)</DefineConstants>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="System.Core" />

+  </ItemGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/csproj_templates/PL40.csproj b/csharp/csproj_templates/PL40.csproj
new file mode 100644
index 0000000..2618a79
--- /dev/null
+++ b/csharp/csproj_templates/PL40.csproj
@@ -0,0 +1,51 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" 

+         xmlns="http://schemas.microsoft.com/developer/msbuild/2003"

+         xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>

+    <EnvironmentFlavor>PORTABLE_LIBRARY</EnvironmentFlavor>

+    <EnvironmentTemplate>PL40</EnvironmentTemplate>

+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <TargetFrameworkProfile>Profile1</TargetFrameworkProfile>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <OutputPath>bin\PL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Debug\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <OutputPath>bin\PL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Release\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <Import cs:Precondition=" '$(EnvironmentProjectType)' != 'TEST' "

+          Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />

+  <!-- Portable Library will be tested as silverlight -->

+  <PropertyGroup cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' ">

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <TargetFrameworkProfile />

+  </PropertyGroup>

+  <cs:Import Project="SLTest.targets" cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' " />

+  <Import cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' "

+          Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <ProjectExtensions cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' ">

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+</Project>
\ No newline at end of file
diff --git a/csharp/csproj_templates/SL20.csproj b/csharp/csproj_templates/SL20.csproj
new file mode 100644
index 0000000..0abb104
--- /dev/null
+++ b/csharp/csproj_templates/SL20.csproj
@@ -0,0 +1,44 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" 

+         xmlns="http://schemas.microsoft.com/developer/msbuild/2003"

+         xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL20</EnvironmentTemplate>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <OutputPath>bin\SL20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Debug\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <OutputPath>bin\SL20\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Release\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <!-- Preprocess include of silverlight testing -->

+  <cs:Import Project="SLTest.targets" cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' " />

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+</Project>
\ No newline at end of file
diff --git a/csharp/csproj_templates/SL30.csproj b/csharp/csproj_templates/SL30.csproj
new file mode 100644
index 0000000..82ea9a8
--- /dev/null
+++ b/csharp/csproj_templates/SL30.csproj
@@ -0,0 +1,47 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" 

+         xmlns="http://schemas.microsoft.com/developer/msbuild/2003"

+         xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL30</EnvironmentTemplate>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <OutputPath>bin\SL30\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Debug\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <OutputPath>bin\SL30\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Release\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <!-- Preprocess include of silverlight testing -->

+  <cs:Import Project="SLTest.targets" cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' " />

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+</Project>
\ No newline at end of file
diff --git a/csharp/csproj_templates/SL40.csproj b/csharp/csproj_templates/SL40.csproj
new file mode 100644
index 0000000..8a38e3d
--- /dev/null
+++ b/csharp/csproj_templates/SL40.csproj
@@ -0,0 +1,48 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" 

+         xmlns="http://schemas.microsoft.com/developer/msbuild/2003"

+         xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL40</EnvironmentTemplate>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <OutputPath>bin\SL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Debug\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <OutputPath>bin\SL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Release\</IntermediateOutputPath>

+    <DefineConstants>$(DefineConstants);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <!-- Preprocess include of silverlight testing -->

+  <cs:Import Project="SLTest.targets" cs:Precondition=" '$(EnvironmentProjectType)' == 'TEST' " />

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+</Project>
\ No newline at end of file
diff --git a/csharp/csproj_templates/SLTest.targets b/csharp/csproj_templates/SLTest.targets
new file mode 100644
index 0000000..29da239
--- /dev/null
+++ b/csharp/csproj_templates/SLTest.targets
@@ -0,0 +1,34 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" 

+         xmlns="http://schemas.microsoft.com/developer/msbuild/2003"

+         xmlns:cs="urn:schemas-csharp-project:template">

+

+  <PropertyGroup>

+    <SilverlightApplication>true</SilverlightApplication>

+    <XapOutputs>true</XapOutputs>

+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>

+    <XapFilename>$(AssemblyName).xap</XapFilename>

+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>

+    <SilverlightAppEntry>$(RootNamespace).App</SilverlightAppEntry>

+    <TestPageFileName>TestPage.html</TestPageFileName>

+    <CreateTestPage>true</CreateTestPage>

+    <SilverlightVersion>$(TargetFrameworkVersion)</SilverlightVersion>

+    <OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>

+    <EnableOutOfBrowser>true</EnableOutOfBrowser>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="System.Windows" />

+    <Reference Include="System.Windows.Browser" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+    </Compile>

+    <None Include="Properties\AppManifest.xml" />

+    <None Include="Properties\OutOfBrowserSettings.xml" />

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+  </ItemGroup>

+  

+</Project>
\ No newline at end of file
diff --git a/csharp/keys/Google.ProtocolBuffers.snk b/csharp/keys/Google.ProtocolBuffers.snk
new file mode 100644
index 0000000..6bbfc90
--- /dev/null
+++ b/csharp/keys/Google.ProtocolBuffers.snk
Binary files differ
diff --git a/csharp/keys/generate_new_key.bat b/csharp/keys/generate_new_key.bat
new file mode 100644
index 0000000..9f99c07
--- /dev/null
+++ b/csharp/keys/generate_new_key.bat
@@ -0,0 +1,13 @@
+@ECHO OFF

+IF EXIST "C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\sn.exe" GOTO FOUND

+goto USEPATH

+

+:FOUND

+"C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\sn.exe" -k %~dp0\Google.ProtocolBuffers.snk 

+GOTO EXIT

+

+:USEPATH

+sn.exe -k %~dp0\Google.ProtocolBuffers.snk 

+GOTO EXIT

+

+:EXIT
\ No newline at end of file
diff --git a/csharp/lib/7-Zip 9.20/7-zip.chm b/csharp/lib/7-Zip 9.20/7-zip.chm
new file mode 100644
index 0000000..08e4df2
--- /dev/null
+++ b/csharp/lib/7-Zip 9.20/7-zip.chm
Binary files differ
diff --git a/csharp/lib/7-Zip 9.20/7za.exe b/csharp/lib/7-Zip 9.20/7za.exe
new file mode 100644
index 0000000..7f6bf86
--- /dev/null
+++ b/csharp/lib/7-Zip 9.20/7za.exe
Binary files differ
diff --git a/csharp/lib/7-Zip 9.20/license.txt b/csharp/lib/7-Zip 9.20/license.txt
new file mode 100644
index 0000000..530ff36
--- /dev/null
+++ b/csharp/lib/7-Zip 9.20/license.txt
@@ -0,0 +1,29 @@
+      7-Zip Command line version
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~
+      License for use and distribution
+      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+      7-Zip Copyright (C) 1999-2010 Igor Pavlov.
+
+      7za.exe is distributed under the GNU LGPL license
+
+      Notes: 
+        You can use 7-Zip on any computer, including a computer in a commercial 
+        organization. You don't need to register or pay for 7-Zip.
+
+
+      GNU LGPL information
+      --------------------
+
+        This library is free software; you can redistribute it and/or
+        modify it under the terms of the GNU Lesser General Public
+        License as published by the Free Software Foundation; either
+        version 2.1 of the License, or (at your option) any later version.
+
+        This library is distributed in the hope that it will be useful,
+        but WITHOUT ANY WARRANTY; without even the implied warranty of
+        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+        Lesser General Public License for more details.
+
+        You can receive a copy of the GNU Lesser General Public License from 
+        http://www.gnu.org/
diff --git a/csharp/lib/7-Zip 9.20/readme.txt b/csharp/lib/7-Zip 9.20/readme.txt
new file mode 100644
index 0000000..9ae4222
--- /dev/null
+++ b/csharp/lib/7-Zip 9.20/readme.txt
@@ -0,0 +1,41 @@
+7-Zip Command line version 9.20
+-------------------------------
+
+7-Zip is a file archiver with high compression ratio.
+7za.exe is a standalone command line version of 7-Zip.
+
+7-Zip Copyright (C) 1999-2010 Igor Pavlov.
+
+Features of 7za.exe: 
+  - High compression ratio in new 7z format
+  - Supported formats:
+      - Packing / unpacking: 7z, xz, ZIP, GZIP, BZIP2 and TAR 
+      - Unpacking only: Z, lzma
+  - Highest compression ratio for ZIP and GZIP formats.
+  - Fast compression and decompression
+  - Strong AES-256 encryption in 7z and ZIP formats.
+
+7za.exe is a free software distributed under the GNU LGPL.
+Read license.txt for more information.
+
+Source code of 7za.exe and 7-Zip can be found at
+http://www.7-zip.org/
+
+7za.exe can work in Windows 95/98/ME/NT/2000/2003/2008/XP/Vista/7.
+
+There is also port of 7za.exe for POSIX systems like Unix (Linux, Solaris, OpenBSD, 
+FreeBSD, Cygwin, AIX, ...), MacOS X and BeOS:
+
+http://p7zip.sourceforge.net/
+
+
+  This distributive packet contains the following files:
+
+  7za.exe       - 7-Zip standalone command line version.
+  readme.txt    - This file.
+  license.txt   - License information.
+  7-zip.chm     - User's Manual in HTML Help format.
+
+
+---
+End of document
diff --git a/csharp/lib/CsProjectProjector/CsProjectProjector.exe b/csharp/lib/CsProjectProjector/CsProjectProjector.exe
new file mode 100644
index 0000000..a038e80
--- /dev/null
+++ b/csharp/lib/CsProjectProjector/CsProjectProjector.exe
Binary files differ
diff --git a/csharp/lib/Microsoft.Silverlight.Testing/April2010/EULA.rtf b/csharp/lib/Microsoft.Silverlight.Testing/April2010/EULA.rtf
new file mode 100644
index 0000000..a907d5d
--- /dev/null
+++ b/csharp/lib/Microsoft.Silverlight.Testing/April2010/EULA.rtf
Binary files differ
diff --git a/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.Silverlight.Testing.dll b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.Silverlight.Testing.dll
new file mode 100644
index 0000000..0c6df18
--- /dev/null
+++ b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.Silverlight.Testing.dll
Binary files differ
diff --git a/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.Silverlight.Testing.extmap.xml b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.Silverlight.Testing.extmap.xml
new file mode 100644
index 0000000..352d487
--- /dev/null
+++ b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.Silverlight.Testing.extmap.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>

+<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

+          xmlns:xsd="http://www.w3.org/2001/XMLSchema">

+  <assembly>

+    <name>Microsoft.Silverlight.Testing</name>

+    <version>2.0.5.0</version>

+    <publickeytoken>31bf3856ad364e35</publickeytoken>

+    <relpath>Microsoft.Silverlight.Testing.dll</relpath>

+    <extension downloadUri="Microsoft.Silverlight.Testing.zip" />

+  </assembly>

+

+</manifest>
\ No newline at end of file
diff --git a/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.Silverlight.Testing.pdb b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.Silverlight.Testing.pdb
new file mode 100644
index 0000000..a86119c
--- /dev/null
+++ b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.Silverlight.Testing.pdb
Binary files differ
diff --git a/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.Silverlight.Testing.xml b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.Silverlight.Testing.xml
new file mode 100644
index 0000000..477ce70
--- /dev/null
+++ b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.Silverlight.Testing.xml
@@ -0,0 +1,14796 @@
+<?xml version="1.0"?>

+<doc>

+    <assembly>

+        <name>Microsoft.Silverlight.Testing</name>

+    </assembly>

+    <members>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.Test">

+            <summary>

+            A class containing an Assert method.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.Test.IsNotNull">

+            <summary>

+            The MethodInfo object used to invoke Assert.IsNotNull.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.Test.AreNotSame">

+            <summary>

+            The MethodInfo object used to invoke Assert.AreNotSame.

+            </summary>        

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.Test.AreNotEqual">

+            <summary>

+            The MethodInfo object used to invoke Assert.AreNotEqual.

+            </summary>        

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.Test.AreSame">

+            <summary>

+            The MethodInfo object used to invoke Assert.AreSame.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.Test.AreEqual">

+            <summary>

+            The MethodInfo object used to invoke Assert.AreEqual.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.Test.IsNull">

+            <summary>

+            The MethodInfo object used to invoke Assert.IsNull.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.Test.IsFalse">

+            <summary>

+            The MethodInfo object used to invoke Assert.IsFalse.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.Test.IsTrue">

+            <summary>

+            The MethodInfo object used to invoke Assert.IsTrue.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.Test.FindAnonymousTypeExpressionInString">

+            <summary>

+            A regular expression which identifies a pattern signifying an 

+            anonymous type.  This pattern is emitted by the Expression object 

+            when it converts an anonymous type to a string.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.Test.FindTransparentIdentifier">

+            <summary>

+            A regular expression which identifies a pattern emitted by an

+            Expression object when it converts an anonymous type to a

+            string.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Test.Assert(System.Linq.Expressions.Expression{System.Func{System.Boolean}})">

+            <summary>

+            Asserts a condition is true.

+            </summary>

+            <param name="predicate">The condition that must be true.</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Test.Assert(System.Linq.Expressions.Expression{System.Func{System.Boolean}},System.String)">

+            <summary>

+            Asserts a condition is true.

+            </summary>

+            <param name="predicate">The condition that must be true.</param>

+            <param name="message">The message to be displayed when the test fails.</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Test.GetMessageExpression(System.Linq.Expressions.Expression,System.String)">

+            <summary>

+            Generates an assert failure message using the code block

+            responsible for the failure.

+            </summary>

+            <param name="expression">The predicate that fails.</param>

+            <param name="message">The user-provided assertion failure message.

+            </param>

+            <returns>A constant expression containing the user-provided failure

+            message or a description of the expression that failed.</returns>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Test.CreateAssertExpressionAction(System.Linq.Expressions.Expression,System.String)">

+            <summary>

+            Analyzes the expression and creates an action which calls the 

+            correct assert method based on its contents.

+            </summary>

+            <param name="expression">The predicate expression.</param>

+            <param name="message">The message to display if an assertion fails.</param>

+            <returns>An action which calls the correct assert method.</returns>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Test.AssertExpression``1(System.Linq.Expressions.Expression{System.Func{System.Boolean}},System.String)">

+            <summary>

+            Analyzes a predicate expression and invokes the correct assert 

+            method.

+            </summary>

+            <typeparam name="T">The type of the argument to the predicate.

+            </typeparam>

+            <param name="predicate">A predicate to be converted into an 

+            assert statement.</param>

+            <param name="message">The assertion message.</param> 

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Test.CreateBinaryExpressionAction(System.Linq.Expressions.BinaryExpression,System.String)">

+            <summary>

+            Creates an action from certain types of supported binary expression

+            patterns.  If no supported pattern is found null is returned.  Based

+            on analyzing the predicate the action invokes the correct Assert

+            method.

+            </summary>

+            <param name="binaryExpression">A binary expression extracted from a

+            predicate expression.</param>

+            <param name="message">The message to display if the assertion 

+            fails.</param>

+            <returns>An action that invokes an Assert method.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.AsynchronousAttribute">

+            <summary>

+            Mark the test method as one which expects asynchronous execution. 

+            It is important to call TestComplete() once it is ready or your 

+            test will never continue/timeout.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.BugAttribute">

+            <summary>

+            An attribute that contains known bug information that can be logged 

+            during a unit test run. 

+            

+            When applied to a test method, it will invert the result. This makes it 

+            possible to perform automated runs and continuous integration while 

+            validating and tracking known issues.

+            

+            The attribute should have the Fixed bool set to True, or be removed, 

+            once the issue is resolved.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.BugAttribute.#ctor">

+            <summary>

+            Construct a new BugAttribute with no bug description.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.BugAttribute.#ctor(System.String)">

+            <summary>

+            Construct a new BugAttribute with a bug description.

+            </summary>

+            <param name="description">Known issue text.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.BugAttribute.ToString">

+            <summary>

+            Return the bug information.

+            </summary>

+            <returns>Known issue as a string.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.BugAttribute.Description">

+            <summary>

+            Gets the bug description.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.BugAttribute.Fixed">

+            <summary>

+            Gets or sets a value indicating whether the known issue has been 

+            fixed. If it has, the attribute is ignored and will not affect 

+            test results.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.AdvancedButton">

+            <summary>

+            Represents a control that builds on top of the standard platform Button,

+            offering the ability to modify the corner radii or even use special

+            button modes.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.AdvancedButton.SecondaryVisibilityProperty">

+            <summary>

+            Identifies the SecondaryVisibility dependency property.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.AdvancedButton.CornerRadiusProperty">

+            <summary>

+            Identifies the CornerRadius dependency property.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.AdvancedButton.SecondaryVisibility">

+            <summary>

+            Gets or sets the visibility of a secondary set of visuals in the

+            template.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.AdvancedButton.CornerRadius">

+            <summary>

+            Gets or sets the corner radius to use.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.BrushSelector">

+            <summary>

+            A color selection converter for translating a bool result into

+            a color.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.BrushSelector.#ctor">

+            <summary>

+            Initializes a new instance of the ColorSelectorConverter type.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.BrushSelector.Convert(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Convert a boolean value to a Color value.

+            </summary>

+            <param name="value">The value.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter is of type Visibility.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.BrushSelector.ConvertBack(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Support 2-way databinding of the VisibilityConverter, converting 

+            Visibility to a boolean.

+            </summary>

+            <param name="value">The value.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter is of type Visibility.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.BrushSelector.TrueBrush">

+            <summary>

+            Gets or sets the color to use for true values.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.BrushSelector.FalseBrush">

+            <summary>

+            Gets or sets the color to use for false values.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.CollectionHelper">

+            <summary>

+            A set of extension methods for manipulating collections.

+            </summary>

+            <QualityBand>Experimental</QualityBand>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.CollectionHelper.IsReadOnly(System.Collections.IEnumerable)">

+            <summary>

+            Returns a value indicating whether a collection is read-only.

+            </summary>

+            <param name="collection">The collection to examine.</param>

+            <returns>A value indicating whether a collection is read-only.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.CollectionHelper.CanInsert(System.Collections.IEnumerable,System.Object)">

+            <summary>

+            Returns a value Indicating whether an item can be inserted in a 

+            collection.

+            </summary>

+            <param name="collection">The collection.</param>

+            <param name="item">The item to be inserted.</param>

+            <returns>A value Indicating whether an item can be inserted in a 

+            collection.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.CollectionHelper.Insert(System.Collections.IEnumerable,System.Int32,System.Object)">

+            <summary>

+            Inserts an item into the collection at an index.

+            </summary>

+            <param name="collection">The collection.</param>

+            <param name="index">The index at which to insert the item.</param> 

+            <param name="item">The item to be inserted.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.CollectionHelper.Count(System.Collections.IEnumerable)">

+            <summary>

+            Gets the number of items in the collection.

+            </summary>

+            <param name="collection">The collection.</param>

+            <returns>The number of items in the collection.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.CollectionHelper.Add(System.Collections.IEnumerable,System.Object)">

+            <summary>

+            Adds an item to the collection.

+            </summary>

+            <param name="collection">The collection.</param>

+            <param name="item">The item to be added.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.CollectionHelper.Remove(System.Collections.IEnumerable,System.Object)">

+            <summary>

+            Removes an item from the collection.

+            </summary>

+            <param name="collection">The collection.</param>

+            <param name="item">The item to be removed.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.CollectionHelper.RemoveAt(System.Collections.IEnumerable,System.Int32)">

+            <summary>

+            Removes an item at a given index from the collection.

+            </summary>

+            <param name="collection">The collection.</param>

+            <param name="index">The index of the item to be removed.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.ColorSelectorConverter">

+            <summary>

+            A color selection converter for translating a bool result into

+            a color.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.ColorSelectorConverter.DefaultTrueColor">

+            <summary>

+            The default true color.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.ColorSelectorConverter.DefaultFalseColor">

+            <summary>

+            The default false color.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ColorSelectorConverter.#ctor">

+            <summary>

+            Initializes a new instance of the ColorSelectorConverter type.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ColorSelectorConverter.Convert(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Convert a boolean value to a Color value.

+            </summary>

+            <param name="value">The value.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter is of type Visibility.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ColorSelectorConverter.ConvertBack(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Support 2-way databinding of the VisibilityConverter, converting 

+            Visibility to a boolean.

+            </summary>

+            <param name="value">The value.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter is of type Visibility.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.ColorSelectorConverter.TrueColor">

+            <summary>

+            Gets or sets the color to use for true values.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.ColorSelectorConverter.FalseColor">

+            <summary>

+            Gets or sets the color to use for false values.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.EnumerableExtensions">

+            <summary>

+            A set of extension methods for the sequence class.

+            </summary>;dsf

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.EnumerableExtensions.Iterate``1(``0,System.Func{``0,``0})">

+            <summary>

+            Produces a sequence of items using a seed value and iteration 

+            method.

+            </summary>

+            <typeparam name="T">The type of the sequence.</typeparam>

+            <param name="value">The initial value.</param>

+            <param name="next">The iteration function.</param>

+            <returns>A sequence of items using a seed value and iteration 

+            method.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.EnumerableExtensions.Prepend``1(System.Collections.Generic.IEnumerable{``0},``0)">

+            <summary>

+            Prepend an item to a sequence.

+            </summary>

+            <typeparam name="T">The type of the sequence.</typeparam>

+            <param name="that">The sequence to append the item to.</param>

+            <param name="value">The item to append to the sequence.</param>

+            <returns>A new sequence.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.EnumerableExtensions.Zip``3(System.Collections.Generic.IEnumerable{``0},System.Collections.Generic.IEnumerable{``1},System.Func{``0,``1,``2})">

+            <summary>

+            Accepts two sequences and applies a function to the corresponding 

+            values in the two sequences.

+            </summary>

+            <typeparam name="T0">The type of the first sequence.</typeparam>

+            <typeparam name="T1">The type of the second sequence.</typeparam>

+            <typeparam name="R">The return type of the function.</typeparam>

+            <param name="enumerable0">The first sequence.</param>

+            <param name="enumerable1">The second sequence.</param>

+            <param name="func">The function to apply to the corresponding values

+            from the two sequences.</param>

+            <returns>A sequence of transformed values from both sequences.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.FontWeightConverter">

+            <summary>

+            A converter for modifying the font weight based on a parameter.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.FontWeightConverter.Convert(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Convert a boolean value to a FontWeight value.

+            </summary>

+            <param name="value">The value object.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter is of type Visibility.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.FontWeightConverter.ConvertBack(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Support 2-way databinding of the VisibilityConverter, converting 

+            Visibility to a bool.

+            </summary>

+            <param name="value">The value object.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter is of type Visibility.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.FontWeightConverter.GetFontWeightMode(System.Object)">

+            <summary>

+            Determine the visibility mode based on a converter parameter. This

+            parameter is of type Visibility, and specifies what visibility value

+            to return when the boolean value is true.

+            </summary>

+            <param name="parameter">The parameter object.</param>

+            <returns>Returns a FontWeight value.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.FontWeightConverter.IsFontWeightInverted(System.Object)">

+            <summary>

+            Determine whether or not weight is inverted based on a converter

+            parameter.

+            </summary>

+            <param name="parameter">The parameter instance.</param>

+            <returns>Returns a value indicating whether the instance is 

+            inverting.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.FunctionalProgramming">

+            <summary>

+            Collection of functions for functional programming tasks.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.FunctionalProgramming.TraverseBreadthFirst``1(``0,System.Func{``0,System.Collections.Generic.IEnumerable{``0}},System.Func{``0,System.Boolean})">

+            <summary>

+            Traverses a tree by accepting an initial value and a function that 

+            retrieves the child nodes of a node.

+            </summary>

+            <typeparam name="T">The type of the stream.</typeparam>

+            <param name="initialNode">The initial node.</param>

+            <param name="getChildNodes">A function that retrieves the child

+            nodes of a node.</param>

+            <param name="traversePredicate">A predicate that evaluates a node

+            and returns a value indicating whether that node and it's children

+            should be traversed.</param>

+            <returns>A stream of nodes.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.Header">

+            <summary>

+            The test results header control.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Header.#ctor">

+            <summary>

+            Initializes a new instance of the Header type.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Header.InitializeComponent">

+            <summary>

+            InitializeComponent

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.InvertedTypeNameVisibilityConverter">

+            <summary>

+            A value converter for collapsing or showing elements based on the bound

+            object's type name. Does not walk the hierarchy - it is explicit to the

+            most specific class for the value. This class,

+            InvertedTypeNameVisibilityConverter, offers the opposite behavior of the

+            TypeNameVisibilityConverter class.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.TypeNameVisibilityConverter">

+            <summary>

+            A value converter for collapsing or showing elements based on the bound

+            object's type name. Does not walk the hierarchy - it is explicit to the

+            most specific class for the value.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TypeNameVisibilityConverter.Convert(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Convert a value based on CLR type to a Visibility value. Does not

+            walk the type tree, however.

+            </summary>

+            <param name="value">The value instance.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter is the name of the type,

+            both short and full names are checked, short name first.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TypeNameVisibilityConverter.ConvertBack(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Convert back, not supported with this value converter.

+            </summary>

+            <param name="value">The value instance.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter is of type Visibility.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TypeNameVisibilityConverter.IsInverted">

+            <summary>

+            Gets a value indicating whether the visibility value should be

+            inverted.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.InvertedTypeNameVisibilityConverter.IsInverted">

+            <summary>

+            Gets a value indicating whether the visibility value should be

+            inverted.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions">

+            <summary>

+            Provides useful extensions to ItemsControl instances.

+            </summary>

+            <QualityBand>Experimental</QualityBand>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.GetItemsHost(System.Windows.Controls.ItemsControl)">

+            <summary>

+            Gets the Panel that contains the containers of an ItemsControl.

+            </summary>

+            <param name="control">The ItemsControl.</param>

+            <returns>

+            The Panel that contains the containers of an ItemsControl, or null

+            if the Panel could not be found.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="control" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.GetScrollHost(System.Windows.Controls.ItemsControl)">

+            <summary>

+            Gets the ScrollViewer that contains the containers of an

+            ItemsControl.

+            </summary>

+            <param name="control">The ItemsControl.</param>

+            <returns>

+            The ScrollViewer that contains the containers of an ItemsControl, or

+            null if a ScrollViewer could not be found.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="control" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.GetContainers(System.Windows.Controls.ItemsControl)">

+            <summary>

+            Get the item containers of an ItemsControl.

+            </summary>

+            <param name="control">The ItemsControl.</param>

+            <returns>The item containers of an ItemsControl.</returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="control" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.GetContainers``1(System.Windows.Controls.ItemsControl)">

+            <summary>

+            Get the item containers of an ItemsControl.

+            </summary>

+            <typeparam name="TContainer">

+            The type of the item containers.

+            </typeparam>

+            <param name="control">The ItemsControl.</param>

+            <returns>The item containers of an ItemsControl.</returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="control" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.GetContainersIterator``1(System.Windows.Controls.ItemsControl)">

+            <summary>

+            Get the item containers of an ItemsControl.

+            </summary>

+            <typeparam name="TContainer">

+            The type of the item containers.

+            </typeparam>

+            <param name="control">The ItemsControl.</param>

+            <returns>The item containers of an ItemsControl.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.GetItemsAndContainers(System.Windows.Controls.ItemsControl)">

+            <summary>

+            Get the items and item containers of an ItemsControl.

+            </summary>

+            <param name="control">The ItemsControl.</param>

+            <returns>The items and item containers of an ItemsControl.</returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="control" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.GetItemsAndContainers``1(System.Windows.Controls.ItemsControl)">

+            <summary>

+            Get the items and item containers of an ItemsControl.

+            </summary>

+            <typeparam name="TContainer">

+            The type of the item containers.

+            </typeparam>

+            <param name="control">The ItemsControl.</param>

+            <returns>The items and item containers of an ItemsControl.</returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="control" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.GetItemsAndContainersIterator``1(System.Windows.Controls.ItemsControl)">

+            <summary>

+            Get the items and item containers of an ItemsControl.

+            </summary>

+            <typeparam name="TContainer">

+            The type of the item containers.

+            </typeparam>

+            <param name="control">The ItemsControl.</param>

+            <returns>The items and item containers of an ItemsControl.</returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="control" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.CanAddItem(System.Windows.Controls.ItemsControl,System.Object)">

+            <summary>

+            Returns a value indicating whether an item can be added to an

+            ItemsControl.

+            </summary>

+            <param name="that">The ItemsControl instance.</param>

+            <param name="item">The item to be added.</param>

+            <returns>A value Indicating whether an item can be added to an

+            ItemsControl.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.CanRemoveItem(System.Windows.Controls.ItemsControl)">

+            <summary>

+            Returns a value indicating whether an item can be removed from the

+            ItemsControl.

+            </summary>

+            <param name="that">The items control.</param>

+            <returns>A value indicating whether an item can be removed from the

+            ItemsControl.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.InsertItem(System.Windows.Controls.ItemsControl,System.Int32,System.Object)">

+            <summary>

+            Inserts an item into an ItemsControl.

+            </summary>

+            <param name="that">The ItemsControl instance.</param>

+            <param name="index">The index at which to insert the item.</param>

+            <param name="item">The item to be inserted.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.AddItem(System.Windows.Controls.ItemsControl,System.Object)">

+            <summary>

+            Adds an item to an ItemsControl.

+            </summary>

+            <param name="that">The ItemsControl instance.</param>

+            <param name="item">The item to be inserted.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.RemoveItem(System.Windows.Controls.ItemsControl,System.Object)">

+            <summary>

+            Removes an item from an ItemsControl.

+            </summary>

+            <param name="that">The ItemsControl instance.</param>

+            <param name="item">The item to be removed.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.RemoveItemAtIndex(System.Windows.Controls.ItemsControl,System.Int32)">

+            <summary>

+            Removes an item from an ItemsControl.

+            </summary>

+            <param name="that">The ItemsControl instance.</param>

+            <param name="index">The index of the item to be removed.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlExtensions.GetItemCount(System.Windows.Controls.ItemsControl)">

+            <summary>

+            Gets the number of items in an ItemsControl.

+            </summary>

+            <param name="that">The ItemsControl instance.</param>

+            <returns>The number of items in the ItemsControl.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.LayoutTransformer">

+            <summary>

+            Represents a control that applies a layout transformation to its Content.

+            </summary>

+            <QualityBand>Preview</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.LayoutTransformer.TransformRootName">

+            <summary>

+            Name of the TransformRoot template part.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.LayoutTransformer.PresenterName">

+            <summary>

+            Name of the Presenter template part.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.LayoutTransformer.AcceptableDelta">

+            <summary>

+            Acceptable difference between two doubles.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.LayoutTransformer.DecimalsAfterRound">

+            <summary>

+            Number of decimals to round the Matrix to.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.LayoutTransformer.LayoutTransformProperty">

+            <summary>

+            Identifies the LayoutTransform DependencyProperty.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.LayoutTransformer._transformRoot">

+            <summary>

+            Root element for performing transformations.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.LayoutTransformer._contentPresenter">

+            <summary>

+            ContentPresenter element for displaying the content.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.LayoutTransformer._matrixTransform">

+            <summary>

+            RenderTransform/MatrixTransform applied to _transformRoot.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.LayoutTransformer._transformation">

+            <summary>

+            Transformation matrix corresponding to _matrixTransform.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.LayoutTransformer._childActualSize">

+            <summary>

+            Actual DesiredSize of Child element (the value it returned from its MeasureOverride method).

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.#ctor">

+            <summary>

+            Initializes a new instance of the LayoutTransformer class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.OnApplyTemplate">

+            <summary>

+            Builds the visual tree for the LayoutTransformer control when a new 

+            template is applied.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.LayoutTransformChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            Handles changes to the Transform DependencyProperty.

+            </summary>

+            <param name="o">Source of the change.</param>

+            <param name="e">Event args.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.ApplyLayoutTransform">

+            <summary>

+            Applies the layout transform on the LayoutTransformer control content.

+            </summary>

+            <remarks>

+            Only used in advanced scenarios (like animating the LayoutTransform). 

+            Should be used to notify the LayoutTransformer control that some aspect 

+            of its Transform property has changed. 

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.ProcessTransform(System.Windows.Media.Transform)">

+            <summary>

+            Processes the Transform to determine the corresponding Matrix.

+            </summary>

+            <param name="transform">Transform to process.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.GetTransformMatrix(System.Windows.Media.Transform)">

+            <summary>

+            Walks the Transform(Group) and returns the corresponding Matrix.

+            </summary>

+            <param name="transform">Transform(Group) to walk.</param>

+            <returns>Computed Matrix.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.MeasureOverride(System.Windows.Size)">

+            <summary>

+            Provides the behavior for the "Measure" pass of layout.

+            </summary>

+            <param name="availableSize">The available size that this element can give to child elements.</param>

+            <returns>The size that this element determines it needs during layout, based on its calculations of child element sizes.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.ArrangeOverride(System.Windows.Size)">

+            <summary>

+            Provides the behavior for the "Arrange" pass of layout.

+            </summary>

+            <param name="finalSize">The final area within the parent that this element should use to arrange itself and its children.</param>

+            <returns>The actual size used.</returns>

+            <remarks>

+            Using the WPF paramater name finalSize instead of Silverlight's finalSize for clarity

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.ComputeLargestTransformedSize(System.Windows.Size)">

+            <summary>

+            Compute the largest usable size (greatest area) after applying the transformation to the specified bounds.

+            </summary>

+            <param name="arrangeBounds">Arrange bounds.</param>

+            <returns>Largest Size possible.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.IsSizeSmaller(System.Windows.Size,System.Windows.Size)">

+            <summary>

+            Returns true if Size a is smaller than Size b in either dimension.

+            </summary>

+            <param name="a">Second Size.</param>

+            <param name="b">First Size.</param>

+            <returns>True if Size a is smaller than Size b in either dimension.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.RoundMatrix(System.Windows.Media.Matrix,System.Int32)">

+            <summary>

+            Rounds the non-offset elements of a Matrix to avoid issues due to floating point imprecision.

+            </summary>

+            <param name="matrix">Matrix to round.</param>

+            <param name="decimals">Number of decimal places to round to.</param>

+            <returns>Rounded Matrix.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.RectTransform(System.Windows.Rect,System.Windows.Media.Matrix)">

+            <summary>

+            Implements WPF's Rect.Transform on Silverlight.

+            </summary>

+            <param name="rect">Rect to transform.</param>

+            <param name="matrix">Matrix to transform with.</param>

+            <returns>Bounding box of transformed Rect.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.MatrixMultiply(System.Windows.Media.Matrix,System.Windows.Media.Matrix)">

+            <summary>

+            Implements WPF's Matrix.Multiply on Silverlight.

+            </summary>

+            <param name="matrix1">First matrix.</param>

+            <param name="matrix2">Second matrix.</param>

+            <returns>Multiplication result.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.MatrixHasInverse(System.Windows.Media.Matrix)">

+            <summary>

+            Implements WPF's Matrix.HasInverse on Silverlight.

+            </summary>

+            <param name="matrix">Matrix to check for inverse.</param>

+            <returns>True if the Matrix has an inverse.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.LayoutTransformer.DiagnosticWriteLine(System.String)">

+            <summary>

+            Outputs diagnostic info if DIAGNOSTICWRITELINE is defined.

+            </summary>

+            <param name="message">Diagnostic message.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.LayoutTransformer.LayoutTransform">

+            <summary>

+            Gets or sets the layout transform to apply on the LayoutTransformer 

+            control content.

+            </summary>

+            <remarks>

+            Corresponds to UIElement.LayoutTransform.

+            </remarks>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.LayoutTransformer.Child">

+            <summary>

+            Gets the child element being transformed.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.MobileStartup">

+            <summary>

+            The TagEditor control provides a brief user interface allowing for the

+            selection of a set of tests, used to filter the test run.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.MobileStartup.TagHistoryKey">

+            <summary>

+            Key used to lookup the TagHistory site setting.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.MobileStartup.SecondsToWait">

+            <summary>

+            Number of seconds to wait before running the test.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileStartup.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the TagEditor type.

+            </summary>

+            <param name="initialTagExpression">The tag expression to use.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileStartup.#ctor">

+            <summary>

+            Initializes a new instance of the TagEditor type.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileStartup.OnComplete(Microsoft.Silverlight.Testing.Client.TagExpressionEventArgs)">

+            <summary>

+            Fires the Complete event.

+            </summary>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileStartup.OnTouchToEnterTextClick(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handle touch of the button to display the text box.

+            </summary>

+            <param name="sender">Tag button.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileStartup.OnTagButtonClicked(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handle selection of a tag button.

+            </summary>

+            <param name="sender">Tag button.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileStartup.OnTagTouched(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handle changes to the Tag text.

+            </summary>

+            <param name="sender">Tag TextBox.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileStartup.OnRunClicked(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handle clicks to the Run button.

+            </summary>

+            <param name="sender">Run Button.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileStartup.OnTimerTick(System.Object,System.EventArgs)">

+            <summary>

+            Handle timer ticks.

+            </summary>

+            <param name="sender">The timer.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileStartup.StopTimer">

+            <summary>

+            Stop the timer.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileStartup.RunTests">

+            <summary>

+            Run the unit tests.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileStartup.OnCancelClicked(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Cancels the selection of a tag expression.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileStartup.InitializeComponent">

+            <summary>

+            InitializeComponent

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.MobileStartup.Timer">

+            <summary>

+            Gets or sets the timer used to automatically run tests if no tag is

+            entered.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.MobileStartup.SecondsWaited">

+            <summary>

+            Gets or sets the number of seconds already waited.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.MobileStartup.TagHistory">

+            <summary>

+            Gets or sets the tag history.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Client.MobileStartup.Complete">

+            <summary>

+            An event that indicates that the tag editor is complete. This can be

+            in response to many actions: the user entering a tag expression, the

+            time expiring and the default being selected, or the selection being

+            canceled.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.MobileTestExceptionDetails">

+            <summary>

+            Mobile test exceptions page.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestExceptionDetails.#ctor">

+            <summary>

+            Initializes a new instance of the page.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestExceptionDetails.InitializeComponent">

+            <summary>

+            InitializeComponent

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.MobileTestMethodDetails">

+            <summary>

+            Mobile test method details page.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestMethodDetails.#ctor">

+            <summary>

+            Initializes a new instance of the page.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestMethodDetails.InitializeComponent">

+            <summary>

+            InitializeComponent

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.MobileTestPage">

+            <summary>

+            A user control designed for mobile platforms. The control should be used

+            as the root visual for a Silverlight plugin if developers would like to 

+            use the advanced TestSurface functionality.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.ITestPage">

+            <summary>

+            An interface for any test page instances to implement.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.ITestPage.TestPanel">

+            <summary>

+            Gets the test panel instance.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.IMobileTestPage">

+            <summary>

+            An interface for any test page instances to implement.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.IMobileTestPage.NavigateBack">

+            <summary>

+            Requests navigation back a page.

+            </summary>

+            <returns>A value indicating whether the operation was successful.</returns>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.MobileTestPage._slides">

+            <summary>

+            Contains the slide manager for the primitive user interface

+            navigation system.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.MobileTestPage._harness">

+            <summary>

+            Backing field for the unit test harness instance.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.MobileTestPage._delayedInitializationTimer">

+            <summary>

+            Backing field for the startup timer.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.MobileTestPage._model">

+            <summary>

+            Backing field for the model manager.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.#ctor">

+            <summary>

+            Initializes a new instance of the MobileTestPage class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.#ctor(Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes the MobileTestPage object.

+            </summary>

+            <param name="harness">The test harness instance.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.OnDelayedInitializationTick(System.Object,System.EventArgs)">

+            <summary>

+            Waits for the Settings to become available, either by the service or

+            system setting the instance property.

+            </summary>

+            <param name="sender">The source timer.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.CreateAndInsertSlide(System.String,System.Object)">

+            <summary>

+            Creates a new slide and inserts it into the slide manager, plus

+            visual tree.

+            </summary>

+            <param name="header">The text header to use.</param>

+            <param name="content">The content to inside the slide.</param>

+            <returns>Returns the new Slide instance.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.OnTagExpressionSelected(System.Object,Microsoft.Silverlight.Testing.Client.TagExpressionEventArgs)">

+            <summary>

+            Handles the completion event on the tag expression editor to begin

+            the test run using the user-provided settings.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.StartTestRun">

+            <summary>

+            Starts the test run.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.OnTestHarnessCompleted(System.Object,Microsoft.Silverlight.Testing.Harness.TestHarnessCompletedEventArgs)">

+            <summary>

+            Handles the test harness complete event, to display results.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.OnMoveBackToTestAssembliesClick(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handles the movement back to the test assemblies list.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.OnMoveBackToTestClassesClick(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handles the movement back to the test classes list.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.OnMoveBackToTestMethodsClick(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handles the movement back to the test methods list.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.OnTestAssemblySelectionChanged(System.Object,System.Windows.Controls.SelectionChangedEventArgs)">

+            <summary>

+            Handles the selection of a test assembly.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.OnTestClassSelectionChanged(System.Object,System.Windows.Controls.SelectionChangedEventArgs)">

+            <summary>

+            Handles the selection of a test class.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.OnTestMethodsSelectionChanged(System.Object,System.Windows.Controls.SelectionChangedEventArgs)">

+            <summary>

+            Handles the selection of a test method.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.NavigateBack">

+            <summary>

+            Requests navigation back a page.

+            </summary>

+            <returns>A value indicating whether the operation was successful.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.MobileTestPage.InitializeComponent">

+            <summary>

+            InitializeComponent

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.MobileTestPage.TestPanel">

+            <summary>

+            Gets the test surface, a dynamic Panel that removes its children 

+            elements after each test completes.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.MobileTestPage.UnitTestHarness">

+            <summary>

+            Gets the unit test harness instance.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.ResultsTreeView">

+            <summary>

+            A derived TreeView control specific to the application needs for

+            showing results in real-time.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.TreeView">

+            <summary>

+            Represents a control that displays hierarchical data in a tree structure

+            that has items that can expand and collapse.

+            </summary>

+            <QualityBand>Stable</QualityBand>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.IUpdateVisualState">

+            <summary>

+            The IUpdateVisualState interface is used to provide the

+            InteractionHelper with access to the type's UpdateVisualState method.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.IUpdateVisualState.UpdateVisualState(System.Boolean)">

+            <summary>

+            Update the visual state of the control.

+            </summary>

+            <param name="useTransitions">

+            A value indicating whether to automatically generate transitions to

+            the new state, or instantly transition to the new state.

+            </param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeView._allowWrite">

+            <summary>

+            A value indicating whether a read-only dependency property change

+            handler should allow the value to be set.  This is used to ensure

+            that read-only properties cannot be changed via SetValue, etc.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeView._ignorePropertyChange">

+            <summary>

+            A value indicating whether a dependency property change handler

+            should ignore the next change notification.  This is used to reset

+            the value of properties without performing any of the actions in

+            their change handlers.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedItemProperty">

+            <summary>

+            Identifies the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedItem" />

+            dependency property.

+            </summary>

+            <value>

+            The identifier for the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedItem" />

+            property.

+            </value>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnSelectedItemPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            SelectedItemProperty property changed handler.

+            </summary>

+            <param name="d">TreeView that changed its SelectedItem.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedValueProperty">

+            <summary>

+            Identifies the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedValue" />

+            dependency property.

+            </summary>

+            <value>

+            The identifier for the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedValue" />

+            dependency property.

+            </value>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnSelectedValuePropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            SelectedValueProperty property changed handler.

+            </summary>

+            <param name="d">TreeView that changed its SelectedValue.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedValuePathProperty">

+            <summary>

+            Identifies the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedValuePath" />

+            dependency property.

+            </summary>

+            <value>

+            The identifier for the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedValuePath" />

+            dependency property.

+            </value>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnSelectedValuePathPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            SelectedValuePathProperty property changed handler.

+            </summary>

+            <param name="d">TreeView that changed its SelectedValuePath.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeView.ItemContainerStyleProperty">

+            <summary>

+            Identifies the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.ItemContainerStyle" />

+            dependency property.

+            </summary>

+            <value>

+            The identifier for the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.ItemContainerStyle" />

+            dependency property.

+            </value>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnItemContainerStylePropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            ItemContainerStyleProperty property changed handler.

+            </summary>

+            <param name="d">

+            TreeView that changed its ItemContainerStyle.

+            </param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.#ctor">

+            <summary>

+            Initializes a new instance of the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" /> class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnCreateAutomationPeer">

+            <summary>

+            Returns a

+            <see cref="T:System.Windows.Automation.Peers.TreeViewAutomationPeer" />

+            for use by the Silverlight automation infrastructure.

+            </summary>

+            <returns>

+            A

+            <see cref="T:System.Windows.Automation.Peers.TreeViewAutomationPeer" />

+            for the <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" /> control.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnApplyTemplate">

+            <summary>

+            Builds the visual tree for the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" /> control when a new

+            control template is applied.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.Microsoft#Silverlight#Testing#Controls#IUpdateVisualState#UpdateVisualState(System.Boolean)">

+            <summary>

+            Update the visual state of the TreeView.

+            </summary>

+            <param name="useTransitions">

+            A value indicating whether to use transitions when updating the

+            visual state.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.GetContainerForItemOverride">

+            <summary>

+            Creates a <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> to

+            display content.

+            </summary>

+            <returns>

+            A <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> to use as a

+            container for content.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.IsItemItsOwnContainerOverride(System.Object)">

+            <summary>

+            Determines whether the specified item is a

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />, which is the

+            default container for items in the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" /> control.

+            </summary>

+            <param name="item">The object to evaluate.</param>

+            <returns>

+            True if the item is a

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />; otherwise,

+            false.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.PrepareContainerForItemOverride(System.Windows.DependencyObject,System.Object)">

+            <summary>

+            Prepares the container element to display the specified item.

+            </summary>

+            <param name="element">

+            The container element used to display the specified item.

+            </param>

+            <param name="item">The item to display.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.ClearContainerForItemOverride(System.Windows.DependencyObject,System.Object)">

+            <summary>

+            Removes all templates, styles, and bindings for the object displayed

+            as a <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />.

+            </summary>

+            <param name="element">

+            The <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> element to

+            clear.

+            </param>

+            <param name="item">

+            The item that is contained in the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs)">

+            <summary>

+            Makes adjustments to the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" /> control when the

+            value of the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.ItemsControl.Items" /> property

+            changes.

+            </summary>

+            <param name="e">

+            A

+            <see cref="T:System.Collections.Specialized.NotifyCollectionChangedEventArgs" />

+            that contains data about the change.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.CheckForSelectedDescendents(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Select any descendents when adding new TreeViewItems to a TreeView.

+            </summary>

+            <param name="item">The added item.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.PropagateKeyDown(System.Windows.Input.KeyEventArgs)">

+            <summary>

+            Propagate OnKeyDown messages from the root TreeViewItems to their

+            TreeView.

+            </summary>

+            <param name="e">Event arguments.</param>

+            <remarks>

+            Because Silverlight's ScrollViewer swallows many useful key events

+            (which it can ignore on WPF if you override HandlesScrolling or use

+            an internal only variable in Silverlight), the root TreeViewItems

+            explicitly propagate KeyDown events to their parent TreeView.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnKeyDown(System.Windows.Input.KeyEventArgs)">

+            <summary>

+            Provides handling for the

+            <see cref="E:System.Windows.UIElement.KeyDown" /> event when a key

+            is pressed while the control has focus.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.Input.KeyEventArgs" /> that contains

+            the event data.

+            </param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="e " />is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.HandleScrollKeys(System.Windows.Input.Key)">

+            <summary>

+            Handle keys related to scrolling.

+            </summary>

+            <param name="key">The key to handle.</param>

+            <returns>A value indicating whether the key was handled.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.HandleScrollByPage(System.Boolean)">

+            <summary>

+            Handle scrolling a page up or down.

+            </summary>

+            <param name="up">

+            A value indicating whether the page should be scrolled up.

+            </param>

+            <returns>

+            A value indicating whether the scroll was handled.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnKeyUp(System.Windows.Input.KeyEventArgs)">

+            <summary>

+            Provides handling for the KeyUp event.

+            </summary>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnMouseEnter(System.Windows.Input.MouseEventArgs)">

+            <summary>

+            Provides handling for the MouseEnter event.

+            </summary>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnMouseLeave(System.Windows.Input.MouseEventArgs)">

+            <summary>

+            Provides handling for the MouseLeave event.

+            </summary>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnMouseMove(System.Windows.Input.MouseEventArgs)">

+            <summary>

+            Provides handling for the MouseMove event.

+            </summary>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs)">

+            <summary>

+            Provides handling for the

+            <see cref="E:System.Windows.UIElement.MouseLeftButtonDown" />

+            event.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.Input.MouseButtonEventArgs" /> that

+            contains the event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs)">

+            <summary>

+            Provides handling for the MouseLeftButtonUp event.

+            </summary>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.HandleMouseButtonDown">

+            <summary>

+            Provides handling for mouse button events.

+            </summary>

+            <returns>A value indicating whether the event was handled.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnGotFocus(System.Windows.RoutedEventArgs)">

+            <summary>

+            Provides handling for the GotFocus event.

+            </summary>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnLostFocus(System.Windows.RoutedEventArgs)">

+            <summary>

+            Provides handling for the LostFocus event.

+            </summary>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.OnSelectedItemChanged(System.Windows.RoutedPropertyChangedEventArgs{System.Object})">

+            <summary>

+            Raises the

+            <see cref="E:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedItemChanged" />

+            event when the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedItem" />

+            property value changes.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.RoutedPropertyChangedEventArgs`1" />

+            that contains the event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.ChangeSelection(System.Object,Microsoft.Silverlight.Testing.Controls.TreeViewItem,System.Boolean)">

+            <summary>

+            Change whether a TreeViewItem is selected.

+            </summary>

+            <param name="itemOrContainer">

+            Item whose selection is changing.

+            </param>

+            <param name="container">

+            Container of the item whose selection is changing.

+            </param>

+            <param name="selected">

+            A value indicating whether the TreeViewItem is selected.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.UpdateSelectedValue(System.Object)">

+            <summary>

+            Update the selected value of the of the TreeView based on the value

+            of the currently selected TreeViewItem and the SelectedValuePath.

+            </summary>

+            <param name="item">

+            Value of the currently selected TreeViewItem.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.SelectFirstItem">

+            <summary>

+            Select the first item of the TreeView.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.FocusFirstItem">

+            <summary>

+            Focus the first item in the TreeView.

+            </summary>

+            <returns>A value indicating whether the item was focused.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeView.FocusLastItem">

+            <summary>

+            Focus the last item in the TreeView.

+            </summary>

+            <returns>A value indicating whether the item was focused.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedItem">

+            <summary>

+            Gets the selected item in a

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" />.

+            </summary>

+            <value>

+            The currently selected item or null if no item is selected. The

+            default value is null.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedValue">

+            <summary>

+            Gets the value of the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedItem" />

+            property that is specified by the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedValuePath" />

+            property.

+            </summary>

+            <value>

+            The value of the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedItem" />

+            property that is specified by the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedValuePath" />

+            property, or null if no item is selected. The default value is null.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedValuePath">

+            <summary>

+            Gets or sets the property path that is used to get the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedValue" />

+            property of the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedItem" />

+            property in a <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" />.

+            </summary>

+            <value>

+            The property path that is used to get the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedValue" />

+            property of the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedItem" />

+            property in a <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" />. The

+            default value is <see cref="F:System.String.Empty" />.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeView.ItemContainerStyle">

+            <summary>

+            Gets or sets the <see cref="T:System.Windows.Style" /> that is

+            applied to the container element generated for each item.

+            </summary>

+            <value>

+            The <see cref="T:System.Windows.Style" /> applied to the container

+            element that contains each item.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedContainer">

+            <summary>

+            Gets the currently selected TreeViewItem container.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeView.IsSelectedContainerHookedUp">

+            <summary>

+            Gets a value indicating whether the currently selected TreeViewItem

+            container is properly hooked up to the TreeView.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeView.IsSelectionChangeActive">

+            <summary>

+            Gets or sets a value indicating whether the selected item is

+            currently being changed.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeView.ItemsControlHelper">

+            <summary>

+            Gets the ItemsControlHelper that is associated with this control.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeView.Interaction">

+            <summary>

+            Gets the helper that provides all of the standard

+            interaction functionality.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeView.IsControlKeyDown">

+            <summary>

+            Gets a value indicating whether the Control key is currently

+            pressed.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeView.IsShiftKeyDown">

+            <summary>

+            Gets a value indicating whether the Shift key is currently pressed.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedItemChanged">

+            <summary>

+            Occurs when the value of the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeView.SelectedItem" />

+            property changes.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ResultsTreeView.GetContainerForItemOverride">

+            <summary>

+            Overrides the item to allow for simple binding to the expanded

+            property on the item.

+            </summary>

+            <returns>Returns a new container for an item.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ResultsTreeView.GetSharedContainer">

+            <summary>

+            This method returns the container with an expanded binding.

+            </summary>

+            <returns>Returns the container with an expanded binding.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.ResultsTreeViewItem">

+            <summary>

+            A derived TreeViewItem for IsExpanded binding.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem">

+            <summary>

+            Provides a selectable item for the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" /> control.

+            </summary>

+            <QualityBand>Stable</QualityBand>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl">

+            <summary>

+            Represents a control that contains a collection of items and a header.

+            </summary>

+            <QualityBand>Stable</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.HeaderProperty">

+            <summary>

+            Identifies the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.Header" />

+            dependency property.

+            </summary>

+            <value>

+            The identifier for the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.Header" />

+            dependency property.

+            </value>

+            <remarks>

+            Note: WPF defines this property via a call to AddOwner of

+            HeaderedContentControl's HeaderProperty.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.OnHeaderPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            HeaderProperty property changed handler.

+            </summary>

+            <param name="d">

+            HeaderedItemsControl that changed its Header.

+            </param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.HeaderTemplateProperty">

+            <summary>

+            Identifies the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.HeaderTemplate" />

+            dependency property.

+            </summary>

+            <value>

+            The identifier for the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.HeaderTemplate" />

+            dependency property.

+            </value>

+            <remarks>

+            Note: WPF defines this property via a call to AddOwner of

+            HeaderedContentControl's HeaderTemplateProperty.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.OnHeaderTemplatePropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            HeaderTemplateProperty property changed handler.

+            </summary>

+            <param name="d">

+            HeaderedItemsControl that changed its HeaderTemplate.

+            </param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.ItemContainerStyleProperty">

+            <summary>

+            Identifies the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.ItemContainerStyle" />

+            dependency property.

+            </summary>

+            <value>

+            The identifier for the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.ItemContainerStyle" />

+            dependency property.

+            </value>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.OnItemContainerStylePropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            ItemContainerStyleProperty property changed handler.

+            </summary>

+            <param name="d">

+            HeaderedItemsControl that changed its ItemContainerStyle.

+            </param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.#ctor">

+            <summary>

+            Initializes a new instance of the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl" /> class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.OnHeaderChanged(System.Object,System.Object)">

+            <summary>

+            Called when the value of the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.Header" />

+            property changes.

+            </summary>

+            <param name="oldHeader">

+            The old value of the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.Header" />

+            property.

+            </param>

+            <param name="newHeader">

+            The new value of the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.Header" />

+            property.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.OnHeaderTemplateChanged(System.Windows.DataTemplate,System.Windows.DataTemplate)">

+            <summary>

+            Called when the value of the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.HeaderTemplate" />

+            property changes.

+            </summary>

+            <param name="oldHeaderTemplate">

+            The old value of the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.HeaderTemplate" />

+            property.

+            </param>

+            <param name="newHeaderTemplate">

+            The new value of the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.HeaderTemplate" />

+            property.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.OnApplyTemplate">

+            <summary>

+            Builds the visual tree for the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl" /> when a

+            new template is applied.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.PrepareContainerForItemOverride(System.Windows.DependencyObject,System.Object)">

+            <summary>

+            Prepares the specified element to display the specified item.

+            </summary>

+            <param name="element">

+            The container element used to display the specified item.

+            </param>

+            <param name="item">The content to display.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.PreparePrepareHeaderedItemsControlContainerForItemOverride(System.Windows.DependencyObject,System.Object,System.Windows.Controls.ItemsControl,System.Windows.Style)">

+            <summary>

+            Prepares the specified container to display the specified item.

+            </summary>

+            <param name="element">

+            Container element used to display the specified item.

+            </param>

+            <param name="item">Specified item to display.</param>

+            <param name="parent">The parent ItemsControl.</param>

+            <param name="parentItemContainerStyle">

+            The ItemContainerStyle for the parent ItemsControl.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.PrepareHeaderedItemsControlContainer(Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl,System.Object,System.Windows.Controls.ItemsControl,System.Windows.Style)">

+            <summary>

+            Prepare a PrepareHeaderedItemsControlContainer container for an

+            item.

+            </summary>

+            <param name="control">Container to prepare.</param>

+            <param name="item">Item to be placed in the container.</param>

+            <param name="parentItemsControl">The parent ItemsControl.</param>

+            <param name="parentItemContainerStyle">

+            The ItemContainerStyle for the parent ItemsControl.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.HasDefaultValue(System.Windows.Controls.Control,System.Windows.DependencyProperty)">

+            <summary>

+            Check whether a control has the default value for a property.

+            </summary>

+            <param name="control">The control to check.</param>

+            <param name="property">The property to check.</param>

+            <returns>

+            True if the property has the default value; false otherwise.

+            </returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.HeaderIsItem">

+            <summary>

+            Gets or sets a value indicating whether the Header property has been

+            set to the item of an ItemsControl.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.Header">

+            <summary>

+            Gets or sets the item that labels the control.

+            </summary>

+            <value>

+            The item that labels the control. The default value is null.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.HeaderTemplate">

+            <summary>

+            Gets or sets a data template that is used to display the contents of

+            the control's header.

+            </summary>

+            <value>

+            Gets or sets a data template that is used to display the contents of

+            the control's header. The default is null.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.ItemContainerStyle">

+            <summary>

+            Gets or sets the <see cref="T:System.Windows.Style" /> that is

+            applied to the container element generated for each item.

+            </summary>

+            <value>

+            The <see cref="T:System.Windows.Style" /> that is applied to the

+            container element generated for each item. The default is null.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl.ItemsControlHelper">

+            <summary>

+            Gets the ItemsControlHelper that is associated with this control.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewItem.ExpanderButtonName">

+            <summary>

+            The name of the ExpanderButton template part.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewItem.HeaderName">

+            <summary>

+            The name of the Header template part.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewItem._expanderButton">

+            <summary>

+            The ExpanderButton template part is used to expand and collapse the

+            TreeViewItem.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewItem._headerElement">

+            <summary>

+            The Header template part is used to distinguish the bound Header

+            content of the TreeViewItem.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewItem._expansionStateGroup">

+            <summary>

+            The ExpansionStates visual state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewItem._allowWrite">

+            <summary>

+            A value indicating whether a read-only dependency property change

+            handler should allow the value to be set.  This is used to ensure

+            that read-only properties cannot be changed via SetValue, etc.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewItem.HasItemsProperty">

+            <summary>

+            Identifies the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.HasItems" />

+            dependency property.

+            </summary>

+            <value>

+            The identifier for the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.HasItems" />

+            dependency property.

+            </value>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnHasItemsPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            HasItemsProperty property changed handler.

+            </summary>

+            <param name="d">TreeViewItem that changed its HasItems.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsExpandedProperty">

+            <summary>

+            Identifies the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsExpanded" />

+            dependency property.

+            </summary>

+            <value>

+            The identifier for the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsExpanded" />

+            dependency property.

+            </value>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnIsExpandedPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            IsExpandedProperty property changed handler.

+            </summary>

+            <param name="d">TreeViewItem that changed its IsExpanded.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsSelectedProperty">

+            <summary>

+            Identifies the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsSelected" />

+            dependency property.

+            </summary>

+            <value>

+            The identifier for the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsSelected" />

+            dependency property.

+            </value>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnIsSelectedPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            IsSelectedProperty property changed handler.

+            </summary>

+            <param name="d">TreeViewItem that changed its IsSelected.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsSelectionActiveProperty">

+            <summary>

+            Identifies the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsSelectionActive" />

+            dependency property.

+            </summary>

+            <value>

+            The identifier for the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsSelectionActive" />

+            dependency property.

+            </value>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnIsSelectionActivePropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            IsSelectionActiveProperty property changed handler.

+            </summary>

+            <param name="d">TreeViewItem that changed its IsSelectionActive.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewItem._parentItemsControl">

+            <summary>

+            A reference to the parent ItemsControl of a TreeViewItem.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.#ctor">

+            <summary>

+            Initializes a new instance of the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnCreateAutomationPeer">

+            <summary>

+            Returns a

+            <see cref="T:System.Windows.Automation.Peers.TreeViewItemAutomationPeer" />

+            for use by the Silverlight automation infrastructure.

+            </summary>

+            <returns>

+            A

+            <see cref="T:System.Windows.Automation.Peers.TreeViewItemAutomationPeer" />

+            object for the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnApplyTemplate">

+            <summary>

+            Builds the visual tree for the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> control when a

+            new control template is applied.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnExpansionStateGroupStateChanged(System.Object,System.Windows.VisualStateChangedEventArgs)">

+            <summary>

+            Provides handling for the ExpansionStates CurrentChanged event.

+            </summary>

+            <param name="sender">The ExpansionState VisualStateGroup.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.BringIntoView">

+            <summary>

+            Scroll the TreeViewItem into view.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.Microsoft#Silverlight#Testing#Controls#IUpdateVisualState#UpdateVisualState(System.Boolean)">

+            <summary>

+            Update the visual state of the control.

+            </summary>

+            <param name="useTransitions">

+            A value indicating whether to automatically generate transitions to

+            the new state, or instantly transition to the new state.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.UpdateVisualState(System.Boolean)">

+            <summary>

+            Update the visual state of the control.

+            </summary>

+            <param name="useTransitions">

+            A value indicating whether to automatically generate transitions to

+            the new state, or instantly transition to the new state.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.GetContainerForItemOverride">

+            <summary>

+            Creates a <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> to

+            display content.

+            </summary>

+            <returns>

+            A <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> to use as a

+            container for content.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsItemItsOwnContainerOverride(System.Object)">

+            <summary>

+            Determines whether an object is a

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />.

+            </summary>

+            <param name="item">The object to evaluate.</param>

+            <returns>

+            True if <paramref name="item" /> is a

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />; otherwise,

+            false.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.PrepareContainerForItemOverride(System.Windows.DependencyObject,System.Object)">

+            <summary>

+            Prepares the specified container element to display the specified

+            item.

+            </summary>

+            <param name="element">

+            Container element used to display the specified item.

+            </param>

+            <param name="item">The item to display.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.ClearContainerForItemOverride(System.Windows.DependencyObject,System.Object)">

+            <summary>

+            Removes all templates, styles, and bindings for the object displayed

+            as a <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />.

+            </summary>

+            <param name="element">

+            The <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> element to

+            clear.

+            </param>

+            <param name="item">

+            The item that is contained in the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs)">

+            <summary>

+            Makes adjustments to the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> when the value

+            of the <see cref="P:Microsoft.Silverlight.Testing.Controls.ItemsControl.Items" />

+            property changes.

+            </summary>

+            <param name="e">

+            A

+            <see cref="T:System.Collections.Specialized.NotifyCollectionChangedEventArgs" />

+            that contains data about the change.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.RaiseEvent(System.Windows.RoutedEventHandler,System.Windows.RoutedEventArgs)">

+            <summary>

+            Raise a RoutedEvent.

+            </summary>

+            <param name="handler">Event handler.</param>

+            <param name="args">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnExpanded(System.Windows.RoutedEventArgs)">

+            <summary>

+            Raises an

+            <see cref="E:Microsoft.Silverlight.Testing.Controls.TreeViewItem.Expanded" /> event

+            when the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsExpanded" />

+            property changes from false to true.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.RoutedEventArgs" /> that contains the

+            event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnCollapsed(System.Windows.RoutedEventArgs)">

+            <summary>

+            Raises a

+            <see cref="E:Microsoft.Silverlight.Testing.Controls.TreeViewItem.Collapsed" />

+            event when the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsExpanded" />

+            property changes from true to false.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.RoutedEventArgs" /> that contains the

+            event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.ToggleExpanded(System.Windows.RoutedEventHandler,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handle changes to the IsExpanded property.

+            </summary>

+            <param name="handler">Event handler.</param>

+            <param name="args">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnSelected(System.Windows.RoutedEventArgs)">

+            <summary>

+            Raises the

+            <see cref="E:Microsoft.Silverlight.Testing.Controls.TreeViewItem.Selected" /> event

+            when the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsSelected" />

+            property changes from false to true.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.RoutedEventArgs" /> that contains the

+            event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnUnselected(System.Windows.RoutedEventArgs)">

+            <summary>

+            Raises the

+            <see cref="E:Microsoft.Silverlight.Testing.Controls.TreeViewItem.Unselected" />

+            event when the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsSelected" />

+            property changes from true to false.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.RoutedEventArgs" /> that contains the

+            event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnGotFocus(System.Windows.RoutedEventArgs)">

+            <summary>

+            Provides handling for the

+            <see cref="E:System.Windows.UIElement.GotFocus" /> event.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.RoutedEventArgs" /> that contains the

+            event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnLostFocus(System.Windows.RoutedEventArgs)">

+            <summary>

+            Provides handling for the

+            <see cref="E:System.Windows.UIElement.LostFocus" /> event.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.RoutedEventArgs" /> that contains the

+            event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnExpanderGotFocus(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handle the ExpanderButton's GotFocus event.

+            </summary>

+            <param name="sender">The ExpanderButton.</param>

+            <param name="e">Event Arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnMouseEnter(System.Windows.Input.MouseEventArgs)">

+            <summary>

+            Provides handling for the

+            <see cref="E:System.Windows.UIElement.MouseEnter" /> event.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.Input.MouseEventArgs" /> that contains

+            the event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnMouseLeave(System.Windows.Input.MouseEventArgs)">

+            <summary>

+            Provides handling for the

+            <see cref="E:System.Windows.UIElement.MouseLeave" /> event.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.Input.MouseEventArgs" /> that contains

+            the event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnHeaderMouseLeftButtonDown(System.Object,System.Windows.Input.MouseButtonEventArgs)">

+            <summary>

+            Provides handling for the Header's MouseLeftButtonDown event.

+            </summary>

+            <param name="sender">The Header template part.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnExpanderClick(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Provides handling for the ExpanderButton's Click event.

+            </summary>

+            <param name="sender">The ExpanderButton.</param>

+            <param name="e">Event Arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs)">

+            <summary>

+            Provides handling for the

+            <see cref="E:System.Windows.UIElement.MouseLeftButtonDown" /> event.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.Input.MouseButtonEventArgs" /> that

+            contains the event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs)">

+            <summary>

+            Provides handling for the

+            <see cref="E:System.Windows.UIElement.MouseLeftButtonUp" /> event.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.Input.MouseButtonEventArgs" /> that

+            contains the event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnKeyDown(System.Windows.Input.KeyEventArgs)">

+            <summary>

+            Provides handling for the

+            <see cref="E:System.Windows.UIElement.KeyDown" /> event when the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> has focus.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.Input.KeyEventArgs" /> that contains

+            the event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.HandleDownKey">

+            <summary>

+            Try moving the focus down from the selected item.

+            </summary>

+            <returns>

+            A value indicating whether the focus was successfully moved.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.OnKeyUp(System.Windows.Input.KeyEventArgs)">

+            <summary>

+            Provides handling for the

+            <see cref="E:System.Windows.UIElement.KeyUp" /> event.

+            </summary>

+            <param name="e">

+            A <see cref="T:System.Windows.Input.KeyEventArgs" /> that contains

+            the event data.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.HandleUpKey">

+            <summary>

+            Try moving the focus up from the selected item.

+            </summary>

+            <returns>

+            A value indicating whether the focus was successfully moved.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.HandleScrollByPage(System.Boolean,System.Windows.Controls.ScrollViewer,System.Double,System.Double,System.Double,System.Double@)">

+            <summary>

+            Handle scrolling a page up or down.

+            </summary>

+            <param name="up">

+            A value indicating whether the page should be scrolled up.

+            </param>

+            <param name="scrollHost">The ScrollViewer being scrolled.</param>

+            <param name="viewportHeight">The height of the viewport.</param>

+            <param name="top">The top of item to start from.</param>

+            <param name="bottom">The bottom of the item to start from.</param>

+            <param name="currentDelta">The height of this item.</param>

+            <returns>

+            A value indicating whether the scroll was handled.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.CalculateDelta(System.Boolean,System.Windows.FrameworkElement,System.Windows.Controls.ScrollViewer,System.Double,System.Double,System.Double@)">

+            <summary>

+            Calculate the distance between this TreeViewItem and the item being

+            paged from.

+            </summary>

+            <param name="up">

+            A value indicating whether the page should be scrolled up.

+            </param>

+            <param name="element">The element being paged from.</param>

+            <param name="scrollHost">The ScrollViewer being scrolled.</param>

+            <param name="top">The top of item to start from.</param>

+            <param name="bottom">The bottom of the item to start from.</param>

+            <param name="closeEdge">

+            The distance between the top/bottom of one item to the other.

+            </param>

+            <returns>

+            A value indicating whether the scroll was handled.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.Select(System.Boolean)">

+            <summary>

+            Change the selected status of the TreeViewItem.

+            </summary>

+            <param name="selected">

+            A value indicating whether the TreeViewItem is selected.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.UpdateContainsSelection(System.Boolean)">

+            <summary>

+            Update the ancestors of this item when it changes selection.

+            </summary>

+            <param name="selected">

+            A value indicating whether the item is selected.

+            </param>

+            <remarks>

+            Unselection updates need to occur before selection updates because

+            the old and new selected items may share a partial path.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.AllowKeyHandleEvent">

+            <summary>

+            Determine whether the TreeViewItem should be allowed to handle a key

+            event.

+            </summary>

+            <returns>

+            A value indicating whether the key event should be handled.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.FocusDown">

+            <summary>

+            Navigate the focus to the next TreeViewItem below this item.

+            </summary>

+            <returns>

+            A value indicating whether the focus was navigated.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.FocusInto">

+            <summary>

+            Navigate the focus to the very last TreeViewItem descendent of the

+            this item.

+            </summary>

+            <returns>

+            A value indicating whether the focus was navigated.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.FindNextFocusableItem(System.Boolean)">

+            <summary>

+            Find the next focusable TreeViewItem below this item.

+            </summary>

+            <param name="recurse">

+            A value indicating whether the item should recurse into its child

+            items when searching for the next focusable TreeViewItem.

+            </param>

+            <returns>The next focusable TreeViewItem below this item.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.FindLastFocusableItem">

+            <summary>

+            Find the last focusable TreeViewItem contained by this item.

+            </summary>

+            <returns>

+            The last focusable TreeViewItem contained by this item.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItem.FindPreviousFocusableItem">

+            <summary>

+            Find the previous focusable TreeViewItem above this item.

+            </summary>

+            <returns>

+            The previous focusable TreeViewItem above this item.

+            </returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.ExpanderButton">

+            <summary>

+            Gets or sets the ExpanderButton template part is used to expand and

+            collapse the TreeViewItem.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.HeaderElement">

+            <summary>

+            Gets the Header template part that is used to distinguish the bound

+            Header content of the TreeViewItem.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.ExpansionStateGroup">

+            <summary>

+            Gets or sets the ExpansionStates visual state group.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IgnorePropertyChange">

+            <summary>

+            Gets or sets a value indicating whether a dependency property change

+            handler should ignore the next change notification.  This is used to

+            reset the value of properties without performing any of the actions

+            in their change handlers.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.HasItems">

+            <summary>

+            Gets a value indicating whether this

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> contains

+            items.

+            </summary>

+            <value>

+            True if this <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />

+            contains items; otherwise, false. The default is false.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsExpanded">

+            <summary>

+            Gets or sets a value indicating whether the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.ItemsControl.Items" />

+            contained by this

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> are expanded

+            or collapsed.

+            </summary>

+            <value>

+            True to indicate the contents of the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.ItemsControl.Items" />

+            collection are expanded; false to indicate the items are collapsed.

+            The default is false.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsSelected">

+            <summary>

+            Gets or sets a value indicating whether this

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> is selected.

+            </summary>

+            <value>

+            True if this <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />

+            is selected; otherwise, false. The default is false.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsSelectionActive">

+            <summary>

+            Gets a value indicating whether the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> has focus.

+            </summary>

+            <value>

+            True if this <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />

+            has focus; otherwise, false. The default is false.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.Interaction">

+            <summary>

+            Gets the helper that provides all of the standard

+            interaction functionality.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.ContainsSelection">

+            <summary>

+            Gets or sets a value indicating whether the TreeView's currently

+            selected item is a descendent of this TreeViewItem.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.CancelGotFocusBubble">

+            <summary>

+            Gets or sets a value indicating whether the TreeViewItem should

+            ignore the next GotFocus event it receives because it has already

+            been handled by one of its children.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.RequiresContainsSelectionUpdate">

+            <summary>

+            Gets or sets a value indicating whether checking ContainsSelection

+            should actually perform the update notifications because the item

+            was selected before it was in the visual tree.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.UserInitiatedExpansion">

+            <summary>

+            Gets or sets a value indicating whether a user initiated action

+            caused the IsExpanded property to be set.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.ParentItemsControl">

+            <summary>

+            Gets or sets a reference to the parent ItemsControl of a

+            TreeViewItem.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.ParentTreeViewItem">

+            <summary>

+            Gets a reference to the parent TreeViewItem of this TreeViewItem.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.ParentTreeView">

+            <summary>

+            Gets a reference to the parent TreeView of the TreeViewItem.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsRoot">

+            <summary>

+            Gets a value indicating whether this TreeViewItem is a root of the

+            TreeView.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.CanExpandOnInput">

+            <summary>

+            Gets a value indicating whether the TreeViewItem can expand when it

+            receives appropriate user input.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Controls.TreeViewItem.Collapsed">

+            <summary>

+            Occurs when the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsExpanded" />

+            property changes from true to false.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Controls.TreeViewItem.Expanded">

+            <summary>

+            Occurs when the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsExpanded" />

+            property changes from false to true.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Controls.TreeViewItem.Selected">

+            <summary>

+            Occurs when the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsSelected" />

+            property of a <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />

+            changes from false to true.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Controls.TreeViewItem.Unselected">

+            <summary>

+            Occurs when the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.TreeViewItem.IsSelected" />

+            property of a <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />

+            changes from true to false.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ResultsTreeViewItem.GetContainerForItemOverride">

+            <summary>

+            Overrides the item to allow for simple binding to the expanded

+            property on the item.

+            </summary>

+            <returns>Returns a new container for an item.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ResultsTreeViewItem.OnKeyDown(System.Windows.Input.KeyEventArgs)">

+            <summary>

+            Overrides the key down event to allow toggling the space.

+            </summary>

+            <param name="e">The key event arguments data.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.Slide">

+            <summary>

+            A specialized content control that contains a fixed header, a standard

+            header content property, plus content. It is designed specifically for

+            a "slide-based" user interface for simple user interfaces.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Slide.GroupPosition">

+            <summary>

+            The visual state group name for slide position.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Slide.StatePositionLeft">

+            <summary>

+            The visual state name for left position.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Slide.StatePositionRight">

+            <summary>

+            The visual state name for right position.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Slide.StatePositionNormal">

+            <summary>

+            The normal visual state name for position.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Slide.PartContent">

+            <summary>

+            The content template part name.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Slide.PartHeader">

+            <summary>

+            The header template part name.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Slide.PartFixedHeader">

+            <summary>

+            The fixed header template name.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Slide._parent">

+            <summary>

+            The manager of the slide and its siblings.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Slide.HeaderProperty">

+            <summary>

+            Identifies the Header dependency property.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Slide.FixedHeaderProperty">

+            <summary>

+            Identifies the FixedHeader dependency property.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Slide.PositionProperty">

+            <summary>

+            Identifies the Position dependency property.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Slide.OnPositionPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            PositionProperty property changed handler.

+            </summary>

+            <param name="d">Slide that changed its Position.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Slide.#ctor">

+            <summary>

+            Initializes a new instance of the Slide class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Slide.RemoveFromManager">

+            <summary>

+            Remove the slide from the parent manager.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Slide.OnApplyTemplate">

+            <summary>

+            Locate template parts and assign instances to fields during template

+            application.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Slide.OnSlideChanged">

+            <summary>

+            Fires the slide changed event.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Slide.OnCurrentStateChanged(System.Object,System.Windows.VisualStateChangedEventArgs)">

+            <summary>

+            Fires the current state changed event.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Slide.ToString">

+            <summary>

+            Helps debugging by providing information about the slide name.

+            </summary>

+            <returns>Returns the name of the slide.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Slide.UpdateVisualState(System.Boolean,Microsoft.Silverlight.Testing.Client.SlidePosition)">

+            <summary>

+            Updates the visual state.

+            </summary>

+            <param name="useTransitions">A value indicating whether to use

+            visual transitions for the state change.</param>

+            <param name="sp">The slide position to use.</param>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Client.Slide.SlideChanged">

+            <summary>

+            Event fired when the current slide changes.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.Slide.Header">

+            <summary>

+            Gets or sets the primary header content.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.Slide.FixedHeader">

+            <summary>

+            Gets or sets the fixed header content.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.Slide.Position">

+            <summary>

+            Gets or sets the position of the slide.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.Slide.SlideManager">

+            <summary>

+            Gets or sets the slide manager for the slide.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.SlideManager">

+            <summary>

+            A helper class to managing sets of slides.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.SlideManager.#ctor">

+            <summary>

+            Initializes a new instance of the SlideManager class.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.SlideManager._current">

+            <summary>

+            Stores the linked list node for the current slide.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.SlideManager._slides">

+            <summary>

+            Backing field for the set of slides.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.SlideManager.Add(Microsoft.Silverlight.Testing.Client.Slide[])">

+            <summary>

+            Adds a slide or an array of slides to the managed slide set.

+            </summary>

+            <param name="slides">The slides to manage.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.SlideManager.InitializePosition(Microsoft.Silverlight.Testing.Client.Slide,System.Boolean)">

+            <summary>

+            Initializes the position of the slide based on location.

+            </summary>

+            <param name="slide">The slide instance.</param>

+            <param name="isFirst">A property indicating whether the slide is the

+            first to be managed.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.SlideManager.InsertAfter(Microsoft.Silverlight.Testing.Client.Slide,Microsoft.Silverlight.Testing.Client.Slide)">

+            <summary>

+            Manages a new slide, inserting it after an existing slide node.

+            </summary>

+            <param name="before">The node to insert after.</param>

+            <param name="newSlide">The new slide instance.</param>

+            <returns>Returns the linked list node that is inserted.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.SlideManager.InsertFirst(Microsoft.Silverlight.Testing.Client.Slide)">

+            <summary>

+            Inserts a slide as the first in the linked list.

+            </summary>

+            <param name="newSlide">The new slide instance.</param>

+            <returns>Returns the linked list node.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.SlideManager.InsertAfter(System.Collections.Generic.LinkedListNode{Microsoft.Silverlight.Testing.Client.Slide},Microsoft.Silverlight.Testing.Client.Slide)">

+            <summary>

+            Insert a slide after a provided linked list node.

+            </summary>

+            <param name="before">The node to insert after.</param>

+            <param name="newSlide">The new slide to insert.</param>

+            <returns>Returns the new linked list node.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.SlideManager.Remove(Microsoft.Silverlight.Testing.Client.Slide)">

+            <summary>

+            Remove a slide from management.

+            </summary>

+            <param name="slide">The slide instance.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.SlideManager.Previous">

+            <summary>

+            Move to the previous slide.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.SlideManager.Next">

+            <summary>

+            Move to the next slide.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.SlideManager.MoveTo(Microsoft.Silverlight.Testing.Client.Slide)">

+            <summary>

+            Moves to a specific slide, moving the others to the appropriate

+            direction on screen.

+            </summary>

+            <param name="slide">The slide to move to.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.SlideManager.Move(System.Boolean)">

+            <summary>

+            Move in a direction.

+            </summary>

+            <param name="forward">A value indicating whether the direction to

+            move is forward or not.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.SlideManager.Current">

+            <summary>

+            Gets the current slide instance.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.SlidePosition">

+            <summary>

+            Indicates the position that the slide should have.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.SlidePosition.Normal">

+            <summary>

+            Normal position, centered on the screen.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.SlidePosition.Left">

+            <summary>

+            To the left of the screen.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.SlidePosition.Right">

+            <summary>

+            To the right of the screen.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.TagEditor">

+            <summary>

+            The TagEditor control provides a brief user interface allowing for the

+            selection of a set of tests, used to filter the test run.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TagEditor.TagHistoryKey">

+            <summary>

+            Key used to lookup the TagHistory site setting.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TagEditor.TagLastRunHistoryKey">

+            <summary>

+            Key used to lookup whether the last run used tag expressions.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TagEditor.SecondsToWait">

+            <summary>

+            Number of seconds to wait before running the test.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TagEditor._lastRunUsedExpressions">

+            <summary>

+            Backing field for the last run used value.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.#ctor(System.String,System.Collections.Generic.IList{System.String})">

+            <summary>

+            Initializes a new instance of the TagEditor type. Also includes a

+            set of sample tags for display to the end user.

+            </summary>

+            <param name="initialTagExpression">The tag expression to use.</param>

+            <param name="sampleTags">Sample tags to display.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the TagEditor type.

+            </summary>

+            <param name="initialTagExpression">The tag expression to use.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.#ctor">

+            <summary>

+            Initializes a new instance of the TagEditor type.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.OnKeyDown(System.Windows.Input.KeyEventArgs)">

+            <summary>

+            Handles the key down event.

+            </summary>

+            <param name="e">The key event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.OnComplete(Microsoft.Silverlight.Testing.Client.TagExpressionEventArgs)">

+            <summary>

+            Fires the Complete event.

+            </summary>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.CreateTagButton(System.String)">

+            <summary>

+            Creates a new button.

+            </summary>

+            <param name="content">The button content.</param>

+            <returns>Returns a new Button instance.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.OnTagButtonClicked(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handle selection of a tag button.

+            </summary>

+            <param name="sender">Tag button.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.OnTagTouched(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handle changes to the Tag text.

+            </summary>

+            <param name="sender">Tag TextBox.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.OnRunClicked(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handle clicks to the Run button.

+            </summary>

+            <param name="sender">Run Button.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.OnTimerTick(System.Object,System.EventArgs)">

+            <summary>

+            Handle timer ticks.

+            </summary>

+            <param name="sender">The timer.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.StopTimer">

+            <summary>

+            Stop the timer.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.RunTests">

+            <summary>

+            Run the unit tests.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.OnCancelClicked(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Cancels the selection of a tag expression.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagEditor.InitializeComponent">

+            <summary>

+            InitializeComponent

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TagEditor.Timer">

+            <summary>

+            Gets or sets the timer used to automatically run tests if no tag is

+            entered.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TagEditor.SecondsWaited">

+            <summary>

+            Gets or sets the number of seconds already waited.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TagEditor.TagHistory">

+            <summary>

+            Gets or sets the tag history.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Client.TagEditor.Complete">

+            <summary>

+            An event that indicates that the tag editor is complete. This can be

+            in response to many actions: the user entering a tag expression, the

+            time expiring and the default being selected, or the selection being

+            canceled.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.TagExpressionEventArgs">

+            <summary>

+            A class for storing event information relating to a user's selected

+            tag expression for a test run.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TagExpressionEventArgs.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the TagExpression event arguments

+            class.

+            </summary>

+            <param name="tagExpression">The tag expression.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TagExpressionEventArgs.TagExpression">

+            <summary>

+            Gets the tag expression stored in the event arguments.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TagExpressionEventArgs.HasTagExpression">

+            <summary>

+            Gets a value indicating whether a tag expression has been set.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.TestExceptionDetails">

+            <summary>

+            Displays information about any exceptions listed in the results.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestExceptionDetails.#ctor">

+            <summary>

+            Initializes a new instance of the TestExceptionDetails class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestExceptionDetails.InitializeComponent">

+            <summary>

+            InitializeComponent

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.TestMethodDetails">

+            <summary>

+            Details view for test method data.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestMethodDetails.#ctor">

+            <summary>

+            Initializes a new instance of the TestMethodDetails class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestMethodDetails.InitializeComponent">

+            <summary>

+            InitializeComponent

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.TimeHelper">

+            <summary>

+            A set of simple time helper methods.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TimeHelper.ElapsedReadableTime(System.DateTime,System.DateTime)">

+            <summary>

+            Returns a human-readable formatting of the time different between 

+            two DateTime instances.

+            </summary>

+            <param name="start">The starting time.</param>

+            <param name="finish">The finishing time.</param>

+            <returns>Returns a human-readable string.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TimeHelper.ElapsedReadableTime(System.TimeSpan)">

+            <summary>

+            Returns a human-readable formatting of the time different between 

+            two DateTime instances.

+            </summary>

+            <param name="ts">The time span instance.</param>

+            <returns>Returns a human-readable string.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TimeHelper.Plural(System.String,System.Int32)">

+            <summary>

+            A plural 's' as the suffix, when not equal to one.

+            </summary>

+            <param name="value">The string value.</param>

+            <param name="number">The number to check.</param>

+            <returns>Returns an empty string or the English plural 's'.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines">

+            <summary>

+            Provides the necessary infrastructure to enable drawing connecting

+            lines between the TreeViewItems in a TreeView.

+            </summary>

+            <QualityBand>Experimental</QualityBand>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.GetConnectingLineInfo(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Gets the value of the ConnectingLineInfo attached property for a

+            specified TreeViewItem.

+            </summary>

+            <param name="element">

+            The TreeViewItem from which the property value is read.

+            </param>

+            <returns>

+            The ConnectingLineInfo property value for the TreeViewItem.

+            </returns>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.ConnectingLineInfoProperty">

+            <summary>

+            Identifies the ConnectingLineInfo dependency property.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.GetIsVerticalConnectingLineOf(System.Windows.Shapes.Line)">

+            <summary>

+            Gets the value of the IsVerticalConnectingLineOf attached property

+            for a specified Line.

+            </summary>

+            <param name="element">The Line from which the property value is read.</param>

+            <returns>The IsVerticalConnectingLineOf property value for the Line.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.SetIsVerticalConnectingLineOf(System.Windows.Shapes.Line,Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Sets the value of the IsVerticalConnectingLineOf attached property to a specified Line.

+            </summary>

+            <param name="element">The Line to which the attached property is written.</param>

+            <param name="value">The needed IsVerticalConnectingLineOf value.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.IsVerticalConnectingLineOfProperty">

+            <summary>

+            Identifies the IsVerticalConnectingLineOf dependency property.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.OnIsVerticalConnectingLineOfPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            IsVerticalConnectingLineOfProperty property changed handler.

+            </summary>

+            <param name="d">

+            Line that changed its IsVerticalConnectingLineOf TreeViewItem.

+            </param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.GetIsHorizontalConnectingLineOf(System.Windows.Shapes.Line)">

+            <summary>

+            Gets the value of the IsHorizontalConnectingLineOf attached property

+            for a specified Line.

+            </summary>

+            <param name="element">

+            The Line from which the property value is read.

+            </param>

+            <returns>

+            The IsHorizontalConnectingLineOf property value for the Line.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.SetIsHorizontalConnectingLineOf(System.Windows.Shapes.Line,Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Sets the value of the IsHorizontalConnectingLineOf attached property

+            to a specified Line.

+            </summary>

+            <param name="element">

+            The Line to which the attached property is written.

+            </param>

+            <param name="value">

+            The needed IsHorizontalConnectingLineOf value.

+            </param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.IsHorizontalConnectingLineOfProperty">

+            <summary>

+            Identifies the IsHorizontalConnectingLineOf dependency property.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.OnIsHorizontalConnectingLineOfPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            IsHorizontalConnectingLineOfProperty property changed handler.

+            </summary>

+            <param name="d">

+            Line that changed its IsHorizontalConnectingLineOf TreeViewItem.

+            </param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.GetIsExpanderButtonOf(System.Windows.Controls.Primitives.ToggleButton)">

+            <summary>

+            Gets the value of the IsExpanderButtonOf attached property for a

+            specified ToggleButton.

+            </summary>

+            <param name="element">

+            The ToggleButton from which the property value is read.

+            </param>

+            <returns>

+            The IsExpanderButtonOf property value for the ToggleButton.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.SetIsExpanderButtonOf(System.Windows.Controls.Primitives.ToggleButton,Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Sets the value of the IsExpanderButtonOf attached property to a

+            specified ToggleButton.

+            </summary>

+            <param name="element">

+            The ToggleButton to which the attached property is written.

+            </param>

+            <param name="value">The needed IsExpanderButtonOf value.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.IsExpanderButtonOfProperty">

+            <summary>

+            Identifies the IsExpanderButtonOf dependency property.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.OnIsExpanderButtonOfPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            IsExpanderButtonOfProperty property changed handler.

+            </summary>

+            <param name="d">

+            ToggleButton that changed its IsExpanderButtonOf TreeViewItem.

+            </param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.GetIsHeaderOf(System.Windows.FrameworkElement)">

+            <summary>

+            Gets the value of the IsHeaderOf attached property for a specified

+            FrameworkElement.

+            </summary>

+            <param name="element">

+            The FrameworkElement from which the property value is read.

+            </param>

+            <returns>

+            The IsHeaderOf property value for the FrameworkElement.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.SetIsHeaderOf(System.Windows.FrameworkElement,Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Sets the value of the IsHeaderOf attached property to a specified

+            FrameworkElement.

+            </summary>

+            <param name="element">

+            The FrameworkElement to which the attached property is written.

+            </param>

+            <param name="value">The needed IsHeaderOf value.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.IsHeaderOfProperty">

+            <summary>

+            Identifies the IsHeaderOf dependency property.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewConnectingLines.OnIsHeaderOfPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            IsHeaderOfProperty property changed handler.

+            </summary>

+            <param name="d">

+            FrameworkElement that changed its IsHeaderOf TreeViewItem.

+            </param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions">

+            <summary>

+            Provides useful extensions to TreeView and TreeViewItem instances.

+            </summary>

+            <QualityBand>Experimental</QualityBand>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetParentItemsControl(System.Windows.DependencyObject)">

+            <summary>

+            Get the parent ItemsControl of an element.

+            </summary>

+            <param name="element">The element.</param>

+            <returns>

+            The parent ItemsControl of an element, or null if not found.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetAncestorItemsControls(System.Windows.DependencyObject)">

+            <summary>

+            Get the ancestor ItemsControls of an element.

+            </summary>

+            <param name="element">The element.</param>

+            <returns>

+            The ancestor ItemsControls of an element.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetParentTreeViewItem(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Get the parent TreeViewItem of a TreeViewItem.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <returns>

+            The parent TreeViewItem if found, otherwise null.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="item" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetParentTreeView(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Get the parent TreeView of a TreeViewItem.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <returns>The parent TreeView if found, otherwise null.</returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="item" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetContainers(Microsoft.Silverlight.Testing.Controls.TreeView)">

+            <summary>

+            Get the TreeViewItem containers of a TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <returns>The TreeViewItem containers of a TreeView.</returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetContainers(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Get the child TreeViewItem containers of a TreeViewItem.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <returns>

+            The child TreeViewItem containers of a TreeViewItem.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="item" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetItemsAndContainers(Microsoft.Silverlight.Testing.Controls.TreeView)">

+            <summary>

+            Get the items and TreeViewItem containers of a TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <returns>

+            The items and TreeViewItem containers of a TreeView.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetItemsAndContainers(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Get the items and TreeViewItem containers of a TreeViewItem.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <returns>

+            The items and TreeViewItem containers of a TreeViewItem.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="item" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetDescendantContainers(Microsoft.Silverlight.Testing.Controls.TreeView)">

+            <summary>

+            Get the TreeViewItem containers of a TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <returns>The TreeViewItem containers of a TreeView.</returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetDescendantContainers(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Get the descendant TreeViewItem containers of a TreeViewItem.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <returns>

+            The descendant TreeViewItem containers of a TreeViewItem.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="item" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetDescendantItemsAndContainers(Microsoft.Silverlight.Testing.Controls.TreeView)">

+            <summary>

+            Get the descendant items and TreeViewItem containers of a TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <returns>

+            The descendant items and TreeViewItem containers of a TreeView.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetDescendantItemsAndContainers(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Get the descendant items and TreeViewItem containers of a

+            TreeViewItem.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <returns>

+            The descendant items and TreeViewItem containers of a TreeViewItem.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="item" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetDescendantItemsAndContainersIterator(System.Windows.Controls.ItemsControl)">

+            <summary>

+            Get the items and TreeViewItem containers of a TreeView or

+            TreeViewItem.

+            </summary>

+            <param name="control">The TreeView or TreeViewItem.</param>

+            <returns>

+            The items and TreeViewItem containers of a TreeView or TreeViewItem.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetSiblingItemsAndContainers(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Get the sibling items and containers of the item.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <returns>The sibling items and containers of the item.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetContainersFromItem(Microsoft.Silverlight.Testing.Controls.TreeView,System.Object)">

+            <summary>

+            Get the TreeViewItems already created that are used to represent the

+            given item.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <param name="item">The item being represented.</param>

+            <returns>

+            A sequence of TreeViewItems that represent the given item, or an

+            empty sequence if none were found.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetContainerFromItem(Microsoft.Silverlight.Testing.Controls.TreeView,System.Object)">

+            <summary>

+            Get the TreeViewItem already created that is used to represent the

+            given item.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <param name="item">The item being represented.</param>

+            <returns>

+            The TreeViewItems that represents the given item, or null if no

+            container was found.

+            </returns>

+            <remarks>

+            If multiple TreeViewItems represent the same item, the first item

+            found via a breadth-first search will be used.

+            </remarks>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetPath(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Gets a path of items and TreeViewItem containers from the

+            TreeViewItem to the root of the TreeView.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <returns>

+            A path of items and TreeViewItem containers from the TreeViewItem to

+            the root of the TreeView.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="item" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetPathIterator(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Gets a path of items and TreeViewItem containers from the

+            TreeViewItem to the root of the TreeView.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <returns>

+            A path of items and TreeViewItem containers from the TreeViewItem to

+            the root of the TreeView.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetItem(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Get the item wrapped by this container.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <returns>

+            The item wrapped by the container, or null if not found.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="item" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetParentItem(Microsoft.Silverlight.Testing.Controls.TreeView,System.Object)">

+            <summary>

+            Get the item of the parent container for a specified

+            <paramref name="item" />.

+            </summary>

+            <param name="view">

+            The TreeView containing the <paramref name="item" />.

+            </param>

+            <param name="item">The child item.</param>

+            <returns>

+            The item of the parent container for the specified

+            <paramref name="item" />, or null if not found.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetIsRoot(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Gets a value indicating whether the TreeViewItem is a root of its

+            TreeView.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <returns>

+            A value indicating whether the TreeViewItem is a root of its

+            TreeView.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="item" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetIsLeaf(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Gets a value indicating whether the TreeViewItem is a leaf in its

+            TreeView.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <returns>

+            A value indicating whether the TreeViewItem is a leaf in its

+            TreeView.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="item" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetDepth(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Gets the depth of a TreeViewItem in its TreeView (using a zero-based

+            index).

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <returns>

+            The depth of a TreeViewItem in its TreeView (using a zero-based

+            index).

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="item" /> is null.

+            </exception>

+            <exception cref="T:System.ArgumentException">

+            <paramref name="item" /> is not in a TreeView.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetSelectedContainer(Microsoft.Silverlight.Testing.Controls.TreeView)">

+            <summary>

+            Get the selected TreeViewItem in a TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <returns>

+            The selected TreeViewItem, or null if no selected item found.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.SetSelectedContainer(Microsoft.Silverlight.Testing.Controls.TreeView,Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Sets the selected TreeViewItem of a TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <param name="item">The TreeViewItem to select.</param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.ClearSelection(Microsoft.Silverlight.Testing.Controls.TreeView)">

+            <summary>

+            Clear the selection of the TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.SelectItem(Microsoft.Silverlight.Testing.Controls.TreeView,System.Object)">

+            <summary>

+            Select an item in the TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <param name="item">The item to select.</param>

+            <returns>

+            A value indicating whether the item was successfully set as the

+            TreeView's SelectedItem.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetSelectedPath(Microsoft.Silverlight.Testing.Controls.TreeView)">

+            <summary>

+            Gets the path to the TreeView's selected item.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <returns>The path to the TreeView's selected item.</returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.ExpandOrCollapseAll(Microsoft.Silverlight.Testing.Controls.TreeViewItem,System.Boolean,System.Int32,System.Nullable{System.Int32})">

+            <summary>

+            Recursively expand or collapse the TreeViewItem and all of its

+            descendants.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <param name="expand">

+            A value indicating whether to expand or collapse.

+            </param>

+            <param name="depth">

+            The number of levels that have already been collapsed or expanded.

+            This is used in conjunction with the optional maximumDepth to only

+            expand a specified number of layers.

+            </param>

+            <param name="maximumDepth">

+            An optional depth that defines the number of layers to expand or

+            collapse.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.ExpandOrCollapseAll(Microsoft.Silverlight.Testing.Controls.TreeView,System.Boolean,System.Nullable{System.Int32})">

+            <summary>

+            Expand or collapse all of the descendants of the TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <param name="expand">

+            A value indicating whether to expand or collapse.

+            </param>

+            <param name="maximumDepth">

+            An optional depth that defines the number of layers to expand or

+            collapse.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.ExpandAll(Microsoft.Silverlight.Testing.Controls.TreeView)">

+            <summary>

+            Expand all of the items in a TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.CollapseAll(Microsoft.Silverlight.Testing.Controls.TreeView)">

+            <summary>

+            Collapse all of the items in a TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.ExpandToDepth(Microsoft.Silverlight.Testing.Controls.TreeView,System.Int32)">

+            <summary>

+            Expand a specified number of layers in a TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <param name="depth">The number of layers to expand.</param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.ExpandPathToRoot(Microsoft.Silverlight.Testing.Controls.TreeViewItem,System.Boolean)">

+            <summary>

+            Expand a path from the given item to the root of it's TreeView.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <param name="collapseSiblings">

+            A value indicating whether to collapse siblings while expanding the

+            path.  This will result in only the path from the item to the root

+            being expanded.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.ExpandPath(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Expand a path from the TreeViewItem to the root of the TreeView.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="item" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.ExpandSelectedPath(Microsoft.Silverlight.Testing.Controls.TreeView)">

+            <summary>

+            Expand the path from the SelectedItem to the root of the TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.CollapseAllButSelectedPath(Microsoft.Silverlight.Testing.Controls.TreeView)">

+            <summary>

+            Collapse all TreeViewItems except those along the path from the

+            TreeView's SelectedItem to the root of the TreeView.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.ExpandPath(Microsoft.Silverlight.Testing.Controls.TreeView,System.Object[])">

+            <summary>

+            Expand the given path of items starting from the TreeView's root.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <param name="items">

+            The sequence of items corresponding to the path to expand.

+            </param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="items" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.ExpandPath``1(Microsoft.Silverlight.Testing.Controls.TreeView,System.Collections.Generic.IEnumerable{``0})">

+            <summary>

+            Expand the given path of items starting from the TreeView's root.

+            </summary>

+            <typeparam name="T">

+            The type of items provided in <paramref name="items" />.

+            </typeparam>

+            <param name="view">The TreeView.</param>

+            <param name="items">

+            The sequence of items corresponding to the path to expand.

+            </param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="items" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.ExpandPath``1(Microsoft.Silverlight.Testing.Controls.TreeView,System.Func{System.Object,``0},``0[])">

+            <summary>

+            Expand the given path of items starting from the TreeView's root.

+            </summary>

+            <typeparam name="T">

+            The type of items provided in <paramref name="items" />.

+            </typeparam>

+            <param name="view">The TreeView.</param>

+            <param name="comparisonSelector">

+            A function that takes a TreeViewItem's item and returns a value to

+            compare against elements of the given <paramref name="items" />.

+            The item itself will be used if 

+            <paramref name="comparisonSelector" /> is null.

+            </param>

+            <param name="items">

+            The sequence of items corresponding to the path to expand.

+            </param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="items" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.ExpandPath``1(Microsoft.Silverlight.Testing.Controls.TreeView,System.Func{System.Object,``0},System.Collections.Generic.IEnumerable{``0})">

+            <summary>

+            Expand the given path of items starting from the TreeView's root.

+            </summary>

+            <typeparam name="T">

+            The type of items provided in <paramref name="items" />.

+            </typeparam>

+            <param name="view">The TreeView.</param>

+            <param name="comparisonSelector">

+            A function that takes a TreeViewItem's item and returns a value to

+            compare against elements of the given <paramref name="items" />.

+            The item itself will be used if 

+            <paramref name="comparisonSelector" /> is null.

+            </param>

+            <param name="items">

+            The sequence of items corresponding to the path to expand.

+            </param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view" /> is null.

+            </exception>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="items" /> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetIsChecked(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Gets the value of the IsChecked attached property for a specified

+            TreeViewItem.

+            </summary>

+            <param name="element">

+            The TreeViewItem from which the property value is read.

+            </param>

+            <returns>

+            The IsChecked property value for the TreeViewItem.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.SetIsChecked(Microsoft.Silverlight.Testing.Controls.TreeViewItem,System.Nullable{System.Boolean})">

+            <summary>

+            Sets the value of the IsChecked attached property to a specified

+            TreeViewItem.

+            </summary>

+            <param name="element">

+            The TreeViewItem to which the attached property is written.

+            </param>

+            <param name="value">The needed IsChecked value.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.IsCheckedProperty">

+            <summary>

+            Identifies the IsChecked dependency property.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.OnIsCheckedPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            IsCheckedProperty property changed handler.

+            </summary>

+            <param name="d">The TreeViewItem that changed IsChecked.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetAssociatedCheckBox(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Gets the value of the AssociatedCheckBox attached property for a

+            specified TreeViewItem.

+            </summary>

+            <param name="element">

+            The TreeViewItem from which the property value is read.

+            </param>

+            <returns>

+            The AssociatedCheckBox property value for the TreeViewItem.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.SetAssociatedCheckBox(Microsoft.Silverlight.Testing.Controls.TreeViewItem,Microsoft.Silverlight.Testing.Controls.TreeViewItemCheckBox)">

+            <summary>

+            Sets the value of the AssociatedCheckBox attached property to a

+            specified TreeViewItem.

+            </summary>

+            <param name="element">

+            The TreeViewItem to which the attached property is written.

+            </param>

+            <param name="value">The needed AssociatedCheckBox value.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.AssociatedCheckBoxProperty">

+            <summary>

+            Identifies the AssociatedCheckBox dependency property.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.OnAssociatedCheckBoxPropertyChanged(System.Windows.DependencyObject,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            AssociatedCheckBoxProperty property changed handler.

+            </summary>

+            <param name="d">

+            The TreeViewItem that changed its AssociatedCheckBox.

+            </param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetCheckedItemsAndContainers(Microsoft.Silverlight.Testing.Controls.TreeView)">

+            <summary>

+            Get the sequence of items and containers with their IsChecked

+            property set to True.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <returns>

+            The sequence of items and containers with their IsChecked property

+            set to True.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.GetCheckedItemsAndContainers(Microsoft.Silverlight.Testing.Controls.TreeView,System.Boolean)">

+            <summary>

+            Get the sequence of items and containers with their IsChecked

+            property set to True.

+            </summary>

+            <param name="view">The TreeView.</param>

+            <param name="includeIndeterminate">

+            A value indicating whether to include TreeViewItems with an

+            indeterminate IsChecked value.

+            </param>

+            <returns>

+            The sequence of items and containers with their IsChecked property

+            set to True or also set to null if indeterminate values are

+            included.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="view"/> is null.

+            </exception>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.CancelIsCheckedChangedBubbling">

+            <summary>

+            Gets or sets a value indicating whether recursive calls to

+            OnIsCheckedPropertyChanged should ignore their notifications or

+            process them accordingly.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewExtensions.CancelIsCheckedChangedChildNotifications">

+            <summary>

+            Gets or sets a value indicating whether recursive calls to

+            OnIsCheckedPropertyChanged should update their children when their

+            IsChecked value has changed.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.TreeViewItemCheckBox">

+            <summary>

+            Represents a CheckBox whose value is associated with the

+            TreeViewExtensions.IsChecked attached property of TreeViewItems.

+            </summary>

+            <QualityBand>Experimental</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.TreeViewItemCheckBox._parent">

+            <summary>

+            The parent TreeViewItem of the CheckBox.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemCheckBox.#ctor">

+            <summary>

+            Initializes a new instance of the TreeViewItemCheckBox class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemCheckBox.AssociateParentTreeViewItem">

+            <summary>

+            Associate the parent TreeViewItem with the CheckBox.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemCheckBox.OnIsCheckedChanged(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Update the TreeViewItem's IsChecked property when this IsChecked

+            property is changed.

+            </summary>

+            <param name="sender">The CheckBox.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItemCheckBox.ParentTreeViewItem">

+            <summary>

+            Gets the parent TreeViewItem of the CheckBox.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.TreeViewItemConnectingLineInfo">

+            <summary>

+            Represents the necessary information to draw connecting lines in a

+            TreeViewItem.

+            </summary>

+            <QualityBand>Experimental</QualityBand>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemConnectingLineInfo.#ctor(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Initializes a new instance of the TreeViewItemConnectingLineInfo

+            class.

+            </summary>

+            <param name="item">The TreeViewItem.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemConnectingLineInfo.PositionConnectingLines">

+            <summary>

+            Position the connecting lines in the TreeViewItem.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemConnectingLineInfo.PositionVerticalConnectingLine">

+            <summary>

+            Position the vertical connecting line in the TreeViewItem.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItemConnectingLineInfo.Item">

+            <summary>

+            Gets the TreeViewItem.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItemConnectingLineInfo.VerticalConnectingLine">

+            <summary>

+            Gets or sets the vertical connecting line of the TreeViewItem.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItemConnectingLineInfo.HorizontalConnectingLine">

+            <summary>

+            Gets or sets the horizontal connecting line of the TreeViewItem.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItemConnectingLineInfo.ExpanderButton">

+            <summary>

+            Gets or sets the expander button of the TreeViewItem.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItemConnectingLineInfo.Header">

+            <summary>

+            Gets or sets the header of the TreeViewItem.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.TreeViewItemIndentationConverter">

+            <summary>

+            Used to convert TreeViewItems into a value based on their depth in

+            the TreeView.

+            </summary>

+            <QualityBand>Experimental</QualityBand>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemIndentationConverter.#ctor">

+            <summary>

+            Initializes a new instance of the TreeViewItemIndentationConverter

+            class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemIndentationConverter.Convert(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Convert a TreeViewItem into a value based on the depth of the item

+            in the TreeView.

+            </summary>

+            <param name="value">The TreeViewItem.</param>

+            <param name="targetType">

+            The indentation type to convert to (such as Thickness or double).

+            </param>

+            <param name="parameter">

+            The number of pixels to indent each level of the TreeView.  A

+            default value of 15.0 will be used if no parameter is provided.

+            </param>

+            <param name="culture">

+            The culture used to convert the TreeViewItem.

+            </param>

+            <returns>

+            A value based on the depth of the item in the TreeView.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemIndentationConverter.WrapIndentation(System.Double,System.Type)">

+            <summary>

+            Wrap the indentation in the desired type.

+            </summary>

+            <param name="indentation">

+            The number of pixels to indent the TreeViewItem.

+            </param>

+            <param name="targetType">

+            The indentation type to convert to (such as Thickness or double).

+            </param>

+            <returns>

+            A value based on the depth of the item in the TreeView.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemIndentationConverter.ConvertBack(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Convert an indentation back into a TreeViewItem.  This always throws

+            a NotSupportedException.

+            </summary>

+            <param name="value">The indentation.</param>

+            <param name="targetType">The type of the indentation.</param>

+            <param name="parameter">

+            The number of pixels to indent each level of the TreeView.

+            </param>

+            <param name="culture">

+            The culture used to convert the TreeViewItem.

+            </param>

+            <returns>Always throws a NotSupportedException.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.ValidateExtensions">

+            <summary>

+            A set of simple extension methods for applications.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ValidateExtensions.IfApplicationHost(System.Windows.Application)">

+            <summary>

+            Checks whether the application host object is not null.

+            </summary>

+            <param name="app">The application instance.</param>

+            <returns>Returns a value indicating whether the object is not null.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ValidateExtensions.IfApplicationHostSource(System.Windows.Application)">

+            <summary>

+            Checks whether the application host and its source object is not

+            null.

+            </summary>

+            <param name="app">The application instance.</param>

+            <returns>Returns a value indicating whether the object is not null.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.VisibilityConverter">

+            <summary>

+            A value converter for collapsing or showing elements.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.VisibilityConverter.Convert(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Convert a boolean value to a Visibility value.

+            </summary>

+            <param name="value">The value instance.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter is of type Visibility.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.VisibilityConverter.ConvertBack(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Support two-way databinding of the VisibilityConverter, converting 

+            Visibility to a bool.

+            </summary>

+            <param name="value">The value instance.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter is of type Visibility.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.VisibilityConverter.GetVisibilityMode(System.Object)">

+            <summary>

+            Determine the visibility mode based on a converter parameter. This

+            parameter is of type Visibility,and specifies what visibility value

+            to return when the boolean value is true.

+            </summary>

+            <param name="parameter">The parameter object.</param>

+            <returns>Returns a Visibility value.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.VisibilityConverter.IsVisibilityInverted(System.Object)">

+            <summary>

+            Determine whether or not visibility is inverted based on a converter

+            parameter. When the parameter is specified as Collapsed, that means

+            that when the boolean value is true, we should return Collapsed,

+            which is inverted.

+            </summary>

+            <param name="parameter">The parameter object.</param>

+            <returns>Returns a value indicating whether the visibility is 

+            inverted.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.VisualStates">

+            <summary>

+            Visual states helper code.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.VisualStates.GetImplementationRoot(System.Windows.DependencyObject)">

+            <summary>

+            Gets the implementation root of the Control.

+            </summary>

+            <param name="dependencyObject">The DependencyObject.</param>

+            <remarks>

+            Implements Silverlight's corresponding internal property on Control.

+            </remarks>

+            <returns>Returns the implementation root or null.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.VisualStates.TryGetVisualStateGroup(System.Windows.DependencyObject,System.String)">

+            <summary>

+            This method tries to get the named VisualStateGroup for the 

+            dependency object. The provided object's ImplementationRoot will be 

+            looked up in this call.

+            </summary>

+            <param name="dependencyObject">The dependency object.</param>

+            <param name="groupName">The visual state group's name.</param>

+            <returns>Returns null or the VisualStateGroup object.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions">

+            <summary>

+            Provides useful extensions for working with the visual tree.

+            </summary>

+            <remarks>

+            Since many of these extension methods are declared on types like

+            DependencyObject high up in the class hierarchy, we've placed them in

+            the Primitives namespace which is less likely to be imported for normal

+            scenarios.

+            </remarks>

+            <QualityBand>Experimental</QualityBand>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetVisualAncestors(System.Windows.DependencyObject)">

+            <summary>

+            Get the visual tree ancestors of an element.

+            </summary>

+            <param name="element">The element.</param>

+            <returns>The visual tree ancestors of the element.</returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="element"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetVisualAncestorsAndSelf(System.Windows.DependencyObject)">

+            <summary>

+            Get the visual tree ancestors of an element and the element itself.

+            </summary>

+            <param name="element">The element.</param>

+            <returns>

+            The visual tree ancestors of an element and the element itself.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="element"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetVisualAncestorsAndSelfIterator(System.Windows.DependencyObject)">

+            <summary>

+            Get the visual tree ancestors of an element and the element itself.

+            </summary>

+            <param name="element">The element.</param>

+            <returns>

+            The visual tree ancestors of an element and the element itself.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetVisualChildren(System.Windows.DependencyObject)">

+            <summary>

+            Get the visual tree children of an element.

+            </summary>

+            <param name="element">The element.</param>

+            <returns>The visual tree children of an element.</returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="element"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetVisualChildrenAndSelf(System.Windows.DependencyObject)">

+            <summary>

+            Get the visual tree children of an element and the element itself.

+            </summary>

+            <param name="element">The element.</param>

+            <returns>

+            The visual tree children of an element and the element itself.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="element"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetVisualChildrenAndSelfIterator(System.Windows.DependencyObject)">

+            <summary>

+            Get the visual tree children of an element and the element itself.

+            </summary>

+            <param name="element">The element.</param>

+            <returns>

+            The visual tree children of an element and the element itself.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetVisualDescendants(System.Windows.DependencyObject)">

+            <summary>

+            Get the visual tree descendants of an element.

+            </summary>

+            <param name="element">The element.</param>

+            <returns>The visual tree descendants of an element.</returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="element"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetVisualDescendantsAndSelf(System.Windows.DependencyObject)">

+            <summary>

+            Get the visual tree descendants of an element and the element

+            itself.

+            </summary>

+            <param name="element">The element.</param>

+            <returns>

+            The visual tree descendants of an element and the element itself.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="element"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetVisualDescendantsAndSelfIterator(System.Windows.DependencyObject)">

+            <summary>

+            Get the visual tree descendants of an element and the element

+            itself.

+            </summary>

+            <param name="element">The element.</param>

+            <returns>

+            The visual tree descendants of an element and the element itself.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetVisualSiblings(System.Windows.DependencyObject)">

+            <summary>

+            Get the visual tree siblings of an element.

+            </summary>

+            <param name="element">The element.</param>

+            <returns>The visual tree siblings of an element.</returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="element"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetVisualSiblingsAndSelf(System.Windows.DependencyObject)">

+            <summary>

+            Get the visual tree siblings of an element and the element itself.

+            </summary>

+            <param name="element">The element.</param>

+            <returns>

+            The visual tree siblings of an element and the element itself.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="element"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetBoundsRelativeTo(System.Windows.FrameworkElement,System.Windows.UIElement)">

+            <summary>

+            Get the bounds of an element relative to another element.

+            </summary>

+            <param name="element">The element.</param>

+            <param name="otherElement">

+            The element relative to the other element.

+            </param>

+            <returns>

+            The bounds of the element relative to another element, or null if

+            the elements are not related.

+            </returns>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="element"/> is null.

+            </exception>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="otherElement"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.InvokeOnLayoutUpdated(System.Windows.FrameworkElement,System.Action)">

+            <summary>

+            Perform an action when the element's LayoutUpdated event fires.

+            </summary>

+            <param name="element">The element.</param>

+            <param name="action">The action to perform.</param>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="element"/> is null.

+            </exception>

+            <exception cref="T:System.ArgumentNullException">

+            <paramref name="action"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetLogicalChildren(System.Windows.FrameworkElement)">

+            <summary>

+            Retrieves all the logical children of a framework element using a 

+            breadth-first search. For performance reasons this method manually 

+            manages the stack instead of using recursion.

+            </summary>

+            <param name="parent">The parent framework element.</param>

+            <returns>The logical children of the framework element.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualTreeExtensions.GetLogicalDescendents(System.Windows.FrameworkElement)">

+            <summary>

+            Retrieves all the logical descendents of a framework element using a 

+            breadth-first search. For performance reasons this method manually 

+            manages the stack instead of using recursion.

+            </summary>

+            <param name="parent">The parent framework element.</param>

+            <returns>The logical children of the framework element.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.CodeCoverage">

+            <summary>

+            The CodeCoverage class is used to collect code coverage information from

+            assemblies that have been instrumented to call the Visit function at the

+            beginning of every basic block.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.CodeCoverage._blocks">

+            <summary>

+            A bit array used to track which basic blocks have been executed.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.CodeCoverage._hitBlocks">

+            <summary>

+            A counter of the hit blocks.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.CodeCoverage.Visit(System.UInt32)">

+            <summary>

+            Record that a basic block is being executed.

+            </summary>

+            <param name="id">Id of the basic block.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.CodeCoverage.GetCoverageData">

+            <summary>

+            Get the coverage data serialized as a string for easy transport.

+            </summary>

+            <remarks>Previous releases of the framework used a simplistic bit

+            list, this release updates the coverage reporting endpoint to an

+            alternate version that ends in base 64. This maintains test runner

+            compatibility with previous official releases.</remarks>

+            <returns>Coverage data serialized as a string.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.CodeCoverage.HitBlockCount">

+            <summary>

+            Gets the current number of hit blocks.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.CodeCoverage.BlockCount">

+            <summary>

+            Gets the current size of the blocks counter. This is not actually 

+            the number of hit blocks, but it should return 0 always except 

+            when at least one block is hit.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.CustomFrameworkUnitTest">

+            <summary>

+            Base class for test cases that use special functionality of the 

+            Microsoft.Silverlight.Testing unit test framework.

+            

+            Tests that derive from CustomTest in most cases will not be source- or 

+            functionality- compatible with the more advanced desktop Visual Studio 

+            Test Team environment and harnesses.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.CustomFrameworkUnitTest.HandleException(System.Exception)">

+            <summary>

+            Process an exception using the test engine logic for 

+            ExpectedExceptions and logging the exception if needed.

+            </summary>

+            <param name="ex">Exception object.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.CustomFrameworkUnitTest.InterceptUnhandledExceptions">

+            <summary>

+            Gets or sets a value indicating whether global unhandled exceptions 

+            should be intercepted by the test harness.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.CustomFrameworkUnitTest.UnitTestHarness">

+            <summary>

+            Gets or sets the unit test harness instance.  Hidden from the VS 

+            browser as test developers should not need to use this property.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.CustomFrameworkUnitTest.WorkItemContainer">

+            <summary>

+            Gets the current test task container.

+            </summary>

+            <returns>The current container for the test's tasks.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.DataManager">

+            <summary>

+            Manages the unit test status and model by attaching to the unit test

+            harness instance. Validates that all key logging can be done without

+            special hooks inside of the unit test harness implementation.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.DataManager._h">

+            <summary>

+            The unit test harness instance.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.DataManager._d">

+            <summary>

+            The test run data.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.DataManager._assemblyData">

+            <summary>

+            Map assembly metadata to data objects.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.DataManager._classData">

+            <summary>

+            Map test class metadata to data objects.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.DataManager._methodData">

+            <summary>

+            Map test metadata to data objects.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.DataManager._lastResult">

+            <summary>

+            Backing field for the last result.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.DataManager._lastFailingResult">

+            <summary>

+            Backing field for the last failing result.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataManager.#ctor(Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new instance of the DataManager type.

+            </summary>

+            <param name="harness">The unit test harness instance.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataManager.Create(Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new instance of the DataManager.

+            </summary>

+            <param name="harness">The unit test harness instance.</param>

+            <returns>Returns a new instance of a DataManager class.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataManager.Hook">

+            <summary>

+            Connect to unit test harness events for processing and updating the

+            underlying unit test run model.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataManager.Unhook">

+            <summary>

+            Unhook from the unit test harness events.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataManager.OnTestRunStarting(System.Object,Microsoft.Silverlight.Testing.Harness.TestRunStartingEventArgs)">

+            <summary>

+            Process the starting of the test run.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataManager.OnTestClassStarting(System.Object,Microsoft.Silverlight.Testing.Harness.TestClassStartingEventArgs)">

+            <summary>

+            Process the test class starting event.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataManager.OnTestClassCompleted(System.Object,Microsoft.Silverlight.Testing.Harness.TestClassCompletedEventArgs)">

+            <summary>

+            Process the test class complete event.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataManager.OnTestMethodStarting(System.Object,Microsoft.Silverlight.Testing.Harness.TestMethodStartingEventArgs)">

+            <summary>

+            Process the start of a test method.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataManager.OnTestMethodCompleted(System.Object,Microsoft.Silverlight.Testing.Harness.TestMethodCompletedEventArgs)">

+            <summary>

+            Process the completion of test methods.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataManager.ProcessResult(Microsoft.Silverlight.Testing.Harness.ScenarioResult)">

+            <summary>

+            Process a result.

+            </summary>

+            <param name="result">The result data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataManager.GetAssemblyModel(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly)">

+            <summary>

+            Gets or creates the data model object for an assembly.

+            </summary>

+            <param name="assembly">The test assembly.</param>

+            <returns>Returns the data object.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataManager.GetClassModel(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass)">

+            <summary>

+            Gets or creates the data model object for a test class.

+            </summary>

+            <param name="testClass">The test class.</param>

+            <returns>Returns the data object.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataManager.GetMethodModel(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod,Microsoft.Silverlight.Testing.Client.TestClassData)">

+            <summary>

+            Gets or creates the data model object for a test method.

+            </summary>

+            <param name="testMethod">The test method.</param>

+            <param name="parentTestClass">The parent test class data object.</param>

+            <returns>Returns the data object.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.DataManager.UnitTestHarness">

+            <summary>

+            Gets the unit test harness instance.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.DataManager.Data">

+            <summary>

+            Gets the unit test model.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.TestAssemblyData">

+            <summary>

+            A data object storing the hierarchical results for a test assembly in a

+            test run.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.PropertyChangedBase">

+            <summary>

+            A base class for model objects that implement the property

+            changed interface, to simplify calling the change handlers,

+            and cache the underlying event argument instances.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.PropertyChangedBase._argumentInstances">

+            <summary>

+            A static set of change argument instances, eventually

+            storing one argument instance for each property name to

+            reduce churn at runtime.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.PropertyChangedBase.NotifyPropertyChanged(System.String)">

+            <summary>

+            Notify any listeners that the property value has changed.

+            </summary>

+            <param name="propertyName">The property name.</param>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Client.PropertyChangedBase.PropertyChanged">

+            <summary>

+            The property changed event.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.IProvideResultReports">

+            <summary>

+            A type that provides a string result report.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.IProvideResultReports.GetResultReport">

+            <summary>

+            Generates a simple text result report for the metadata.

+            </summary>

+            <returns>Reports a text report.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestAssemblyData.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly)">

+            <summary>

+            Initializes a new instance of the TestAssemblyData type.

+            </summary>

+            <param name="testAssembly">The test assembly metadata.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestAssemblyData._expanded">

+            <summary>

+            Backing field for the expanded property.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestAssemblyData._passed">

+            <summary>

+            Backing field for a passed value.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestAssemblyData._classes">

+            <summary>

+            Backing store for the set of test class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestAssemblyData.GetResultReport">

+            <summary>

+            Retrieves the results report.

+            </summary>

+            <returns>Returns a string containing the report.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestAssemblyData.IsExpanded">

+            <summary>

+            Gets or sets a value indicating whether the item is expanded in

+            a hierarchical display.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestAssemblyData.IsChecked">

+            <summary>

+            Gets or sets the checked value. Don't think this is actually used.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestAssemblyData.Passed">

+            <summary>

+            Gets or sets a value indicating whether the test passed. If failed,

+            will propagate to the parent metadata object.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestAssemblyData.Name">

+            <summary>

+            Gets the name of the assembly.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestAssemblyData.TestClasses">

+            <summary>

+            Gets an observable collection of test class data objects.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.TestMethodData">

+            <summary>

+            A data object that generates property change notifications and can

+            be used for rich data binding to test results. Does keep a reference

+            to all results.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestMethodData._metadata">

+            <summary>

+            Stores the test method metadata.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestMethodData._parent">

+            <summary>

+            Parent data object.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestMethodData._isRunning">

+            <summary>

+            A value indicating whether the test is currently executing.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestMethodData._result">

+            <summary>

+            The test outcome.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestMethodData._previous">

+            <summary>

+            Backing field for linked data.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestMethodData._next">

+            <summary>

+            Backing field for linked data.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestMethodData._previousFailure">

+            <summary>

+            Backing field for linked data.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestMethodData._nextFailure">

+            <summary>

+            Backing field for linked data.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestMethodData.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod,Microsoft.Silverlight.Testing.Client.TestClassData)">

+            <summary>

+            Initializes a new instance of the TestMethodData type.

+            </summary>

+            <param name="testMethod">The test method metadata.</param>

+            <param name="parent">The test class that is the parent object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestMethodData.CheckForKnownBugs">

+            <summary>

+            Runs through the metadata for bugs.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestMethodData._knownBugs">

+            <summary>

+            Backing field for known bugs.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestMethodData._fixedBugs">

+            <summary>

+            Backing field for bugs that are marked fixed.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestMethodData.EvaluateNotable">

+            <summary>

+            Calculates whether the item is considered "notable", in that it

+            should have a visual cue or hint for the user.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestMethodData._isNotable">

+            <summary>

+            Stores a value indicating whether the result is notable.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestMethodData._checked">

+            <summary>

+            Backing field for the checked property.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestMethodData._expanded">

+            <summary>

+            Backing field for the expanded property.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestMethodData.GetResultReport">

+            <summary>

+            Retrieves the results report.

+            </summary>

+            <returns>Returns a string containing the report.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.Result">

+            <summary>

+            Gets or sets the result of the test method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.KnownBugs">

+            <summary>

+            Gets the known bugs for display in the UI.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.FixedBugs">

+            <summary>

+            Gets the fixed bugs for display.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.SimplifiedExpectedExceptionName">

+            <summary>

+            Gets the expected exception name for a negative test, if any.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.SimplifiedExceptionStackTrace">

+            <summary>

+            Gets a simplified exception stack trace that omits the trace below

+            the invoke of the test method by the test framework.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.SimplifiedExceptionName">

+            <summary>

+            Gets the short, simple name of the exception type recorded in the

+            test result, if any.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.HasOutcome">

+            <summary>

+            Gets a value indicating whether the method has results.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.Passed">

+            <summary>

+            Gets a value indicating whether the method has passed. Returns 

+            true until there is a result.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.IsRunning">

+            <summary>

+            Gets or sets a value indicating whether the test method is running.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.IsNotable">

+            <summary>

+            Gets or sets a value indicating whether the result is notable. 

+            Notable is defined as either currently running, or not having 

+            passed. This can allow a user interface to react to an 

+            interesting result.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.Parent">

+            <summary>

+            Gets the parent data object.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.Metadata">

+            <summary>

+            Gets an instance of the actual metadata object.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.Name">

+            <summary>

+            Gets the name of the test method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.HasDescriptionVisibility">

+            <summary>

+            Gets a visibility value to allow for easy showing or

+            hiding of a user interface component that displays the

+            description.

+            </summary>

+            <returns>Returns a visibility value.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.ReadableElapsedTime">

+            <summary>

+            Gets the elapsed time in a readable format.

+            </summary>

+            <returns>Returns a string of the readable time elapsed.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.Description">

+            <summary>

+            Gets the description of the test method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.IsChecked">

+            <summary>

+            Gets or sets a value indicating whether the item is checked in the

+            user interface.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.IsExpanded">

+            <summary>

+            Gets or sets a value indicating whether the item is expanded in

+            a hierarchical display.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.PreviousResult">

+            <summary>

+            Gets or sets the previous result.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.NextResult">

+            <summary>

+            Gets or sets the next result.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.PreviousFailingResult">

+            <summary>

+            Gets or sets the previous failing result.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestMethodData.NextFailingResult">

+            <summary>

+            Gets or sets the next failing result.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.CodeCoverageProvider">

+            <summary>

+            A provider of code coverage information to an external process.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.ProviderBase">

+            <summary>

+            The base class for test service providers.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.ProviderBase.#ctor(Microsoft.Silverlight.Testing.Harness.TestServiceProvider,System.String)">

+            <summary>

+            Initializes a new base provider class.

+            </summary>

+            <param name="provider">The owning test service provider.</param>

+            <param name="displayName">The display name of the service.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.ProviderBase.Initialize">

+            <summary>

+            Initializes the provider.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.ProviderBase.IncrementBusyServiceCounter">

+            <summary>

+            Increments the busy service counter.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.ProviderBase.DecrementBusyServiceCounter">

+            <summary>

+            Decrements the busy service counter.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.ProviderBase.InvokeMethod(System.String,System.Object[])">

+            <summary>

+            Invokes a method on this provider using reflection.

+            </summary>

+            <param name="methodName">The name of the method.</param>

+            <param name="parameters">The optional parameters.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.ProviderBase.OnInitializeCompleted">

+            <summary>

+            Call the InitializeCompleted event.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.ProviderBase.Callback(System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult},Microsoft.Silverlight.Testing.Service.ServiceResult)">

+            <summary>

+            Performs a callback.  Null action and/or result are permitted.

+            </summary>

+            <param name="action">The optional callback action.</param>

+            <param name="result">The result to pass back.</param>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Service.ProviderBase.InitializeCompleted">

+            <summary>

+            Event fired once initialization is complete.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.ProviderBase.DisplayName">

+            <summary>

+            Gets the display name for the provider.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.ProviderBase.TestService">

+            <summary>

+            Gets the owning test service.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.ProviderBase.Initialized">

+            <summary>

+            Gets a value indicating whether the provider has been initialized 

+            yet.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.CodeCoverageProvider.#ctor(Microsoft.Silverlight.Testing.Harness.TestServiceProvider)">

+            <summary>

+            Initializes a new code coverage provider.

+            </summary>

+            <param name="testService">The test service.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.CodeCoverageProvider.SaveCoverageData(System.String,System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult})">

+            <summary>

+            Save string-based code coverage data.

+            </summary>

+            <param name="data">The code coverage data, as a string.</param>

+            <param name="callback">The callback action.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.EnvironmentProvider">

+            <summary>

+            A provider of environment variables and environmental information that 

+            uses the test service provider infrastructure.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.EnvironmentProvider.#ctor(Microsoft.Silverlight.Testing.Harness.TestServiceProvider)">

+            <summary>

+            Initializes a new environment provider.

+            </summary>

+            <param name="testService">The test service.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.EnvironmentProvider.GetEnvironmentVariable(System.String,System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult})">

+            <summary>

+            Retrieve an environment variable from the system.

+            </summary>

+            <param name="name">The variable name.</param>

+            <param name="callback">The callback action.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Extensions">

+            <summary>

+            Miscellaneous internal extension methods.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Extensions.TryGetAssemblyAttribute``1(System.Reflection.Assembly,``0@)">

+            <summary>

+            Attempts to retrieve a custom assembly attribute.

+            </summary>

+            <typeparam name="T">The type of attribute to retrieve.</typeparam>

+            <param name="assembly">The assembly reference.</param>

+            <param name="attribute">An out attribute reference.</param>

+            <returns>Returns true if the attribute is found.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Extensions.ToTransformedDictionary``3(System.Collections.Generic.IEnumerable{``0},System.Func{``0,``1},System.Func{``0,``2})">

+            <summary>

+            Transform the XElement into a dictionary of key/value pairs.

+            </summary>

+            <typeparam name="T">The type of enumeration.</typeparam>

+            <typeparam name="K">The key type.</typeparam>

+            <typeparam name="R">The value type.</typeparam>

+            <param name="that">The root enumerable.</param>

+            <param name="keySelector">The key selector.</param>

+            <param name="itemSelector">The item selector.</param>

+            <returns>Returns a new dictionary.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.IsolatedStorageSettingsProvider">

+            <summary>

+            A type that stores global settings in the isolated storage for the 

+            application. An implementation of the <see cref="T:Microsoft.Silverlight.Testing.Service.SettingsProvider"/> 

+            type.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.SettingsProvider">

+            <summary>

+            A provider of string dictionary values.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SettingsProvider.#ctor(Microsoft.Silverlight.Testing.Harness.TestServiceProvider)">

+            <summary>

+            Initializes a new SettingsProvider object.

+            </summary>

+            <param name="testService">The test service.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SettingsProvider.#ctor(Microsoft.Silverlight.Testing.Harness.TestServiceProvider,System.String)">

+            <summary>

+            Initializes a new SettingsProvider object.

+            </summary>

+            <param name="testService">The test service.</param>

+            <param name="serviceName">The service name.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SettingsProvider.SaveSettings(System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult})">

+            <summary>

+            Saves the settings.

+            </summary>

+            <remarks>Classes that inherit from SettingsProvider: hide this 

+            function.  Do not call up through to this base method.</remarks>

+            <param name="callback">The service callback.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.SettingsProvider.Settings">

+            <summary>

+            Gets the settings dictionary.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.SettingsProvider.IsReadOnly">

+            <summary>

+            Gets a value indicating whether the settings are read-only.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.SettingsProvider.SourceName">

+            <summary>

+            Gets the settings source for end-user display.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.IsolatedStorageSettingsProvider.TestFrameworkSettingsKeyName">

+            <summary>

+            The unique key used for storing the test framework's settings 

+            dictionary.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.IsolatedStorageSettingsProvider._settings">

+            <summary>

+            The underlying settings object.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.IsolatedStorageSettingsProvider.#ctor(Microsoft.Silverlight.Testing.Harness.TestServiceProvider)">

+            <summary>

+            Initializes a new isolated storage settings provider.

+            </summary>

+            <param name="testService">The test service instance.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.IsolatedStorageSettingsProvider.Initialize">

+            <summary>

+            Initializes the isolated storage settings provider.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.IsolatedStorageSettingsProvider.SaveSettings(System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult})">

+            <summary>

+            Saves the current settings values.

+            </summary>

+            <param name="callback">The service completion callback.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.IsolatedStorageSettingsProvider.LoadSettings">

+            <summary>

+            Recalls the stored settings values from isolated storage.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.IsolatedStorageSettingsProvider.InitializeSettings">

+            <summary>

+            Initialize the isolated storage application settings object.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.ServiceResult">

+            <summary>

+            Result object for asynchronous test service response.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.ServiceResult.CreateExceptionalResult(System.Exception)">

+            <summary>

+            Creates a new ServiceResult object for a failed result, the 

+            sets the exception.

+            </summary>

+            <param name="except">The Exception object.</param>

+            <returns>Returns a new ServiceResult with the Exception set.</returns>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.ServiceResult._result">

+            <summary>

+            The result LINQ element.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.ServiceResult.#ctor">

+            <summary>

+            Initializes a new instance of the ServiceResult class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.ServiceResult.ProcessResponse">

+            <summary>

+            Process the response text.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.ServiceResult.TryGetElement">

+            <summary>

+            Attempt to process and return the root element of a successful 

+            request. Returns null if there was an Exception.

+            </summary>

+            <returns>The root XML element of the response.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.ServiceResult.SetResult(Microsoft.Silverlight.Testing.Service.SimpleXElement)">

+            <summary>

+            Sets the result.

+            </summary>

+            <param name="result">The LINQ element for the result.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.ServiceResult.Processed">

+            <summary>

+            Gets or sets a value indicating whether the result has been 

+            processed.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.ServiceResult.Exception">

+            <summary>

+            Gets or sets the exception intercepted or generated during the 

+            request or 

+            processing timeframe.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.ServiceResult.Element">

+            <summary>

+            Gets the root XElement of the test service result.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.ServiceResult.Successful">

+            <summary>

+            Gets a value indicating whether the request was successful.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.ServiceType">

+            <summary>

+            The type of test service in use.  Used by the more advanced service 

+            scenarios in SilverlightTestServiceProvider.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.ServiceType.None">

+            <summary>

+            No service, or unknown service type.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.ServiceType.Direct">

+            <summary>

+            A direct connection, be it the file system, isolated storage, or 

+            similar.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.ServiceType.WebService">

+            <summary>

+            A web service.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.SilverlightTestService">

+            <summary>

+            The Silverlight test service provider is built for compilation with 

+            Silverlight builds of the test framework.  Populates with the important 

+            providers for web browser-hosted test runs.

+            </summary>

+            <summary>

+            The Silverlight test service provider is built for compilation with 

+            Silverlight builds of the test framework.  Populates with the important 

+            providers for web browser-hosted test runs.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestServiceProvider">

+            <summary>

+            A system that provides test services.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestServiceProvider._services">

+            <summary>

+            The dictionary of services registered with this provider instance.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.#ctor">

+            <summary>

+            Initializes a new test service provider instance.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.Initialize">

+            <summary>

+            Initializes the provider and all of its test services.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.InitializeAllServices">

+            <summary>

+            Initialize all services and features synchronously.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.RegisterService(Microsoft.Silverlight.Testing.Service.TestServiceFeature,Microsoft.Silverlight.Testing.Service.ProviderBase)">

+            <summary>

+            Register a new service that the test service should expose.

+            </summary>

+            <param name="feature">Known feature type.</param>

+            <param name="serviceInstance">Instance of the feature's 

+            <see cref="T:Microsoft.Silverlight.Testing.Service.ProviderBase"/> type.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.RegisterService(System.String,Microsoft.Silverlight.Testing.Service.ProviderBase)">

+            <summary>

+            Register a new service that the test service should expose.

+            </summary>

+            <param name="featureName">String name of the feature if the known 

+            enum value does not exist.</param>

+            <param name="serviceInstance">Instance of the feature's 

+            <see cref="T:Microsoft.Silverlight.Testing.Service.ProviderBase"/> type.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.UnregisterService(Microsoft.Silverlight.Testing.Service.TestServiceFeature)">

+            <summary>

+            Unregisters a feature.

+            </summary>

+            <param name="feature">Known feature type.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.UnregisterService(System.String)">

+            <summary>

+            Unregisters a feature.

+            </summary>

+            <param name="featureName">Known feature type string.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.HasService(Microsoft.Silverlight.Testing.Service.TestServiceFeature)">

+            <summary>

+            Check if a requested feature is supported by the test service 

+            provider.

+            </summary>

+            <param name="feature">Feature of interest.</param>

+            <returns>A value indicating whether the feature exists.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.HasService(System.String)">

+            <summary>

+            Check if a requested feature is supported by the test service 

+            provider.

+            </summary>

+            <param name="featureName">Feature of interest.</param>

+            <returns>A value indicating whether the feature exists.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.GetService``1(Microsoft.Silverlight.Testing.Service.TestServiceFeature)">

+            <summary>

+            Retrieve a feature.  An exception will be thrown if the service 

+            does not exist.

+            </summary>

+            <typeparam name="TService">Type of a service, ProviderBase.</typeparam>

+            <param name="feature">The feature of interest.</param>

+            <returns>Returns the feature, cast properly.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.GetService(Microsoft.Silverlight.Testing.Service.TestServiceFeature)">

+            <summary>

+            Retrieve a feature.

+            </summary>

+            <param name="feature">Feature of interest.</param>

+            <returns>The feature's provider.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.GetService(System.String)">

+            <summary>

+            Retrieve a feature.

+            </summary>

+            <param name="featureName">Feature of interest.</param>

+            <returns>The service or null if one was not present.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.RequireService(Microsoft.Silverlight.Testing.Harness.TestServiceProvider,System.Type)">

+            <summary>

+            Require a feature, or throw an exception if it isn't available.

+            </summary>

+            <param name="feature">Feature of interest.</param>

+            <param name="requiredType">The required type.</param>

+            <returns>The service or null if one was not present.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.RequireService(System.String,System.Type)">

+            <summary>

+            Require a feature, or throw an exception if it isn't available.

+            </summary>

+            <param name="featureName">Feature of interest.</param>

+            <param name="requiredType">The required type.</param>

+            <returns>The service or null if one was not present.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.RequireService(Microsoft.Silverlight.Testing.Service.TestServiceFeature)">

+            <summary>

+            Require a feature or interest.

+            </summary>

+            <param name="feature">Feature of interest.</param>

+            <returns>The service or null if one was not present.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.RequireService(System.String)">

+            <summary>

+            Requires a service.

+            </summary>

+            <param name="featureName">Feature of interest.</param>

+            <returns>The service or null if one was not present.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.RequireServiceInternal(System.Object)">

+            <summary>

+            Check for and required the presence of a service.  Throws an 

+            InvalidOperationException message if the service is unavailable.

+            </summary>

+            <param name="feature">Feature of interest.</param>

+            <returns>The service or null if one was not present.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.RequireServiceInternal(System.Object,System.Type)">

+            <summary>

+            Require a specific feature, and that it can be cast properly.

+            </summary>

+            <param name="feature">Feature of interest.</param>

+            <param name="cast">The type to verify assignment for a cast.</param>

+            <returns>The service or null if one was not present.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.GetServiceInternal(System.Object)">

+            <summary>

+            Looks for a specific service.

+            </summary>

+            <param name="feature">Feature of interest.</param>

+            <returns>The service or null if one was not present.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.UniqueTestRunIdentifier">

+            <summary>

+            Gets or sets a unique test run identifier, if any is present.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestServiceProvider.BusyServiceReferenceCounter">

+            <summary>

+            Gets or sets an integer value that can be used to manage simple

+            reference counting services.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.SilverlightTestService._webService">

+            <summary>

+            The service verifier and information.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SilverlightTestService.#ctor">

+            <summary>

+            Initializes a new instance of the SilverlightTestService class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SilverlightTestService.#ctor(Microsoft.Silverlight.Testing.UnitTestSettings)">

+            <summary>

+            Initializes a new instance of the SilverlightTestService class.

+            </summary>

+            <param name="settings">Unit test settings to read the service path

+            and other information from.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SilverlightTestService.Initialize">

+            <summary>

+            Initializes the Silverlight test service.  Performs a service check 

+            if needed before initializing the other providers.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SilverlightTestService.SetCustomIdentification">

+            <summary>

+            Sets the custom ID information for the test run, if passed into 

+            the run.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SilverlightTestService.SetServicePath(Microsoft.Silverlight.Testing.UnitTestSettings)">

+            <summary>

+            Determine the service path to attempt to use, and prepares the 

+            verification object using those parameters.

+            </summary>

+            <param name="settings">Unit test settings object to try and read

+            settings from.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SilverlightTestService.AttemptServiceConnection">

+            <summary>

+            Pauses the initialization process to attempt a service connection. 

+            The result will alter the underlying ServiceType being used by 

+            this provider to ensure a fallback experience can be used.  

+            

+            This verification step will block the initialization and entire 

+            test run until it continues.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SilverlightTestService.ContinueInitialization">

+            <summary>

+            Continues the initialization process for the test service provider.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SilverlightTestService.PopulateProviders">

+            <summary>

+            Populates with the standard providers for Silverlight in-browser 

+            testing.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.SilverlightTestService.ServiceType">

+            <summary>

+            Gets the service type that is in use.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.SilverlightTestService.WebService">

+            <summary>

+            Gets the web service proxy.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.SilverlightTestService.ServiceVerifier">

+            <summary>

+            A special verification class used by SilverlightTestService.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.SilverlightTestService.ServiceVerifier.VerificationServiceName">

+            <summary>

+            The name of a simple 'ping' method exposed by the service.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SilverlightTestService.ServiceVerifier.Verify(System.Action,System.Action)">

+            <summary>

+            Attempts to verify the service connection.  Calls the proper 

+            success/failure Action once a verification result is possible.

+            </summary>

+            <param name="success">The Action to call upon connection 

+            verification.</param>

+            <param name="failure">An Action to call upon failure.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.SilverlightTestService.ServiceVerifier.Hostname">

+            <summary>

+            Gets or sets the service hostname.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.SilverlightTestService.ServiceVerifier.Port">

+            <summary>

+            Gets or sets the service port.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.SilverlightTestService.ServiceVerifier.ServicePath">

+            <summary>

+            Gets or sets path to the simple POX service.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.SilverlightTestService.ServiceVerifier.ServiceUri">

+            <summary>

+            Gets the URI to the service.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.TestReportingProvider">

+            <summary>

+            A test service that reports test run results.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.TestReportingProvider.#ctor(Microsoft.Silverlight.Testing.Harness.TestServiceProvider)">

+            <summary>

+            Initializes a new reporting provider instance.

+            </summary>

+            <param name="testService">The test service.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.TestReportingProvider.WriteLog(System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult},System.String,System.String)">

+            <summary>

+            Begins a call to the test service to write to the log.

+            </summary>

+            <param name="callback">The callback, used to read or verify results 

+            from the service call.</param>

+            <param name="logName">The name of the log to write.</param>

+            <param name="content">The log file content.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.TestReportingProvider.ReportFinalResult(System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult},System.Boolean,System.Int32,System.Int32,System.String)">

+            <summary>

+            Begins a call to the test service to report a test run's results.

+            </summary>

+            <param name="callback">The callback, used to read or verify results 

+            from the service call.</param>

+            <param name="failure">A value indicating whether the test run was a 

+            failure.</param>

+            <param name="failures">The failed scenario count.</param>

+            <param name="totalScenarios">The total scenario count.</param>

+            <param name="message">Any message to report along with the failure.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.TestServiceFeature">

+            <summary>

+            Set of known, well-defined test service features.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.TestServiceFeature.CodeCoverageReporting">

+            <summary>

+            Code coverage reporting.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.TestServiceFeature.RunSettings">

+            <summary>

+            Provides run parameters and settings.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.TestServiceFeature.TestReporting">

+            <summary>

+            Provides test reporting services.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.TestServiceFeature.EnvironmentServices">

+            <summary>

+            Provides environment information.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.WebCodeCoverageProvider">

+            <summary>

+            A provider of code coverage information to an external process.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.WebCodeCoverageProvider.MethodName_SaveCodeCoverage">

+            <summary>

+            The MethodName_SaveCodeCoverage method name.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebCodeCoverageProvider.#ctor(Microsoft.Silverlight.Testing.Harness.TestServiceProvider)">

+            <summary>

+            Initializes a new code coverage provider.

+            </summary>

+            <param name="testService">The test service.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebCodeCoverageProvider.SaveCoverageData(System.String,System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult})">

+            <summary>

+            Save string-based code coverage data.

+            </summary>

+            <param name="data">The code coverage data, as a string.</param>

+            <param name="callback">The callback action.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.WebEnvironmentProvider">

+            <summary>

+            A provider of environment variables and environmental information that 

+            uses the test service provider infrastructure.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.WebEnvironmentProvider.MethodName_GetEnvironmentVariable">

+            <summary>

+            The MethodName_GetEnvironmentVariable method name.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebEnvironmentProvider.#ctor(Microsoft.Silverlight.Testing.Service.SilverlightTestService)">

+            <summary>

+            Initializes a new environment provider.

+            </summary>

+            <param name="testService">The web test service.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebEnvironmentProvider.GetEnvironmentVariable(System.String,System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult})">

+            <summary>

+            Retrieve an environment variable from the system.

+            </summary>

+            <param name="name">The variable name.</param>

+            <param name="callback">The callback action.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.WebServiceResult">

+            <summary>

+            Result object for asynchronous test service response that uses a simple 

+            web service / POX call.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebServiceResult.#ctor(System.Net.WebRequest,System.Net.WebResponse)">

+            <summary>

+            Initializes a new web service result.

+            </summary>

+            <param name="request">The request object.</param>

+            <param name="response">The response object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebServiceResult.#ctor(System.Net.WebRequest,System.Net.WebResponse,System.Object)">

+            <summary>

+            Initializes a new web service result.

+            </summary>

+            <param name="request">The request object.</param>

+            <param name="response">The response object.</param>

+            <param name="details">The details to associate for debugging 

+            purposes.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebServiceResult.ReadHttpWebResponse">

+            <summary>

+            Reads the web response, if successful, and parses out the string 

+            content.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebServiceResult.ProcessResponse">

+            <summary>

+            Process the response text.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.WebServiceResult.Request">

+            <summary>

+            Gets the web request associated with the service call.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.WebServiceResult.Response">

+            <summary>

+            Gets the web response associated with the service call.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.WebServiceResult.RequestDetails">

+            <summary>

+            Gets the details of the request, used for interactive debugging 

+            sessions only.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.WebServiceResult.ResponseString">

+            <summary>

+            Gets the string retrieved from the response.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.WebSettingsProvider">

+            <summary>

+            A test service that reads command line settings.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.WebSettingsProvider.MethodName_GetRunParameters">

+            <summary>

+            Name of the method MethodName_GetRunParameters.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebSettingsProvider.#ctor(Microsoft.Silverlight.Testing.Harness.TestServiceProvider)">

+            <summary>

+            Initializes a new settings provider instance.

+            </summary>

+            <param name="testService">The test service.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebSettingsProvider.Initialize">

+            <summary>

+            Initialize the web settings provider.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebSettingsProvider.ReadRunParameters(Microsoft.Silverlight.Testing.Service.ServiceResult)">

+            <summary>

+            Read the run parameters.

+            </summary>

+            <param name="result">The service result.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.WebTestReportingProvider">

+            <summary>

+            A test service that reports test run results.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.WebTestReportingProvider.MethodName_ReportTestResults">

+            <summary>

+            Name of the method MethodName_ReportTestResults.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.WebTestReportingProvider.MethodName_WriteLog">

+            <summary>

+            Name of the method MethodName_WriteLog.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestReportingProvider.#ctor(Microsoft.Silverlight.Testing.Harness.TestServiceProvider)">

+            <summary>

+            Initializes a new reporting provider instance.

+            </summary>

+            <param name="testService">The test service.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestReportingProvider.WriteLog(System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult},System.String,System.String)">

+            <summary>

+            Begins a call to the test service to write to the log.

+            </summary>

+            <param name="callback">The callback, used to read or verify results 

+            from the service call.</param>

+            <param name="logName">The name of the log to write.</param>

+            <param name="content">The log file content.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestReportingProvider.ReportFinalResult(System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult},System.Boolean,System.Int32,System.Int32,System.String)">

+            <summary>

+            Begins a call to the test service to report a test run's results.

+            </summary>

+            <param name="callback">The callback, used to read or verify results 

+            from the service call.</param>

+            <param name="failure">A value indicating whether the test run was a 

+            failure.</param>

+            <param name="failures">The failed scenario count.</param>

+            <param name="totalScenarios">The total scenario count.</param>

+            <param name="message">Any message to report along with the failure.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.WebTestService">

+            <summary>

+            Provides out-of-process access to operating system functions and other 

+            services such as visual verification, if present.

+            </summary>

+            <summary>

+            Provides out-of-process access to operating system functions and other 

+            services such as visual verification, if present.

+            </summary>

+            <summary>

+            Provides out-of-process access to operating system functions and other 

+            services such as visual verification, if present.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.WebTestService._serviceUri">

+            <summary>

+            The service address.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.WebTestService._sync">

+            <summary>

+            The synchronization context.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestService.#ctor(System.Uri)">

+            <summary>

+            Initializes a new plain-old-XML test service.  This assumes that 

+            the caller has already verifier that a service is present and 

+            responding at the service address.

+            </summary>

+            <param name="serviceUri">The base service URI, such as 

+            "scheme://hostname:port/servicePath/".</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestService.CreateUri(System.String,System.Collections.Generic.Dictionary{System.String,System.String})">

+            <summary>

+            Creates a simple REST-style Uri given the method/service name and 

+            a dictionary of key/value pairs to send as arguments.

+            </summary>

+            <param name="service">The method/service name.</param>

+            <param name="arguments">A set of key/value pairs.</param>

+            <returns>Returns a new Uri.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestService.CreateUri(System.String,System.Collections.Generic.Dictionary{System.String,System.String},System.String)">

+            <summary>

+            Creates a simple REST-style Uri given the method/service name and 

+            a dictionary of key/value pairs to send as arguments.

+            </summary>

+            <param name="service">The method/service name.</param>

+            <param name="arguments">A set of key/value pairs.</param>

+            <param name="queryString">Optional query string.</param>

+            <returns>Returns a new Uri.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestService.Dictionary(System.Object[])">

+            <summary>

+            Builds a simple dictionary from parameters.  The value follows the 

+            key parameter.  {[key, value], } ...

+            

+            The ToString() method is called on every object.

+            </summary>

+            <param name="parameters">The parameters.</param>

+            <returns>Returns a key/value dictionary from the parameters.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestService.CallMethod(System.String,System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult})">

+            <summary>

+            Begin a POX method call.  The callback is used with the result when 

+            it becomes available.

+            </summary>

+            <param name="method">The method name.</param>

+            <param name="callback">The callback action.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestService.CallMethod(System.String,System.Collections.Generic.Dictionary{System.String,System.String},System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult})">

+            <summary>

+            Begin a POX method call.  The callback is used with the result when 

+            it becomes available.

+            </summary>

+            <param name="method">The method name.</param>

+            <param name="arguments">Dictionary of key/value pairs.</param>

+            <param name="callback">The callback action.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestService.CallMethod(System.String,System.Collections.Generic.Dictionary{System.String,System.String},System.String,System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult})">

+            <summary>

+            Begin a POX method call.  The callback is used with the result when 

+            it becomes available.

+            </summary>

+            <param name="method">The method name.</param>

+            <param name="arguments">Dictionary of key/value pairs.</param>

+            <param name="postData">Optional string that will transform the 

+            request to a POST request.</param>

+            <param name="callback">The callback action.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestService.CallMethodPostContinue(System.IAsyncResult)">

+            <summary>

+            The intermediate step that writes the POST data and then continues 

+            the web request.

+            </summary>

+            <param name="ar">The async result object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestService.ResponseCallback(System.IAsyncResult)">

+            <summary>

+            Process the response callback from a POX method call.

+            </summary>

+            <param name="ar">The async result object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestService.UserInterfaceThreadCallback(System.Object)">

+            <summary>

+            On the UI thread, invoke the callback action with the result.

+            </summary>

+            <param name="state">The temporary state object.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.WebTestService.CrossThreadState">

+            <summary>

+            A simple type to store the state information for the cross-thread 

+            callback.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestService.CrossThreadState.#ctor(System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult},Microsoft.Silverlight.Testing.Service.WebServiceResult)">

+            <summary>

+            Initializes a new TemporaryStateObject object.

+            </summary>

+            <param name="callback">The callback action.</param>

+            <param name="result">The result object.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.WebTestService.CrossThreadState.Callback">

+            <summary>

+            Gets the callback action.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.WebTestService.CrossThreadState.Result">

+            <summary>

+            Gets the result object.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.WebTestService.RequestData">

+            <summary>

+            The request data class, stores information used in a request for 

+            associating this data with the response.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestService.RequestData.#ctor(System.Uri,System.Net.HttpWebRequest,System.Action{Microsoft.Silverlight.Testing.Service.ServiceResult})">

+            <summary>

+            Initializes a new request data object.

+            </summary>

+            <param name="uri">The request Uri.</param>

+            <param name="request">The request object.</param>

+            <param name="callback">The callback action.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.WebTestService.RequestData.ConvertToResult(System.Net.WebResponse)">

+            <summary>

+            Converts the request data object into a web service result 

+            object.

+            </summary>

+            <param name="response">The response object.</param>

+            <returns>Returns a new WebServiceResult instance.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.WebTestService.RequestData.PostData">

+            <summary>

+            Gets or sets the optional post data for the request.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.WebTestService.RequestData.Request">

+            <summary>

+            Gets the web request.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.WebTestService.RequestData.RequestUri">

+            <summary>

+            Gets the request Uri.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.WebTestService.RequestData.Callback">

+            <summary>

+            Gets the callback action.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.FastRunDispatcher">

+            <summary>

+            A type which handles preparing the underlying dispatcher or timer from 

+            which the test work items execute.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.RunDispatcher">

+            <summary>

+            Handle calling into the test framework as needed to perform the test

+            run, process the internal test dispatcher queue, and keep execution

+            moving forward.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.RunDispatcher._runNextStep">

+            <summary>

+            Delegate that returns whether more work remains and runs the next

+            set of work.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.RunDispatcher._running">

+            <summary>

+            Backing field for a value indicaing whether the dispatcher should be

+            running.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.RunDispatcher.#ctor(System.Func{System.Boolean})">

+            <summary>

+            Creates a new RunMethodManager, taking in a conditional delegate to

+            run for each step to see if more work remains.

+            </summary>

+            <param name="runNextStep">

+            The conditional delegate that performs work and indicates whether

+            additional work remains.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.RunDispatcher.Create(System.Func{System.Boolean})">

+            <summary>

+            Create a new run method manager object.

+            </summary>

+            <param name="runNextStep">

+            Conditional indicating whether more work will remain after

+            performing the work.

+            </param>

+            <returns>

+            Returns the run method manager. Typically depends on the execution 

+            platform and environment.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.RunDispatcher.Create(System.Func{System.Boolean},System.Windows.Threading.Dispatcher)">

+            <summary>

+            Create a new run method manager object.

+            </summary>

+            <param name="runNextStep">

+            Conditional indicating whether more work will remain after

+            performing the work.

+            </param>

+            <param name="dispatcher">A Dispatcher instance.</param>

+            <returns>

+            Returns the run method manager. Typically depends on the execution 

+            platform and environment.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.RunDispatcher.Run">

+            <summary>

+            A completely synchronous implementation, unless overridden, that

+            calls RunNextStep() until the harness is finished.

+            

+            The default implementation will not work with a presentation-rich

+            test environment.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.RunDispatcher.RunNextStep">

+            <summary>

+            Calls a conditional delegate, and returns whether there is more work

+            to be done.

+            </summary>

+            <returns>

+            Returns a value indicating whether there is additional work

+            remaining after executing the current work.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.RunDispatcher.OnComplete">

+            <summary>

+            Calls the Complete event handler.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Harness.RunDispatcher.Complete">

+            <summary>

+            Event that is called when all work is complete.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.RunDispatcher.IsRunning">

+            <summary>

+            Gets or sets a value indicating whether the dispatcher should be 

+            running.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.FastRunDispatcher._dispatcher">

+            <summary>

+            Stored Dispatcher instance.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.FastRunDispatcher.#ctor(System.Func{System.Boolean},System.Windows.Threading.Dispatcher)">

+            <summary>

+            Sets up a new run method manager.

+            </summary>

+            <param name="runNextStep">

+            Conditional delegate which returns true as long as there is 

+            additional work.

+            </param>

+            <param name="dispatcher">An instance of the dispatcher to use.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.FastRunDispatcher.Run">

+            <summary>

+            Begin the execution process by hooking up the underlying 

+            DispatcherTimer to call into the test framework regularly and 

+            perform test work items.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.TestClassData">

+            <summary>

+            A data object that generates property change notifications and can

+            be used for rich data binding to test results. Does keep a reference

+            to all results.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestClassData._parent">

+            <summary>

+            Parent object reference.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestClassData.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,Microsoft.Silverlight.Testing.Client.TestAssemblyData)">

+            <summary>

+            Initializes a new instance of the TestClassData type.

+            </summary>

+            <param name="testClass">The test class metadata.</param>

+            <param name="parent">The parent test assembly data object.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestClassData._methods">

+            <summary>

+            Backing store for the set of test class.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestClassData._expanded">

+            <summary>

+            Backing field for the expanded property.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestClassData.CollapseUnlessFailures">

+            <summary>

+            Collapses the test class node unless there is at least one child

+            test method that failed.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestClassData._passed">

+            <summary>

+            Backing field for a passed value.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestClassData.GetResultReport">

+            <summary>

+            Retrieves the results report.

+            </summary>

+            <returns>Returns a string containing the report.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestClassData.Parent">

+            <summary>

+            Gets the parent data object.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestClassData.Name">

+            <summary>

+            Gets the name of the test class.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestClassData.Namespace">

+            <summary>

+            Gets the namespace for the test class.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestClassData.TestMethods">

+            <summary>

+            Gets an observable collection of test class data objects.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestClassData.IsExpanded">

+            <summary>

+            Gets or sets a value indicating whether the item is expanded in

+            a hierarchical display.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestClassData.IsChecked">

+            <summary>

+            Gets or sets the checked value. Don't think this is actually used.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestClassData.Passed">

+            <summary>

+            Gets or sets a value indicating whether the test passed. If failed,

+            will propagate to the parent metadata object.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.TestRunData">

+            <summary>

+            A data object that generates property change notifications and can

+            be used for rich data binding to test results. Does keep a reference

+            to all results.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestRunData._harness">

+            <summary>

+            The unit test harness instance.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestRunData._information">

+            <summary>

+            Backing field for information about the test application in use.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestRunData.#ctor(Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new instance of the test run results.

+            </summary>

+            <param name="unitTestHarness">The unit test harness.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestRunData._assemblies">

+            <summary>

+            Backing store for the set of test assemblies.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestRunData._title">

+            <summary>

+            Title backing field.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestRunData._total">

+            <summary>

+            Stores the total number of expected scenarios.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestRunData._currentTestMethod">

+            <summary>

+            Stores the current test information.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestRunData._currentTest">

+            <summary>

+            Stores the current test information.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestRunData._runScenarios">

+            <summary>

+            Stores the number of run scenarios.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestRunData._failedScenarios">

+            <summary>

+            Count of failed scenarios.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestRunData._running">

+            <summary>

+            Backing field for whether the app is running.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.TestApplicationInformation">

+            <summary>

+            Gets the test application information instance.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.UnitTestHarness">

+            <summary>

+            Gets the unit test harness instance.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.TestAssemblies">

+            <summary>

+            Gets an observable collection of test assembly data objects.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.Title">

+            <summary>

+            Gets or sets the informational run title.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.TotalScenarios">

+            <summary>

+            Gets or sets the number of total scenarios.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.CurrentTestMethod">

+            <summary>

+            Gets or sets the current test name.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.CurrentTest">

+            <summary>

+            Gets or sets the current test name.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.RunScenarios">

+            <summary>

+            Gets or sets the number of run scenarios.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.FailedScenarios">

+            <summary>

+            Gets or sets the number of failed scenarios.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.PassedAndComplete">

+            <summary>

+            Gets a value indicating whether the run is complete and passed.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.Passed">

+            <summary>

+            Gets a value indicating whether all passing results have been

+            processed.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.PassedScenarios">

+            <summary>

+            Gets the number of passed scenarios, defined as the number of

+            run scenarios minus the number of failed scenarios tracked.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.IsDispatcherRunning">

+            <summary>

+            Gets a value indicating whether the dispatcher is currently running.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestRunData.IsRunning">

+            <summary>

+            Gets a value indicating whether the test run is in action.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestAssemblyCompletedEventArgs">

+            <summary>

+            Assembly complete event arguments.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.UnitTestHarnessEventArgs">

+            <summary>

+            Generic unit test harness event arguments base class that contains a

+            reference to the harness.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarnessEventArgs.#ctor(Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new instance of the UnitTestHarnessEventArgs class.

+            </summary>

+            <param name="harness">The test harness.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarnessEventArgs.UnitTestHarness">

+            <summary>

+            Gets the unit test harness reference.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestAssemblyCompletedEventArgs.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly,Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new instance of the TestAssemblyCompletedEventArgs

+            type.

+            </summary>

+            <param name="assembly">The assembly metadata.</param>

+            <param name="harness">The test harness instance.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestAssemblyCompletedEventArgs.Assembly">

+            <summary>

+            Gets the assembly metadata.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestAssemblyStartingEventArgs">

+            <summary>

+            Test assembly starting event arguments.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestAssemblyStartingEventArgs.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly,Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new instance of the TestAssemblyStartingEventArgs

+            type.

+            </summary>

+            <param name="assembly">The assembly metadata.</param>

+            <param name="harness">The unit test harness instance.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestAssemblyStartingEventArgs.Assembly">

+            <summary>

+            Gets the assembly metadata information.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestClassCompletedEventArgs">

+            <summary>

+            The test class completed event arguments.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassCompletedEventArgs.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new instance of the TestClassCompletedEventArgs

+            class.

+            </summary>

+            <param name="testClass">Test class metadata.</param>

+            <param name="harness">The harness instance.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestClassCompletedEventArgs.TestClass">

+            <summary>

+            Gets the test class metadata.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestClassStartingEventArgs">

+            <summary>

+            Information about the start of a test class event.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassStartingEventArgs.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new instance of the TestClassStartingEventArgs type.

+            </summary>

+            <param name="testClass">The test class metadata.</param>

+            <param name="harness">The unit test harness reference.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestClassStartingEventArgs.TestClass">

+            <summary>

+            Gets the test class instance.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestMethodStartingEventArgs">

+            <summary>

+            Test method starting event arguments.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodStartingEventArgs.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new instance of the TestMethodStartingEventArgs type.

+            </summary>

+            <param name="testMethod">The test method metadata.</param>

+            <param name="testClass">The test class metadata.</param>

+            <param name="harness">The test harness instance.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestMethodStartingEventArgs.TestMethod">

+            <summary>

+            Gets the test method metadata.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestMethodStartingEventArgs.TestClass">

+            <summary>

+            Gets the test class metadata.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestRunStartingEventArgs">

+            <summary>

+            Test method completed event arguments, contains the result.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestRunStartingEventArgs.#ctor(Microsoft.Silverlight.Testing.UnitTestSettings,Microsoft.Silverlight.Testing.Harness.TestRunFilter)">

+            <summary>

+            Initializes a new instance of the TestRunStartingEventArgs

+            type.

+            </summary>

+            <param name="settings">The test run filter.</param>

+            <param name="filter">The test run settings object.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestRunStartingEventArgs.Settings">

+            <summary>

+            Gets the unit test run settings.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestRunStartingEventArgs.TestRunFilter">

+            <summary>

+            Gets the test run filter.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestRunStartingEventArgs.TestHarnessName">

+            <summary>

+            Gets or sets the test harness name.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestRunStartingEventArgs.EnqueuedAssemblies">

+            <summary>

+            Gets or sets the number of valid, enqueued assemblies scheduled.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.TagAttribute">

+            <summary>

+            Tag attribute used to associate individual test cases with tags to

+            easily test related functionality.

+            </summary>

+            <remarks>

+            The infrastructure associated with the TagAttribute is not yet in place.

+            </remarks>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.TagAttribute.ReservedWords">

+            <summary>

+            List of reserved words that cannot be used as tags.

+            </summary>

+            <remarks>

+            This list should be shared with the tag parser implementation when

+            available.

+            </remarks>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.TagAttribute.ReservedCharacters">

+            <summary>

+            List of reserved characters that cannot be used in tags.

+            </summary>

+            <remarks>

+            This list should be shared with the tag parser implementation when

+            available.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.TagAttribute.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the TagAttribute class.

+            </summary>

+            <param name="tag">

+            Tag associated with the test method or class.

+            </param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.TagAttribute.Tag">

+            <summary>

+            Gets the tag associated with the test method or class.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.HarnessExtensions">

+            <summary>

+            Set of extension methods used by the harness.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.HarnessExtensions.AddRange``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})">

+            <summary>

+            An AddRange implementation for the generic IList interface.

+            </summary>

+            <typeparam name="TListType">The list type.</typeparam>

+            <param name="list">The list object.</param>

+            <param name="collection">The collection to copy into the list.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.HarnessExtensions.Replace``1(System.Collections.Generic.IList{``0},System.Collections.Generic.IEnumerable{``0})">

+            <summary>

+            Replace a list's contents with the items in the IEnumerable.

+            </summary>

+            <typeparam name="TListType">The list type.</typeparam>

+            <param name="list">The list object.</param>

+            <param name="sequence">The sequence to copy into the list.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.IProvideDynamicTestMethods">

+            <summary>

+            The IProvideDynamicTestMethods interface is used to provide additional

+            test methods dynamically at runtime.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.IProvideDynamicTestMethods.GetDynamicTestMethods">

+            <summary>

+            Get the dynamic test methods.

+            </summary>

+            <returns>Sequence of dynamic test methods.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.RetryTestRunFilter">

+            <summary>

+            A type filter for just a specific test.  Allows the re-running of a 

+            single result again in the same process.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestRunFilter">

+            <summary>

+            A type to filter down complete sets of classes, tests and methods.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestRunFilter.DefaultTestRunName">

+            <summary>

+            The default unit test run name.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestRunFilter._settings">

+            <summary>

+            Unit test settings.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestRunFilter.#ctor(Microsoft.Silverlight.Testing.UnitTestSettings,Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new test run filter using an existing settings file.

+            </summary>

+            <param name="settings">A unit test settings instance.</param>

+            <param name="harness">The unit test harness.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestRunFilter.GetTestClasses(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly,Microsoft.Silverlight.Testing.Harness.TestClassInstanceDictionary)">

+            <summary>

+            Retrieve a set of test classes from a test assembly.

+            </summary>

+            <param name="assembly">The test assembly metadata object.</param>

+            <param name="instances">Test class instance dictionary.</param>

+            <returns>Returns a new list of test class metadata objects.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestRunFilter.SortTestClasses(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass})">

+            <summary>

+            Sort the test classes if the settings for alphabetical sorting are 

+            present.

+            </summary>

+            <param name="tests">List of test classes.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestRunFilter.FilterTestClasses(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass},Microsoft.Silverlight.Testing.Harness.TestClassInstanceDictionary)">

+            <summary>

+            Filter out tests based on the standard-supported methods.

+            </summary>

+            <param name="classes">List of test classes.</param>

+            <param name="instances">Test class instance dictionary.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestRunFilter.FilterCustomTestClasses(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass},Microsoft.Silverlight.Testing.Harness.TestClassInstanceDictionary)">

+            <summary>

+            Perform any custom filtering that the TestRunFilter needs.

+            </summary>

+            <param name="classes">List of test classes.</param>

+            <param name="instances">Test class instance dictionary.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestRunFilter.FilterLegacyTestClasses(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass},Microsoft.Silverlight.Testing.Harness.TestClassInstanceDictionary)">

+            <summary>

+            If specific string-contains filters are present.

+            </summary>

+            <param name="classes">List of test classes.</param>

+            <param name="instances">Test class instance dictionary.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestRunFilter.FilterExclusiveTestClasses(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass},Microsoft.Silverlight.Testing.Harness.TestClassInstanceDictionary)">

+            <summary>

+            If any exclusive classes are found, filter them.

+            </summary>

+            <param name="classes">List of test classes.</param>

+            <param name="instances">Test class instance dictionary.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestRunFilter.GetTestMethods(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,System.Object)">

+            <summary>

+            Retrieves the test methods from a test class metadata object.

+            </summary>

+            <param name="test">The test class metadata object.</param>

+            <param name="instance">The test class instance.</param>

+            <returns>Returns a list of test method metadata objects.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestRunFilter.FilterTestMethods(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod})">

+            <summary>

+            Filter the test methods.

+            </summary>

+            <param name="methods">List of test methods.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestRunFilter.FilterCustomTestMethods(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod})">

+            <summary>

+            Perform any custom filtering that the TestRunFilter needs.

+            </summary>

+            <param name="methods">List of test methods.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestRunFilter.FilterExclusiveTestMethods(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod})">

+            <summary>

+            If any exclusive classes are found, filter them.

+            </summary>

+            <param name="methods">List of test methods.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestRunFilter.SortTestMethods(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod})">

+            <summary>

+            Sorts the test methods, if requested.

+            </summary>

+            <param name="methods">List of test methods.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestRunFilter.TestRunName">

+            <summary>

+            Gets a friendly name for the test run.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestRunFilter.UnitTestHarness">

+            <summary>

+            Gets the unit test harness.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.RetryTestRunFilter._test">

+            <summary>

+            The test class.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.RetryTestRunFilter._method">

+            <summary>

+            The test method.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.RetryTestRunFilter.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod)">

+            <summary>

+            Initializes a new test run filter using an existing settings file.

+            </summary>

+            <param name="test">The test class metadata.</param>

+            <param name="method">The test method metadata.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.RetryTestRunFilter.GetTestClasses(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly,Microsoft.Silverlight.Testing.Harness.TestClassInstanceDictionary)">

+            <summary>

+            Retrieve a set of test classes from a test assembly.

+            </summary>

+            <param name="assembly">The test assembly metadata object.</param>

+            <param name="instances">Test class instance dictionary.</param>

+            <returns>Returns a new list of test class metadata objects.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.RetryTestRunFilter.GetTestMethods(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,System.Object)">

+            <summary>

+            Retrieves the test methods from a test class metadata object.

+            </summary>

+            <param name="test">The test class metadata object.</param>

+            <param name="instance">The test class instance.</param>

+            <returns>Returns a list of test method metadata objects.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TagManager">

+            <summary>

+            A helper class that manages tags and associated metadata. Tag

+            expressions are evaluated at the TestClass level.

+            </summary>

+            <summary>

+            A helper class that manages tags and associated metadata. Tag

+            expressions are evaluated at the TestClass level.

+            </summary>

+            <summary>

+            A helper class that manages tags and associated metadata. Tag

+            expressions are evaluated at the TestClass level.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager.PriorityTagPrefix">

+            <summary>

+            The prefix for any tags generated from priority values.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager.TagType">

+            <summary>

+            A reference to the tag attribute type.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager._classTags">

+            <summary>

+            The test tags associated with the class.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager._methodTags">

+            <summary>

+            The test tags associated with methods.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager._tagsToMethods">

+            <summary>

+            The ability to grab the set of methods, given a test class type, 

+            and the tag of interest.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager._testClass">

+            <summary>

+            The test class type.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.#ctor(System.Type,System.Collections.Generic.IEnumerable{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod})">

+            <summary>

+            Initializes a new tag manager.

+            </summary>

+            <param name="test">The test class type.</param>

+            <param name="methods">The set of methods to run.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.CreateClassTags(System.Type)">

+            <summary>

+            Reflect, read and prepare the tags for the class metadata. Performs 

+            the work if this is the first time the metadata has been seen.

+            </summary>

+            <param name="test">The reflection object for the test class.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.CreateMethodTags(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod)">

+            <summary>

+            Reflect, read and prepare the tags for the method metadata. Performs 

+            the work if this is the first time the metadata has been seen.

+            </summary>

+            <param name="method">The method metadata.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.EvaluateExpression(System.String)">

+            <summary>

+            Get the test methods that correspond to a tag expression.

+            </summary>

+            <param name="tagExpression">Tag expression.</param>

+            <returns>Test methods for the tag expression.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TagManager.Universe">

+            <summary>

+            Gets or sets the universe of all test methods for expression 

+            evaluation.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator">

+            <summary>

+            Evaluate tag expressions.

+            </summary>

+            <remarks>

+            Tag expressions are derived from the following EBNF grammar:

+                {Expression} :=

+                    {Expression} + {Term} |

+                    {Expression} - {Term} |

+                    {Term}

+                {Term} :=

+                    {Term} * {Factor} |

+                    {Factor}

+                {Factor} :=

+                    !{Factor} |

+                    ({Expression}) |

+                    {Tag}

+                {Tag} :=

+                    All |

+                    [^InvalidCharacters]+

+             

+            The non-terminals for {Expression} and {Term} will be left factored

+            in the recursive descent parser below.

+            </remarks>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.Union">

+            <summary>

+            Union character.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.Intersection">

+            <summary>

+            Intersection character.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.Complement">

+            <summary>

+            Complement character.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.Difference">

+            <summary>

+            Difference character.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.All">

+            <summary>

+            The "All" string constant.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.InvalidCharacters">

+            <summary>

+            Invalid characters in a tag name.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.Evaluate(Microsoft.Silverlight.Testing.Harness.TagManager,System.String)">

+            <summary>

+            Evaluate a tag expression.

+            </summary>

+            <param name="owner">The owner object.</param>

+            <param name="tagExpression">Tag expression.</param>

+            <returns>Test methods associated with the tag expression.</returns>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator._owner">

+            <summary>

+            The owning TagManager instance.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator._tagExpression">

+            <summary>

+            Expression being evaluated.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator._position">

+            <summary>

+            Current position in the expression.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.#ctor(Microsoft.Silverlight.Testing.Harness.TagManager,System.String)">

+            <summary>

+            Create an expression evaluator.

+            </summary>

+            <param name="owner">The owner object.</param>

+            <param name="tagExpression">Expression object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.Match(System.String)">

+            <summary>

+            Match a sequence of characters.

+            </summary>

+            <param name="expected">String to match.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.TryMatch(System.String)">

+            <summary>

+            Try to match a sequence of characters.

+            </summary>

+            <param name="expected">String to match.</param>

+            <returns>Returns a value indicating whether the match was 

+            successful.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.Evaluate">

+            <summary>

+            Evaluate an expression.

+            </summary>

+            <returns>Test methods described by the expression.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.ReadExpression">

+            <summary>

+            Evaluate an expression.

+            </summary>

+            <returns>Test methods described by the expression.</returns>

+            <remarks>

+            We need to factor out left recursion, so:

+                {Expression} :=

+                    {Expression} + {Term} |

+                    {Expression} - {Term} |

+                    {Term}

+            becomes:

+                {Expression} :=

+                	{Term}{Expression'}

+                

+                {Expression'} :=

+                	#empty#

+                	+ {Term}{Expression'}

+                	- {Term}{Expression'}

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.ReadExpression(System.Collections.Generic.IEnumerable{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod})">

+            <summary>

+            Evaluate an expression.

+            </summary>

+            <param name="term">

+            Left term already read as part of the expression.

+            </param>

+            <returns>Test methods described by the expression.</returns>

+            <remarks>

+            Non-terminal created for left-factoring:

+                {Expression'} :=

+                	#empty#

+                	+ {Term}{Expression'}

+                	- {Term}{Expression'}

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.ReadTerm">

+            <summary>

+            Evaluate a term.

+            </summary>

+            <returns>Test methods described by the expression.</returns>

+            <remarks>

+            We need to factor out left recursion, so:

+                {Term} :=

+                    {Factor} * {Term} |

+                    {Factor}

+            becomes:

+                {Term} :=

+                    {Factor}{Term'}

+            

+                {Term'} :=

+                	#empty#

+                	^ {Factor}{Term'}

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.ReadTerm(System.Collections.Generic.IEnumerable{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod})">

+            <summary>

+            Evaluate a term.

+            </summary>

+            <param name="factor">

+            Left term already read as part of the expression.

+            </param>

+            <returns>Test methods described by the expression.</returns>

+            <remarks>

+            Non-terminal created for left-factoring:

+                {Term'} :=

+                	#empty#

+                	^ {Factor}{Term'}

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.ReadFactor">

+            <summary>

+            Evaluate a factor.

+            </summary>

+            <returns>Test methods described by the expression.</returns>

+            <remarks>

+            {Factor} :=

+                !{Factor} |

+                ({Expression}) |

+                {Tag}

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.CreateEmptyList">

+            <summary>

+            Creates a new empty collection.

+            </summary>

+            <returns>Returns an empty collection.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.ExpressionEvaluator.ReadTag">

+            <summary>

+            Evaluate a tag.

+            </summary>

+            <returns>Test methods described by the expression.</returns>

+            <remarks>

+            {Tag} :=

+                All |

+                [^InvalidCharacters]+

+            </remarks>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TagManager.Tags">

+            <summary>

+            A string list for storing tags. Provides an Add method that takes 

+            an attribute object and, if a TagAttribute, will append its tag 

+            value to the list.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.Tags.#ctor">

+            <summary>

+            Initializes a new Tags instance.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.Tags.#ctor(System.Collections.Generic.IEnumerable{System.String})">

+            <summary>

+            Initializes a new Tags instance from an existing collection.

+            </summary>

+            <param name="collection">The collection to copy.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagManager.Tags.Add(System.Attribute)">

+            <summary>

+            Adds a TagAttribute's tag value.

+            </summary>

+            <param name="tag">The tag object.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TagTestRunFilter">

+            <summary>

+            A method and class filter that uses expressions and the TagAttribute.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagTestRunFilter.NullTagRunName">

+            <summary>

+            The name to use for the test run when the tag expression is null.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagTestRunFilter.#ctor(Microsoft.Silverlight.Testing.UnitTestSettings,Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new test run filter with the tag expression setting.

+            </summary>

+            <param name="settings">Unit test settings.</param>

+            <param name="harness">Unit test harness.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagTestRunFilter.#ctor(Microsoft.Silverlight.Testing.UnitTestSettings,Microsoft.Silverlight.Testing.Harness.UnitTestHarness,System.String)">

+            <summary>

+            Initializes a new test run filter with the tag expression.

+            </summary>

+            <param name="settings">Unit test settings.</param>

+            <param name="harness">Unit test harness.</param>

+            <param name="tagExpression">The tag expression to use.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagTestRunFilter.SetTagExpression(System.String)">

+            <summary>

+            Sets the tag expression property.

+            </summary>

+            <param name="tagExpression">The tag expression to use.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TagTestRunFilter._hasLoggedWarning">

+            <summary>

+            A value indicating whether the warning has been logged yet.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagTestRunFilter.FilterCustomTestClasses(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass},Microsoft.Silverlight.Testing.Harness.TestClassInstanceDictionary)">

+            <summary>

+            Apply tag filtering.

+            </summary>

+            <param name="classes">List of test classes.</param>

+            <param name="instances">Test class instance dictionary.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagTestRunFilter.FilterCustomTestMethods(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod})">

+            <summary>

+            Apply tag filtering.

+            </summary>

+            <param name="methods">List of test methods.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagTestRunFilter.ApplyExpression(Microsoft.Silverlight.Testing.Harness.TagManager,System.Collections.Generic.ICollection{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod})">

+            <summary>

+            Apply the tag filtering.

+            </summary>

+            <param name="tagManager">The tag manager instance.</param>

+            <param name="methods">Set of methods.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagTestRunFilter.FilterExclusiveTestClasses(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass},Microsoft.Silverlight.Testing.Harness.TestClassInstanceDictionary)">

+            <summary>

+            Exclusive attributes are not supported when also using tagging.

+            </summary>

+            <param name="classes">List of test classes.</param>

+            <param name="instances">Test class instance dictionary.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TagTestRunFilter.FilterExclusiveTestMethods(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod})">

+            <summary>

+            Exclusive attributes are not supported when also using tagging.

+            </summary>

+            <param name="methods">List of test methods.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TagTestRunFilter.TagExpression">

+            <summary>

+            Gets the tag expression in use by the run filter.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestAssemblyHelper">

+            <summary>

+            Helper code for TestAssembly logic.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestAssemblyHelper.HasExclusiveClasses(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass})">

+            <summary>

+            Check whether [Exclusive] attribute is present on any classes.

+            </summary>

+            <param name="classes">Collection of class metadata objects.</param>

+            <returns>Returns a value indicating whether any of the classes 

+            include an [Exclusive] attribute.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestAssemblyHelper.SortTestClasses(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass})">

+            <summary>

+            Sorts the test classes alphabetically by name.

+            </summary>

+            <param name="classes">A list of test class metadata objects.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestClassHelper">

+            <summary>

+            Test class helper.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestClassHelper._hasWarned">

+            <summary>

+            A value indicating whether the warning has been logged in this run.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassHelper.FilterTestsToRun(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass},System.Collections.Generic.ICollection{System.String})">

+            <summary>

+            Filter the set of test classes by removing unused classes.

+            </summary>

+            <param name="classes">The input list of test class metadata objects.</param>

+            <param name="classesToRun">The classes to run.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassHelper.FilterExclusiveClasses(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass},Microsoft.Silverlight.Testing.Harness.LogMessageWriter)">

+            <summary>

+            Look through the classes for the [Exclusive] attribute. If found, 

+            remove any classes where the attribute is not present.

+            </summary>

+            <param name="classes">The input list of classes.</param>

+            <param name="logWriter">The log writer object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassHelper.FilterByFilterClassParameter(System.Collections.Generic.IDictionary{System.String,System.String},System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass})">

+            <summary>

+            Look for the /p:FilterClass parameter in the test harness settings. 

+            Try to do a substring match on all filtered test classes.

+            </summary>

+            <param name="parameters">The parameters.</param>

+            <param name="classes">List of test classes to be filtered.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestMethodCompletedEventArgs">

+            <summary>

+            Test method completed event arguments, contains the result.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodCompletedEventArgs.#ctor(Microsoft.Silverlight.Testing.Harness.ScenarioResult)">

+            <summary>

+            Initializes a new instance of the TestMethodCompletedEventArgs

+            type.

+            </summary>

+            <param name="result">The result instance.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodCompletedEventArgs.#ctor(Microsoft.Silverlight.Testing.Harness.ScenarioResult,Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new instance of the TestMethodCompletedEventArgs

+            type.

+            </summary>

+            <param name="result">The result instance.</param>

+            <param name="harness">The unit test harness.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestMethodCompletedEventArgs.Result">

+            <summary>

+            Gets the test method result.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestMethodHelper">

+            <summary>

+            Helper code for TestMethod logic.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestMethodHelper._hasWarned">

+            <summary>

+            A value indicating whether the warning has been logged in this run.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodHelper.HasExclusiveMethods(System.Collections.Generic.ICollection{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod})">

+            <summary>

+            Check whether [Exclusive] is present on >= 1 of the methods.

+            </summary>

+            <param name="methods">The methods to search through.</param>

+            <returns>True if at least one of the methods has Exclusive.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodHelper.FilterExclusiveMethods(System.Collections.Generic.IList{Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod},Microsoft.Silverlight.Testing.Harness.LogMessageWriter)">

+            <summary>

+            Look through the methods for the [Exclusive] attribute. If found, 

+            remove any methods where the attribute is not present.

+            </summary>

+            <param name="methods">The methods to filter.</param>

+            <param name="logWriter">The log writer object.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.UnitTestHarnessEvents">

+            <summary>

+            A helper utility for firing events as the unit test harness from any

+            component, internal or not. Enables expansion.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestHarnessEvents._harness">

+            <summary>

+            Stored instance of the harness.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarnessEvents.#ctor(Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new intance of the UnitTestHarnessEvents helper.

+            </summary>

+            <param name="harness">The harness reference.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarnessEvents.SendTestAssemblyStarting(Microsoft.Silverlight.Testing.Harness.TestAssemblyStartingEventArgs)">

+            <summary>

+            Calls the test assembly starting event.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarnessEvents.SendTestAssemblyCompleted(Microsoft.Silverlight.Testing.Harness.TestAssemblyCompletedEventArgs)">

+            <summary>

+            Calls the test assembly completed event.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarnessEvents.SendTestClassStarting(Microsoft.Silverlight.Testing.Harness.TestClassStartingEventArgs)">

+            <summary>

+            Calls the test class starting event handlers.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarnessEvents.SendTestClassCompleted(Microsoft.Silverlight.Testing.Harness.TestClassCompletedEventArgs)">

+            <summary>

+            Calls the test class completed event.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarnessEvents.SendTestMethodStarting(Microsoft.Silverlight.Testing.Harness.TestMethodStartingEventArgs)">

+            <summary>

+            Calls the test method starting event.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarnessEvents.SendTestMethodCompleted(Microsoft.Silverlight.Testing.Harness.TestMethodCompletedEventArgs)">

+            <summary>

+            Calls the test method completed event.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarnessEvents.SendTestRunStarting(Microsoft.Silverlight.Testing.Harness.TestRunStartingEventArgs)">

+            <summary>

+            Calls the test run starting event.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.UnitTestLogicFactory">

+            <summary>

+            A factory for creating the unit test objects.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestLogicFactory._harness">

+            <summary>

+            The unit test harness.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogicFactory.#ctor(Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes a new unit test logic factory.

+            </summary>

+            <param name="harness">The unit test harness reference.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogicFactory.CreateAssemblyManager(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider,Microsoft.Silverlight.Testing.Harness.TestRunFilter,Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly)">

+            <summary>

+            Creates a new AssemblyManager.

+            </summary>

+            <param name="provider">The unit test provider.</param>

+            <param name="filter">The run filter.</param>

+            <param name="assembly">The unit test assembly metadata object.</param>

+            <returns>Returns a new AssemblyManager.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogicFactory.CreateTestClassManager(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider,Microsoft.Silverlight.Testing.Harness.TestRunFilter,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,System.Object)">

+            <summary>

+            Creates a new TestClassManager.

+            </summary>

+            <param name="provider">The unit test provider.</param>

+            <param name="filter">The run filter.</param>

+            <param name="testClass">The test class metadata.</param>

+            <param name="instance">The test class instance.</param>

+            <returns>Returns a new TestClassManager.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogicFactory.CreateTestMethodManager(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod,System.Object)">

+            <summary>

+            Creates a new TestMethodManager.

+            </summary>

+            <param name="provider">The unit test provider.</param>

+            <param name="testClass">The test class metadata.</param>

+            <param name="method">The test method metadata.</param>

+            <param name="instance">The test class instance.</param>

+            <returns>Returns a new TestMethodManager.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider">

+            <summary>

+            A log provider that outputs in a simple custom test format that Visual 

+            Studio recognizes.

+            </summary>

+            <summary>

+            A log provider that outputs in a simple custom test format that Visual 

+            Studio recognizes.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.LogProvider">

+            <summary>

+            LogProvider interface with a single Process method that handles a

+            LogMessage object.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogProvider._conditionalHandlers">

+            <summary>

+            A dictionary of conditional action handlers.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogProvider._definedHandlers">

+            <summary>

+            A dictionary of types/actions for handling specific types of log

+            messages.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogProvider.Process(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Perform any needed operations to log the message.

+            </summary>

+            <param name="logMessage">Instance of LogMessage type.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogProvider.ProcessRemainder(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Method that processes any messages not handled any other way.

+            </summary>

+            <param name="message">The log message.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogProvider.RegisterMessageTypeHandler(Microsoft.Silverlight.Testing.Harness.LogMessageType,System.Action{Microsoft.Silverlight.Testing.Harness.LogMessage})">

+            <summary>

+            Registers an action for a specific message type.

+            </summary>

+            <param name="type">The type of interest.</param>

+            <param name="action">The handler for the type.  Takes a LogMessage 

+            parameter.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogProvider.RegisterConditionalHandler(System.Func{Microsoft.Silverlight.Testing.Harness.LogMessage,System.Boolean},System.Action{Microsoft.Silverlight.Testing.Harness.LogMessage})">

+            <summary>

+            Registers a conditional handler.  During the log message processing 

+            step, all conditional callbacks will be tried.  The first positive 

+            result will then call the associated processing Action for that 

+            conditional method entry.

+            </summary>

+            <param name="condition">A conditional callback that takes a 

+            LogMessage input parameter.</param>

+            <param name="action">A log message processing Action that is called 

+            when the condition is true.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogProvider.UnregisterConditionalHandler(System.Func{Microsoft.Silverlight.Testing.Harness.LogMessage,System.Boolean})">

+            <summary>

+            Removes a conditional callback.

+            </summary>

+            <param name="condition">The condition.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogProvider.ClearConditionalHandlers">

+            <summary>

+            Clear all existing conditional handlers.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogProvider.ClearMessageTypeHandlers">

+            <summary>

+            Clear all existing message type handlers.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.ITestSettingsLogProvider">

+            <summary>

+            Interface for LogProviders that want access to external test settings.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ITestSettingsLogProvider.Initialize(Microsoft.Silverlight.Testing.UnitTestSettings)">

+            <summary>

+            Initializes the provider.

+            </summary>

+            <param name="settings">The settings.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.DefaultTestResultsFilename">

+            <summary>

+            The filename to use for saving test results.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.DefaultTestAdapterTypeName">

+            <summary>

+            The default test adapter type name.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.DefaultTestListName">

+            <summary>

+            The default test list name.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.DefaultComputerName">

+            <summary>

+            The default computer name.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.DefaultUserName">

+            <summary>

+            The default user name.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.DefaultTestRunConfigurationName">

+            <summary>

+            The default configuration name.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.DefaultTestRunConfigurationDescription">

+            <summary>

+            The default configuration description.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider._writer">

+            <summary>

+            The Visual Studio log format writer.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.#ctor">

+            <summary>

+            Initializes a new instance of the VisualStudioLogProvider class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.RegisterLogHandlers">

+            <summary>

+            Register the handler conditions of interest to this log provider.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.TestAssemblyStart(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Assembly start code.

+            </summary>

+            <param name="l">The log message.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.ProcessIncorrectException(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Process an Exception that was not the expected Exception type.

+            </summary>

+            <param name="l">The log message.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.ProcessException(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Process an Exception that is logged or stored.

+            </summary>

+            <param name="l">The log message object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.SetTestRunConfiguration(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly)">

+            <summary>

+            Sets the test run configuration information when the test assembly 

+            begins processing.

+            </summary>

+            <param name="assembly">The test assembly metadata object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.GenerateTestRunName(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly)">

+            <summary>

+            Generate a name for the test run that will be used when 

+            displaying the result in Visual Studio.

+            </summary>

+            <param name="assembly">The test assembly metadata object.</param>

+            <returns>Returns the test run name.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.NewGuid">

+            <summary>

+            Generates a new Guid string value.

+            </summary>

+            <returns>Returns a new Guid string value.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.ProcessResult(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Process a UTF result message.

+            </summary>

+            <param name="logMessage">The log message object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.ProcessBug(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Process [Bug(...)].

+            </summary>

+            <param name="l">A KnownBugLogMessage object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.TestRunFilterSelected(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            The run filter has been selected.

+            </summary>

+            <param name="logMessage">The log message object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.WriteLogFile(Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Saves the log file data.

+            </summary>

+            <param name="harness">The unit test harness.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Initialize(Microsoft.Silverlight.Testing.UnitTestSettings)">

+            <summary>

+            Initializes the test harness.

+            </summary>

+            <param name="settings">The test harness settings.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.TestResultsFileName">

+            <summary>

+            Gets or sets the test results filename.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.TestAdapterTypeName">

+            <summary>

+            Gets or sets the test adapter type name reported in the Visual 

+            Studio results log file.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.TestRunId">

+            <summary>

+            Gets or sets the TestRunId.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.TestListName">

+            <summary>

+            Gets or sets the test list name.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.ComputerName">

+            <summary>

+            Gets or sets the computer name that is reported in the results

+            log file.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.UserName">

+            <summary>

+            Gets or sets the user name that is reported in the results file.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.TestRunConfigurationName">

+            <summary>

+            Gets or sets the TestRunConfigurationName.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.TestRunConfigurationDescription">

+            <summary>

+            Gets or sets the TestRunConfigurationDescription.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.TestRunNamePrefix">

+            <summary>

+            Gets or sets a prefix for use in the test run name.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.TestRunConfigurationId">

+            <summary>

+            Gets or sets the TestRunConfigurationId.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.CurrentAssemblyName">

+            <summary>

+            Gets the current assembly name.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer">

+            <summary>

+            A log provider that outputs in a simple custom test format that 

+            Visual Studio recognizes. This is a simple, subset writer.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.DateTimeFormat">

+            <summary>

+            Date time format string representing round-trip date/time 

+            pattern.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.DefaultTestTypeId">

+            <summary>

+            A unique ID representing the Visual Studio unit test type ID.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.ResultsXmlNamespace">

+            <summary>

+            The namespace for Visual Studio team test results.

+            </summary>

+            <remarks>Was of XNamespace type in XLinq implementation.</remarks>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer._testLists">

+            <summary>

+            A dictionary containing test list names and guids.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer._pendingElements">

+            <summary>

+            Stores temporary, pending elements for the next result.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.#ctor">

+            <summary>

+            Initializes a new Writer object.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.FinalizeContent">

+            <summary>

+            Stores property values in the respective elements, clears any 

+            lookup dictionaries.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.ToDateString(System.DateTime)">

+            <summary>

+            Returns a string value of the DateTime object.

+            </summary>

+            <param name="dateTime">The DateTime object.</param>

+            <returns>Returns the formatted string.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.GetXmlAsString">

+            <summary>

+            Returns the XML log file as a string.

+            </summary>

+            <returns>The XML value.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.CreateInitialDocument">

+            <summary>

+            Creates the initial results document and its XElements.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.CreateElement(System.String)">

+            <summary>

+            Creates a new XElement within the results XML namespace.

+            </summary>

+            <param name="name">The element name.</param>

+            <returns>Returns a new named element.</returns>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer._total">

+            <summary>

+            The total number of scenarios.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer._outcomes">

+            <summary>

+            The set of outcomes and counts.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.IncrementResults(Microsoft.Silverlight.Testing.Harness.TestOutcome)">

+            <summary>

+            Increment the number of passing results.

+            </summary>

+            <param name="outcome">The test outcome.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.AddTestMethodResult(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod,System.String,System.String,System.String,System.String,System.String,System.String,System.DateTime,System.DateTime,Microsoft.Silverlight.Testing.Harness.TestOutcome)">

+            <summary>

+            Adds the result of a test method into the log.

+            </summary>

+            <param name="test">The test metadata.</param>

+            <param name="storage">The storage value.</param>

+            <param name="codeBase">The code base value.</param>

+            <param name="adapterTypeName">The adapter type name.</param>

+            <param name="className">The class name.</param>

+            <param name="testListName">The test list name.</param>

+            <param name="computerName">The computer name.</param>

+            <param name="startTime">The start time.</param>

+            <param name="endTime">The end time.</param>

+            <param name="outcome">The outcome.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.AddPendingWriteLine(System.String)">

+            <summary>

+            Adds a WriteLine to the next result to be processed.

+            </summary>

+            <param name="line">The text to output.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.AddPendingErrorMessage(System.String)">

+            <summary>

+            Adds an error message to the next result to be processed.

+            </summary>

+            <param name="message">The message.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.AddPendingException(System.Exception)">

+            <summary>

+            Adds an Exception to the next result to be processed.

+            </summary>

+            <param name="e">The Exception object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.AddPendingOutput(Microsoft.Silverlight.Testing.Service.SimpleXElement)">

+            <summary>

+            Adds pending output for the next result.

+            </summary>

+            <param name="element">The element to wrap in an Output element.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.GetTestListGuid(System.String)">

+            <summary>

+            Returns the GUID for a test list name. The result is stored 

+            in memory.

+            </summary>

+            <param name="testListName">The test list name.</param>

+            <returns>Returns the test list name guid.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.Started">

+            <summary>

+            Gets or sets the time that the test run started.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.Created">

+            <summary>

+            Gets or sets the time that the writer object and/or test run was created.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.Finished">

+            <summary>

+            Gets or sets the time that the test run was finished.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.TestRun">

+            <summary>

+            Gets the root XML node for the test run and its results.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.UnitTestTestTypeId">

+            <summary>

+            Gets or sets the test type ID used for new results.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.TestRunConfiguration">

+            <summary>

+            Gets the TestRunConfiguration element.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.Counters">

+            <summary>

+            Gets the Counters element.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.TestDefinitions">

+            <summary>

+            Gets the TestDefinitions element.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.TestLists">

+            <summary>

+            Gets the TestLists element.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.TestEntries">

+            <summary>

+            Gets the TestEntries element.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.Times">

+            <summary>

+            Gets the Times element.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.ResultSummary">

+            <summary>

+            Gets the ResultSummary element.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.Results">

+            <summary>

+            Gets the Results element.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.TestRunId">

+            <summary>

+            Sets the TestRunId.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.TestRunName">

+            <summary>

+            Sets the TestRunName.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.TestRunUser">

+            <summary>

+            Sets the TestRunUser.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.TestRunConfigurationName">

+            <summary>

+            Sets the TestRunConfigurationName.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.TestRunConfigurationId">

+            <summary>

+            Sets the TestRunConfigurationId.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.RunOutcome">

+            <summary>

+            Sets the overall run outcome value.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.VisualStudioLogProvider.Writer.TestRunConfigurationDescription">

+            <summary>

+            Sets the TestRunConfigurationDescription.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.ClassicTestPage">

+            <summary>

+            A user control that should be used as the root visual for a Silverlight 

+            plugin if developers would like to use the advanced TestSurface 

+            functionality within Microsoft.Silverlight.Testing.

+            

+            The TestSurface is automatically cleared after each test scenario 

+            completes, eliminating the need for many additional cleanup methods.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ClassicTestPage.#ctor">

+            <summary>

+            Initializes the TestPage object.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ClassicTestPage.InitializeComponent">

+            <summary>

+            InitializeComponent

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.ClassicTestPage.TestPanel">

+            <summary>

+            Gets the test surface, a dynamic Panel that removes its children 

+            elements after each test completes.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TextFailuresLogProvider">

+            <summary>

+            A log provider that outputs failures as a string.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TextFailuresLogProvider._failures">

+            <summary>

+            A list of failing results.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TextFailuresLogProvider.#ctor">

+            <summary>

+            Initializes a new TextFailuresLogProvider instance.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TextFailuresLogProvider.GetFailuresLog">

+            <summary>

+            Retrieve the text log of all failures in the unit test run.

+            </summary>

+            <returns>Returns the log contents.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TextFailuresLogProvider.RegisterLogHandlers">

+            <summary>

+            Register the handler conditions of interest to this log provider.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TextFailuresLogProvider.ProcessResult(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Process a UTF result message.

+            </summary>

+            <param name="logMessage">The log message object.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.TestPage">

+            <summary>

+            A user control that should be used as the root visual for a Silverlight 

+            plugin if developers would like to use the advanced TestSurface 

+            functionality within Microsoft.Silverlight.Testing. The TestSurface is 

+            automatically cleared after each test scenario completes, eliminating 

+            the need for many additional cleanup methods.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestPage._harness">

+            <summary>

+            Backing field for the unit test harness instance.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestPage._model">

+            <summary>

+            Backing field for the model manager.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestPage._startupTimer">

+            <summary>

+            Backing field for the startup timer.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestPage._clipboardFeatureSupported">

+            <summary>

+            Backing field for a value indicating whether the clipboard feature

+            is supported.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.#ctor">

+            <summary>

+            Initializes the TestPage object.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.#ctor(Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes the TestPage object.

+            </summary>

+            <param name="harness">The test harness instance.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.StartupMonitor(System.Object,System.EventArgs)">

+            <summary>

+            Waits for the Settings to become available, either by the service or

+            system setting the instance property.

+            </summary>

+            <param name="sender">The source timer.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.StartTestRun">

+            <summary>

+            Starts the test run.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.OnTestAssemblyStarting(System.Object,Microsoft.Silverlight.Testing.Harness.TestAssemblyStartingEventArgs)">

+            <summary>

+            Handles the test assembly starting event to expand the test stage

+            height.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.OnTestHarnessCompleted(System.Object,Microsoft.Silverlight.Testing.Harness.TestHarnessCompletedEventArgs)">

+            <summary>

+            Handles the test harness complete event, to display results.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.OnTestStageExpanderClick(System.Object,System.EventArgs)">

+            <summary>

+            Handles the click on the test stage.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.ExpandCollapseTestStage(System.Boolean)">

+            <summary>

+            Expand and collapse the test stage.

+            </summary>

+            <param name="expand">A value indicating whether to expand the stage.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.OnTestMethodCompleted(System.Object,Microsoft.Silverlight.Testing.Harness.TestMethodCompletedEventArgs)">

+            <summary>

+            Handles the completion of a test method.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.OnTagExpressionSelected(System.Object,Microsoft.Silverlight.Testing.Client.TagExpressionEventArgs)">

+            <summary>

+            Handles the completion event on the tag expression editor to begin

+            the test run using the user-provided settings.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.OnResultNavigationClick(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handles navigation back or forward.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.OnInstallClick(System.Object,System.EventArgs)">

+            <summary>

+            Installs the application.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.OnClipboardButtonClick(System.Object,System.EventArgs)">

+            <summary>

+            Offers clipboard interface support for copying test run results.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.OnPlayPauseClick(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handles the click on a play/pause button for the run dispatcher.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.SetClipboardText(System.String)">

+            <summary>

+            Copies text into the clipboard. If the Silverlight runtime on the

+            system does not support the clipboard API, then it reverts to a

+            large text box that allows the user to manually copy and paste.

+            </summary>

+            <param name="text">The text to set.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestPage.InitializeComponent">

+            <summary>

+            InitializeComponent

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestPage.TestPanel">

+            <summary>

+            Gets the test surface, a dynamic Panel that removes its children 

+            elements after each test completes.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestPage.UnitTestHarness">

+            <summary>

+            Gets the unit test harness instance.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestPage.TreeView">

+            <summary>

+            Gets the tree view instance.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Properties.UnitTestMessage">

+            <summary>

+              A strongly-typed resource class, for looking up localized strings, etc.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.ResourceManager">

+            <summary>

+              Returns the cached ResourceManager instance used by this class.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.Culture">

+            <summary>

+              Overrides the current thread's CurrentUICulture property for all

+              resource lookups using this strongly typed resource class.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.CompositeWorkItem_Invoke_NoRemainingWorkItems">

+            <summary>

+              Looks up a localized string similar to There are no remaining test work items.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.LogException">

+            <summary>

+              Looks up a localized string similar to Exception: Type &quot;{0}&quot; Message &quot;{1}&quot;.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.LogIgnore">

+            <summary>

+              Looks up a localized string similar to Ignoring &quot;{0}&quot;.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.LogIncorrectExceptionType">

+            <summary>

+              Looks up a localized string similar to Incorrect exception type &quot;{0}&quot; received. Was expecting a &quot;{1}&quot; type..

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.LogNoException">

+            <summary>

+              Looks up a localized string similar to No Exception was observed. Was expecting a &quot;{0}&quot; type exception..

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.TagAttribute_ctor_EmptyTag">

+            <summary>

+              Looks up a localized string similar to Tag cannot be empty!.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.TagAttribute_ctor_ReservedCharacter">

+            <summary>

+              Looks up a localized string similar to The tag &quot;{0}&quot; contains the invalid character &quot;{1}&quot;!.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.TagAttribute_ctor_ReservedTag">

+            <summary>

+              Looks up a localized string similar to Tag &quot;{0}&quot; is reserved!.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.TagManager_ExpressionEvaluator_EmptyTagExpression">

+            <summary>

+              Looks up a localized string similar to tagExpression cannot be empty!.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.TagManager_ExpressionEvaluator_ExpectedEndOfTagExpression">

+            <summary>

+              Looks up a localized string similar to Expected end of tag expression &quot;{0}&quot; at position {1}!.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.TagManager_ExpressionEvaluator_ExpectedTag">

+            <summary>

+              Looks up a localized string similar to Tag expected in expression &quot;{0}&quot; at position {1}!.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.TagManager_ExpressionEvaluator_InvalidTagExpression">

+            <summary>

+              Looks up a localized string similar to Invalid tag expression &quot;{0}&quot; (expected &quot;{1}&quot; at position {2})!.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.TagTestRunFilter_TaggingInUse">

+            <summary>

+              Looks up a localized string similar to Tag expression &quot;{0}&quot; is in use..

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.TestClassHelper_ExclusiveClassesInUse">

+            <summary>

+              Looks up a localized string similar to Exclusive classes are in use.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.TestMethodHelper_ExclusiveMethodsInUse">

+            <summary>

+              Looks up a localized string similar to Exclusive methods are in use.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.TestMethodManager_CompleteMethod_UnVerifiedBug">

+            <summary>

+              Looks up a localized string similar to The known issue could not be verified. A failure will be recorded. If this bug has been fixed, please mark the Fixed attribute value to True..

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.UnitTestCompositeWorkItem_ctor_NoTestHarness">

+            <summary>

+              Looks up a localized string similar to No TestHarness is available..

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.UnitTestContext_FeatureNotSupported">

+            <summary>

+              Looks up a localized string similar to The &quot;{0}&quot; functionality is not supported within this unit test system..

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.UnitTestHarness_Initialize_UnitTestHarnessInitialize">

+            <summary>

+              Looks up a localized string similar to Initialization of UnitTestHarness.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.UnitTestHarness_RunNextStep_NoCompositeWorkItemsExist">

+            <summary>

+              Looks up a localized string similar to No composite work items exist to be cleared..

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.UnitTestHarness_TestAssembliesNotActionable">

+            <summary>

+              Looks up a localized string similar to No test classes were selected to be in the test run..

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.UnitTestSystem_Run_NoTestHarnessInSettings">

+            <summary>

+              Looks up a localized string similar to Test harness was not specified on test harness settings object. If a test harness settings object was passed in, please verify that it contains a reference to a test harness..

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Properties.UnitTestMessage.WorkItemTest_EnqueueWorkItem_AsynchronousFeatureUnavailable">

+            <summary>

+              Looks up a localized string similar to Test bug: A test cannot use Test Task objects, such as callbacks and conditionals, or the PumpMessages feature, unless marked with the [Asynchronous] attribute..

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTestSystem">

+            <summary>

+            A central entry point for unit test projects and applications.

+            </summary>

+            <summary>

+            A central entry point for unit test projects and applications.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTestSystem.UnitTestSystemName">

+            <summary>

+            Friendly unit test system name.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSystem.PrepareCustomLogProviders(Microsoft.Silverlight.Testing.UnitTestSettings)">

+            <summary>

+            A partial method for PrepareDefaultLogManager.

+            </summary>

+            <param name="settings">The test harness settings.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSystem.SetTestService(Microsoft.Silverlight.Testing.UnitTestSettings)">

+            <summary>

+            A partial method for setting the TestService.

+            </summary>

+            <param name="settings">The test harness settings.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSystem.CreateTestPage">

+            <summary>

+            Creates a new TestPage visual that in turn will setup and begin a 

+            unit test run.

+            </summary>

+            <returns>A new RootVisual.</returns>

+            <remarks>Assumes the calling assembly is a test assembly.</remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSystem.CreateTestPage(Microsoft.Silverlight.Testing.UnitTestSettings)">

+            <summary>

+            Creates a new TestPage visual that in turn will setup and begin a 

+            unit test run.

+            </summary>

+            <param name="settings">Test harness settings to be applied.</param>

+            <returns>A new RootVisual.</returns>

+            <remarks>Assumes the calling assembly is a test assembly.</remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSystem.MergeSettingsAndParameters(Microsoft.Silverlight.Testing.Harness.TestServiceProvider,Microsoft.Silverlight.Testing.UnitTestSettings)">

+            <summary>

+            Merge any settings provided by a test service with the parameters 

+            that were passed inside the TestHarnessSettings.

+            </summary>

+            <param name="testService">The test service.</param>

+            <param name="inputSettings">The run settings.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSystem.PrepareTestService(Microsoft.Silverlight.Testing.UnitTestSettings,System.Action)">

+            <summary>

+            Initializes the test service and its contained providers.

+            </summary>

+            <param name="inputSettings">The run settings.</param>

+            <param name="complete">Action to call once the test service is 

+            initialized and ready to continue the run's execution.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSystem.RegisterUnitTestProvider(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider)">

+            <summary>

+            Register another available unit test provider for the unit test system.

+            </summary>

+            <param name="provider">A unit test provider.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTestSystem._harness">

+            <summary>

+            Test harness instance.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSystem.Run(Microsoft.Silverlight.Testing.UnitTestSettings)">

+            <summary>

+            Start a new unit test run.

+            </summary>

+            <param name="settings">Unit test settings object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSystem.SetStandardLogProviders(Microsoft.Silverlight.Testing.UnitTestSettings)">

+            <summary>

+            Prepares the default log manager.

+            </summary>

+            <param name="settings">The test harness settings.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSystem.TryAddVisualStudioLogProvider(Microsoft.Silverlight.Testing.UnitTestSettings)">

+            <summary>

+            Tries to instantiate and initialize a VSTT provider. Requires that 

+            XLinq is available and included in the application package.

+            </summary>

+            <param name="settings">The test harness settings object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSystem.CreateDefaultSettings">

+            <summary>

+            Creates the default settings that would be used by the UnitTestHarness

+            if none were specified.

+            </summary>

+            <returns>A new RootVisual.</returns>

+            <remarks>Assumes the calling assembly is a test assembly.</remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSystem.OnTestHarnessCompleted(Microsoft.Silverlight.Testing.Harness.TestHarnessCompletedEventArgs)">

+            <summary>

+            Call the TestHarnessCompleted event.

+            </summary>

+            <param name="args">The test harness completed event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSystem.CreateDefaultSettings(System.Reflection.Assembly)">

+            <summary>

+            Create a default settings object for unit testing.

+            </summary>

+            <param name="callingAssembly">The assembly reflection object.</param>

+            <returns>A unit test settings instance.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSystem.SystemName">

+            <summary>

+            Gets the test system name built into the assembly.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSystem.FrameworkFileVersion">

+            <summary>

+            Gets a string representing the file version attribute of the main

+            unit test framework assembly, if present.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.UnitTestSystem.TestHarnessCompleted">

+            <summary>

+            A completed test harness handler.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.WorkItemExtensions">

+            <summary>

+            A class contains extension methods and helpers for dealing with WorkItem

+            instances and improving framework performance.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemExtensions.EnqueueQuickWorkItem(Microsoft.Silverlight.Testing.WorkItemTest,Microsoft.Silverlight.Testing.WorkItem)">

+            <summary>

+            Enqueues a work item into the task queue. The work item will run

+            immediately following the previous work item, and may not leave any

+            time before executing the next. This is a specialized method to be

+            used for performance improvements.

+            </summary>

+            <param name="test">The work item test.</param>

+            <param name="workItem">The unit of work.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemExtensions.EnqueueQuickCallback(Microsoft.Silverlight.Testing.WorkItemTest,System.Action)">

+            <summary>

+            Enqueues a method into the task queue. The method will run

+            immediately following the previous work item, and may not leave any

+            time before executing the next. This is a specialized method to be

+            used for performance improvements.

+            </summary>

+            <param name="test">The work item test.</param>

+            <param name="callback">The callback action or method.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemExtensions.EnqueueQuickConditional(Microsoft.Silverlight.Testing.WorkItemTest,System.Func{System.Boolean})">

+            <summary>

+            Enqueues a conditional statement into the task queue. The method will

+            run immediately following the previous work item, and may not leave

+            any time before executing the next. This is a specialized method to

+            be used for performance improvements.

+            </summary>

+            <param name="test">The work item test.</param>

+            <param name="conditional">The conditional function or statement.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.WorkItemTest">

+            <summary>

+            Custom test class that provides the ability to perform semi-asynchronous 

+            test tasks on the main thread.  Requires the custom unit test harness 

+            that manages and invokes test work items on the thread when needed.

+            

+            Tests using this functionality will not be compatible with the full 

+            desktop framework's Visual Studio Team Test environment.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.TestComplete">

+            <summary>

+            Signal that a test is complete when using Async testing.  

+            

+            WARNING: If you use your own methods for completing, such as an 

+            HtmlTimer or other threading method, it is possible that this call 

+            will occur *AFTER* the test has timed out when using Timeouts.  As 

+            such, be very careful as you could complete the call to the *next* 

+            test.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.EnqueueWorkItem(Microsoft.Silverlight.Testing.WorkItem)">

+            <summary>

+            Add a task object to the test queue.  For a test that is currently 

+            executing, all tasks contained within the queue are executed to 

+            completion (unless an Exception is thrown) -before- moving on to 

+            the next test.

+            

+            The test task queue replaces the PumpMessages(...) system that 

+            permitted a single callback.  This enables specialized tasks, such 

+            as DOM bridge tasks, sleep tasks, and conditional continue tasks.

+            </summary>

+            <param name="testTaskObject">Asynchronous test task 

+            instance.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.EnqueueDelay(System.TimeSpan)">

+            <summary>

+            Delay a minimum amount of time before continuing. Similar to a sleep

+            call that is not a blocking call.

+            </summary>

+            <param name="delay">The minimum time span to wait before continuing.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.CreateDelay(System.TimeSpan)">

+            <summary>

+            Creates a delay work item instance.

+            </summary>

+            <param name="delay">The minimum time span to wait before continuing.</param>

+            <returns>Returns a new work item.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.EnqueueDelay(System.Double)">

+            <summary>

+            Delay a minimum amount of time before continuing. Similar to a sleep

+            call that is not a blocking call.

+            </summary>

+            <param name="milliseconds">The minimum number of milliseconds to wait

+            until the delay is finished.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.EnqueueConditional(System.Func{System.Boolean})">

+            <summary>

+            Requires a bool returning delegate to be passed in. Instructs the 

+            test task queue to wait until the conditional call returns True to 

+            continue executing other test tasks and/or ending the test method.

+            </summary>

+            <param name="conditionalDelegate">Conditional method or delegate. 

+            Test will halt until this condition returns True.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.CreateConditional(System.Func{System.Boolean})">

+            <summary>

+            Creates a conditional work item instance.

+            </summary>

+            <param name="conditionalDelegate">Conditional method or delegate. 

+            Test will halt until this condition returns True.</param>

+            <returns>Returns a new work item.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.EnqueueTestComplete">

+            <summary>

+            Enqueue a test task which calls the TestComplete method of 

+            SilverlightTest.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.EnqueueCallback(System.Action)">

+            <summary>

+            Add a Callback method into the test task queue.  Similar to the 

+            PumpMessages(...) call, with the difference being that there is no 

+            longer a single requirement: you can enqueue several callback 

+            methods and other test tasks, all of which will execute before the 

+            test completes and/or the engine continues.

+            </summary>

+            <param name="testCallbackDelegate">Void-returning delegate, 

+            anonymous delegates work fine too.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.CreateCallback(System.Action)">

+            <summary>

+            Creates a callback work item instance.

+            </summary>

+            <param name="testCallbackDelegate">Void-returning delegate, 

+            anonymous delegates work fine too.</param>

+            <returns>Returns a new work item.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.EnqueueCallback(System.Action[])">

+            <summary>

+            Adds a number of callback methods into the test task queue.

+            </summary>

+            <param name="actions">Set of Action instances.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.Sleep(System.Int32,System.Action)">

+            <summary>

+            Sleep a minimum number of milliseconds before calling a test 

+            callback delegate.

+            </summary>

+            <param name="sleepMillisecondsMinimum">Minimum number of 

+            milliseconds to sleep.  The only guarantee to the tester 

+            is that the sleep will be >= this amount of ms, and NOT 

+            that there is precision or an exact time.</param>

+            <param name="testCallback">Callback method to 

+            execute after the minimum amount of time has 

+            elapsed.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.Enqueue(System.Action)">

+            <summary>

+            Enqueue an action.  A shortcut for the EnqueueCallback.

+            </summary>

+            <param name="action">The action to enqueue.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItemTest.EnqueueSleep(System.Int32)">

+            <summary>

+            Sleep a minimum number of milliseconds.  This is the simplified 

+            overload which requires no callback.

+            </summary>

+            <param name="sleepMillisecondsMinimum">Minimum number of 

+            milliseconds to sleep.  The only guarantee to the tester is that the

+            sleep will be >= this amount of ms, and NOT that there is precision 

+            or an exact time.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.ExclusiveAttribute">

+            <summary>

+            A special indicator attribute to enable better debugging using 

+            Microsoft.Silverlight.Testing.  

+            

+            As there is very little parameter information available for a test run, 

+            this attribute singles out specific classes to execute when found.

+            

+            This attribute is unique to this environment and not compatible with any 

+            desktop unit test framework without using a shim if it is left in code.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.PresentationTest">

+            <summary>

+            Implementation of useful properties and features for presentation 

+            platform tests (Silverlight and WPF).

+            

+            Tests using this functionality will not be compatible with the full 

+            desktop framework's Visual Studio Team Test environment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.PresentationTest.TestPanel">

+            <summary>

+            Gets the test panel.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.SilverlightTest">

+            <summary>

+            Provides access to Silverlight-specific test features and 

+            functionality.

+            

+            Tests using this functionality will not be compatible with the full 

+            desktop framework's Visual Studio Team Test environment.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.WorkItem">

+            <summary>

+            A test work item is a task that is invoked until it is complete.  It 

+            maintains its own state to be able to notify the caller when it is 

+            finally complete, with no further work to be run.

+            

+            It is possible that some implementations of a TestWorkItem may actually 

+            contain a set of sub-tasks by implementing a composite pattern.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.WorkItem._canExecuteImmediately">

+            <summary>

+            A value indicating whether the task can immediately execute.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItem.Invoke">

+            <summary>

+            Invoke the task.  Return false only when the task is complete.

+            </summary>

+            <returns>True if there is additional work to be completed.  False 

+            when there is none.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.WorkItem.WorkItemComplete">

+            <summary>

+            Called by the task after the work is complete.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.WorkItem.IsComplete">

+            <summary>

+            Gets a value indicating whether the task's work is complete.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.WorkItem.CanExecuteImmediately">

+            <summary>

+            Gets or sets a value indicating whether the work item can be

+            executed immediately, and does not rely on special asynchronous

+            operation. Used for performance improvements. The setter is also

+            public.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.UnitTestLogMessageWriter">

+            <summary>

+            The extended writer for the unit testing harness and consumers.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.LogMessageWriter">

+            <summary>

+            A utility type that writes new log messages to the test harness log

+            queue.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogMessageWriter._factory">

+            <summary>

+            The factory used for creating new LogMessage types.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogMessageWriter._testHarness">

+            <summary>

+            The test harness that contains the method to post new events into

+            the log message queue.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.#ctor(Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initialize a new writer class, using the default LogMessageFactory

+            to create new messages.

+            </summary>

+            <param name="harness">The test harness instance.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.#ctor(Microsoft.Silverlight.Testing.Harness.UnitTestHarness,Microsoft.Silverlight.Testing.Harness.LogMessageFactory)">

+            <summary>

+            Initialize a new writer class.

+            </summary>

+            <param name="harness">The test harness instance.</param>

+            <param name="messageFactory">

+            The factory to use when creating new messages.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.Enqueue(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Posts a log message to the test harness queue for processing.

+            </summary>

+            <param name="message">The log message object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.Create">

+            <summary>

+            Creates a new log message using the embedded factory.

+            </summary>

+            <returns>Returns a new LogMessage instance.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.Create(Microsoft.Silverlight.Testing.Harness.LogMessageType)">

+            <summary>

+            Creates a new log message using the embedded factory.

+            </summary>

+            <param name="messageType">The message type.</param>

+            <returns>Returns a new LogMessage instance.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.Create(Microsoft.Silverlight.Testing.Harness.LogMessageType,System.String)">

+            <summary>

+            Creates a new log message using the embedded factory.

+            </summary>

+            <param name="messageType">The message type.</param>

+            <param name="message">The text message.</param>

+            <returns>Returns a new LogMessage instance.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.Decorate(Microsoft.Silverlight.Testing.Harness.LogMessage,System.Object,System.Object)">

+            <summary>

+            Decorate a log message with a value.

+            </summary>

+            <param name="message">The log message to decorate.</param>

+            <param name="key">The key for this decoration.</param>

+            <param name="value">The value of this decoration.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.DecorateException(Microsoft.Silverlight.Testing.Harness.LogMessage,System.Exception)">

+            <summary>

+            Decorate the log message object with an Exception object.

+            </summary>

+            <param name="message">The log message object.</param>

+            <param name="exception">The Exception.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.DecorateNameProperty(Microsoft.Silverlight.Testing.Harness.LogMessage,System.String)">

+            <summary>

+            Decorate the log message object with a name.

+            </summary>

+            <param name="message">The log message object.</param>

+            <param name="name">Name property value.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.DecorateTestStage(Microsoft.Silverlight.Testing.Harness.LogMessage,Microsoft.Silverlight.Testing.Harness.TestStage)">

+            <summary>

+            Decorate the log message object with a test stage value.

+            </summary>

+            <param name="message">The log message object.</param>

+            <param name="stage">Test stage value.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.DecorateTestOutcome(Microsoft.Silverlight.Testing.Harness.LogMessage,Microsoft.Silverlight.Testing.Harness.TestOutcome)">

+            <summary>

+            Decorate the log message object with a test outcome object.

+            </summary>

+            <param name="message">The log message object.</param>

+            <param name="outcome">Test outcome object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.DecorateTestGranularity(Microsoft.Silverlight.Testing.Harness.LogMessage,Microsoft.Silverlight.Testing.Harness.TestGranularity)">

+            <summary>

+            Decorate the log message object with a test granularity object.

+            </summary>

+            <param name="message">The log message object.</param>

+            <param name="granularity">Test granularity object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.SetType(Microsoft.Silverlight.Testing.Harness.LogMessage,Microsoft.Silverlight.Testing.Harness.LogMessageType)">

+            <summary>

+            Sets the type of the log message.

+            </summary>

+            <param name="message">The log message object.</param>

+            <param name="type">The new value to set the message type to.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.DebugWriteLine(System.String)">

+            <summary>

+            This writes a new line of information similar to a Debug::WriteLine

+            call.

+            </summary>

+            <param name="text">The text to write.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.Information(System.String)">

+            <summary>

+            Writes information through a new log message.

+            </summary>

+            <param name="info">The information string.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.TestInfrastructure(System.String)">

+            <summary>

+            Writes a message relating to the test infrastructure.

+            </summary>

+            <param name="text">The text to write.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.Environment(System.String)">

+            <summary>

+            Writes an environment message.

+            </summary>

+            <param name="text">The text to write.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.TestExecution(System.String)">

+            <summary>

+            Writes a TestRun message.

+            </summary>

+            <param name="text">The text to write.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.Error(System.String,System.Exception)">

+            <summary>

+            Log an error message.

+            </summary>

+            <param name="errorMessage">The error message string.</param>

+            <param name="exception">The Exception object to decorate the message

+            with.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.Error(System.String)">

+            <summary>

+            Log an error message.

+            </summary>

+            <param name="errorMessage">The error message string.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.Warning(System.String,System.Exception)">

+            <summary>

+            Log a warning message.

+            </summary>

+            <param name="warningMessage">The warning message string.</param>

+            <param name="exception">The Exception object to decorate the message

+            with.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.Warning(System.String)">

+            <summary>

+            Log a warning message.

+            </summary>

+            <param name="warningMessage">The warning message string.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.TestResult(System.String,Microsoft.Silverlight.Testing.Harness.TestOutcome)">

+            <summary>

+            Record a test outcome.

+            </summary>

+            <param name="message">The accompanying message.</param>

+            <param name="outcome">The outcome value.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.KnownIssue(System.String)">

+            <summary>

+            Writes information about an encountered, known issue.

+            </summary>

+            <param name="issue">Information about the known issue.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageWriter.GranularTestStage(System.String,System.String,Microsoft.Silverlight.Testing.Harness.TestGranularity,Microsoft.Silverlight.Testing.Harness.TestStage)">

+            <summary>

+            Records a log message that indicates a named, granular test stage 

+            has happened.

+            </summary>

+            <param name="message">Any message for the log.</param>

+            <param name="name">A name for the object or event.</param>

+            <param name="granularity">The test granularity value.</param>

+            <param name="stage">The test stage value.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogMessageWriter.#ctor(Microsoft.Silverlight.Testing.Harness.UnitTestHarness)">

+            <summary>

+            Initializes the unit test log message writer helper.

+            </summary>

+            <param name="harness">The test harness reference.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogMessageWriter.MarkUnitTestMessage(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Marks a message as a unit test system-specific message.

+            </summary>

+            <param name="message">The log message object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogMessageWriter.IncorrectException(System.Type,System.Type,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod)">

+            <summary>

+            An incorrect exception type has occurred.

+            </summary>

+            <param name="expectedExceptionType">The expected type.</param>

+            <param name="actualExceptionType">The actual exception's type.</param>

+            <param name="test">The test metadata.</param>

+            <param name="method">The method metadata.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogMessageWriter.NoExceptionWhenExpected(System.Type,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod)">

+            <summary>

+            No Exception was intercepted, yet one was expected.

+            </summary>

+            <param name="expectedExceptionType">The expected exception type.</param>

+            <param name="test">The test class metadata.</param>

+            <param name="method">The test method metadata.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogMessageWriter.LogException(System.Exception,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod)">

+            <summary>

+            Logs and Exception that was intercepted or observed.

+            </summary>

+            <param name="exception">The actual Exception instance.</param>

+            <param name="test">The test class metadata.</param>

+            <param name="method">The test method metadata.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogMessageWriter.Ignore(Microsoft.Silverlight.Testing.Harness.TestGranularity,System.String)">

+            <summary>

+            Enqueues a Ignore message.

+            </summary>

+            <param name="granularity">The granularity of the ignore operation.</param>

+            <param name="name">The name of the test skipped.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogMessageWriter.TestRunFilterSelected(Microsoft.Silverlight.Testing.Harness.TestRunFilter)">

+            <summary>

+            Enqueues a message containing a test run filter.

+            </summary>

+            <param name="filter">The test run filter.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogMessageWriter.GranularAssemblyTestStage(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly,Microsoft.Silverlight.Testing.Harness.TestGranularity,Microsoft.Silverlight.Testing.Harness.TestStage)">

+            <summary>

+            Records a log message that indicates a named, granular test stage has 

+            happened.

+            </summary>

+            <param name="assembly">The assembly metadata object.</param>

+            <param name="granularity">The test granularity value.</param>

+            <param name="stage">The test stage value.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogMessageWriter.TestClassStage(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,Microsoft.Silverlight.Testing.Harness.TestStage)">

+            <summary>

+            Log a test class's stage.

+            </summary>

+            <param name="test">The test class metadata object.</param>

+            <param name="stage">The test stage.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogMessageWriter.TestResult(Microsoft.Silverlight.Testing.Harness.ScenarioResult)">

+            <summary>

+            Log the result of a unit test scenario.

+            </summary>

+            <param name="result">The result of the test.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogMessageWriter.TestMethodStage(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod,Microsoft.Silverlight.Testing.Harness.TestStage)">

+            <summary>

+            Log a test method's stage.

+            </summary>

+            <param name="method">The test method metadata object.</param>

+            <param name="stage">The test stage.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestLogMessageWriter.UnitTestHarnessStage(Microsoft.Silverlight.Testing.Harness.UnitTestHarness,System.String,Microsoft.Silverlight.Testing.Harness.TestStage)">

+            <summary>

+            Records a harness state for the unit test harness.

+            </summary>

+            <param name="harness">The unit test harness.</param>

+            <param name="name">The harness name.</param>

+            <param name="stage">The test stage.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.UnitTestHarness">

+            <summary>

+            A test harness for interacting with unit test providers such as Visual 

+            Studio Team Test's metadata.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.HarnessName">

+            <summary>

+            Display name for this harness.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestHarness._globalExceptions">

+            <summary>

+            Manages the attachment state of a global exception handler.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestHarness._harnessTasks">

+            <summary>

+            Container of all work items for the test harness.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestHarness._dispatcherStack">

+            <summary>

+            Manager of the stack of dispatchers, so that the appropriate parent 

+            container handles exceptions and completion events.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestHarness._validTestAssemblies">

+            <summary>

+            Number of valid test assemblies encountered.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestHarness._knownTestMethods">

+            <summary>

+            The current run's known number of test methods.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestHarness._events">

+            <summary>

+            Backing field for the event firing helper.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.#ctor">

+            <summary>

+            Initiate unit test harness.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestHarness._queuedLogMessages">

+            <summary>

+            Queue of log messages awaiting processing.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.AddLogProvider(Microsoft.Silverlight.Testing.Harness.LogProvider)">

+            <summary>

+            Adds a log provider to the listening log providers group.

+            </summary>

+            <param name="provider">Log provider object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.QueueLogMessage(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Enqueue a log message object for processing by the log providers.

+            </summary>

+            <param name="message">The log message object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.Run">

+            <summary>

+            Begin running the test harness.

+            </summary>

+            <remarks>

+            Make sure to subscribe to the Complete event before calling this 

+            method, in some harnesses this may be a synchronous Run followed 

+            immediately by the Complete event being fired.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.RunDispatcherComplete(System.Object,System.EventArgs)">

+            <summary>

+            Complete event.

+            </summary>

+            <param name="sender">The sender.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.WriteLogFile(System.String,System.String)">

+            <summary>

+            Stores a log file for the test run. Depending on the execution 

+            environment, this call may not successful.

+            </summary>

+            <param name="logName">The name of the log file.</param>

+            <param name="fileContent">The log file content as a string.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.PublishFinalResult">

+            <summary>

+            If supported by any attached test service, this publishes the final

+            test results. Typical harness implementations may immediately close

+            the web browser channel upon receiving the message, so any other

+            reporting should be done first.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.ProcessLogMessages">

+            <summary>

+            Process all queued log messages.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.InitializeSettings(Microsoft.Silverlight.Testing.UnitTestSettings)">

+            <summary>

+            Fill member variables with any non-null settings of the same type.

+            </summary>

+            <param name="settings">Settings container class.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.InitializeLogProviders">

+            <summary>

+            Initializes all log providers.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.OnTestHarnessCompleted">

+            <summary>

+            Call the TestHarnessCompleted event.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.OnPublishing(System.EventArgs)">

+            <summary>

+            Call the Publishing event.

+            </summary>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.PublishResults">

+            <summary>

+            Overrides the PublishResults method so that final reporting is only

+            done once all other logging is finished.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.PublishFinalResults">

+            <summary>

+            Publish final results. If not yet ready, will keep waiting around

+            as a work item until it is done.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestHarness._dispatcher">

+            <summary>

+            Stored dispatcher instance.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.IsReportingTestServiceConnected">

+            <summary>

+            Checks if a reporting provider is connected to the test service.

+            </summary>

+            <returns>Returns true if a reporting provider is connected to the

+            test service.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.SetOverallStatus(System.String)">

+            <summary>

+            Immediately sets the overall status using a log message and

+            processes the message queue.

+            </summary>

+            <param name="message">The message to set.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.PrepareCustomTestInstance(Microsoft.Silverlight.Testing.CustomFrameworkUnitTest)">

+            <summary>

+            Sets the unit test harness property for a test case that inherits 

+            from the abstract base type 'CustomTest'.

+            </summary>

+            <param name="customTest">A CustomText instance.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.Initialize">

+            <summary>

+            Initialize the harness with a set of test assemblies.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.RestartRunDispatcher">

+            <summary>

+            Restarts the run dispatcher.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.TrackScenarioResult(Microsoft.Silverlight.Testing.Harness.ScenarioResult)">

+            <summary>

+            Track the results for our execution and also track the fail state.

+            </summary>

+            <param name="result">Scenario result to process.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.OnTestAssemblyStarting(Microsoft.Silverlight.Testing.Harness.TestAssemblyStartingEventArgs)">

+            <summary>

+            Fires the test assembly starting event.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.OnIsDispatcherRunningChanged(System.EventArgs)">

+            <summary>

+            Fires the play pause event.

+            </summary>

+            <param name="e">Event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.OnTestAssemblyCompleted(Microsoft.Silverlight.Testing.Harness.TestAssemblyCompletedEventArgs)">

+            <summary>

+            Fires the test assembly completed event.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.OnTestClassStarting(Microsoft.Silverlight.Testing.Harness.TestClassStartingEventArgs)">

+            <summary>

+            Fires the test class starting event.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.OnTestClassCompleted(Microsoft.Silverlight.Testing.Harness.TestClassCompletedEventArgs)">

+            <summary>

+            Fires the test class completed event.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.OnTestMethodStarting(Microsoft.Silverlight.Testing.Harness.TestMethodStartingEventArgs)">

+            <summary>

+            Fires the test method starting event.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.OnTestMethodCompleted(Microsoft.Silverlight.Testing.Harness.TestMethodCompletedEventArgs)">

+            <summary>

+            Notifies observers that a test method has been completed. Also

+            clears the test panel's visual tree.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.OnTestRunStarting(Microsoft.Silverlight.Testing.Harness.TestRunStartingEventArgs)">

+            <summary>

+            Notifies observers that a test run has been started.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestHarness._testPage">

+            <summary>

+            Reference to the test page object.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.ReportCodeCoverage(Microsoft.Silverlight.Testing.Harness.TestServiceProvider)">

+            <summary>

+            Attempts to report the code coverage information using the test 

+            service provider. If there is no available coverage reporting 

+            service, this is a silent failure. Only reports if >= 1 blocks 

+            are hit.

+            </summary>

+            <param name="testService">The test service.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.EnqueueTestAssembly(System.Reflection.Assembly,Microsoft.Silverlight.Testing.Harness.TestRunFilter)">

+            <summary>

+            Enqueue a test assembly from a simple Assembly reference.

+            </summary>

+            <param name="assembly">The test assembly.</param>

+            <param name="runFilter">The run filter settings for the test assembly's run.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.EnqueueTestAssembly(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly,Microsoft.Silverlight.Testing.Harness.TestRunFilter)">

+            <summary>

+            Enqueues a test assembly.

+            </summary>

+            <param name="testAssembly">The test assembly metadata.</param>

+            <param name="runFilter">The run filter settings for the test assembly's run.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.RunNextStep">

+            <summary>

+            Flush the current log manager and then perform the next invoke.

+            </summary>

+            <returns>Returns true if work remains.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.CreateTestRunFilter(Microsoft.Silverlight.Testing.UnitTestSettings)">

+            <summary>

+            Creates the test run filter for the initial run.

+            </summary>

+            <param name="settings">The unit test settings.</param>

+            <returns>Returns a new TestRunFilter instance.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.PrepareTestAssemblyTasks">

+            <summary>

+            Determine what test assemblies need to be executed. Enqueue tasks 

+            for the unit test assembly providers to run the tests.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.CalculateTotalMethods(Microsoft.Silverlight.Testing.Harness.AssemblyManager,Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly,Microsoft.Silverlight.Testing.Harness.TestRunFilter)">

+            <summary>

+            Calculates the number of methods for a run.

+            </summary>

+            <param name="assemblyManager">The assembly manager.</param>

+            <param name="assembly">The test assembly.</param>

+            <param name="filter">The test run filter.</param>

+            <returns>Returns the number of known methods returned.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.HarnessComplete(System.Object,System.EventArgs)">

+            <summary>

+            Event fired at the completion of the harness' work.

+            </summary>

+            <param name="sender">Sender object instance.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.GlobalUnhandledExceptionListener(System.Object,System.EventArgs)">

+            <summary>

+            Listener event for any unhandled exceptions.

+            </summary>

+            <param name="sender">Sender object instance.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.CreateHarnessTasks">

+            <summary>

+            Creates the set of harness tasks to run and hooks up to the Complete event.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.Results">

+            <summary>

+            Gets the list of results.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.LogWriter">

+            <summary>

+            Gets the log message writer instance.  This can be used to easily 

+            post informative messages to the log message queue and providers.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.LogicFactory">

+            <summary>

+            Gets or sets the logic factory used for instantiating the 

+            unit test logic and management objects.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.State">

+            <summary>

+            Gets or sets the overall harness state - overloaded types can be 

+            used to store additional information.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.LogProviders">

+            <summary>

+            Gets the log providers list.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.RunDispatcher">

+            <summary>

+            Gets or sets the wrapper that handles calling the next Run step 

+            method until complete; allows for a virtual Run method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.Parameters">

+            <summary>

+            Gets the dictionary of Parameters passed into the test harness.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.Settings">

+            <summary>

+            Gets or sets the settings used to initialize the test harness.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.Events">

+            <summary>

+            Gets a set of events that can be fired for test results and other

+            important test runtime events.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.Publishing">

+            <summary>

+            The test harness is publishing results.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.TestService">

+            <summary>

+            Gets the TestService referenced by the test harness settings. The 

+            test service provides advanced, optional functionality that is 

+            useful to harness and test case developers. A typical test service 

+            operates outside the process or security boundary.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.TestHarnessCompleted">

+            <summary>

+            Complete event fired when the test harness has finished its test 

+            run.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.Dispatcher">

+            <summary>

+            Gets a dispatcher instance.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.RootCompositeWorkItem">

+            <summary>

+            Gets the root container for test work to be completed.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.TestMethodCount">

+            <summary>

+            Gets the known number of test methods in the current test run.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.InterceptAllExceptions">

+            <summary>

+            Gets or sets a value indicating whether to intercept exceptions at 

+            the app domain level and funnel into the current container or not.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.DispatcherStack">

+            <summary>

+            Gets the internal DispatcherStack being used by the test harness.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.TestAssemblyStarting">

+            <summary>

+            The test assembly starting event.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.IsDispatcherRunningChanged">

+            <summary>

+            On the play or pause change of the dispatcher.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.IsDispatcherRunning">

+            <summary>

+            Gets or sets a value indicating whether the dispatcher is currently

+            running.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.TestAssemblyCompleted">

+            <summary>

+            Test assembly completed event.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.TestClassStarting">

+            <summary>

+            Test class starting event.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.TestClassCompleted">

+            <summary>

+            The test class completed event.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.TestMethodStarting">

+            <summary>

+            The test method starting event.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.TestMethodCompleted">

+            <summary>

+            An event that is fired whenever a test method completes.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.TestRunStarting">

+            <summary>

+            An event that is fired when the test run is starting.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.TestPage">

+            <summary>

+            Gets or sets the test page.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestHarness.TestPanelManager">

+            <summary>

+            Gets the test panel manager instance.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator">

+            <summary>

+            Well-known keys that can be used to mark decorator instances in log 

+            message objects.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator.IsUnitTestMessage">

+            <summary>

+            Indicates that the message is specific to the unit test system.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator.UnitTestHarness">

+            <summary>

+            The unit test harness reference.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator.TestAssemblyMetadata">

+            <summary>

+            The metadata interfacing object for a test assembly.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator.TestClassMetadata">

+            <summary>

+            The metadata interfacing object for a test class.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator.TestMethodMetadata">

+            <summary>

+            The metadata interfacing object for a test method.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator.IncorrectExceptionMessage">

+            <summary>

+            Indicates that the incorrect exception was intercepted.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator.IgnoreMessage">

+            <summary>

+            Indicates that the message indicates a skipped/ignored item.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator.ExpectedExceptionType">

+            <summary>

+            The type of the expected exception.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator.ActualExceptionType">

+            <summary>

+            The type of the actual exception.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator.ActualException">

+            <summary>

+            The actual exception.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator.TestRunFilter">

+            <summary>

+            A TestRunFilter object.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator.ScenarioResult">

+            <summary>

+            A ScenarioResult object.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.UnitTestMessageConditional">

+            <summary>

+            Helper conditional methods for unit test-specific log messages.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestMessageConditional.IsUnitTestEndMessage(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Determines whether a log message meets a specific condition or set 

+            of conditions.

+            </summary>

+            <param name="message">The log message object.</param>

+            <returns>Returns true if the condition is met.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestMessageConditional.IsUnitTestStartMessage(Microsoft.Silverlight.Testing.Harness.UnitTestLogDecorator)">

+            <summary>

+            Determines whether a log message meets a specific condition or set 

+            of conditions.

+            </summary>

+            <param name="decorator">The unit test decorator of interest.</param>

+            <returns>Returns true if the condition is met.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestMessageConditional.IsUnitTestMessage(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Returns a value indicating whether the message is marked as a unit

+            test system message.

+            </summary>

+            <param name="message">The message.</param>

+            <returns>Returns true if the message is a unit test system-marked 

+            message.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestMessageConditional.HasUnitTestOutcome(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Determines whether a log message meets a specific condition or set 

+            of conditions.

+            </summary>

+            <param name="message">The log message object.</param>

+            <returns>Returns true if the condition is met.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestMessageConditional.IsIgnoreMessage(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Determines whether a log message meets a specific condition or set 

+            of conditions.

+            </summary>

+            <param name="message">The log message object.</param>

+            <returns>Returns true if the condition is met.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestMessageConditional.IsTestRunFilterMessage(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Determines whether a log message has an attached TestRunFilter.

+            </summary>

+            <param name="message">The log message object.</param>

+            <returns>Returns a value indicating whether the condition is met.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestMessageConditional.IsExceptionLogMessage(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Determines whether a log message meets a specific condition or set 

+            of conditions.

+            </summary>

+            <param name="message">The log message object.</param>

+            <returns>Returns true if the condition is met.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestMessageConditional.IsIncorrectExceptionLogMessage(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Determines whether a log message meets a specific condition or set 

+            of conditions.

+            </summary>

+            <param name="message">The log message object.</param>

+            <returns>Returns true if the condition is met.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestMessageConditional.IsKnownBug(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Determines whether a log message meets a specific condition or set 

+            of conditions.

+            </summary>

+            <param name="message">The log message object.</param>

+            <returns>Returns true if the condition is met.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.LazyAssemblyMethodInfo">

+            <summary>

+            A lazy method type.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo">

+            <summary>

+            A class that does a lazy lookup when needed using reflection.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo._attributeType">

+            <summary>

+            Attribute Type instance.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo._searchType">

+            <summary>

+            The Type to search with.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo._hasSearched">

+            <summary>

+            Whether the search has happened.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo._methodInfo">

+            <summary>

+            The method reflection object.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo.#ctor(System.Type)">

+            <summary>

+            Construct a new lazy method wrapper.

+            </summary>

+            <param name="attributeType">The attribute type.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo.#ctor(System.Type,System.Type)">

+            <summary>

+            Construct a new lazy method wrapper.

+            </summary>

+            <param name="searchType">Type to search.</param>

+            <param name="attributeType">Attribute type.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo.GetMethodInfo">

+            <summary>

+            Does a search and retrieves the method information.

+            </summary>

+            <returns>The method reflection object.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo.HasMethodInfo">

+            <summary>

+            Whether the type has a method info.

+            </summary>

+            <returns>A value indicating whether the method information has 

+            been found.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo.Search">

+            <summary>

+            Perform a search on the type.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo.AttributeType">

+            <summary>

+            Gets the type of attribute the lazy method is searching for.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo.SearchType">

+            <summary>

+            Gets the underlying type that is searched.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo.HasSearched">

+            <summary>

+            Gets or sets a value indicating whether a lookup has already been attempted.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.LazyMethodInfo.MethodInfo">

+            <summary>

+            Gets or sets the underlying MethodInfo from reflection.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LazyAssemblyMethodInfo._assembly">

+            <summary>

+            Underlying Assembly reflection object.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LazyAssemblyMethodInfo.#ctor(System.Reflection.Assembly,System.Type)">

+            <summary>

+            Create a new lazy method from a MethodInfo instance.

+            </summary>

+            <param name="assembly">Assembly reflection object.</param>

+            <param name="attributeType">Attribute Type instance.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LazyAssemblyMethodInfo.Search">

+            <summary>

+            Performs a search on the MethodInfo for the attributes needed.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly">

+            <summary>

+            Test assembly metadata interface.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly.GetTestClasses">

+            <summary>

+            Gets a collection of test class metadata objects.

+            </summary>

+            <returns>Returns a collection of metadata objects.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly.AssemblyInitializeMethod">

+            <summary>

+            Gets the initialization method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly.AssemblyCleanupMethod">

+            <summary>

+            Gets the cleanup method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly.Provider">

+            <summary>

+            Gets a reference to the unit test provider.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly.Name">

+            <summary>

+            Gets the name of the test assembly.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly.TestHarness">

+            <summary>

+            Gets the test harness used to initialize the assembly.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IExpectedException">

+            <summary>

+            An expected exception marker for a test method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IExpectedException.ExceptionType">

+            <summary>

+            Gets the expected exception type.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IExpectedException.Message">

+            <summary>

+            Gets any message associated with the expected exception object.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IHostType">

+            <summary>

+            Represents the host type information for a test.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IHostType.HostType">

+            <summary>

+            Gets the Host type.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IHostType.HostData">

+            <summary>

+            Gets the host data.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IPriority">

+            <summary>

+            A representation of a test's priority.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass">

+            <summary>

+            Metadata representing a test class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass.GetTestMethods">

+            <summary>

+            Retrieve a collection of the test method metadata objects setup by 

+            the unit test provider.

+            </summary>

+            <returns>A collection of test method interfaces.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass.Type">

+            <summary>

+            Gets the test class Type instance.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass.Ignore">

+            <summary>

+            Gets a value indicating whether the test class should be ignored.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass.TestInitializeMethod">

+            <summary>

+            Gets the per-test initialization method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass.TestCleanupMethod">

+            <summary>

+            Gets the per-test cleanup method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass.ClassInitializeMethod">

+            <summary>

+            Gets the one-time class initialization method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass.ClassCleanupMethod">

+            <summary>

+            Gets the one-time class cleanup method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass.Name">

+            <summary>

+            Gets the name of the test class.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass.Assembly">

+            <summary>

+            Gets a reference to the parent test assembly metadata 

+            instance.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod">

+            <summary>

+            Test method metadata.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.DecorateInstance(System.Object)">

+            <summary>

+            Used for decorating with unit test provider-specific capabilities, 

+            such as the TestContext concept.

+            </summary>

+            <param name="instance">Instance to decorate.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.GetDynamicAttributes">

+            <summary>

+            Get any attribute on the test method that are provided dynamically.

+            </summary>

+            <returns>

+            Dynamically provided attributes on the test method.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.Invoke(System.Object)">

+            <summary>

+            Invoke the test method.

+            </summary>

+            <param name="instance">Instance of the test class.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.Method">

+            <summary>

+            Gets the test method reflection object.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.WriteLine">

+            <summary>

+            Hooks up to any unit test provider-enabled WriteLine capability 

+            for unit tests.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.Ignore">

+            <summary>

+            Gets a value indicating whether the test is marked to be ignored.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.Description">

+            <summary>

+            Gets any description for the method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.Name">

+            <summary>

+            Gets a name for the method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.Category">

+            <summary>

+            Gets any category information for the method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.Owner">

+            <summary>

+            Gets any test owner information.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.ExpectedException">

+            <summary>

+            Gets any expected exception attribute .

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.Timeout">

+            <summary>

+            Gets any timeout information.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.Properties">

+            <summary>

+            Gets a collection of any test properties.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.WorkItems">

+            <summary>

+            Gets a collection of any test work items.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod.Priority">

+            <summary>

+            Gets any priority information.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestProperty">

+            <summary>

+            A property for a test method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestProperty.Name">

+            <summary>

+            Gets the test property name.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestProperty.Value">

+            <summary>

+            Gets the test property value.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider">

+            <summary>

+            Provider model for a unit test system that uses reflection and metadata 

+            to enable a unit test run.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider.GetUnitTestAssembly(Microsoft.Silverlight.Testing.Harness.UnitTestHarness,System.Reflection.Assembly)">

+            <summary>

+            Retrieve the metadata instance for a test assembly given a 

+            reflection Assembly instance.

+            </summary>

+            <param name="testHarness">The test harness using the provider.</param>

+            <param name="assemblyReference">Reflected test assembly.</param>

+            <returns>Unit test provider-specific metadata instance for 

+            the test assembly.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider.HasCapability(Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities)">

+            <summary>

+            Gets a value indicating whether a specific capability or set of 

+            capabilities are supported by the unit test provider.

+            </summary>

+            <param name="capability">Capability of interest.</param>

+            <returns>Gets a value indicating whether the capability is 

+            supported.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider.IsFailedAssert(System.Exception)">

+            <summary>

+            Checks if an Exception actually represents an assertion that failed 

+            to improve the logging experience.

+            </summary>

+            <param name="exception">Exception object.</param>

+            <returns>Returns true if the Exception is an assertion exception 

+            type.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider.Name">

+            <summary>

+            Gets the name of the unit test provider.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider.Capabilities">

+            <summary>

+            Gets the capabilities that the unit test provider implements.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IWorkItemMetadata">

+            <summary>

+            Work item for a test.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.IWorkItemMetadata.Data">

+            <summary>

+            Gets the associated information from the work item.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.StringEventArgs">

+            <summary>

+            Event arguments that pass along a string value.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.StringEventArgs.#ctor">

+            <summary>

+            Create a new event argument instance.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.StringEventArgs.#ctor(System.String)">

+            <summary>

+            Create a new event argument instance that stores a string value.

+            </summary>

+            <param name="value">String value to pass along.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.StringEventArgs._value">

+            <summary>

+            String value stored in the event arguments.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.StringEventArgs.Value">

+            <summary>

+            Gets the stored string value.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities">

+            <summary>

+            A set of capabilities that a unit test provider may chose to implement 

+            through the metadata interfaces.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities.None">

+            <summary>

+            No defined capabilities.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities.AssemblySupportsInitializeMethod">

+            <summary>

+            Support for attribute [AssemblyInitialize].

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities.AssemblySupportsCleanupMethod">

+            <summary>

+            Support for attribute [AssemblyCleanup].

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities.ClassCanIgnore">

+            <summary>

+            Support for attribute [Ignore] for classes.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities.MethodCanIgnore">

+            <summary>

+            Support for attribute [Ignore] for methods.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities.MethodCanDescribe">

+            <summary>

+            Support for attribute [Description] on methods.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities.MethodCanCategorize">

+            <summary>

+            Support for attribute [Category] on methods.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities.MethodCanHaveOwner">

+            <summary>

+            Support for attribute [Owner] on method.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities.MethodCanHavePriority">

+            <summary>

+            Support for attribute [Priority] on method.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities.MethodCanHaveProperties">

+            <summary>

+            Support for attribute [TestProperty](...) on methods.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities.MethodCanHaveTimeout">

+            <summary>

+            Support for attribute [Timeout] on methods.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities.MethodCanHaveWorkItems">

+            <summary>

+            Support for attribute [WorkItem(...)]('s) on methods.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.SleepWorkItem">

+            <summary>

+            Test work item type that does not complete until the sleep time has 

+            elapsed.  This is NOT a blocking Sleep.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.SleepWorkItem._delay">

+            <summary>

+            The amount of time to delay for.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.SleepWorkItem._expires">

+            <summary>

+            The DateTime that marks the point in time the task is complete.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.SleepWorkItem.#ctor(System.TimeSpan)">

+            <summary>

+            Create a new Sleep work item, including the number of 

+            milliseconds to wait until continuing.

+            </summary>

+            <param name="delay">Amount of time to wait/delay.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.SleepWorkItem.Invoke">

+            <summary>

+            On the first time, will calculate the final DateTime.  Otherwise, 

+            null operation (returns) until that time.

+            </summary>

+            <returns>Returns a value indicating whether there is more work to be

+            done.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ExpectedException">

+            <summary>

+            Expected exception metadata.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ExpectedException.#ctor">

+            <summary>

+            Private constructor.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ExpectedException.#ctor(Microsoft.VisualStudio.TestTools.UnitTesting.ExpectedExceptionAttribute)">

+            <summary>

+            Creates a new expected exception metadata wrapper.

+            </summary>

+            <param name="expectedExceptionAttribute">Attribute value.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ExpectedException._exp">

+            <summary>

+            The expected exception attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ExpectedException.ExceptionType">

+            <summary>

+            Gets the type of the expected exception.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ExpectedException.Message">

+            <summary>

+            Gets any message to include in a failure.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.Priority">

+            <summary>

+            A simple wrapper for a priority integer value that overrides the 

+            ToString method.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.Priority.#ctor(System.Int32)">

+            <summary>

+            Initializes a new instance of the Priority class.

+            </summary>

+            <param name="priority">The priority.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.Priority.ToString">

+            <summary>

+            Gets the priority as string.

+            </summary>

+            <returns>Returns the priority.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.Priority.Value">

+            <summary>

+            Gets the priority value.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes">

+            <summary>

+            The set of provider attributes.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.#cctor">

+            <summary>

+            Initializes the VSTT metadata provider.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.TestClass">

+            <summary>

+            Gets VSTT [TestClass] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.IgnoreAttribute">

+            <summary>

+            Gets VSTT [Ignore] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.ClassInitialize">

+            <summary>

+            Gets VSTT [ClassInitialize] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.Priority">

+            <summary>

+            Gets VSTT [Priority] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.ClassCleanup">

+            <summary>

+            Gets VSTT [ClassCleanup] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.TestInitialize">

+            <summary>

+            Gets VSTT [TestInitialize] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.TestCleanup">

+            <summary>

+            Gets VSTT [TestCleanup] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.DescriptionAttribute">

+            <summary>

+            Gets VSTT [Description] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.TimeoutAttribute">

+            <summary>

+            Gets VSTT [Timeout] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.OwnerAttribute">

+            <summary>

+            Gets VSTT [Owner] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.ExpectedExceptionAttribute">

+            <summary>

+            Gets VSTT [ExpectedException] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.AssemblyInitialize">

+            <summary>

+            Gets VSTT [AssemblyInitialize] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.AssemblyCleanup">

+            <summary>

+            Gets VSTT [AssemblyCleanup] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.TestMethod">

+            <summary>

+            Gets VSTT [TestMethod] attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.ProviderAttributes.TestProperty">

+            <summary>

+            Gets VSTT [TestProperty] attribute.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass">

+            <summary>

+            Test class wrapper.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly)">

+            <summary>

+            Construct a new test class metadata interface.

+            </summary>

+            <param name="assembly">Assembly metadata interface object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly,System.Type)">

+            <summary>

+            Creates a new test class wrapper.

+            </summary>

+            <param name="assembly">Assembly metadata object.</param>

+            <param name="testClassType">Type of the class.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass._type">

+            <summary>

+            Test Type.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass._tests">

+            <summary>

+            Collection of test method interface objects.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass._testsLoaded">

+            <summary>

+            A value indicating whether tests are loaded.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass._m">

+            <summary>

+            A dictionary of method types and method interface objects.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.GetTestMethods">

+            <summary>

+            Gets a collection of test method  wrapper instances.

+            </summary>

+            <returns>A collection of test method interface objects.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.ToString">

+            <summary>

+            Exposes the name of the test class.

+            </summary>

+            <returns>Returns the name of the test class.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.Assembly">

+            <summary>

+            Gets the test assembly metadata.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.Type">

+            <summary>

+            Gets the underlying Type of the test class.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.Name">

+            <summary>

+            Gets the name of the test class.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.Ignore">

+            <summary>

+            Gets a value indicating whether an Ignore attribute present 

+            on the class.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.TestInitializeMethod">

+            <summary>

+            Gets any test initialize method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.TestCleanupMethod">

+            <summary>

+            Gets any test cleanup method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.ClassInitializeMethod">

+            <summary>

+            Gets any class initialize method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.ClassCleanupMethod">

+            <summary>

+            Gets any class cleanup method.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.Methods">

+            <summary>

+            Methods enum.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.Methods.ClassInitialize">

+            <summary>

+            Initialize method.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.Methods.ClassCleanup">

+            <summary>

+            Cleanup method.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.Methods.TestInitialize">

+            <summary>

+            Test init method.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestClass.Methods.TestCleanup">

+            <summary>

+            Test cleanup method.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod">

+            <summary>

+            A provider wrapper for a test method.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.ContextPropertyName">

+            <summary>

+            Property name for the TestContext.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.DefaultPriority">

+            <summary>

+            Default value for methods when no priority attribute is defined.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.None">

+            <summary>

+            An empty object array.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod._methodInfo">

+            <summary>

+            Method reflection object.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.#ctor">

+            <summary>

+            Private constructor, the constructor requires the method reflection object.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.#ctor(System.Reflection.MethodInfo)">

+            <summary>

+            Creates a new test method wrapper object.

+            </summary>

+            <param name="methodInfo">The reflected method.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.OnWriteLine(System.String)">

+            <summary>

+            Call the WriteLine method.

+            </summary>

+            <param name="s">String to WriteLine.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.DecorateInstance(System.Object)">

+            <summary>

+            Decorates a test class instance with the unit test framework's 

+            specific test context capability, if supported.

+            </summary>

+            <param name="instance">Instance to decorate.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.GetDynamicAttributes">

+            <summary>

+            Get any attribute on the test method that are provided dynamically.

+            </summary>

+            <returns>

+            Dynamically provided attributes on the test method.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.Invoke(System.Object)">

+            <summary>

+            Invoke the test method.

+            </summary>

+            <param name="instance">Instance of the test class.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.ToString">

+            <summary>

+            Exposes the name of the test method as a string.

+            </summary>

+            <returns>Returns the name of the test method.</returns>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.WriteLine">

+            <summary>

+            Allows the test to perform a string WriteLine.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.Method">

+            <summary>

+            Gets the underlying reflected method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.Ignore">

+            <summary>

+            Gets a value indicating whether there is an Ignore attribute.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.Description">

+            <summary>

+            Gets any description marked on the test method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.Name">

+            <summary>

+            Gets the name of the method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.Category">

+            <summary>

+            Gets the Category.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.Owner">

+            <summary>

+            Gets the owner name of the test.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.ExpectedException">

+            <summary>

+            Gets any expected exception attribute information for the test method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.Timeout">

+            <summary>

+            Gets any timeout.  A Nullable property.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.Properties">

+            <summary>

+            Gets a Collection of test properties.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.WorkItems">

+            <summary>

+            Gets a collection of test work items.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod.Priority">

+            <summary>

+            Gets Priority information.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestProperty">

+            <summary>

+            Represents a simple test property with a key/value string pair.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestProperty.#ctor">

+            <summary>

+            Initializes a new instance of the TestProperty class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestProperty.#ctor(System.String,System.String)">

+            <summary>

+            Initializes a new instance of the TestProperty class.

+            </summary>

+            <param name="name">The initial property name.</param>

+            <param name="value">The initial property value.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestProperty.Name">

+            <summary>

+            Gets or sets the property name.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestProperty.Value">

+            <summary>

+            Gets or sets the property value.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext">

+            <summary>

+            A wrapper for the unit test context capability of Visual Studio Team 

+            Test's unit test framework.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.TestMethod)">

+            <summary>

+            Create a new unit test context wrapper for the test method.

+            </summary>

+            <param name="testMethod">Test method.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext.#ctor">

+            <summary>

+            Constructor of a new unit test context.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext._tm">

+            <summary>

+            Test method.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext.WriteLine(System.String,System.Object[])">

+            <summary>

+            Used to write trace messages while the test is running.

+            </summary>

+            <param name="format">Format string.</param>

+            <param name="args">The arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext.NotSupportedException(System.String)">

+            <summary>

+            Throw a not supported exception.

+            </summary>

+            <param name="functionality">Functionality that is not supported (string).</param>

+            <returns>A new NotSupportedException.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext.AddResultFile(System.String)">

+            <summary>

+            Adds a file name to the list in TestResult.ResultFileNames.

+            </summary>

+            <param name="fileName">Filename to add as a result.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext.BeginTimer(System.String)">

+            <summary>

+            Begins a timer with the specified name.

+            </summary>

+            <param name="timerName">The name of the timer to create.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext.EndTimer(System.String)">

+            <summary>

+            Ends a timer with the specified name.

+            </summary>

+            <param name="timerName">Name of the timer.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext._propertyCache">

+            <summary>

+            Cache of properties.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext.Properties">

+            <summary>

+            Gets test properties.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext.DataRow">

+            <summary>

+            Gets current data row when test is used for data driven testing.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext.DataConnection">

+            <summary>

+            Gets current data connection row when test is used for data driven testing.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext.TestName">

+            <summary>

+            Gets the name of the test method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestContext.CurrentTestOutcome">

+            <summary>

+            Gets the current enum outcome - passed, failed, or inconclusive.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly">

+            <summary>

+            Assembly metadata for the Visual Studio Team Test unit test framework.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly._assembly">

+            <summary>

+            Assembly reflection object.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly._init">

+            <summary>

+            Assembly initialization method information.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly._cleanup">

+            <summary>

+            Assembly cleanup method information.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly._provider">

+            <summary>

+            Unit test provider used for the assembly.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly._harness">

+            <summary>

+            The unit test harness.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider,Microsoft.Silverlight.Testing.Harness.UnitTestHarness,System.Reflection.Assembly)">

+            <summary>

+            Creates a new unit test assembly wrapper.

+            </summary>

+            <param name="provider">Unit test metadata provider.</param>

+            <param name="unitTestHarness">A reference to the unit test harness.</param>

+            <param name="assembly">Assembly reflection object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly.GetTestClasses">

+            <summary>

+            Reflect and retrieve the test class metadata wrappers for 

+            the test assembly.

+            </summary>

+            <returns>Returns a collection of test class metadata 

+            interface objects.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly.Name">

+            <summary>

+            Gets the name of the test assembly.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly.Provider">

+            <summary>

+            Gets the unit test provider instance.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly.AssemblyInitializeMethod">

+            <summary>

+            Gets any assembly initialize method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly.AssemblyCleanupMethod">

+            <summary>

+            Gets any assembly cleanup method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly.TestHarness">

+            <summary>

+            Gets the test harness used to initialize the assembly.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.UnitTestFrameworkAssembly.UnitTestHarness">

+            <summary>

+            Gets the test harness as a unit test harness.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.VsttProvider">

+            <summary>

+            Provider for the Visual Studio Team Test unit test (UT) framework 

+            metadata.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.VsttProvider.ProviderName">

+            <summary>

+            Name of this provider.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.VsttProvider.MyCapabilities">

+            <summary>

+            The capabilities of the VSTT UTF provider.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.VsttProvider.HasCapability(Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviderCapabilities)">

+            <summary>

+            Whether the capability is supported by this provider.

+            </summary>

+            <param name="capability">Capability type.</param>

+            <returns>A value indicating whether the capability is available.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.VsttProvider.#ctor">

+            <summary>

+            Create a new Visual Studio Team Test unit test framework provider 

+            instance.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.VsttProvider._assemblyCache">

+            <summary>

+            Cache of assemblies and assembly unit test interface objects.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.VsttProvider.GetUnitTestAssembly(Microsoft.Silverlight.Testing.Harness.UnitTestHarness,System.Reflection.Assembly)">

+            <summary>

+            VSTT unit test provider constructor; takes an assembly reference to 

+            perform reflection on to retrieve all test class types. In this 

+            implementation of an engine for the VSTT metadata, only a single 

+            test Assembly can be utilized at a time for simplicity.

+            </summary>

+            <param name="testHarness">The unit test harness.</param>

+            <param name="assemblyReference">Assembly reflection object.</param>

+            <returns>Returns the assembly metadata interface.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.VsttProvider.IsFailedAssert(System.Exception)">

+            <summary>

+            Check if the Exception is actually a failed assertion.

+            </summary>

+            <param name="exception">Exception object to check.</param>

+            <returns>True if the exception is actually an assert failure.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.VsttProvider.Name">

+            <summary>

+            Gets the name of the provider.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.VisualStudio.VsttProvider.Capabilities">

+            <summary>

+            Gets the specialized capability descriptor.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTestSettings">

+            <summary>

+            Settings for the unit test system.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTestSettings.TagExpressionKey">

+            <summary>

+            The tag expression key name.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTestSettings.DefaultSortTestMethods">

+            <summary>

+            By default test methods are sorted.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTestSettings.DefaultSortTestClasses">

+            <summary>

+            By default test classes are sorted.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTestSettings.#ctor">

+            <summary>

+            Settings for the unit test system.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.Parameters">

+            <summary>

+            Gets the parameters from the response file.

+            </summary>

+            <value>The parameters.</value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.Components">

+            <summary>

+            Gets the components initialized by the entry-point assembly. These

+            are the dynamically loaded objects that may be needed by the

+            TestHarness.

+            </summary>

+            <value>The components.</value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.LogProviders">

+            <summary>

+            Gets the log providers.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.SampleTags">

+            <summary>

+            Gets or sets a set of sample tags for use in a tag editor screen.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.TestAssemblies">

+            <summary>

+            Gets the list of test assemblies.

+            </summary>

+            <value>The test assembly.</value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.TestService">

+            <summary>

+            Gets or sets the test service provider.  The test service lights up 

+            advanced out-of-process communication, reporting, logging, and 

+            other valuable services.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.TestHarness">

+            <summary>

+            Gets or sets the test harness.

+            </summary>

+            <value>The test harness.</value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.TestServiceHostname">

+            <summary>

+            Gets or sets the test service hostname to try using. Defaults to

+            localhost.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.TestServicePort">

+            <summary>

+            Gets or sets the test service port to try using. Defaults to 8000.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.TestServicePath">

+            <summary>

+            Gets or sets the test service path to try using. Defaults to

+            /externalInterface/.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.StartRunImmediately">

+            <summary>

+            Gets or sets a value indicating whether to start the run

+            immediately when the test system is run. Defaults to false to enable

+            the test service to load and information to be provided in the

+            user interface.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.TestPanelType">

+            <summary>

+            Gets or sets the type of the TestPanel to create. The type must

+            derive from Microsoft.Silverlight.Testing.ITestPanel.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.SortTestMethods">

+            <summary>

+            Gets or sets a value indicating whether test methods are sorted 

+            alphabetically. By default this value is true.

+            </summary>

+            <remarks>

+            It is worth understanding that the order of unit test 

+            execution should not affect the results of a test run.  Any expected

+            ordering and verification from multiple test methods should be 

+            refactored into a single unit test.

+            </remarks>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.SortTestClasses">

+            <summary>

+            Gets or sets a value indicating whether test classes are sorted 

+            alphabetically. This setting is True by default.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.ShowTagExpressionEditor">

+            <summary>

+            Gets or sets a value indicating whether to show the tag expression

+            editor user interface before starting the test run.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.TagExpression">

+            <summary>

+            Gets or sets the tag expression used for selecting tests to run. 

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTestSettings.TestClassesToRun">

+            <summary>

+            Gets a list of test classes to run. Enables filtering.

+            </summary>

+            <remarks>This property should be considered obsolete.</remarks>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestPanelManager">

+            <summary>

+            A manager for the underlying TestSurface Panel.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestPanelManager.#ctor">

+            <summary>

+            Private constructor.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestPanelManager._testPage">

+            <summary>

+            The test page object.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestPanelManager._dirty">

+            <summary>

+            A value indicating whether the panel is dirty.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestPanelManager.ClearUsedChildren">

+            <summary>

+            Remove the children from the test surface, if it has 

+            been used.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestPanelManager.ClearChildren">

+            <summary>

+            Remove the children from the test surface.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestPanelManager.TestPage">

+            <summary>

+            Gets or sets the Reference to the TestPage user control.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestPanelManager.TestPanel">

+            <summary>

+            Gets the TestSurface Panel, and tracks the use for the 

+            current test method.  When the test completes, the panel children 

+            will be cleared automatically.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.ScenarioResult">

+            <summary>

+            A result from a test scenario.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ScenarioResult.#ctor(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,Microsoft.Silverlight.Testing.Harness.TestOutcome,System.Exception)">

+            <summary>

+            Creates a result record.

+            </summary>

+            <param name="method">Test method metadata object.</param>

+            <param name="testClass">Test class metadata object.</param>

+            <param name="result">Test result object.</param>

+            <param name="exception">Exception instance, if any.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ScenarioResult.ToString">

+            <summary>

+            The string representation of the ScenarioResult.

+            </summary>

+            <returns>Returns a verbose string representation of the result.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.ScenarioResult.Started">

+            <summary>

+            Gets or sets the scenario's started time.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.ScenarioResult.Finished">

+            <summary>

+            Gets or sets the scenario's finishing time.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.ScenarioResult.TestMethod">

+            <summary>

+            Gets the test method metadata.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.ScenarioResult.TestClass">

+            <summary>

+            Gets the test class metadata.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.ScenarioResult.Result">

+            <summary>

+            Gets or sets the Result object.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.ScenarioResult.Exception">

+            <summary>

+            Gets the Exception instance, if any.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.AssemblyManager">

+            <summary>

+            Container and manager type which handles an entire test assembly; contains sub work 

+            items that represent all actions needed to execute its tests.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.UnitTestCompositeWorkItem">

+            <summary>

+            A container that stores instances of the unit test harness and provider.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem">

+            <summary>

+            TestWorkItem which can contain sub-tasks; the underlying work item is 

+            not marked complete until the Children have completed or an Exception 

+            is thrown.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem._children">

+            <summary>

+            Store the underlying tasks.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem._finishWhenEmpty">

+            <summary>

+            Whether the TestTaskContainer::IsComplete should be set to true 

+            after all children have been de-queued.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem._invoked">

+            <summary>

+            Whether the first invoke has happened yet or not.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.#ctor">

+            <summary>

+            Constructor for the TestTaskContainer type.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.FirstInvoke">

+            <summary>

+            Optional method to call on the first invoke.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.Invoke">

+            <summary>

+            Invoke the test container; in turn will execute child work items 

+            as needed. Supports executing multiple items immediately for

+            performance reasons.

+            </summary>

+            <returns>True if additional work remains, False once IsComplete 

+            is set to true.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.Invoke(Microsoft.Silverlight.Testing.WorkItem@)">

+            <summary>

+            Invoke the test container; in turn will execute child work items 

+            as needed.

+            </summary>

+            <param name="usedWorkItem">The work item used for the invoke.</param>

+            <returns>True if additional work remains, False once IsComplete 

+            is set to true.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.ClearChildren">

+            <summary>

+            Clear the children.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.Dequeue">

+            <summary>

+            Dequeue a work item.

+            </summary>

+            <returns>A work item.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.Enqueue(Microsoft.Silverlight.Testing.WorkItem)">

+            <summary>

+            Add a new work item to the container to schedule it for invocation.

+            </summary>

+            <param name="item">New test work item to enqueue.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.EnqueueQuick(Microsoft.Silverlight.Testing.WorkItem)">

+            <summary>

+            Adds a new work item that will execute more quickly.

+            </summary>

+            <param name="item">The item of work.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.EnqueueQuick(System.Action)">

+            <summary>

+            Enqueues a callback or action that will quickly execute.

+            </summary>

+            <param name="action">The action or method.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.Enqueue(System.Action)">

+            <summary>

+            Add a new callback action and schedule it for invocation.

+            </summary>

+            <param name="action">The action.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.Peek">

+            <summary>

+            Return the top work item, if any, from this container.

+            </summary>

+            <returns>Peek into any test work item.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.WorkItemComplete">

+            <summary>

+            Work items must call this method to indicate completion of the work 

+            item; in turn fires the Complete event delegates.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.WorkItemCompleteInternal">

+            <summary>

+            Internal-only version which can be called during a test completion 

+            through the relation - not necessarily the best design; events 

+            may make more sense long-term.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.WorkItemException(System.Exception)">

+            <summary>

+            Call when an exception occurs inside a work item.

+            </summary>

+            <param name="e">Exception object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.OnComplete(System.EventArgs)">

+            <summary>

+            Fire the Complete event.

+            </summary>

+            <param name="e">Empty event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.OnUnhandledException(System.Exception)">

+            <summary>

+            Fire the unhandled exception event.

+            </summary>

+            <param name="exception">Exception object.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.FinishWhenEmpty">

+            <summary>

+            Gets a value indicating whether the container is marked Complete 

+            when all children have executed or not.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.RemainingWork">

+            <summary>

+            Gets a value indicating whether sub tasks remain.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.Complete">

+            <summary>

+            Complete event is fired when the underlying WorkItemComplete method 

+            is called by the work item.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.UnhandledException">

+            <summary>

+            Event fired when an exception is thrown and unhandled within the 

+            underlying Invoke sequence.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.CompositeWorkItem.CanExecuteImmediately">

+            <summary>

+            Gets or sets a value indicating whether the task can execute

+            immediately.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestCompositeWorkItem._provider">

+            <summary>

+            The unit test provider.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestCompositeWorkItem.#ctor(Microsoft.Silverlight.Testing.Harness.UnitTestHarness,Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider)">

+            <summary>

+            Initializes a new unit test work item container.

+            </summary>

+            <param name="testHarness">The unit test harness.</param>

+            <param name="unitTestProvider">The unit test metadata provider.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestCompositeWorkItem.LogMessage(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Logs a new message.

+            </summary>

+            <param name="message">Message object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestCompositeWorkItem.LogMessage(System.String)">

+            <summary>

+            Logs a message about the harness.

+            </summary>

+            <param name="harnessInformation">Information about the harness.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestCompositeWorkItem.LogWriter">

+            <summary>

+            Gets the log message writer for the unit test system.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestCompositeWorkItem.TestHarness">

+            <summary>

+            Gets the test harness instance.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.UnitTestCompositeWorkItem.Provider">

+            <summary>

+            Gets the unit test provider instance.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.AssemblyManager._filter">

+            <summary>

+            The test run filter object.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.AssemblyManager._assembly">

+            <summary>

+            Unit test provider-agnostic assembly metadata.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.AssemblyManager._testClasses">

+            <summary>

+            Container of work items for running test classes.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.AssemblyManager.#ctor(Microsoft.Silverlight.Testing.Harness.TestRunFilter,Microsoft.Silverlight.Testing.Harness.UnitTestHarness,Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider,Microsoft.Silverlight.Testing.UnitTesting.Metadata.IAssembly)">

+            <summary>

+            Create a new assembly manager, takes in the harness, provider 

+            reference and actual IAssembly object.

+            </summary>

+            <param name="runFilter">The test run filter object.</param>

+            <param name="testHarness">Harness object.</param>

+            <param name="provider">The unit test metadata provider.</param>

+            <param name="testAssembly">The test assembly metadata object.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.AssemblyManager.FirstInvoke">

+            <summary>

+            When the test run is ready to test the underlying test assembly that

+            this class manages, perform reflection and enqueue work items to run

+            the tests.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.AssemblyManager.EnqueueAssemblyInitialize">

+            <summary>

+            The assembly initialize method.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.AssemblyManager.EnqueueAssemblyCleanup">

+            <summary>

+            The assembly cleanup method.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.AssemblyManager.EnqueueTestClasses">

+            <summary>

+            Reflect over all test classes in the assembly and add any which are not 

+            filtered out into the test work item queue.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.AssemblyManager.EnqueueMethodDispatcher(System.Reflection.MethodInfo)">

+            <summary>

+            Helper to enqueue a new method dispatcher.

+            </summary>

+            <param name="method">The method reflection object.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.AssemblyManager.ClassInstances">

+            <summary>

+            Gets the collection of all the instances of the assembly's test

+            classes, used to keep a single reference of the type.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.MethodContainer">

+            <summary>

+            A method container.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.MethodContainer._timeout">

+            <summary>

+            The timeout time.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.MethodContainer._method">

+            <summary>

+            The test method metadata.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.MethodContainer.#ctor">

+            <summary>

+            Constructs a new method container.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.MethodContainer.#ctor(System.Object,System.Reflection.MethodInfo,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod)">

+            <summary>

+            Constructs a new method container.

+            </summary>

+            <param name="instance">An instance of the method's type.</param>

+            <param name="method">The method reflection object.</param>

+            <param name="testMethod">The test method.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.MethodContainer._methodTask">

+            <summary>

+            The task that involves the method, and contains its own internal 

+            test queue, if needed for asynchronous tasks.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.MethodContainer._methodInfo">

+            <summary>

+            The reflection object for the method.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.MethodContainer.Invoke">

+            <summary>

+            Invoke into the method.

+            </summary>

+            <returns>Returns the condition of any remaining work.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.MethodContainer.FirstInvoke">

+            <summary>

+            On the first invoke, make sure there's a task to call the method.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.MethodContainer.MethodInfo">

+            <summary>

+            Gets the method's reflection object.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestClassInstanceDictionary">

+            <summary>

+            A dictionary that manages single instances of types for use across the 

+            unit test system.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassInstanceDictionary.GetInstance(System.Type)">

+            <summary>

+            Returns the instance for a Type; if there is not an instance yet, 

+            this will use Activator.CreateInstance to create it.

+            </summary>

+            <param name="type">The Type instance to retrieve.</param>

+            <returns>Returns an instance of the Type.  Returns a new instance 

+            if the Type has not yet been used.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassInstanceDictionary.ClearInstance(System.Type)">

+            <summary>

+            Remove any instance for the type.

+            </summary>

+            <param name="type">The Type of instance to remove.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestClassManager">

+            <summary>

+            Test class manager.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestClassManager._filter">

+            <summary>

+            Test run filter object.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestClassManager._testClass">

+            <summary>

+            Reference to the class and its metadata.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestClassManager._testExecutionQueue">

+            <summary>

+            Queue of any tests to run.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestClassManager._instance">

+            <summary>

+            Class instance.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassManager.#ctor(Microsoft.Silverlight.Testing.Harness.TestRunFilter,Microsoft.Silverlight.Testing.Harness.UnitTestHarness,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,System.Object,Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider)">

+            <summary>

+            A container type that handles an entire test class throughout the 

+            test run.

+            </summary>

+            <param name="filter">Test run filter object.</param>

+            <param name="testHarness">The unit test harness.</param>

+            <param name="testClass">The test class metadata interface.</param>

+            <param name="instance">The object instance.</param>

+            <param name="provider">The unit test provider.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassManager.FirstInvoke">

+            <summary>

+            Code run the first time this container is invoked.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassManager.PrepareInstance">

+            <summary>

+            Custom tests need to be prepared before use.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassManager.EnqueueTestClassInitialize">

+            <summary>

+            The test initialize method.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassManager.EnqueueTestClassCleanup">

+            <summary>

+            The test cleanup method.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassManager.PopulateTestMethods">

+            <summary>

+            Reflect through the class to find any test methods, and add them to 

+            the list of queued methods.  Also, sorts the methods if appropriate 

+            based on the settings file.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestClassManager.EnqueueMethodDispatcher(System.Reflection.MethodInfo)">

+            <summary>

+            Add a new method dispatcher to the test work item queue.  This is a 

+            work item container which is able to manage its own internal test 

+            work item queue.

+            </summary>

+            <param name="method">The method reflection object.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.WorkItemsManager">

+            <summary>

+            A special type dedicated to keeping a running stack of the dispatch 

+            managers that are actually enabled for "work item" use.  The current 

+            dispatcher is used by the test work item queue.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.WorkItemsManager._stack">

+            <summary>

+            Dispatcher stack; a stack of work item containers.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.WorkItemsManager.#ctor">

+            <summary>

+            Creates a new empty stack for work item containers.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.WorkItemsManager.Push(Microsoft.Silverlight.Testing.Harness.CompositeWorkItem)">

+            <summary>

+            Push a new dispatcher onto the stack.

+            </summary>

+            <param name="composite">The composite work item to push.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.WorkItemsManager.Pop">

+            <summary>

+            Pop a dispatcher off the stack.

+            </summary>

+            <returns>Returns the top-most container.  Throws an 

+            InvalidOperationException if none is available.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.WorkItemsManager.CurrentCompositeWorkItem">

+            <summary>

+            Gets the current test work item dispatcher, which is the dispatcher 

+            on the top of the stack.  Returns null if there is none.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestMethodManager">

+            <summary>

+            Manager for planning, processing, and reporting the result of a single 

+            test method for a unit test provider.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestMethodManager._testClass">

+            <summary>

+            Underlying test class object.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestMethodManager._testMethod">

+            <summary>

+            Underlying test method object.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestMethodManager._instance">

+            <summary>

+            Reference to an instance of the test class.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestMethodManager._result">

+            <summary>

+            Scenario result of the test method.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestMethodManager._started">

+            <summary>

+            The started time of execution.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestMethodManager._output">

+            <summary>

+            Stores a collection of written lines.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestMethodManager._bugAttributePresent">

+            <summary>

+            A value indicating whether the bug attribute was present on this 

+            method.  If it is, the result will be inverted at completion.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestMethodManager._mainTestMethodContainer">

+            <summary>

+            Contains the main test contents.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodManager.#ctor(Microsoft.Silverlight.Testing.Harness.UnitTestHarness,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestClass,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod,System.Object,Microsoft.Silverlight.Testing.UnitTesting.Metadata.IUnitTestProvider)">

+            <summary>

+            Constructor for a test method manager, which handles executing a single test method 

+            for a unit test provider.

+            </summary>

+            <param name="testHarness">The unit test harness object.</param>

+            <param name="testClass">The test class metadata object.</param>

+            <param name="testMethod">The test method metadata object.</param>

+            <param name="instance">The test class instance.</param>

+            <param name="provider">The unit test provider.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodManager.LogStartMessage">

+            <summary>

+            Log a start message.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodManager.LogEndMessage">

+            <summary>

+            Log an end message.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodManager.OnWriteLine(Microsoft.Silverlight.Testing.UnitTesting.Metadata.StringEventArgs)">

+            <summary>

+            Handles the write line event for the test method.

+            </summary>

+            <param name="e">The string event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodManager.FirstInvoke">

+            <summary>

+            First invoke, plan for the method's execution.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodManager.SetResultTimes">

+            <summary>

+            Sets the start and finish times on the ScenarioResult object.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodManager.CreateNewResult(Microsoft.Silverlight.Testing.Harness.TestOutcome)">

+            <summary>

+            Creates the ScenarioResult instance for this test method.

+            </summary>

+            <param name="outcome">The initial test outcome value.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodManager.CompleteMethod(System.Object,System.EventArgs)">

+            <summary>

+            Process the result.

+            </summary>

+            <param name="sender">Source object.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodManager.UnhandledMethodException(System.Object,System.UnhandledExceptionEventArgs)">

+            <summary>

+            Process an unhandled exception for the method.

+            </summary>

+            <param name="sender">Source object.</param>

+            <param name="e">Unhandled exception event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestMethodManager.EnqueueMethodDispatcher(System.Reflection.MethodInfo)">

+            <summary>

+            Create a new method container to enclose a reflected method for execution.

+            </summary>

+            <param name="method">The method reflection object.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestMethodManager.BugAttributeProcessed">

+            <summary>

+            Gets or sets a value indicating whether the bug attribute's logic

+            has already been processed.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestMethodManager.WriteLineOutput">

+            <summary>

+            Gets the write line output list.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.UnitTestMethodContainer">

+            <summary>

+            A container which is able to attach to the underlying test dispatcher 

+            stack to enable advanced asynchronous functionality, when supported.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestMethodContainer._harness">

+            <summary>

+            The unit test harness.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestMethodContainer._granularity">

+            <summary>

+            The granularity of the contained item.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.UnitTestMethodContainer._testMethod">

+            <summary>

+            The test method metadata object.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestMethodContainer.#ctor(Microsoft.Silverlight.Testing.Harness.UnitTestHarness,System.Object,System.Reflection.MethodInfo,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod,Microsoft.Silverlight.Testing.Harness.TestGranularity)">

+            <summary>

+            Initializes dispatcher-stack attaching method container work item.

+            </summary>

+            <param name="testHarness">Test harness.</param>

+            <param name="instance">Test instance.</param>

+            <param name="method">Method reflection object.</param>

+            <param name="testMethod">Test method metadata.</param>

+            <param name="granularity">Granularity of test.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestMethodContainer.FirstInvoke">

+            <summary>

+            Connect to dispatcher stack for advanced functions, if supported.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.UnitTestMethodContainer.SupportsWorkItemQueue">

+            <summary>

+            Check a MethodInfo for the advanced async attribute.

+            </summary>

+            <returns>True if the work item queue is supported.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.CallbackWorkItem">

+            <summary>

+            A work item for tests to use which will call the delegate when the work 

+            item is executed.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.CallbackWorkItem._action">

+            <summary>

+            Stored void delegate.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CallbackWorkItem.#ctor(System.Action)">

+            <summary>

+            Create a new Callback work item.

+            </summary>

+            <param name="callback">Action to execute on Invoke.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.CallbackWorkItem.Invoke">

+            <summary>

+            Execute the callback.

+            </summary>

+            <returns>Whether the work item is complete.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.ConditionalWorkItem">

+            <summary>

+            A test work item that is complete once the condition is asserted.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.ConditionalWorkItem._delegate">

+            <summary>

+            The conditional delegate.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ConditionalWorkItem.#ctor(System.Func{System.Boolean})">

+            <summary>

+            Construct a new conditional work item.

+            </summary>

+            <param name="conditionalMethod">Conditional delegate.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ConditionalWorkItem.Invoke">

+            <summary>

+            Invoke the condition, will continue invoking until 

+            the condition is false.

+            </summary>

+            <returns>Completes the invocation once the condition is true.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.MethodInvokeWorkItem">

+            <summary>

+            A simple work item that invokes a method through the reflection 

+            MethodInfo instance.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.MethodInvokeWorkItem.None">

+            <summary>

+            An empty object array.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.MethodInvokeWorkItem._instance">

+            <summary>

+            An object instance.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.MethodInvokeWorkItem._method">

+            <summary>

+            Method reflection object.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.MethodInvokeWorkItem._testMethod">

+            <summary>

+            The test method to invoke.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.MethodInvokeWorkItem.#ctor(System.Object,System.Reflection.MethodInfo,Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod)">

+            <summary>

+            Creates a new method invoke work item for a MethodInfo instance.

+            </summary>

+            <param name="instance">The type instance.</param>

+            <param name="method">The method on the type to invoke when the 

+            work item is executed.</param>

+            <param name="testMethod">The test method metadata.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.MethodInvokeWorkItem.Invoke">

+            <summary>

+            Invokes the underlying method on the instance and marks the 

+            test work item as complete.

+            </summary>

+            <returns>False, noting the completion of the work item.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviders">

+            <summary>

+            Unit test providers.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviders._providers">

+            <summary>

+            List of unit test providers.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviders.#cctor">

+            <summary>

+            Static constructor that initializes the built-in unit test metadata providers.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviders.GetAssemblyProvider(Microsoft.Silverlight.Testing.Harness.UnitTestHarness,System.Reflection.Assembly)">

+            <summary>

+            Gets the unit test provider for an assembly.  The framework only 

+            currently supports a single provider per test assembly, so if more 

+            than one registered provider can handle the assembly, at runtime an 

+            InvalidOperationException is thrown.

+            </summary>

+            <param name="harness">The test harness making the request.</param>

+            <param name="testAssembly">Assembly reflection object.</param>

+            <returns>The unit test provider for the test assembly.  Throws if 

+            more than one can process the assembly.  Returns null if there is 

+            not a provider for the assembly.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviders.GetAssemblyWrapper(Microsoft.Silverlight.Testing.Harness.UnitTestHarness,System.Reflection.Assembly)">

+            <summary>

+            Returns the IAssembly provider for an assembly.

+            </summary>

+            <param name="harness">Test harness object.</param>

+            <param name="testAssembly">Assembly reflection object.</param>

+            <returns>Returns null or an IAssembly instance.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.UnitTesting.Metadata.UnitTestProviders.Providers">

+            <summary>

+            Gets the list of Unit Test providers.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.DecoratorDictionary">

+            <summary>

+            A dictionary that can store just about any kind of object, keyed off any

+            object.  As a Hashtable, it permits using keys of 

+            - enums

+            - objects

+            - types

+            

+            This makes it ideal for use in decorating and adorning special types in

+            the system, such as log messages.

+            

+            A strongly-typed decorator key could come from an enum value, while a

+            prototype extension to the test system could simply use a string key for

+            organizing.  

+            

+            In all instances, the resulting object needs to be cast appropriately.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.DecoratorDictionary.HasDecorator(System.Object)">

+            <summary>

+            Check if a decorator exists.

+            </summary>

+            <param name="decoratorKey">The decorator key object.</param>

+            <returns>

+            Returns a value indicating whether the decorator key exists.  Even

+            if the key exists, the instance value for the key could be set to

+            null, yielding a null instance.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.DecoratorDictionary.HasDecorators(System.Object[])">

+            <summary>

+            Check if a set of decorators exists.

+            </summary>

+            <param name="decorators">The set of decorator(s) of interest.</param>

+            <returns>

+            Returns a value indicating whether the decorators of interest were

+            present.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.DecoratorDictionary.GetDecorator(System.Object)">

+            <summary>

+            Retrieves the decorator instance if it exists.  If not, this method

+            returns null.

+            </summary>

+            <param name="decoratorKey">The decorator key object.</param>

+            <returns>

+            Returns the instance or null if it does not exist.  No exceptions

+            are thrown in this method.

+            </returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.ResourceUtility">

+            <summary>

+            Helper functionality for dealing with embedded resources in an assembly.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ResourceUtility.GetAllText(System.Object,System.String)">

+            <summary>

+            Get a string containing the text of an embedded resource in an

+            assembly.

+            </summary>

+            <param name="instance">

+            An instance whose assembly can be retrieved through reflection.

+            </param>

+            <param name="fullEmbeddedResourceName">

+            Complete embedded resource name.

+            </param>

+            <returns>

+            A string containing the embedded resource's string contents.

+            </returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.LogMessageFactory">

+            <summary>

+            A simple factory used for creating new log messages.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageFactory.Create">

+            <summary>

+            Create a new LogMessage instance.

+            </summary>

+            <returns>Returns a new LogMessage instance.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessageFactory.Create(Microsoft.Silverlight.Testing.Harness.LogMessageType)">

+            <summary>

+            Create a new LogMessage instance.

+            </summary>

+            <param name="messageType">The type of message to create.</param>

+            <returns>Returns a new LogMessage instance.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.LogMessageFactory.DefaultLogMessageType">

+            <summary>

+            Gets or sets the default log message type used for the creation of

+            unspecific log message types.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.LogDecorator">

+            <summary>

+            Well-known keys that can be used to mark decorator instances in log 

+            message objects.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogDecorator.ExceptionObject">

+            <summary>

+            Key for a decorator that is a simple Exception object.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogDecorator.NameProperty">

+            <summary>

+            Key for a decorator that is a simple Name string property.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogDecorator.TestOutcome">

+            <summary>

+            An associated TestOutcome value.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogDecorator.TestStage">

+            <summary>

+            The stage of a message or event.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogDecorator.TestGranularity">

+            <summary>

+            The granularity of a message or event.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestOutcome">

+            <summary>

+            A number of possible test outcomes or results.  For compatibility, this 

+            information resembles that of the desktop test framework, although many 

+            of the states may not apply or be valid for an in-browser test harness.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.Error">

+            <summary>

+            A test outcome of Error.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.Failed">

+            <summary>

+            A test outcome of Failed.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.Timeout">

+            <summary>

+            A test outcome of Timeout.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.Aborted">

+            <summary>

+            A test outcome of Aborted.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.Inconclusive">

+            <summary>

+            A test outcome of Inconclusive.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.PassedButRunAborted">

+            <summary>

+            A test outcome of a run that was aborted, but passed.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.NotRunnable">

+            <summary>

+            A test outcome of NotRunnable.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.NotExecuted">

+            <summary>

+            A test outcome of NotExecuted.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.Disconnected">

+            <summary>

+            A test outcome of Disconnected.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.Warning">

+            <summary>

+            A test outcome of Warning.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.Passed">

+            <summary>

+            A test outcome of Passed.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.Completed">

+            <summary>

+            A test outcome of Completed.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.InProgress">

+            <summary>

+            A test outcome of InProgress.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestOutcome.Pending">

+            <summary>

+            A test outcome of Pending.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestStage">

+            <summary>

+            The stage of a test scenario, case or system running.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestStage.Starting">

+            <summary>

+            In the process of starting.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestStage.Running">

+            <summary>

+            Currently running.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestStage.Finishing">

+            <summary>

+            Finishing up.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestStage.Canceling">

+            <summary>

+            The test is canceling.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.GlobalExceptionHandler">

+            <summary>

+            Provides a property that will attach and detach a known event handler

+            delegate when the bit is flipped.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.GlobalExceptionHandler._eventHandler">

+            <summary>

+            The event to fire when attached.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.GlobalExceptionHandler._attached">

+            <summary>

+            Whether the event handler is attached as a global unhandled

+            exception handler.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.GlobalExceptionHandler.#ctor(System.EventHandler)">

+            <summary>

+            Creates a new exception handler "manager" with the provided

+            EventHandler.

+            </summary>

+            <param name="eventHandler">The event handler to manage.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.GlobalExceptionHandler.ChangeExceptionBubbling(System.EventArgs,System.Boolean)">

+            <summary>

+            Mark the Handled property in the event args as True to stop any 

+            event bubbling.

+            </summary>

+            <param name="e">Event arguments.</param>

+            <param name="exceptionHandled">

+            Value indicating whether the Exception should be marked as handled.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.GlobalExceptionHandler.GetExceptionObject(System.EventArgs)">

+            <summary>

+            Return the Exception property from the EventArgs.

+            </summary>

+            <param name="e">Event arguments.</param>

+            <returns>

+            Returns the Exception object that the event arguments stores.

+            </returns>

+            <remarks>

+            This method is compatible with the full desktop framework as well as

+            Silverlight.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.GlobalExceptionHandler.OnGlobalException(System.Object,System.Windows.ApplicationUnhandledExceptionEventArgs)">

+            <summary>

+            Internal event that is hooked up to the global exception handler.

+            </summary>

+            <param name="sender">Source object of the event.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.GlobalExceptionHandler.UpdateAttachment">

+            <summary>

+            Called after a change to the attachment field value.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.GlobalExceptionHandler.AttachHandler">

+            <summary>

+            Attach the handler globally.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.GlobalExceptionHandler.DetachHandler">

+            <summary>

+            Detach the handler globally.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.GlobalExceptionHandler.AttachGlobalHandler">

+            <summary>

+            Gets or sets a value indicating whether the handler is currently 

+            attached to the global exception handler.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.LogMessage">

+            <summary>

+            A log message.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogMessage.DefaultLogMessageType">

+            <summary>

+            The default log message used during initialization.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessage.#ctor">

+            <summary>

+            Initializes a new log message of the default message type.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessage.#ctor(Microsoft.Silverlight.Testing.Harness.LogMessageType)">

+            <summary>

+            Initializes a new log message.

+            </summary>

+            <param name="messageType">The message type.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessage.ToString">

+            <summary>

+            Converts to string representation.

+            </summary>

+            <returns>A string version of the LogMessage.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessage.HasDecorator(System.Object)">

+            <summary>

+            Check if a decorator is present on the LogMessage.

+            </summary>

+            <param name="decorator">The decorator of interest.</param>

+            <returns>

+            Returns a value indicating whether the decorator is present in the

+            DecoratorDictionary.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.LogMessage.HasDecorators(System.Object[])">

+            <summary>

+            Check if a set of decorators are present.

+            </summary>

+            <param name="decorators">The decorator(s) of interest.</param>

+            <returns>

+            Returns a value indicating whether the decorator(s) of interest are

+            present.

+            </returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.LogMessage.Decorators">

+            <summary>

+            Gets the set of decorator instances attached to the log message.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.LogMessage.MessageType">

+            <summary>

+            Gets or sets the type of message.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.LogMessage.Message">

+            <summary>

+            Gets or sets the log's message.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.LogMessage.Item(System.Object)">

+            <summary>

+            Gets or sets the decorator type for the message.

+            </summary>

+            <param name="decorator">

+            The type of decorator.  Only one explicit Type is permitted,

+            although multiple types within the same type hierarchy are

+            legitimate.

+            </param>

+            <returns>Returns the instance of the decorator, if any.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestGranularity">

+            <summary>

+            The hierarchy of test execution represented in more generic terms, this

+            allows for more robust and useful actions by log providers.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestGranularity.Harness">

+            <summary>

+            Harness-level granularity.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestGranularity.TestGroup">

+            <summary>

+            Group of test-level granularity.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestGranularity.Test">

+            <summary>

+            Test-level granularity.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.TestGranularity.TestScenario">

+            <summary>

+            Scenario-level granularity.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.DebugOutputProvider">

+            <summary>

+            The most verbose log provider, this calls .ToString() on each and every 

+            LogMessage that it processes.  The output will appear in an attached 

+            debugger's "Output" window.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.DebugOutputProvider.#ctor">

+            <summary>

+            Initializes a new instance of the DebugOutputProvider class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.DebugOutputProvider.Process(Microsoft.Silverlight.Testing.Harness.LogMessage)">

+            <summary>

+            Display a LogMessage in the debug output window.

+            </summary>

+            <param name="logMessage">Message object.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.DebugOutputProvider.ShowAllFailures">

+            <summary>

+            Gets or sets a value indicating whether any TestResult failures will 

+            be reported, regardless of whether the TestResult type is being 

+            monitored for debug output.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.DebugOutputProvider.ShowEverything">

+            <summary>

+            Gets or sets a value indicating whether all messages appear in the 

+            debug output.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.LogMessageType">

+            <summary>

+            Set of defined types of log messages to allow for some level of 

+            filtering and selective processing of log messages.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogMessageType.TestResult">

+            <summary>

+            Pass, fail, etc.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogMessageType.Debug">

+            <summary>

+            Debug::WriteLine or tracing.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogMessageType.Warning">

+            <summary>

+            Non-fatal log message.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogMessageType.Error">

+            <summary>

+            Fatal error message.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogMessageType.KnownIssue">

+            <summary>

+            Information about a known defect.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogMessageType.Information">

+            <summary>

+            General information similar to a Console::WriteLine.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogMessageType.Environment">

+            <summary>

+            Operating system setting or platform values.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogMessageType.TestExecution">

+            <summary>

+            New unit of test or test run note.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.LogMessageType.TestInfrastructure">

+            <summary>

+            Related test systems or out-of-process communication information.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestHarnessCompletedEventArgs">

+            <summary>

+            Event information marking the completion of a test run.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestHarnessCompletedEventArgs.#ctor(Microsoft.Silverlight.Testing.Harness.TestHarnessState)">

+            <summary>

+            Creates a new TestHarnessCompletedEventArgs.

+            </summary>

+            <param name="testHarnessState">The final test harness state.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestHarnessCompletedEventArgs.State">

+            <summary>

+            Gets the final test harness state.

+            

+            This contains the final pass versus fail result at a minimum.

+            Specific harnesses may extend the type to contain additional

+            information, logs, scenario counts, or anything else.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.WebBrowserTick">

+            <summary>

+            A type which handles preparing the underlying dispatcher or timer from 

+            which the test work items execute.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.WebBrowserTick.DefaultTickInterval">

+            <summary>

+            Millisecond interval to use for the interval between DispatcherTimer

+            ticks.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Harness.WebBrowserTick._timer">

+            <summary>

+            Dispatcher timer.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.WebBrowserTick.#ctor(System.Func{System.Boolean})">

+            <summary>

+            Creates a new run method manager using the default value for the 

+            timer's millisecond interval.

+            </summary>

+            <param name="runNextStep">

+            Conditional delegate which returns true as long as there is 

+            additional work.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.WebBrowserTick.#ctor(System.Func{System.Boolean},System.Int32)">

+            <summary>

+            Sets up a new run method manager.

+            </summary>

+            <param name="runNextStep">

+            Conditional delegate which returns true as long as there is 

+            additional work.

+            </param>

+            <param name="millisecondInterval">Milliseconds between ticks, at a 

+            minimum.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.WebBrowserTick.Run">

+            <summary>

+            Begin the execution process by hooking up the underlying 

+            DispatcherTimer to call into the test framework regularly and 

+            perform test work items.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.WebBrowserTick.Timer_Tick(System.Object,System.EventArgs)">

+            <summary>

+            Call into the underlying work item queue, if the method manager is 

+            still set to run.

+            </summary>

+            <param name="sender">Sending object.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.TestHarnessState">

+            <summary>

+            Base class representing the overall state of a test run.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestHarnessState.IncrementFailures">

+            <summary>

+            Increment the failures counter.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.TestHarnessState.IncrementTotalScenarios">

+            <summary>

+            Increments the total scenarios counter.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestHarnessState.Failures">

+            <summary>

+            Gets the count of failing scenarios.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestHarnessState.TotalScenarios">

+            <summary>

+            Gets the total count of scenarios run.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Harness.TestHarnessState.Failed">

+            <summary>

+            Gets a value indicating whether the status recorded indicates a

+            failure.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Harness.ReflectionUtility">

+            <summary>

+            A set of helper methods for interacting with methods and types that are

+            marked with attributes.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.GetTypesWithAttribute(System.Reflection.Assembly,System.Type)">

+            <summary>

+            Retrieve all types in an assembly that are decorated with a specific

+            attribute.

+            </summary>

+            <param name="assembly">Assembly to search.</param>

+            <param name="decoratingAttribute">

+            Instance of the Type of attribute that marks interesting methods.

+            </param>

+            <returns>

+            A collection of types from the assembly.  An empty collection is

+            returned if no types were found matching the constraints.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.GetAttributes(System.Reflection.MemberInfo,System.Type)">

+            <summary>

+            Given a MethodInfo type, returns the attributes (if any) that are of 

+            the decoratingAttribute parameter's type.

+            </summary>

+            <param name="member">MemberInfo instance.</param>

+            <param name="decoratingAttribute">Attribute of interest.</param>

+            <returns>

+            A collection populated with the Attribute instances.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.GetAttributes(System.Reflection.MemberInfo,System.Type,System.Boolean)">

+            <summary>

+            Given a MethodInfo type, returns the attributes (if any) that are of 

+            the decoratingAttribute parameter's type.

+            </summary>

+            <param name="member">MemberInfo instance.</param>

+            <param name="decoratingAttribute">Attribute of interest.</param>

+            <param name="inherit">A value indicating whether to look for 

+            inheriting custom attributes.</param>

+            <returns>

+            A collection populated with the Attribute instances.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.GetAttributes(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod,System.Type,System.Boolean)">

+            <summary>

+            Given a test method, returns the attributes (if any) that are of 

+            the decoratingAttribute parameter's type.

+            </summary>

+            <param name="method">ITestMethod instance.</param>

+            <param name="decoratingAttribute">Attribute of interest.</param>

+            <param name="inherit">Whether to inherit attributes.</param>

+            <returns>

+            A collection populated with the Attribute instances.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.GetAssembliesFromInstances(System.Collections.Generic.IEnumerable{System.Object})">

+            <summary>

+            Retrieve a list of Reflection.Assembly types from a set of 

+            instances and/or types.

+            </summary>

+            <param name="objects">Set of instances or types.</param>

+            <returns>A set of Assembly instances from the instances or types.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.GetAssemblies(System.Type[])">

+            <summary>

+            Returns a list of unique assemblies from a set of types.

+            </summary>

+            <param name="types">Set of types.</param>

+            <returns>

+            A list of unique Assembly instances from the input types.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.GetAttribute(System.Collections.Generic.ICollection{System.Attribute})">

+            <summary>

+            Given a list of attributes, retrieves a single Attribute instance.

+            Will throw an exception if multiple attributes exist on the method.

+            </summary>

+            <param name="attributes">List of attributes.</param>

+            <returns>

+            The attribute instance, or null if it does not exist.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.GetAttribute(System.Reflection.MemberInfo,System.Type)">

+            <summary>

+            Given a method and a decorative attribute of interest, retrieves a

+            single Attribute instance.  Will throw an exception if multiple

+            attributes exist on the method.

+            </summary>

+            <param name="member">MemberInfo instance.</param>

+            <param name="decoratingAttribute">

+            Attribute type of interest.

+            </param>

+            <returns>

+            The attribute instance, or null if it does not exist.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.GetAttribute(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod,System.Type)">

+            <summary>

+            Given a test method and a decorative attribute of interest,

+            retrieves a single Attribute instance.  Will throw an exception if

+            multiple attributes exist on the method.

+            </summary>

+            <param name="method">ITestMethod instance.</param>

+            <param name="decoratingAttribute">

+            Attribute type of interest.

+            </param>

+            <returns>

+            The attribute instance, or null if it does not exist.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.GetAttribute(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod,System.Type,System.Boolean)">

+            <summary>

+            Given a test method and a decorative attribute of interest,

+            retrieves a single Attribute instance.  Will throw an exception if

+            multiple attributes exist on the method.

+            </summary>

+            <param name="method">ITestMethod instance.</param>

+            <param name="decoratingAttribute">

+            Attribute type of interest.

+            </param>

+            <param name="inherit">A value indicating whether to look for custom 

+            inherited attributes.</param>

+            <returns>

+            The attribute instance, or null if it does not exist.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.HasAttribute(System.Reflection.MemberInfo,System.Type)">

+            <summary>

+            Returns a value indicating whether a method has the attribute.

+            </summary>

+            <param name="member">MemberInfo instance.</param>

+            <param name="decoratingAttribute">Attribute of interest.</param>

+            <returns>

+            A value indicating whether the type has the decorating attribute or

+            not.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.HasAttribute(Microsoft.Silverlight.Testing.UnitTesting.Metadata.ITestMethod,System.Type)">

+            <summary>

+            Returns a value indicating whether a method has the attribute.

+            </summary>

+            <param name="method">ITestMethod instance.</param>

+            <param name="decoratingAttribute">Attribute of interest.</param>

+            <returns>

+            A value indicating whether the type has the decorating attribute or

+            not.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.GetMethodsWithAttribute(System.Type,System.Type)">

+            <summary>

+            Return a collection of MethodInfo instances given a type to look

+            through  and the attribute of interest.

+            </summary>

+            <param name="type">Type to look through for methods.</param>

+            <param name="decoratingAttribute">Attribute of interest.</param>

+            <returns>

+            A collection of the method reflection objects, if any, with the

+            marked attribute present.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Harness.ReflectionUtility.GetOneMethodWithAttribute(System.Type,System.Type)">

+            <summary>

+            Retrieve a MethodInfo from a single decorated method inside a type,

+            if any.  Throws an Exception if there are > 1 methods that are

+            decorated with the attribute.

+            </summary>

+            <param name="type">Type of interest.</param>

+            <param name="decoratingAttribute">Attribute of interest.</param>

+            <returns>

+            MethodInfo reflection object.  Null if none are found.

+            </returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.ClipboardHelper">

+            <summary>

+            Exposes clipboard functionality within Silverlight 3 applications when a

+            Silverlight 4 runtime is in use.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.ClipboardHelper.EmptyObjectArray">

+            <summary>

+            An empty array of object type.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.ClipboardHelper._setText">

+            <summary>

+            Backing field for set text.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.ClipboardHelper._getText">

+            <summary>

+            Backing field for get text.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.ClipboardHelper._containsText">

+            <summary>

+            Backing field for the contains text method.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.ClipboardHelper._clipboardFeatureSupported">

+            <summary>

+            A value indicating whether the clipboard feature is present. This

+            assumes that all 3 methods are present, in their current form for a

+            more recent runtime.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ClipboardHelper.SetText(System.String)">

+            <summary>

+            Sets Unicode text data to store on the clipboard, for later access 

+            with System.Windows.Clipboard.GetText().

+            </summary>

+            <param name="text">A string that contains the Unicode text data to 

+            store on the clipboard.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ClipboardHelper.GetText">

+            <summary>

+            Retrieves Unicode text data from the system clipboard, if Unicode 

+            text data exists.

+            </summary>

+            <returns>If Unicode text data is present on the system clipboard, 

+            returns a string that contains the Unicode text data. Otherwise, 

+            returns an empty string.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ClipboardHelper.ContainsText">

+            <summary>

+            Queries the clipboard for the presence of data in the Unicode text 

+            format.

+            </summary>

+            <returns>True if the system clipboard contains Unicode text data; 

+            otherwise, false.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ClipboardHelper.RequireClipboardFeature">

+            <summary>

+            Prepares to use the System.Windows.Clipboard type and throws an

+            exception if the feature cannot be completely located.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.ClipboardHelper.PrepareClipboardInstance">

+            <summary>

+            Prepares the type and reflects for new Silverlight features.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.ClipboardHelper.IsClipboardFeatureSupported">

+            <summary>

+            Gets a value indicating whether the clipboard feature is available

+            and supported.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.BindingEvaluator`1">

+            <summary>

+            A framework element that permits a binding to be evaluated in a new data

+            context leaf node.

+            </summary>

+            <typeparam name="T">The type of dynamic binding to return.</typeparam>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.BindingEvaluator`1._binding">

+            <summary>

+            Gets or sets the string value binding used by the control.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.BindingEvaluator`1.ValueProperty">

+            <summary>

+            Identifies the Value dependency property.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.BindingEvaluator`1.#ctor">

+            <summary>

+            Initializes a new instance of the BindingEvaluator class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.BindingEvaluator`1.#ctor(System.Windows.Data.Binding)">

+            <summary>

+            Initializes a new instance of the BindingEvaluator class,

+            setting the initial binding to the provided parameter.

+            </summary>

+            <param name="binding">The initial string value binding.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.BindingEvaluator`1.ClearDataContext">

+            <summary>

+            Clears the data context so that the control does not keep a

+            reference to the last-looked up item.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.BindingEvaluator`1.GetDynamicValue(System.Object,System.Boolean)">

+            <summary>

+            Updates the data context of the framework element and returns the 

+            updated binding value.

+            </summary>

+            <param name="o">The object to use as the data context.</param>

+            <param name="clearDataContext">If set to true, this parameter will

+            clear the data context immediately after retrieving the value.</param>

+            <returns>Returns the evaluated T value of the bound dependency

+            property.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.BindingEvaluator`1.GetDynamicValue(System.Object)">

+            <summary>

+            Updates the data context of the framework element and returns the 

+            updated binding value.

+            </summary>

+            <param name="o">The object to use as the data context.</param>

+            <returns>Returns the evaluated T value of the bound dependency

+            property.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.BindingEvaluator`1.Value">

+            <summary>

+            Gets or sets the data item string value.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.BindingEvaluator`1.ValueBinding">

+            <summary>

+            Gets or sets the value binding.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.Dock">

+            <summary>

+            Specifies values that control the behavior of a control positioned

+            inside another control.

+            </summary>

+            <QualityBand>Stable</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.Dock.Left">

+            <summary>

+            Specifies that the control should be positioned on the left of the

+            control.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.Dock.Top">

+            <summary>

+            Specifies that the control should be positioned on top of the

+            control.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.Dock.Right">

+            <summary>

+            Specifies that the control should be positioned on the right of the

+            control.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.Dock.Bottom">

+            <summary>

+            Specifies that the control should be positioned at the bottom of 

+            control.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.InteractionHelper">

+            <summary>

+            The InteractionHelper provides controls with support for all of the

+            common interactions like mouse movement, mouse clicks, key presses,

+            etc., and also incorporates proper event semantics when the control is

+            disabled.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.InteractionHelper.SequentialClickThresholdInMilliseconds">

+            <summary>

+            The threshold used to determine whether two clicks are temporally

+            local and considered a double click (or triple, quadruple, etc.).

+            500 milliseconds is the default double click value on Windows.

+            This value would ideally be pulled form the system settings.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.InteractionHelper.SequentialClickThresholdInPixelsSquared">

+            <summary>

+            The threshold used to determine whether two clicks are spatially

+            local and considered a double click (or triple, quadruple, etc.)

+            in pixels squared.  We use pixels squared so that we can compare to

+            the distance delta without taking a square root.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.InteractionHelper._updateVisualState">

+            <summary>

+            Reference used to call UpdateVisualState on the base class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.#ctor(System.Windows.Controls.Control)">

+            <summary>

+            Initializes a new instance of the InteractionHelper class.

+            </summary>

+            <param name="control">Control receiving interaction.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.UpdateVisualState(System.Boolean)">

+            <summary>

+            Update the visual state of the control.

+            </summary>

+            <param name="useTransitions">

+            A value indicating whether to automatically generate transitions to

+            the new state, or instantly transition to the new state.

+            </param>

+            <remarks>

+            UpdateVisualState works differently than the rest of the injected

+            functionality.  Most of the other events are overridden by the

+            calling class which calls Allow, does what it wants, and then calls

+            Base.  UpdateVisualState is the opposite because a number of the

+            methods in InteractionHelper need to trigger it in the calling

+            class.  We do this using the IUpdateVisualState internal interface.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.UpdateVisualStateBase(System.Boolean)">

+            <summary>

+            Update the visual state of the control.

+            </summary>

+            <param name="useTransitions">

+            A value indicating whether to automatically generate transitions to

+            the new state, or instantly transition to the new state.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.OnLoaded(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handle the control's Loaded event.

+            </summary>

+            <param name="sender">The control.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.OnIsEnabledChanged(System.Object,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            Handle changes to the control's IsEnabled property.

+            </summary>

+            <param name="sender">The control.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.OnIsReadOnlyChanged(System.Boolean)">

+            <summary>

+            Handles changes to the control's IsReadOnly property.

+            </summary>

+            <param name="value">The value of the property.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.OnApplyTemplateBase">

+            <summary>

+            Update the visual state of the control when its template is changed.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.AllowGotFocus(System.Windows.RoutedEventArgs)">

+            <summary>

+            Check if the control's GotFocus event should be handled.

+            </summary>

+            <param name="e">Event arguments.</param>

+            <returns>

+            A value indicating whether the event should be handled.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.OnGotFocusBase">

+            <summary>

+            Base implementation of the virtual GotFocus event handler.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.AllowLostFocus(System.Windows.RoutedEventArgs)">

+            <summary>

+            Check if the control's LostFocus event should be handled.

+            </summary>

+            <param name="e">Event arguments.</param>

+            <returns>

+            A value indicating whether the event should be handled.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.OnLostFocusBase">

+            <summary>

+            Base implementation of the virtual LostFocus event handler.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.AllowMouseEnter(System.Windows.Input.MouseEventArgs)">

+            <summary>

+            Check if the control's MouseEnter event should be handled.

+            </summary>

+            <param name="e">Event arguments.</param>

+            <returns>

+            A value indicating whether the event should be handled.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.OnMouseEnterBase">

+            <summary>

+            Base implementation of the virtual MouseEnter event handler.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.AllowMouseLeave(System.Windows.Input.MouseEventArgs)">

+            <summary>

+            Check if the control's MouseLeave event should be handled.

+            </summary>

+            <param name="e">Event arguments.</param>

+            <returns>

+            A value indicating whether the event should be handled.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.OnMouseLeaveBase">

+            <summary>

+            Base implementation of the virtual MouseLeave event handler.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.AllowMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs)">

+            <summary>

+            Check if the control's MouseLeftButtonDown event should be handled.

+            </summary>

+            <param name="e">Event arguments.</param>

+            <returns>

+            A value indicating whether the event should be handled.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.OnMouseLeftButtonDownBase">

+            <summary>

+            Base implementation of the virtual MouseLeftButtonDown event

+            handler.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.AllowMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs)">

+            <summary>

+            Check if the control's MouseLeftButtonUp event should be handled.

+            </summary>

+            <param name="e">Event arguments.</param>

+            <returns>

+            A value indicating whether the event should be handled.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.OnMouseLeftButtonUpBase">

+            <summary>

+            Base implementation of the virtual MouseLeftButtonUp event handler.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.AllowKeyDown(System.Windows.Input.KeyEventArgs)">

+            <summary>

+            Check if the control's KeyDown event should be handled.

+            </summary>

+            <param name="e">Event arguments.</param>

+            <returns>

+            A value indicating whether the event should be handled.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.InteractionHelper.AllowKeyUp(System.Windows.Input.KeyEventArgs)">

+            <summary>

+            Check if the control's KeyUp event should be handled.

+            </summary>

+            <param name="e">Event arguments.</param>

+            <returns>

+            A value indicating whether the event should be handled.

+            </returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.InteractionHelper.Control">

+            <summary>

+            Gets the control the InteractionHelper is targeting.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.InteractionHelper.IsFocused">

+            <summary>

+            Gets a value indicating whether the control has focus.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.InteractionHelper.IsMouseOver">

+            <summary>

+            Gets a value indicating whether the mouse is over the control.

+            </summary> 

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.InteractionHelper.IsReadOnly">

+            <summary>

+            Gets a value indicating whether the read-only property is set.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.InteractionHelper.IsPressed">

+            <summary>

+            Gets a value indicating whether the mouse button is pressed down

+            over the control.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.InteractionHelper.LastClickTime">

+            <summary>

+            Gets or sets the last time the control was clicked.

+            </summary>

+            <remarks>

+            The value is stored as Utc time because it is slightly more

+            performant than converting to local time.

+            </remarks>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.InteractionHelper.LastClickPosition">

+            <summary>

+            Gets or sets the mouse position of the last click.

+            </summary>

+            <remarks>The value is relative to the control.</remarks>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.InteractionHelper.ClickCount">

+            <summary>

+            Gets the number of times the control was clicked.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.ItemsControlHelper">

+            <summary>

+            The ItemContainerGenerator provides useful utilities for ItemsControls.

+            </summary>

+            <QualityBand>Preview</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.ItemsControlHelper._itemsHost">

+            <summary>

+            A Panel that is used as the ItemsHost of the ItemsControl.  This

+            property will only be valid when the ItemsControl is live in the

+            tree and has generated containers for some of its items.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.ItemsControlHelper._scrollHost">

+            <summary>

+            A ScrollViewer that is used to scroll the items in the ItemsHost.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlHelper.#ctor(System.Windows.Controls.ItemsControl)">

+            <summary>

+            Initializes a new instance of the ItemContainerGenerator.

+            </summary>

+            <param name="control">

+            The ItemsControl being tracked by the ItemContainerGenerator.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlHelper.OnApplyTemplate">

+            <summary>

+            Apply a control template to the ItemsControl.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlHelper.PrepareContainerForItemOverride(System.Windows.DependencyObject,System.Windows.Style)">

+            <summary>

+            Prepares the specified container to display the specified item.

+            </summary>

+            <param name="element">

+            Container element used to display the specified item.

+            </param>

+            <param name="parentItemContainerStyle">

+            The ItemContainerStyle for the parent ItemsControl.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlHelper.UpdateItemContainerStyle(System.Windows.Style)">

+            <summary>

+            Update the style of any generated items when the ItemContainerStyle

+            has been changed.

+            </summary>

+            <param name="itemContainerStyle">The ItemContainerStyle.</param>

+            <remarks>

+            Silverlight does not support setting a Style multiple times, so we

+            only attempt to set styles on elements whose style hasn't already

+            been set.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ItemsControlHelper.ScrollIntoView(System.Windows.FrameworkElement)">

+            <summary>

+            Scroll the desired element into the ScrollHost's viewport.

+            </summary>

+            <param name="element">Element to scroll into view.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.ItemsControlHelper.ItemsControl">

+            <summary>

+            Gets or sets the ItemsControl being tracked by the

+            ItemContainerGenerator.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.ItemsControlHelper.ItemsHost">

+            <summary>

+            Gets a Panel that is used as the ItemsHost of the ItemsControl.

+            This property will only be valid when the ItemsControl is live in

+            the tree and has generated containers for some of its items.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.ItemsControlHelper.ScrollHost">

+            <summary>

+            Gets a ScrollViewer that is used to scroll the items in the

+            ItemsHost.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.NumericExtensions">

+            <summary>

+            Numeric utility methods used by controls.  These methods are similar in

+            scope to the WPF DoubleUtil class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.NumericExtensions.IsZero(System.Double)">

+            <summary>

+            Check if a number is zero.

+            </summary>

+            <param name="value">The number to check.</param>

+            <returns>True if the number is zero, false otherwise.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.NumericExtensions.IsNaN(System.Double)">

+            <summary>

+            Check if a number isn't really a number.

+            </summary>

+            <param name="value">The number to check.</param>

+            <returns>

+            True if the number is not a number, false if it is a number.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.NumericExtensions.IsGreaterThan(System.Double,System.Double)">

+            <summary>

+            Determine if one number is greater than another.

+            </summary>

+            <param name="left">First number.</param>

+            <param name="right">Second number.</param>

+            <returns>

+            True if the first number is greater than the second, false

+            otherwise.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.NumericExtensions.IsLessThanOrClose(System.Double,System.Double)">

+            <summary>

+            Determine if one number is less than or close to another.

+            </summary>

+            <param name="left">First number.</param>

+            <param name="right">Second number.</param>

+            <returns>

+            True if the first number is less than or close to the second, false

+            otherwise.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.NumericExtensions.AreClose(System.Double,System.Double)">

+            <summary>

+            Determine if two numbers are close in value.

+            </summary>

+            <param name="left">First number.</param>

+            <param name="right">Second number.</param>

+            <returns>

+            True if the first number is close in value to the second, false

+            otherwise.

+            </returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.NumericExtensions.NanUnion">

+            <summary>

+            NanUnion is a C++ style type union used for efficiently converting

+            a double into an unsigned long, whose bits can be easily

+            manipulated.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.NumericExtensions.NanUnion.FloatingValue">

+            <summary>

+            Floating point representation of the union.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.NumericExtensions.NanUnion.IntegerValue">

+            <summary>

+            Integer representation of the union.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1">

+            <summary>

+            Provides event data for various routed events that track property values

+            changing.  Typically the events denote a cancellable action.

+            </summary>

+            <typeparam name="T">

+            The type of the value for the dependency property that is changing.

+            </typeparam>

+            <QualityBand>Preview</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1._cancel">

+            <summary>

+            Private member variable for Cancel property.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1.#ctor(System.Windows.DependencyProperty,`0,`0,System.Boolean)">

+            <summary>

+            Initializes a new instance of the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1" />

+            class.

+            </summary>

+            <param name="property">

+            The <see cref="T:System.Windows.DependencyProperty" /> identifier

+            for the property that is changing.

+            </param>

+            <param name="oldValue">The previous value of the property.</param>

+            <param name="newValue">

+            The new value of the property, assuming that the property change is

+            not cancelled.

+            </param>

+            <param name="isCancelable">

+            True if the property change is cancellable by setting

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1.Cancel" />

+            to true in event handling. false if the property change is not

+            cancellable.

+            </param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1.Property">

+            <summary>

+            Gets the <see cref="T:System.Windows.DependencyProperty" />

+            identifier for the property that is changing.

+            </summary>

+            <value>

+            The <see cref="T:System.Windows.DependencyProperty" /> identifier

+            for the property that is changing.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1.OldValue">

+            <summary>

+            Gets a value that reports the previous value of the changing

+            property.

+            </summary>

+            <value>

+            The previous value of the changing property.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1.NewValue">

+            <summary>

+            Gets or sets a value that reports the new value of the changing

+            property, assuming that the property change is not cancelled.

+            </summary>

+            <value>

+            The new value of the changing property.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1.IsCancelable">

+            <summary>

+            Gets a value indicating whether the property change that originated

+            the RoutedPropertyChanging event is cancellable.

+            </summary>

+            <value>

+            True if the property change is cancellable. false if the property

+            change is not cancellable.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1.Cancel">

+            <summary>

+            Gets or sets a value indicating whether the property change that

+            originated the RoutedPropertyChanging event should be cancelled.

+            </summary>

+            <value>

+            True to cancel the property change; this resets the property to

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1.OldValue" />.

+            false to not cancel the property change; the value changes to

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1.NewValue" />.

+            </value>

+            <exception cref="T:System.InvalidOperationException">

+            Attempted to cancel in an instance where

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1.IsCancelable" />

+            is false.

+            </exception>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventArgs`1.InCoercion">

+            <summary>

+            Gets or sets a value indicating whether internal value coercion is

+            acting on the property change that originated the

+            RoutedPropertyChanging event.

+            </summary>

+            <value>

+            True if coercion is active. false if coercion is not active.

+            </value>

+            <remarks>

+            This is a total hack to work around the class hierarchy for Value

+            coercion in NumericUpDown.

+            </remarks>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.RoutedPropertyChangingEventHandler`1">

+            <summary>

+            Represents methods that handle various routed events that track property

+            values changing.  Typically the events denote a cancellable action.

+            </summary>

+            <typeparam name="T">

+            The type of the value for the dependency property that is changing.

+            </typeparam>

+            <param name="sender">

+            The object where the initiating property is changing.

+            </param>

+            <param name="e">Event data for the event.</param>

+            <QualityBand>Preview</QualityBand>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.ScrollExtensions">

+            <summary>

+            The ScrollExtensions class provides utility methods for scrolling items

+            ScrollViewers.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.LineChange">

+            <summary>

+            The amount to scroll a ScrollViewer for a line change.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.ScrollByVerticalOffset(System.Windows.Controls.ScrollViewer,System.Double)">

+            <summary>

+            Scroll a ScrollViewer vertically by a given offset.

+            </summary>

+            <param name="viewer">The ScrollViewer.</param>

+            <param name="offset">The vertical offset to scroll.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.ScrollByHorizontalOffset(System.Windows.Controls.ScrollViewer,System.Double)">

+            <summary>

+            Scroll a ScrollViewer horizontally by a given offset.

+            </summary>

+            <param name="viewer">The ScrollViewer.</param>

+            <param name="offset">The horizontal offset to scroll.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.LineUp(System.Windows.Controls.ScrollViewer)">

+            <summary>

+            Scroll the ScrollViewer up by a line.

+            </summary>

+            <param name="viewer">The ScrollViewer.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.LineDown(System.Windows.Controls.ScrollViewer)">

+            <summary>

+            Scroll the ScrollViewer down by a line.

+            </summary>

+            <param name="viewer">The ScrollViewer.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.LineLeft(System.Windows.Controls.ScrollViewer)">

+            <summary>

+            Scroll the ScrollViewer left by a line.

+            </summary>

+            <param name="viewer">The ScrollViewer.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.LineRight(System.Windows.Controls.ScrollViewer)">

+            <summary>

+            Scroll the ScrollViewer right by a line.

+            </summary>

+            <param name="viewer">The ScrollViewer.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.PageUp(System.Windows.Controls.ScrollViewer)">

+            <summary>

+            Scroll the ScrollViewer up by a page.

+            </summary>

+            <param name="viewer">The ScrollViewer.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.PageDown(System.Windows.Controls.ScrollViewer)">

+            <summary>

+            Scroll the ScrollViewer down by a page.

+            </summary>

+            <param name="viewer">The ScrollViewer.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.PageLeft(System.Windows.Controls.ScrollViewer)">

+            <summary>

+            Scroll the ScrollViewer left by a page.

+            </summary>

+            <param name="viewer">The ScrollViewer.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.PageRight(System.Windows.Controls.ScrollViewer)">

+            <summary>

+            Scroll the ScrollViewer right by a page.

+            </summary>

+            <param name="viewer">The ScrollViewer.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.ScrollToTop(System.Windows.Controls.ScrollViewer)">

+            <summary>

+            Scroll the ScrollViewer to the top.

+            </summary>

+            <param name="viewer">The ScrollViewer.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.ScrollToBottom(System.Windows.Controls.ScrollViewer)">

+            <summary>

+            Scroll the ScrollViewer to the bottom.

+            </summary>

+            <param name="viewer">The ScrollViewer.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.ScrollExtensions.GetTopAndBottom(System.Windows.FrameworkElement,System.Windows.FrameworkElement,System.Double@,System.Double@)">

+            <summary>

+            Get the top and bottom of an element with respect to its parent.

+            </summary>

+            <param name="element">The element to get the position of.</param>

+            <param name="parent">The parent of the element.</param>

+            <param name="top">Vertical offset to the top of the element.</param>

+            <param name="bottom">

+            Vertical offset to the bottom of the element.

+            </param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.TypeConverters">

+            <summary>

+            Common TypeConverter functionality.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TypeConverters.CanConvertFrom``1(System.Type)">

+            <summary>

+            Returns a value indicating whether this converter can convert an

+            object of the given type to an instance of the expected type.

+            </summary>

+            <typeparam name="T">Expected type of the converter.</typeparam>

+            <param name="sourceType">

+            The type of the source that is being evaluated for conversion.

+            </param>

+            <returns>

+            A value indicating whether the converter can convert the provided

+            type.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TypeConverters.ConvertFrom``1(System.ComponentModel.TypeConverter,System.Object)">

+            <summary>

+            Attempts to convert a specified object to an instance of the

+            expected type.

+            </summary>

+            <typeparam name="T">Expected type of the converter.</typeparam>

+            <param name="converter">TypeConverter instance.</param>

+            <param name="value">The object being converted.</param>

+            <returns>

+            The instance of the expected type created from the converted object.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TypeConverters.CanConvertTo``1(System.Type)">

+            <summary>

+            Determines whether conversion is possible to a specified type.

+            </summary>

+            <typeparam name="T">Expected type of the converter.</typeparam>

+            <param name="destinationType">

+            Identifies the data type to evaluate for conversion.

+            </param>

+            <returns>

+            A value indicating whether conversion is possible.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TypeConverters.ConvertTo(System.ComponentModel.TypeConverter,System.Object,System.Type)">

+            <summary>

+            Attempts to convert a specified object to an instance of the

+            desired type.

+            </summary>

+            <param name="converter">TypeConverter instance.</param>

+            <param name="value">The object being converted.</param>

+            <param name="destinationType">

+            The type to convert the value to.

+            </param>

+            <returns>

+            The value of the conversion to the specified type.

+            </returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.VisualStates">

+            <summary>

+            Names and helpers for visual states in the controls.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupCommon">

+            <summary>

+            Common state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateNormal">

+            <summary>

+            Normal state of the Common state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateReadOnly">

+            <summary>

+            Normal state of the Common state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateMouseOver">

+            <summary>

+            MouseOver state of the Common state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StatePressed">

+            <summary>

+            Pressed state of the Common state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateDisabled">

+            <summary>

+            Disabled state of the Common state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupFocus">

+            <summary>

+            Focus state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateUnfocused">

+            <summary>

+            Unfocused state of the Focus state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateFocused">

+            <summary>

+            Focused state of the Focus state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupSelection">

+            <summary>

+            Selection state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateSelected">

+            <summary>

+            Selected state of the Selection state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateUnselected">

+            <summary>

+            Unselected state of the Selection state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateSelectedInactive">

+            <summary>

+            Selected inactive state of the Selection state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupExpansion">

+            <summary>

+            Expansion state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateExpanded">

+            <summary>

+            Expanded state of the Expansion state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateCollapsed">

+            <summary>

+            Collapsed state of the Expansion state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupPopup">

+            <summary>

+            Popup state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StatePopupOpened">

+            <summary>

+            Opened state of the Popup state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StatePopupClosed">

+            <summary>

+            Closed state of the Popup state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupValidation">

+            <summary>

+            ValidationStates state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateValid">

+            <summary>

+            The valid state for the ValidationStates group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateInvalidFocused">

+            <summary>

+            Invalid, focused state for the ValidationStates group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateInvalidUnfocused">

+            <summary>

+            Invalid, unfocused state for the ValidationStates group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupExpandDirection">

+            <summary>

+            ExpandDirection state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateExpandDown">

+            <summary>

+            Down expand direction state of ExpandDirection state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateExpandUp">

+            <summary>

+            Up expand direction state of ExpandDirection state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateExpandLeft">

+            <summary>

+            Left expand direction state of ExpandDirection state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateExpandRight">

+            <summary>

+            Right expand direction state of ExpandDirection state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupHasItems">

+            <summary>

+            HasItems state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateHasItems">

+            <summary>

+            HasItems state of the HasItems state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateNoItems">

+            <summary>

+            NoItems state of the HasItems state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupIncrease">

+            <summary>

+            Increment state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateIncreaseEnabled">

+            <summary>

+            State enabled for increment group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateIncreaseDisabled">

+            <summary>

+            State disabled for increment group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupDecrease">

+            <summary>

+            Decrement state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateDecreaseEnabled">

+            <summary>

+            State enabled for decrement group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateDecreaseDisabled">

+            <summary>

+            State disabled for decrement group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupInteractionMode">

+            <summary>

+            InteractionMode state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateEdit">

+            <summary>

+            Edit of the DisplayMode state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateDisplay">

+            <summary>

+            Display of the DisplayMode state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupLocked">

+            <summary>

+            DisplayMode state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateLocked">

+            <summary>

+            Edit of the DisplayMode state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateUnlocked">

+            <summary>

+            Display of the DisplayMode state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateActive">

+            <summary>

+            Active state.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateInactive">

+            <summary>

+            Inactive state.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupActive">

+            <summary>

+            Active state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateUnwatermarked">

+            <summary>

+            Non-watermarked state.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateWatermarked">

+            <summary>

+            Watermarked state.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupWatermark">

+            <summary>

+            Watermark state group.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateCalendarButtonUnfocused">

+            <summary>

+            Unfocused state for Calendar Buttons.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.StateCalendarButtonFocused">

+            <summary>

+            Focused state for Calendar Buttons.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.VisualStates.GroupCalendarButtonFocus">

+            <summary>

+            CalendarButtons Focus state group.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualStates.GoToState(System.Windows.Controls.Control,System.Boolean,System.String[])">

+            <summary>

+            Use VisualStateManager to change the visual state of the control.

+            </summary>

+            <param name="control">

+            Control whose visual state is being changed.

+            </param>

+            <param name="useTransitions">

+            A value indicating whether to use transitions when updating the

+            visual state, or to snap directly to the new visual state.

+            </param>

+            <param name="stateNames">

+            Ordered list of state names and fallback states to transition into.

+            Only the first state to be found will be used.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualStates.GetImplementationRoot(System.Windows.DependencyObject)">

+            <summary>

+            Gets the implementation root of the Control.

+            </summary>

+            <param name="dependencyObject">The DependencyObject.</param>

+            <remarks>

+            Implements Silverlight's corresponding internal property on Control.

+            </remarks>

+            <returns>Returns the implementation root or null.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.VisualStates.TryGetVisualStateGroup(System.Windows.DependencyObject,System.String)">

+            <summary>

+            This method tries to get the named VisualStateGroup for the 

+            dependency object. The provided object's ImplementationRoot will be 

+            looked up in this call.

+            </summary>

+            <param name="dependencyObject">The dependency object.</param>

+            <param name="groupName">The visual state group's name.</param>

+            <returns>Returns null or the VisualStateGroup object.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.HierarchicalDataTemplate">

+            <summary>

+            Represents a <see cref="T:System.Windows.DataTemplate" /> that supports

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl" /> objects,

+            such as <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />.

+            </summary>

+            <QualityBand>Stable</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.HierarchicalDataTemplate._itemTemplate">

+            <summary>

+            The DataTemplate to apply to the ItemTemplate property on a

+            generated HeaderedItemsControl (such as a MenuItem or a

+            TreeViewItem), to indicate how to display items from the next level

+            in the data hierarchy.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.HierarchicalDataTemplate._itemContainerStyle">

+            <summary>

+            The Style to apply to the ItemContainerStyle property on a generated

+            HeaderedItemsControl (such as a MenuItem or a TreeViewItem), to

+            indicate how to style items from the next level in the data

+            hierarchy.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.HierarchicalDataTemplate.#ctor">

+            <summary>

+            Initializes a new instance of the

+            <see cref="T:System.Windows.HierarchicalDataTemplate" /> class.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.HierarchicalDataTemplate.ItemsSource">

+            <summary>

+            Gets or sets the collection that is used to generate content for the

+            next sublevel in the data hierarchy.

+            </summary>

+            <value>

+            The collection that is used to generate content for the next

+            sublevel in the data hierarchy.  The default value is null.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.HierarchicalDataTemplate.IsItemTemplateSet">

+            <summary>

+            Gets a value indicating whether the ItemTemplate property was set on

+            the template.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.HierarchicalDataTemplate.ItemTemplate">

+            <summary>

+            Gets or sets the <see cref="T:System.Windows.DataTemplate" /> to

+            apply to the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.ItemsControl.ItemTemplate" />

+            property on a generated

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl" />, such

+            as a <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />, to

+            indicate how to display items from the next sublevel in the data

+            hierarchy.

+            </summary>

+            <value>

+            The <see cref="T:System.Windows.DataTemplate" /> to apply to the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.ItemsControl.ItemTemplate" />

+            property on a generated

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.HeaderedItemsControl" />, such

+            as a <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" />, to

+            indicate how to display items from the next sublevel in the data

+            hierarchy.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.HierarchicalDataTemplate.IsItemContainerStyleSet">

+            <summary>

+            Gets a value indicating whether the ItemContainerStyle property was

+            set on the template.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.HierarchicalDataTemplate.ItemContainerStyle">

+            <summary>

+            Gets or sets the <see cref="T:System.Windows.Style" /> that is

+            applied to the item container for each child item.

+            </summary>

+            <value>

+            The style that is applied to the item container for each child item.

+            </value>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.DragValidator">

+            <summary>

+            Class to encapsulate drag behavior for a UIElement.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.DragValidator._targetElement">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.DragValidator._start">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.DragValidator._draggingActive">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.DragValidator.#ctor(System.Windows.UIElement)">

+            <summary>

+            Create an instance of the DragValidator class.

+            </summary>

+            <param name="targetElement">

+            UIElement that represents the source of the drag operation.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.DragValidator.TargetElement_MouseMove(System.Object,System.Windows.Input.MouseEventArgs)">

+            <summary>

+            Handle the MouseMove event for the UIElement to update the drag

+            operation.

+            </summary>

+            <param name="sender">Inherited code: Requires comment.</param>

+            <param name="e">Inherited code: Requires comment 1.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.DragValidator.TargetElement_MouseLeftButtonUp(System.Object,System.Windows.Input.MouseButtonEventArgs)">

+            <summary>

+            Handle the MouseLeftButtonUp event for the UIElement to complete the

+            drag operation.

+            </summary>

+            <param name="sender">Inherited code: Requires comment.</param>

+            <param name="e">Inherited code: Requires comment 1.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.DragValidator.TargetElement_MouseLeftButtonDown(System.Object,System.Windows.Input.MouseButtonEventArgs)">

+            <summary>

+            Handle the MouseLeftButtonDown event for the UIElement to start a

+            drag operation.

+            </summary>

+            <param name="sender">Inherited code: Requires comment.</param>

+            <param name="e">Inherited code: Requires comment 1.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.DragValidator.OnDragStarted">

+            <summary>

+            Invoke the DragStartedEvent handlers.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.DragValidator.OnDragDelta(System.Windows.Input.MouseEventArgs)">

+            <summary>

+            Invoke the DragDeltaEvent handlers.

+            </summary>

+            <param name="e">Inherited code: Requires comment.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.DragValidator.OnDragCompleted(System.Windows.Input.MouseEventArgs,System.Boolean)">

+            <summary>

+            Invoke the DragCompletedEvent handlers.

+            </summary>

+            <param name="e">Inherited code: Requires comment.</param>

+            <param name="canceled">Inherited code: Requires comment 1.</param>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Controls.DragValidator.DragStartedEvent">

+            <summary>

+            Occurs when a drag operation has started.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Controls.DragValidator.DragCompletedEvent">

+            <summary>

+            Occurs when a drag operation has completed.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Controls.DragValidator.DragDeltaEvent">

+            <summary>

+            Occurs when a drag operation has progressed.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.GridSplitter">

+            <summary>

+            Represents a control that redistributes space between the rows of

+            columns of a <see cref="T:Microsoft.Silverlight.Testing.Controls.Grid" /> control.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+            <summary>

+            Represents the control that redistributes space between columns or rows

+            of a Grid control.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+            <summary>

+            Represents the control that redistributes space between columns or rows

+            of a Grid control.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+            <summary>

+            Represents the control that redistributes space between columns or rows

+            of a Grid control.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+            <summary>

+            Represents the control that redistributes space between columns or rows

+            of a Grid control.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+            <summary>

+            Represents the control that redistributes space between columns or rows

+            of a Grid control.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+            <summary>

+            Represents the control that redistributes space between columns or rows

+            of a Grid control.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+            <summary>

+            Represents the control that redistributes space between columns or rows

+            of a Grid control.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.ElementHorizontalTemplateName">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.ElementVerticalTemplateName">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.DragIncrement">

+            <summary>

+            Default increment parameter.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.KeyboardIncrement">

+            <summary>

+            Default increment parameter.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.ShowsPreviewProperty">

+            <summary>

+            Identifies the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ShowsPreview" />

+            dependency property.

+            </summary>

+            <value>

+            An identifier for the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ShowsPreview" />

+            dependency property.

+            </value>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.PreviewStyleProperty">

+            <summary>

+            Identifies the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.PreviewStyle" />

+            dependency property.

+            </summary>

+            <value>

+            An identifier for the

+            <see cref="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.PreviewStyle" />

+            dependency property.

+            </value>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.OnIsEnabledChanged(System.Object,System.Windows.DependencyPropertyChangedEventArgs)">

+            <summary>

+            Called when the IsEnabled property changes.

+            </summary>

+            <param name="sender">Sender object.</param>

+            <param name="e">Property changed args.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter._previewLayer">

+            <summary>

+            Is Null until a resize operation is initiated with ShowsPreview ==

+            True, then it persists for the life of the GridSplitter.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter._dragValidator">

+            <summary>

+            Is initialized in the constructor.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter._currentGridResizeDirection">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter._isMouseOver">

+            <summary>

+            Holds the state for whether the mouse is over the control or not.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.#ctor">

+            <summary>

+            Initializes a new instance of the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.GridSplitter" /> class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.OnApplyTemplate">

+            <summary>

+            Builds the visual tree for the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.GridSplitter" />

+            control when a new template is applied.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.OnCreateAutomationPeer">

+            <summary>

+            Returns a

+            <see cref="T:System.Windows.Automation.Peers.GridSplitterAutomationPeer" />

+            for use by the Silverlight automation infrastructure.

+            </summary>

+            <returns>

+            A

+            <see cref="T:System.Windows.Automation.Peers.GridSplitterAutomationPeer" />

+            for the <see cref="T:Microsoft.Silverlight.Testing.Controls.GridSplitter" />

+            object.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.ChangeVisualState">

+            <summary>

+            Method to change the visual state of the control.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.ChangeVisualState(System.Boolean)">

+            <summary>

+            Change to the correct visual state for the GridSplitter.

+            </summary>

+            <param name="useTransitions">

+            True to use transitions when updating the visual state, false to

+            snap directly to the new visual state.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.DragValidator_DragCompletedEvent(System.Object,System.Windows.Controls.Primitives.DragCompletedEventArgs)">

+            <summary>

+            Handle the drag completed event to commit or cancel the resize

+            operation in progress.

+            </summary>

+            <param name="sender">Inherited code: Requires comment.</param>

+            <param name="e">Inherited code: Requires comment 1.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.DragValidator_DragDeltaEvent(System.Object,System.Windows.Controls.Primitives.DragDeltaEventArgs)">

+            <summary>

+            Handle the drag delta event to update the UI for the resize

+            operation in progress.

+            </summary>

+            <param name="sender">Inherited code: Requires comment.</param>

+            <param name="e">Inherited code: Requires comment 1.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.DragValidator_DragStartedEvent(System.Object,System.Windows.Controls.Primitives.DragStartedEventArgs)">

+            <summary>

+            Handle the drag started event to start a resize operation if the

+            control is enabled.

+            </summary>

+            <param name="sender">Inherited code: Requires comment.</param>

+            <param name="e">Inherited code: Requires comment 1.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.GridSplitter_KeyDown(System.Object,System.Windows.Input.KeyEventArgs)">

+            <summary>

+            Handle the key down event to allow keyboard resizing or canceling a

+            resize operation.

+            </summary>

+            <param name="sender">Inherited code: Requires comment.</param>

+            <param name="e">Inherited code: Requires comment 1.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.InitializeAndMoveSplitter(System.Double,System.Double)">

+            <summary>

+            Initialize the resize data and move the splitter by the specified

+            amount.

+            </summary>

+            <param name="horizontalChange">

+            Horizontal amount to move the splitter.

+            </param>

+            <param name="verticalChange">

+            Vertical amount to move the splitter.

+            </param>

+            <returns>Inherited code: Requires comment.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.KeyboardMoveSplitter(System.Double,System.Double)">

+            <summary>

+            Called by keyboard event handler to move the splitter if allowed.

+            </summary>

+            <param name="horizontalChange">

+            Horizontal amount to move the splitter.

+            </param>

+            <param name="verticalChange">

+            Vertical amount to move the splitter.

+            </param>

+            <returns>Inherited code: Requires comment.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.CreatePreviewLayer(System.Windows.Controls.Grid)">

+            <summary>

+            Creates the preview layer and adds it to the parent grid.

+            </summary>

+            <param name="parentGrid">Grid to add the preview layer to.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.SetupPreview">

+            <summary>

+            Add the preview layer to the Grid if it is not there already and

+            then show the preview control.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.RemovePreviewControl">

+            <summary>

+            Remove the preview control from the preview layer if it exists.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.InitializeData(System.Boolean)">

+            <summary>

+            Initialize the resizeData object to hold the information for the

+            resize operation in progress.

+            </summary>

+            <param name="showsPreview">

+            Whether or not the preview should be shown.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.MoveSplitter(System.Double,System.Double)">

+            <summary>

+            Move the splitter and resize the affected columns or rows.

+            </summary>

+            <param name="horizontalChange">

+            Amount to resize horizontally.

+            </param>

+            <param name="verticalChange">

+            Amount to resize vertically.

+            </param>

+            <remarks>

+            Only one of horizontalChange or verticalChange will be non-zero.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.SetupDefinitionsToResize">

+            <summary>

+            Determine which adjacent column or row definitions need to be

+            included in the resize operation and set up resizeData accordingly.

+            </summary>

+            <returns>True if it is a valid resize operation.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.CancelResize">

+            <summary>

+            Cancel the resize operation in progress.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.GetActualLength(Microsoft.Silverlight.Testing.Controls.GridSplitter.DefinitionAbstraction)">

+            <summary>

+            Get the actual length of the given definition.

+            </summary>

+            <param name="definition">

+            Row or column definition to get the actual length for.

+            </param>

+            <returns>

+            Height of a row definition or width of a column definition.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.GetDeltaConstraints">

+            <summary>

+            Determine the max and min that the two definitions can be resized.

+            </summary>

+            <returns>Inherited code: Requires comment.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.GetEffectiveResizeBehavior(Microsoft.Silverlight.Testing.Controls.GridSplitter.GridResizeDirection)">

+            <summary>

+            Determine the resize behavior based on the given direction and

+            alignment.

+            </summary>

+            <param name="direction">Inherited code: Requires comment.</param>

+            <returns>Inherited code: Requires comment 1.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.GetEffectiveResizeDirection">

+            <summary>

+            Determine the resize direction based on the horizontal and vertical

+            alignments.

+            </summary>

+            <returns>Inherited code: Requires comment.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.GetGridDefinition(System.Windows.Controls.Grid,System.Int32,Microsoft.Silverlight.Testing.Controls.GridSplitter.GridResizeDirection)">

+            <summary>

+            Create a DefinitionAbstraction instance for the given row or column

+            index in the grid.

+            </summary>

+            <param name="grid">Inherited code: Requires comment.</param>

+            <param name="index">Inherited code: Requires comment 1.</param>

+            <param name="direction">Inherited code: Requires comment 2.</param>

+            <returns>Inherited code: Requires comment 3.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.SetLengths(System.Double,System.Double)">

+            <summary>

+            Set the lengths of the two definitions depending on the split

+            behavior.

+            </summary>

+            <param name="definition1Pixels">

+            Inherited code: Requires comment.

+            </param>

+            <param name="definition2Pixels">

+            Inherited code: Requires comment 1.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.SetDefinitionLength(Microsoft.Silverlight.Testing.Controls.GridSplitter.DefinitionAbstraction,System.Windows.GridLength)">

+            <summary>

+            Set the height/width of the given row/column.

+            </summary>

+            <param name="definition">Inherited code: Requires comment.</param>

+            <param name="length">Inherited code: Requires comment 1.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.IsStar(Microsoft.Silverlight.Testing.Controls.GridSplitter.DefinitionAbstraction)">

+            <summary>

+            Determine if the given definition has its size set to the "*" value.

+            </summary>

+            <param name="definition">Inherited code: Requires comment.</param>

+            <returns>Inherited code: Requires comment 1.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.UpdateTemplateOrientation">

+            <summary>

+            This code will run whenever the effective resize direction changes,

+            to update the template being used to display this control.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter._testHook">

+            <summary>

+            Exposes test hooks to unit tests with internal access.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ElementHorizontalTemplateFrameworkElement">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ElementVerticalTemplateFrameworkElement">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeDataInternal">

+            <summary>

+            Gets or sets the resize data.  This is null unless a resize

+            operation is in progress.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ShowsPreview">

+            <summary>

+            Gets or sets a value indicating whether the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.GridSplitter" /> displays a

+            preview.

+            </summary>

+            <value>

+            True if a preview is displayed; otherwise, false.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.PreviewStyle">

+            <summary>

+            Gets or sets the <see cref="T:System.Windows.Style" /> that is used

+            for previewing changes.

+            </summary>

+            <value>

+            The style that is used to preview changes.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.HasKeyboardFocus">

+            <summary>

+            Gets a value indicating whether or not the control has keyboard

+            focus.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.TestHook">

+            <summary>

+            Gets a test hook for unit tests with internal access.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.GridSplitter.DefinitionAbstraction">

+            <summary>

+            Pretends to be the base class for RowDefinition and ClassDefinition

+            types so that objects of either type can be treated as one.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.DefinitionAbstraction.#ctor(System.Windows.DependencyObject)">

+            <summary>

+            Creates an instance of the DefinitionAbstraction class based on

+            the given row or column definition.

+            </summary>

+            <param name="definition">

+            RowDefinition or ColumnDefinition instance.

+            </param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.DefinitionAbstraction.AsRowDefinition">

+            <summary>

+            Gets the stored definition cast as a row definition.

+            </summary>

+            <value>Null if not a RowDefinition.</value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.DefinitionAbstraction.AsColumnDefinition">

+            <summary>

+            Gets the stored definition cast as a column definition.

+            </summary>

+            <value>Null if not a ColumnDefinition.</value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.DefinitionAbstraction.MaxSize">

+            <summary>

+            Gets the MaxHeight/MaxWidth for the row/column.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.DefinitionAbstraction.MinSize">

+            <summary>

+            Gets the MinHeight/MinWidth for the row/column.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.DefinitionAbstraction.Size">

+            <summary>

+            Gets the Height/Width for the row/column.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.GridSplitter.DoubleUtil">

+            <summary>

+            A collection of helper methods for working with double data types.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.DoubleUtil.Epsilon">

+            <summary>

+            Epsilon is the smallest value such that 1.0+epsilon != 1.0.  It

+            can be used to determine the acceptable tolerance for rounding

+            errors.

+            </summary>

+            <remarks>

+            Epsilon is normally 2.2204460492503131E-16, but Silverlight 2

+            uses floats so the effective epsilon is really 1.192093E-07.

+            </remarks>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.DoubleUtil.ScalarAdjustment">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.DoubleUtil.AreClose(System.Double,System.Double)">

+            <summary>

+            Determine if the two doubles are effectively equal within

+            tolerances.

+            </summary>

+            <param name="value1">Inherited code: Requires comment.</param>

+            <param name="value2">Inherited code: Requires comment 1.</param>

+            <returns>Inherited code: Requires comment 2.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.GridSplitter.GridResizeBehavior">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.GridResizeBehavior.BasedOnAlignment">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.GridResizeBehavior.CurrentAndNext">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.GridResizeBehavior.PreviousAndCurrent">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.GridResizeBehavior.PreviousAndNext">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.GridSplitter.GridResizeDirection">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.GridResizeDirection.Auto">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.GridResizeDirection.Columns">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.GridResizeDirection.Rows">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData">

+            <summary>

+            Type to hold the data for the resize operation in progress.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.PreviewControl">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.Definition1">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.Definition1Index">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.Definition2">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.Definition2Index">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.Grid">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.MaxChange">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.MinChange">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.OriginalDefinition1ActualLength">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.OriginalDefinition1Length">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.OriginalDefinition2ActualLength">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.OriginalDefinition2Length">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.ResizeBehavior">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.ResizeDirection">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.ShowsPreview">

+            <summary>

+            Gets or sets a value indicating whether Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.SplitBehavior">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.SplitterIndex">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.ResizeData.SplitterLength">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.GridSplitter.SplitBehavior">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.SplitBehavior.Split">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.SplitBehavior.ResizeDefinition1">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.SplitBehavior.ResizeDefinition2">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.GridSplitter.InternalTestHook">

+            <summary>

+            Expose test hooks for internal and private members of the

+            GridSplitter.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.GridSplitter.InternalTestHook._gridSplitter">

+            <summary>

+            Reference to the outer 'parent' GridSplitter.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.InternalTestHook.#ctor(Microsoft.Silverlight.Testing.Controls.GridSplitter)">

+            <summary>

+            Initializes a new instance of the InternalTestHook class.

+            </summary>

+            <param name="gridSplitter">The grid splitter to hook.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.InternalTestHook.DragValidator_DragCompletedEvent(System.Object,System.Windows.Controls.Primitives.DragCompletedEventArgs)">

+            <summary>

+            Simulate the DragValidator's DragCompleted event.

+            </summary>

+            <param name="sender">The sender.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.InternalTestHook.DragValidator_DragDeltaEvent(System.Object,System.Windows.Controls.Primitives.DragDeltaEventArgs)">

+            <summary>

+            Simulate the DragValidator's DragDelta event.

+            </summary>

+            <param name="sender">The sender.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.InternalTestHook.DragValidator_DragStartedEvent(System.Object,System.Windows.Controls.Primitives.DragStartedEventArgs)">

+            <summary>

+            Simulate the DragValidator's DragStarted event.

+            </summary>

+            <param name="sender">The sender.</param>

+            <param name="e">Event arguments.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitter.InternalTestHook.KeyboardMoveSplitter(System.Double,System.Double)">

+            <summary>

+            Simulate using the keyboard to move the splitter.

+            </summary>

+            <param name="horizontalChange">Horizontal change.</param>

+            <param name="verticalChange">Vertical change.</param>

+            <returns>

+            A value indicating whether the splitter was moved.

+            </returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.InternalTestHook.GridResizeDirection">

+            <summary>

+            Gets the GridSplitter's GridResizeDirection.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.InternalTestHook.PreviewLayer">

+            <summary>

+            Gets the GridSplitter's PreviewLayer.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitter.InternalTestHook.ResizeData">

+            <summary>

+            Gets the GridSplitter's ResizeData.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.GridSplitterAutomationPeer">

+            <summary>

+            Exposes <see cref="T:Microsoft.Silverlight.Testing.Controls.GridSplitter" /> types to

+            UI automation.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitterAutomationPeer.#ctor(Microsoft.Silverlight.Testing.Controls.GridSplitter)">

+            <summary>

+            Initializes a new instance of the

+            <see cref="T:System.Windows.Automation.Peers.GridSplitterAutomationPeer" />

+            class.

+            </summary>

+            <param name="owner">

+            The <see cref="T:Microsoft.Silverlight.Testing.Controls.GridSplitter" /> to

+            associate with the

+            <see cref="T:System.Windows.Automation.Peers.GridSplitterAutomationPeer" />.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitterAutomationPeer.GetAutomationControlTypeCore">

+            <summary>

+            Gets the control type for the element that is associated with the UI

+            Automation peer.

+            </summary>

+            <returns>The control type.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitterAutomationPeer.GetClassNameCore">

+            <summary>

+            Called by GetClassName that gets a human readable name that, in

+            addition to AutomationControlType,  differentiates the control

+            represented by this AutomationPeer.

+            </summary>

+            <returns>The string that contains the name.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitterAutomationPeer.GetPattern(System.Windows.Automation.Peers.PatternInterface)">

+            <summary>

+            Gets the control pattern for the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.GridSplitter" /> that is

+            associated with this

+            <see cref="T:System.Windows.Automation.Peers.GridSplitterAutomationPeer" />.

+            </summary>

+            <param name="patternInterface">

+            One of the enumeration values.

+            </param>

+            <returns>

+            The object that implements the pattern interface, or null if the

+            specified pattern interface is not implemented by this peer.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitterAutomationPeer.System#Windows#Automation#Provider#ITransformProvider#Move(System.Double,System.Double)">

+            <summary>

+            Moves the control.

+            </summary>

+            <param name="x">

+            Absolute screen coordinates of the left side of the control.

+            </param>

+            <param name="y">

+            Absolute screen coordinates of the top of the control.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitterAutomationPeer.System#Windows#Automation#Provider#ITransformProvider#Resize(System.Double,System.Double)">

+            <summary>

+            Resizes the control.

+            </summary>

+            <param name="width">The new width of the window, in pixels.</param>

+            <param name="height">

+            The new height of the window, in pixels.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.GridSplitterAutomationPeer.System#Windows#Automation#Provider#ITransformProvider#Rotate(System.Double)">

+            <summary>

+            Rotates the control.

+            </summary>

+            <param name="degrees">

+            The number of degrees to rotate the control. A positive number

+            rotates clockwise; a negative number rotates counterclockwise.

+            </param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitterAutomationPeer.System#Windows#Automation#Provider#ITransformProvider#CanMove">

+            <summary>

+            Gets a value indicating whether the control can be moved.

+            </summary>

+            <value>

+            True if the element can be moved; otherwise, false.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitterAutomationPeer.System#Windows#Automation#Provider#ITransformProvider#CanResize">

+            <summary>

+            Gets a value indicating whether the UI automation element can be

+            resized.

+            </summary>

+            <value>

+            True if the element can be resized; otherwise, false.

+            </value>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.GridSplitterAutomationPeer.System#Windows#Automation#Provider#ITransformProvider#CanRotate">

+            <summary>

+            Gets a value indicating whether the control can be rotated.

+            </summary>

+            <value>

+            True if the element can be rotated; otherwise, false.

+            </value>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.PreviewControl">

+            <summary>

+            Represents the control that shows a preview of the GridSplitter's

+            redistribution of space between columns or rows of a Grid control.

+            </summary>

+            <QualityBand>Mature</QualityBand>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.PreviewControl.ElementHorizontalTemplateName">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.PreviewControl.ElementVerticalTemplateName">

+            <summary>

+            Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.PreviewControl._currentGridResizeDirection">

+            <summary>

+            Is Null until the PreviewControl is bound to a GridSplitter.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Controls.PreviewControl._gridSplitterOrigin">

+            <summary>

+            Tracks the bound GridSplitter's location for calculating the

+            PreviewControl's offset.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.PreviewControl.#ctor">

+            <summary>

+            Instantiate the PreviewControl.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.PreviewControl.OnApplyTemplate">

+            <summary>

+            Called when template should be applied to the control.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.PreviewControl.Bind(Microsoft.Silverlight.Testing.Controls.GridSplitter)">

+            <summary>

+            Bind the the dimensions of the preview control to the associated

+            grid splitter.

+            </summary>

+            <param name="gridSplitter">GridSplitter instance to target.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.PreviewControl.ElementHorizontalTemplateFrameworkElement">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.PreviewControl.ElementVerticalTemplateFrameworkElement">

+            <summary>

+            Gets or sets Inherited code: Requires comment.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.PreviewControl.OffsetX">

+            <summary>

+            Gets or sets the x-axis offset for the underlying render transform.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.PreviewControl.OffsetY">

+            <summary>

+            Gets or sets the y-axis offset for the underlying render transform.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.TreeViewAutomationPeer">

+            <summary>

+            Exposes <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" /> types to UI

+            automation.

+            </summary>

+            <QualityBand>Stable</QualityBand>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewAutomationPeer.#ctor(Microsoft.Silverlight.Testing.Controls.TreeView)">

+            <summary>

+            Initializes a new instance of the

+            <see cref="T:System.Windows.Automation.Peers.TreeViewAutomationPeer" />

+            class.

+            </summary>

+            <param name="owner">

+            The <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" /> to associate

+            with the

+            <see cref="T:System.Windows.Automation.Peers.TreeViewAutomationPeer" />.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewAutomationPeer.GetAutomationControlTypeCore">

+            <summary>

+            Gets the control type for the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" /> that is associated

+            with this

+            <see cref="T:System.Windows.Automation.Peers.TreeViewAutomationPeer" />.

+            This method is called by

+            <see cref="M:System.Windows.Automation.Peers.AutomationPeer.GetAutomationControlType" />.

+            </summary>

+            <returns>

+            The

+            <see cref="F:System.Windows.Automation.Peers.AutomationControlType.Tree" />

+            enumeration value.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewAutomationPeer.GetClassNameCore">

+            <summary>

+            Gets the name of the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" /> that is associated

+            with 

+            <see cref="T:System.Windows.Automation.Peers.TreeViewAutomationPeer" />.

+            This method is called by

+            <see cref="M:System.Windows.Automation.Peers.AutomationPeer.GetClassName" />.

+            </summary>

+            <returns>A string that contains TreeView.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewAutomationPeer.GetPattern(System.Windows.Automation.Peers.PatternInterface)">

+            <summary>

+            Gets a control pattern for the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" /> that is associated

+            with this

+            <see cref="T:System.Windows.Automation.Peers.TreeViewAutomationPeer" />.

+            </summary>

+            <param name="patternInterface">

+            One of the enumeration values that indicates the control pattern.

+            </param>

+            <returns>

+            The object that implements the pattern interface, or null if the

+            specified pattern interface is not implemented by this peer.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewAutomationPeer.GetChildrenCore">

+            <summary>

+            Gets the collection of child elements of the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeView" /> that is associated

+            with this

+            <see cref="T:System.Windows.Automation.Peers.TreeViewAutomationPeer" />.

+            </summary>

+            <returns>The collection of child elements.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewAutomationPeer.System#Windows#Automation#Provider#ISelectionProvider#GetSelection">

+            <summary>

+            Retrieves a UI automation provider for each child element that is

+            selected.

+            </summary>

+            <returns>An array of UI automation providers.</returns>

+            <remarks>

+            This API supports the .NET Framework infrastructure and is not 

+            intended to be used directly from your code.

+            </remarks>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewAutomationPeer.OwnerTreeView">

+            <summary>

+            Gets the TreeView that owns this TreeViewAutomationPeer.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewAutomationPeer.System#Windows#Automation#Provider#ISelectionProvider#CanSelectMultiple">

+            <summary>

+            Gets a value indicating whether the UI automation provider

+            allows more than one child element to be selected at the same time.

+            </summary>

+            <value>

+            True if multiple selection is allowed; otherwise, false.

+            </value>

+            <remarks>

+            This API supports the .NET Framework infrastructure and is not 

+            intended to be used directly from your code.

+            </remarks>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewAutomationPeer.System#Windows#Automation#Provider#ISelectionProvider#IsSelectionRequired">

+            <summary>

+            Gets a value indicating whether the UI automation provider

+            requires at least one child element to be selected.

+            </summary>

+            <value>

+            True if selection is required; otherwise, false.

+            </value>

+            <remarks>

+            This API supports the .NET Framework infrastructure and is not 

+            intended to be used directly from your code.

+            </remarks>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer">

+            <summary>

+            Exposes the items in

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> types to UI

+            automation.

+            </summary>

+            <QualityBand>Stable</QualityBand>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.#ctor(Microsoft.Silverlight.Testing.Controls.TreeViewItem)">

+            <summary>

+            Initializes a new instance of the

+            <see cref="T:System.Windows.Automation.Peers.TreeViewItemAutomationPeer" />

+            class.

+            </summary>

+            <param name="owner">

+            The <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> instance

+            to associate with this

+            <see cref="T:System.Windows.Automation.Peers.TreeViewItemAutomationPeer" />.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.GetAutomationControlTypeCore">

+            <summary>

+            Gets the control type for the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> that is

+            associated with this

+            <see cref="T:System.Windows.Automation.Peers.TreeViewItemAutomationPeer" />.

+            This method is called by

+            <see cref="M:System.Windows.Automation.Peers.AutomationPeer.GetAutomationControlType" />.

+            </summary>

+            <returns>

+            The

+            <see cref="F:System.Windows.Automation.Peers.AutomationControlType.TreeItem" />

+            enumeration value.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.GetClassNameCore">

+            <summary>

+            Gets the name of the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> that is

+            associated with this

+            <see cref="T:System.Windows.Automation.Peers.TreeViewItemAutomationPeer" />.

+            This method is called by

+            <see cref="M:System.Windows.Automation.Peers.AutomationPeer.GetClassName" />.

+            </summary>

+            <returns>A string that contains TreeViewItem.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.GetPattern(System.Windows.Automation.Peers.PatternInterface)">

+            <summary>

+            Gets the control pattern for the

+            <see cref="T:Microsoft.Silverlight.Testing.Controls.TreeViewItem" /> that is

+            associated with this

+            <see cref="T:System.Windows.Automation.Peers.TreeViewItemAutomationPeer" />.

+            </summary>

+            <param name="patternInterface">

+            One of the enumeration values.

+            </param>

+            <returns>

+            The object that implements the pattern interface, or null if the

+            specified pattern interface is not implemented by this peer.

+            </returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.RaiseAutomationIsSelectedChanged(System.Boolean)">

+            <summary>

+            Raise the IsSelected property changed event.

+            </summary>

+            <param name="isSelected">

+            A value indicating whether the TreeViewItem is selected.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.RaiseExpandCollapseAutomationEvent(System.Boolean,System.Boolean)">

+            <summary>

+            Raise an automation event when a TreeViewItem is expanded or

+            collapsed.

+            </summary>

+            <param name="oldValue">

+            A value indicating whether the TreeViewItem was expanded.

+            </param>

+            <param name="newValue">

+            A value indicating whether the TreeViewItem is expanded.

+            </param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.System#Windows#Automation#Provider#IExpandCollapseProvider#Expand">

+            <summary>

+            Displays all child nodes, controls, or content of the control.

+            </summary>

+            <remarks>

+            This API supports the .NET Framework infrastructure and is not 

+            intended to be used directly from your code.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.System#Windows#Automation#Provider#IExpandCollapseProvider#Collapse">

+            <summary>

+            Hides all nodes, controls, or content that are descendants of the

+            control.

+            </summary>

+            <remarks>

+            This API supports the .NET Framework infrastructure and is not 

+            intended to be used directly from your code.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.System#Windows#Automation#Provider#ISelectionItemProvider#AddToSelection">

+            <summary>

+            Adds the current element to the collection of selected items.

+            </summary>

+            <remarks>

+            This API supports the .NET Framework infrastructure and is not 

+            intended to be used directly from your code.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.System#Windows#Automation#Provider#ISelectionItemProvider#Select">

+            <summary>

+            Clears any selection and then selects the current element.

+            </summary>

+            <remarks>

+            This API supports the .NET Framework infrastructure and is not 

+            intended to be used directly from your code.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.System#Windows#Automation#Provider#ISelectionItemProvider#RemoveFromSelection">

+            <summary>

+            Removes the current element from the collection of selected items.

+            </summary>

+            <remarks>

+            This API supports the .NET Framework infrastructure and is not 

+            intended to be used directly from your code.

+            </remarks>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.System#Windows#Automation#Provider#IScrollItemProvider#ScrollIntoView">

+            <summary>

+            Scrolls the content area of a container object in order to display

+            the control within the visible region (viewport) of the container.

+            </summary>

+            <remarks>

+            This API supports the .NET Framework infrastructure and is not 

+            intended to be used directly from your code.

+            </remarks>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.OwnerTreeViewItem">

+            <summary>

+            Gets the TreeViewItem that owns this TreeViewItemAutomationPeer.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.System#Windows#Automation#Provider#IExpandCollapseProvider#ExpandCollapseState">

+            <summary>

+            Gets the state (expanded or collapsed) of the control.

+            </summary>

+            <value>

+            The state (expanded or collapsed) of the control.

+            </value>

+            <remarks>

+            This API supports the .NET Framework infrastructure and is not 

+            intended to be used directly from your code.

+            </remarks>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.System#Windows#Automation#Provider#ISelectionItemProvider#IsSelected">

+            <summary>

+            Gets a value indicating whether an item is selected.

+            </summary>

+            <value>True if an item is selected; otherwise, false.</value>

+            <remarks>

+            This API supports the .NET Framework infrastructure and is not 

+            intended to be used directly from your code.

+            </remarks>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Controls.TreeViewItemAutomationPeer.System#Windows#Automation#Provider#ISelectionItemProvider#SelectionContainer">

+            <summary>

+            Gets the UI automation provider that implements

+            <see cref="T:System.Windows.Automation.Provider.ISelectionProvider" />

+            and acts as the container for the calling object.

+            </summary>

+            <value>The UI automation provider.</value>

+            <remarks>

+            This API supports the .NET Framework infrastructure and is not 

+            intended to be used directly from your code.

+            </remarks>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.DataTemplateSelector">

+            <summary>

+            A specialized data template selector.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataTemplateSelector.#ctor">

+            <summary>

+            Initializes a new instance of the DataTemplateSelector type.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataTemplateSelector.Convert(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Convert a value to a data template.

+            </summary>

+            <param name="value">The value.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter value.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.DataTemplateSelector.ConvertBack(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            No 2-way databinding support.

+            </summary>

+            <param name="value">The value.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter value.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.DataTemplateSelector.DefaultDataTemplate">

+            <summary>

+            Gets or sets the default data template.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.DataTemplateSelector.TestMethodTemplate">

+            <summary>

+            Gets or sets the test method template.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.DataTemplateSelector.TestClassTemplate">

+            <summary>

+            Gets or sets the test class template.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.InvertValueConverter">

+            <summary>

+            A specialized bool inversion selector.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.InvertValueConverter.#ctor">

+            <summary>

+            Initializes a new instance of the InvertValueConverter class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.InvertValueConverter.Convert(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            Convert a value to its opposite. Defines that null value will also

+            return false.

+            </summary>

+            <param name="value">The value.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter value.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.InvertValueConverter.ConvertBack(System.Object,System.Type,System.Object,System.Globalization.CultureInfo)">

+            <summary>

+            No 2-way databinding support.

+            </summary>

+            <param name="value">The value.</param>

+            <param name="targetType">The target parameter.</param>

+            <param name="parameter">ConverterParameter value.</param>

+            <param name="culture">The culture parameter.</param>

+            <returns>Returns the object.</returns>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.Notification">

+            <summary>

+            A notification type for use in the Notifications ItemsControl.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Notification.CloseButtonName">

+            <summary>

+            Name of the template part.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Notification.TitleProperty">

+            <summary>

+            Identifies the Title dependency property.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Notification.CloseButtonVisibilityProperty">

+            <summary>

+            Identifies the CloseButtonVisibility dependency property.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.Notification._close">

+            <summary>

+            Backing field for the close button.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Notification.#ctor">

+            <summary>

+            Initializes a new instance of the Notification class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Notification.OnClosed(System.Windows.RoutedEventArgs)">

+            <summary>

+            Fires the Closed event.

+            </summary>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Notification.OnApplyTemplate">

+            <summary>

+            Overrides the on apply template method.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Notification.OnCloseClick(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Connects to the Click event of the Close button.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.Notification.Title">

+            <summary>

+            Gets or sets the title of the notification.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.Notification.CloseButtonVisibility">

+            <summary>

+            Gets or sets the visibility of the close button.

+            </summary>

+        </member>

+        <member name="E:Microsoft.Silverlight.Testing.Client.Notification.Closed">

+            <summary>

+            Closed event that connects to the close button of the notification.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.Notifications">

+            <summary>

+            A class that contains notification information.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Notifications.#ctor">

+            <summary>

+            Initialize a new intance of the Notifications type.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Notifications.OnApplyTemplate">

+            <summary>

+            Overrides the on apply template method.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Notifications.AddNotification(Microsoft.Silverlight.Testing.Client.Notification)">

+            <summary>

+            Adds a notification object to the set of notifications. Connects the

+            close button handler to automatically remove the notification from

+            the visual tree.

+            </summary>

+            <param name="notification">A notification instance.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.Notifications.OnNotificationClosed(System.Object,System.Windows.RoutedEventArgs)">

+            <summary>

+            Handles the Closed event from the notification and removes the

+            child.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event data.</param>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Client.TestApplicationInformation">

+            <summary>

+            This class contains information about the test application and its

+            deployment settings.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestApplicationInformation.#ctor">

+            <summary>

+            Initializes a new instance of the class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Client.TestApplicationInformation.OnInstallStateChanged(System.Object,System.EventArgs)">

+            <summary>

+            Handles the install state changed event.

+            </summary>

+            <param name="sender">The source object.</param>

+            <param name="e">The event arguments.</param>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Client.TestApplicationInformation._installed">

+            <summary>

+            Backing field for an installed property.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestApplicationInformation.OutOfBrowserApplicationInstalled">

+            <summary>

+            Gets a value indicating whether the test application is currently

+            installed out of browser.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestApplicationInformation.InstallationStateText">

+            <summary>

+            Gets the text to show the user the state of the out of browser test

+            application.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestApplicationInformation.SupportsOutOfBrowserAndNotInstalled">

+            <summary>

+            Gets a value indicating whether out of browser is both supported and

+            not currently installed.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Client.TestApplicationInformation.SupportsOutOfBrowser">

+            <summary>

+            Gets a value indicating whether out of browser is supported by this

+            test application.

+            </summary>

+        </member>

+        <member name="T:Microsoft.Silverlight.Testing.Service.SimpleXElement">

+            <summary>

+            A simple implementation similar to XElement.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.SimpleXElement._children">

+            <summary>

+            Backing field for child elements.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.SimpleXElement._attributes">

+            <summary>

+            Backing field for attributes.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.SimpleXElement._name">

+            <summary>

+            Backing field for the element name.

+            </summary>

+        </member>

+        <member name="F:Microsoft.Silverlight.Testing.Service.SimpleXElement._namespace">

+            <summary>

+            Backing field for optional XML namespace.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.#ctor">

+            <summary>

+            Initializes a new instance of the class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the element.

+            </summary>

+            <param name="elementName">The name of the element.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.#ctor(System.String,System.String)">

+            <summary>

+            Initializes a new instance of the element.

+            </summary>

+            <param name="elementName">The name of the element.</param>

+            <param name="ns">The XML namespace of the element.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.#ctor(System.Xml.XmlReader)">

+            <summary>

+            Initializes a new instance of the class using the reader as the

+            current root of the element.

+            </summary>

+            <param name="newElementReader">The XmlReader instance.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.SetElementValue(System.String,System.String)">

+            <summary>

+            Sets the value of a new child element.

+            </summary>

+            <param name="elementName">The element name.</param>

+            <param name="value">The value of the new element.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.SetElementValue(System.String,System.String,System.String)">

+            <summary>

+            Sets the value of a new child element with an XML namespace value.

+            </summary>

+            <param name="elementName">The element name.</param>

+            <param name="value">The value of the new element.</param>

+            <param name="xmlNamespace">The XML namespace.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.SetAttributeValue(System.String,System.String)">

+            <summary>

+            Sets the value of an attribute.

+            </summary>

+            <param name="attribute">The attribute name.</param>

+            <param name="value">The attribute value.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.SetValue(System.String)">

+            <summary>

+            Sets the value of the element.

+            </summary>

+            <param name="value">The new string value.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.Attribute(System.String)">

+            <summary>

+            Gets an attribute value.

+            </summary>

+            <param name="name">The attribute name.</param>

+            <returns>Returns an instance of the attribute value.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.Add(Microsoft.Silverlight.Testing.Service.SimpleXElement)">

+            <summary>

+            Adds a child element to the simple element instance.

+            </summary>

+            <param name="child">The child element instance.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.Descendants(System.String)">

+            <summary>

+            Returns descendants.

+            </summary>

+            <param name="elementName">The element name to look for.</param>

+            <returns>Returns an enumeration of elements.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.Parse(System.String)">

+            <summary>

+            Creates a new SimpleXElement.

+            </summary>

+            <param name="xml">XML content.</param>

+            <returns>Returns a new instance of the element and children.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.ParseInternal(System.Xml.XmlReader,System.Boolean)">

+            <summary>

+            Parses the current level with the XmlReader instance.

+            </summary>

+            <param name="reader">The reader instance.</param>

+            <param name="isFirst">A value indicating whether this is the first

+            parse. Actually this will always be true for now.</param>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.ToString">

+            <summary>

+            Generates the string representation of the element and its tree.

+            </summary>

+            <returns>Returns the string representation of the element.</returns>

+        </member>

+        <member name="M:Microsoft.Silverlight.Testing.Service.SimpleXElement.WriteElement(System.Xml.XmlWriter)">

+            <summary>

+            Writes to the XML writer without document start and ends.

+            </summary>

+            <param name="w">The writer instance.</param>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.SimpleXElement.Name">

+            <summary>

+            Gets the element name.

+            </summary>

+        </member>

+        <member name="P:Microsoft.Silverlight.Testing.Service.SimpleXElement.Value">

+            <summary>

+            Gets or sets the element text, if any.

+            </summary>

+        </member>

+    </members>

+</doc>

diff --git a/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll
new file mode 100644
index 0000000..9313918
--- /dev/null
+++ b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll
Binary files differ
diff --git a/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.extmap.xml b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.extmap.xml
new file mode 100644
index 0000000..2410f71
--- /dev/null
+++ b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.extmap.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>

+<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

+          xmlns:xsd="http://www.w3.org/2001/XMLSchema">

+  <assembly>

+    <name>Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight</name>

+    <version>2.0.5.0</version>

+    <publickeytoken>31bf3856ad364e35</publickeytoken>

+    <relpath>Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</relpath>

+    <extension downloadUri="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.zip" />

+  </assembly>

+

+</manifest>
\ No newline at end of file
diff --git a/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.pdb b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.pdb
new file mode 100644
index 0000000..6096960
--- /dev/null
+++ b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.pdb
Binary files differ
diff --git a/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.xml b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.xml
new file mode 100644
index 0000000..0b84c0a
--- /dev/null
+++ b/csharp/lib/Microsoft.Silverlight.Testing/April2010/Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.xml
@@ -0,0 +1,3429 @@
+<?xml version="1.0"?>

+<doc>

+    <assembly>

+        <name>Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight</name>

+    </assembly>

+    <members>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.Web.UrlToTestAttribute">

+            <summary>

+            UrlToTest specifies the url that should be requested to give context to the test.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Web.UrlToTestAttribute.#ctor(System.String)">

+            <summary>

+            An unused attribute.

+            </summary>

+            <param name="urlToTest"></param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.Web.UrlToTestAttribute.UrlToTest">

+            <summary>

+            Gets the URL to test.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.Web.AspNetDevelopmentServerAttribute">

+            <summary>

+            AspNetDevelopmentServer specifies the settings to be used for the

+            ASP.NET Development Server for the test.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Web.AspNetDevelopmentServerAttribute.#ctor(System.String,System.String)">

+            <summary>

+            Initializes the AspNetDevelopmentServerAttribute.

+            </summary>

+            <param name="name">The name.</param>

+            <param name="pathToWebApp">The path to web app.</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Web.AspNetDevelopmentServerAttribute.#ctor(System.String,System.String,System.String)">

+            <summary>

+            Initializes the AspNetDevelopmentServerAttribute.

+            </summary>

+            <param name="name">The name.</param>

+            <param name="pathToWebApp">The path to web app.</param>

+            <param name="webAppRoot">The web app root.</param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.Web.AspNetDevelopmentServerAttribute.Name">

+            <summary>

+            Gets the name.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.Web.AspNetDevelopmentServerAttribute.PathToWebApp">

+            <summary>

+            Gets the PathToWebApp.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.Web.AspNetDevelopmentServerAttribute.WebAppRoot">

+            <summary>

+            Gets the web app root.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.Web.AspNetDevelopmentServerHostAttribute">

+            <summary>

+            AspNetDevelopmentServerHost specifies the settings to be used when

+            ASP.NET Development Server is the host server for the test.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Web.AspNetDevelopmentServerHostAttribute.#ctor(System.String)">

+            <summary>

+            Initializes the AspNetDevelopmentServerHostAttribute.

+            </summary>

+            <param name="pathToWebApp">The path to the web app.</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Web.AspNetDevelopmentServerHostAttribute.#ctor(System.String,System.String)">

+            <summary>

+            Initializes the AspNetDevelopmentServerHostAttribute.

+            </summary>

+            <param name="pathToWebApp">The path to the web app.</param>

+            <param name="webAppRoot">The web app root.</param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.Web.AspNetDevelopmentServerHostAttribute.PathToWebApp">

+            <summary>

+            Gets the path to the web application.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.Web.AspNetDevelopmentServerHostAttribute.WebAppRoot">

+            <summary>

+            Gets the WebAppRoot.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.Web.CredentialAttribute">

+            <summary>

+            For ASP.NET sites that require basic authentication, specify the

+            user name and password using the Credential attribute.

+            WARNING: The password is stored in plain text in source code

+            and in the compiled assembly. Restrict access to the source code

+            and assembly to protect this sensitive information.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Web.CredentialAttribute.#ctor(System.String,System.String)">

+            <summary>

+            Specify the user name and password needed to access the web site under test.

+            </summary>

+            <param name="userName">The user name.</param>

+            <param name="password">

+            The password. WARNING: The password is stored in plain text in source code

+            and in the compiled assembly. Restrict access to the source code and assembly

+            to protect this sensitive information.

+            </param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Web.CredentialAttribute.#ctor(System.String,System.String,System.String)">

+            <summary>

+            Specify the user name, password, and domain needed to access the web site under test.

+            </summary>

+            <param name="userName">The user name.</param>

+            <param name="password">

+            The password. WARNING: The password is stored in plain text in source code

+            and in the compiled assembly. Restrict access to the source code and assembly

+            to protect this sensitive information.

+            </param>

+            <param name="domain">The domain.</param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.Web.CredentialAttribute.UserName">

+            <summary>

+            Gets the user name.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.Web.CredentialAttribute.Password">

+            <summary>

+            Gets the password.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.Web.CredentialAttribute.Domain">

+            <summary>

+            Gets the domain.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestAssertException">

+            <summary>

+            Base class for Framework Exceptions, provides localization trick so that messages are in HA locale.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestAssertException.#ctor">

+            <summary>

+            Initializes a new UnitTestAssertException.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestAssertException.#ctor(System.String)">

+            <summary>

+            Initializes UnitTestAssertException.

+            </summary>

+            <param name="msg">The message.</param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestAssertException.Message">

+            <summary>

+            Gets the Message string.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            <summary>

+            AssertFailedException class. Used to indicate failure for a test case

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException.#ctor(System.String)">

+            <summary>

+            Initializes a new AssertFailedException.

+            </summary>

+            <param name="message">The message.</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException.#ctor(System.String,System.Exception)">

+            <summary>

+            AssertFailedException

+            </summary>

+            <param name="message">The message.</param>

+            <param name="inner">The inner exception.</param>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertInconclusiveException">

+            <summary>

+            The AssertInconclusiveException class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.AssertInconclusiveException.#ctor(System.String)">

+            <summary>

+            Initializes a new AssertInconclusiveException.

+            </summary>

+            <param name="message">The message.</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.AssertInconclusiveException.#ctor(System.String,System.Exception)">

+            <summary>

+            Initializes a new AssertInconclusiveException.

+            </summary>

+            <param name="message">The message.</param>

+            <param name="inner">The inner exception.</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.AssertInconclusiveException.#ctor">

+            <summary>

+            Initializes a new AssertInconclusiveException.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.InternalTestFailureException">

+            <summary>

+            InternalTestFailureException class. Used to indicate internal failure 

+            for a test case.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.InternalTestFailureException.#ctor(System.String)">

+            <summary>

+            Initializes a new InternalTestFailureException.

+            </summary>

+            <param name="message">The message.</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.InternalTestFailureException.#ctor(System.String,System.Exception)">

+            <summary>

+            Initializes a new InternalTestFailureException.

+            </summary>

+            <param name="message">The message.</param>

+            <param name="inner">The inner exception.</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.InternalTestFailureException.#ctor">

+            <summary>

+            Initializes a new InternalTestFailureException.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.Assert">

+            <summary>

+            A collection of helper classes to test various conditions within

+            unit tests. If the condition being tested is not met, an exception

+            is thrown.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.error">

+            <summary>

+            

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue(System.Boolean)">

+            <summary>

+            Tests whether the specified condition is true and throws an exception

+            if the condition is false.

+            </summary>

+            <param name="condition">The condition the test expects to be true.</param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="condition"/> is false.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue(System.Boolean,System.String)">

+            <summary>

+            Tests whether the specified condition is true and throws an exception

+            if the condition is false.

+            </summary>

+            <param name="condition">The condition the test expects to be true.</param>

+            <param name="message">

+            The message to include in the exception when <paramref name="condition"/>

+            is false. The message is shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="condition"/> is false.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsTrue(System.Boolean,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified condition is true and throws an exception

+            if the condition is false.

+            </summary>

+            <param name="condition">The condition the test expects to be true.</param>

+            <param name="message">

+            The message to include in the exception when <paramref name="condition"/>

+            is false. The message is shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="condition"/> is false.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsFalse(System.Boolean)">

+            <summary>

+            Tests whether the specified condition is false and throws an exception

+            if the condition is true.

+            </summary>

+            <param name="condition">The condition the test expects to be false.</param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="condition"/> is true.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsFalse(System.Boolean,System.String)">

+            <summary>

+            Tests whether the specified condition is false and throws an exception

+            if the condition is true.

+            </summary>

+            <param name="condition">The condition the test expects to be false.</param>

+            <param name="message">

+            The message to include in the exception when <paramref name="condition"/>

+            is true. The message is shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="condition"/> is true.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsFalse(System.Boolean,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified condition is false and throws an exception

+            if the condition is true.

+            </summary>

+            <param name="condition">The condition the test expects to be false.</param>

+            <param name="message">

+            The message to include in the exception when <paramref name="condition"/>

+            is true. The message is shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="condition"/> is true.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNull(System.Object)">

+            <summary>

+            Tests whether the specified object is null and throws an exception

+            if it is not.

+            </summary>

+            <param name="value">The object the test expects to be null.</param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> is not null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNull(System.Object,System.String)">

+            <summary>

+            Tests whether the specified object is null and throws an exception

+            if it is not.

+            </summary>

+            <param name="value">The object the test expects to be null.</param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            is not null. The message is shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> is not null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNull(System.Object,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified object is null and throws an exception

+            if it is not.

+            </summary>

+            <param name="value">The object the test expects to be null.</param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            is not null. The message is shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> is not null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNotNull(System.Object)">

+            <summary>

+            Tests whether the specified object is non-null and throws an exception

+            if it is null.

+            </summary>

+            <param name="value">The object the test expects not to be null.</param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNotNull(System.Object,System.String)">

+            <summary>

+            Tests whether the specified object is non-null and throws an exception

+            if it is null.

+            </summary>

+            <param name="value">The object the test expects not to be null.</param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            is null. The message is shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNotNull(System.Object,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified object is non-null and throws an exception

+            if it is null.

+            </summary>

+            <param name="value">The object the test expects not to be null.</param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            is null. The message is shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> is null.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreSame(System.Object,System.Object)">

+            <summary>

+            Tests whether the specified objects both refer to the same object and

+            throws an exception if the two inputs do not refer to the same object.

+            </summary>

+            <param name="expected">

+            The first object to compare. This is the value the test expects.

+            </param>

+            <param name="actual">

+            The second object to compare. This is the value produced by the code under test.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> does not refer to the same object

+            as <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreSame(System.Object,System.Object,System.String)">

+            <summary>

+            Tests whether the specified objects both refer to the same object and

+            throws an exception if the two inputs do not refer to the same object.

+            </summary>

+            <param name="expected">

+            The first object to compare. This is the value the test expects.

+            </param>

+            <param name="actual">

+            The second object to compare. This is the value produced by the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not the same as <paramref name="expected"/>. The message is shown

+            in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> does not refer to the same object

+            as <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreSame(System.Object,System.Object,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified objects both refer to the same object and

+            throws an exception if the two inputs do not refer to the same object.

+            </summary>

+            <param name="expected">

+            The first object to compare. This is the value the test expects.

+            </param>

+            <param name="actual">

+            The second object to compare. This is the value produced by the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not the same as <paramref name="expected"/>. The message is shown

+            in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> does not refer to the same object

+            as <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotSame(System.Object,System.Object)">

+            <summary>

+            Tests whether the specified objects refer to different objects and

+            throws an exception if the two inputs refer to the same object.

+            </summary>

+            <param name="notExpected">

+            The first object to compare. This is the value the test expects not

+            to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second object to compare. This is the value produced by the code under test.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> refers to the same object

+            as <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotSame(System.Object,System.Object,System.String)">

+            <summary>

+            Tests whether the specified objects refer to different objects and

+            throws an exception if the two inputs refer to the same object.

+            </summary>

+            <param name="notExpected">

+            The first object to compare. This is the value the test expects not

+            to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second object to compare. This is the value produced by the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is the same as <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> refers to the same object

+            as <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotSame(System.Object,System.Object,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified objects refer to different objects and

+            throws an exception if the two inputs refer to the same object.

+            </summary>

+            <param name="notExpected">

+            The first object to compare. This is the value the test expects not

+            to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second object to compare. This is the value produced by the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is the same as <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> refers to the same object

+            as <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual``1(``0,``0)">

+            <summary>

+            Tests whether the specified values are equal and throws an exception

+            if the two values are not equal. Different numeric types are treated

+            as unequal even if the logical values are equal. 42L is not equal to 42.

+            </summary>

+            <typeparam name="T">The type of values to compare.</typeparam>

+            <param name="expected">

+            The first value to compare. This is the value the tests expects.

+            </param>

+            <param name="actual">

+            The second value to compare. This is the value produced by the code under test.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual``1(``0,``0,System.String)">

+            <summary>

+            Tests whether the specified values are equal and throws an exception

+            if the two values are not equal. Different numeric types are treated

+            as unequal even if the logical values are equal. 42L is not equal to 42.

+            </summary>

+            <typeparam name="T">The type of values to compare.</typeparam>

+            <param name="expected">

+            The first value to compare. This is the value the tests expects.

+            </param>

+            <param name="actual">

+            The second value to compare. This is the value produced by the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not equal to <paramref name="expected"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual``1(``0,``0,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified values are equal and throws an exception

+            if the two values are not equal. Different numeric types are treated

+            as unequal even if the logical values are equal. 42L is not equal to 42.

+            </summary>

+            <typeparam name="T">The type of values to compare.</typeparam>

+            <param name="expected">

+            The first value to compare. This is the value the tests expects.

+            </param>

+            <param name="actual">

+            The second value to compare. This is the value produced by the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not equal to <paramref name="expected"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual``1(``0,``0)">

+            <summary>

+            Tests whether the specified values are unequal and throws an exception

+            if the two values are equal. Different numeric types are treated

+            as unequal even if the logical values are equal. 42L is not equal to 42.

+            </summary>

+            <typeparam name="T">The type of values to compare.</typeparam>

+            <param name="notExpected">

+            The first value to compare. This is the value the test expects not

+            to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second value to compare. This is the value produced by the code under test.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual``1(``0,``0,System.String)">

+            <summary>

+            Tests whether the specified values are unequal and throws an exception

+            if the two values are equal. Different numeric types are treated

+            as unequal even if the logical values are equal. 42L is not equal to 42.

+            </summary>

+            <typeparam name="T">The type of values to compare.</typeparam>

+            <param name="notExpected">

+            The first value to compare. This is the value the test expects not

+            to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second value to compare. This is the value produced by the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual``1(``0,``0,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified values are unequal and throws an exception

+            if the two values are equal. Different numeric types are treated

+            as unequal even if the logical values are equal. 42L is not equal to 42.

+            </summary>

+            <typeparam name="T">The type of values to compare.</typeparam>

+            <param name="notExpected">

+            The first value to compare. This is the value the test expects not

+            to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second value to compare. This is the value produced by the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.Object,System.Object)">

+            <summary>

+            Tests whether the specified objects are equal and throws an exception

+            if the two objects are not equal. Different numeric types are treated

+            as unequal even if the logical values are equal. 42L is not equal to 42.

+            </summary>

+            <param name="expected">

+            The first object to compare. This is the object the tests expects.

+            </param>

+            <param name="actual">

+            The second object to compare. This is the object produced by the code under test.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.Object,System.Object,System.String)">

+            <summary>

+            Tests whether the specified objects are equal and throws an exception

+            if the two objects are not equal. Different numeric types are treated

+            as unequal even if the logical values are equal. 42L is not equal to 42.

+            </summary>

+            <param name="expected">

+            The first object to compare. This is the object the tests expects.

+            </param>

+            <param name="actual">

+            The second object to compare. This is the object produced by the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not equal to <paramref name="expected"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.Object,System.Object,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified objects are equal and throws an exception

+            if the two objects are not equal. Different numeric types are treated

+            as unequal even if the logical values are equal. 42L is not equal to 42.

+            </summary>

+            <param name="expected">

+            The first object to compare. This is the object the tests expects.

+            </param>

+            <param name="actual">

+            The second object to compare. This is the object produced by the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not equal to <paramref name="expected"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.Object,System.Object)">

+            <summary>

+            Tests whether the specified objects are unequal and throws an exception

+            if the two objects are equal. Different numeric types are treated

+            as unequal even if the logical values are equal. 42L is not equal to 42.

+            </summary>

+            <param name="notExpected">

+            The first object to compare. This is the value the test expects not

+            to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second object to compare. This is the object produced by the code under test.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.Object,System.Object,System.String)">

+            <summary>

+            Tests whether the specified objects are unequal and throws an exception

+            if the two objects are equal. Different numeric types are treated

+            as unequal even if the logical values are equal. 42L is not equal to 42.

+            </summary>

+            <param name="notExpected">

+            The first object to compare. This is the value the test expects not

+            to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second object to compare. This is the object produced by the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.Object,System.Object,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified objects are unequal and throws an exception

+            if the two objects are equal. Different numeric types are treated

+            as unequal even if the logical values are equal. 42L is not equal to 42.

+            </summary>

+            <param name="notExpected">

+            The first object to compare. This is the value the test expects not

+            to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second object to compare. This is the object produced by the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.Single,System.Single,System.Single)">

+            <summary>

+            Tests whether the specified floats are equal and throws an exception

+            if they are not equal.

+            </summary>

+            <param name="expected">

+            The first float to compare. This is the float the tests expects.

+            </param>

+            <param name="actual">

+            The second float to compare. This is the float produced by the code under test.

+            </param>

+            <param name="delta">

+            The required accuracy. An exception will be thrown only if

+            <paramref name="actual"/> is different than <paramref name="expected"/>

+            by more than <paramref name="delta"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.Single,System.Single,System.Single,System.String)">

+            <summary>

+            Tests whether the specified floats are equal and throws an exception

+            if they are not equal.

+            </summary>

+            <param name="expected">

+            The first float to compare. This is the float the tests expects.

+            </param>

+            <param name="actual">

+            The second float to compare. This is the float produced by the code under test.

+            </param>

+            <param name="delta">

+            The required accuracy. An exception will be thrown only if

+            <paramref name="actual"/> is different than <paramref name="expected"/>

+            by more than <paramref name="delta"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is different than <paramref name="expected"/> by more than

+            <paramref name="delta"/>. The message is shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.Single,System.Single,System.Single,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified floats are equal and throws an exception

+            if they are not equal.

+            </summary>

+            <param name="expected">

+            The first float to compare. This is the float the tests expects.

+            </param>

+            <param name="actual">

+            The second float to compare. This is the float produced by the code under test.

+            </param>

+            <param name="delta">

+            The required accuracy. An exception will be thrown only if

+            <paramref name="actual"/> is different than <paramref name="expected"/>

+            by more than <paramref name="delta"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is different than <paramref name="expected"/> by more than

+            <paramref name="delta"/>. The message is shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.Single,System.Single,System.Single)">

+            <summary>

+            Tests whether the specified floats are unequal and throws an exception

+            if they are equal.

+            </summary>

+            <param name="notExpected">

+            The first float to compare. This is the float the test expects not to

+            match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second float to compare. This is the float produced by the code under test.

+            </param>

+            <param name="delta">

+            The required accuracy. An exception will be thrown only if

+            <paramref name="actual"/> is different than <paramref name="notExpected"/>

+            by at most <paramref name="delta"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.Single,System.Single,System.Single,System.String)">

+            <summary>

+            Tests whether the specified floats are unequal and throws an exception

+            if they are equal.

+            </summary>

+            <param name="notExpected">

+            The first float to compare. This is the float the test expects not to

+            match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second float to compare. This is the float produced by the code under test.

+            </param>

+            <param name="delta">

+            The required accuracy. An exception will be thrown only if

+            <paramref name="actual"/> is different than <paramref name="notExpected"/>

+            by at most <paramref name="delta"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/> or different by less than

+            <paramref name="delta"/>. The message is shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.Single,System.Single,System.Single,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified floats are unequal and throws an exception

+            if they are equal.

+            </summary>

+            <param name="notExpected">

+            The first float to compare. This is the float the test expects not to

+            match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second float to compare. This is the float produced by the code under test.

+            </param>

+            <param name="delta">

+            The required accuracy. An exception will be thrown only if

+            <paramref name="actual"/> is different than <paramref name="notExpected"/>

+            by at most <paramref name="delta"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/> or different by less than

+            <paramref name="delta"/>. The message is shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.Double,System.Double,System.Double)">

+            <summary>

+            Tests whether the specified doubles are equal and throws an exception

+            if they are not equal.

+            </summary>

+            <param name="expected">

+            The first double to compare. This is the double the tests expects.

+            </param>

+            <param name="actual">

+            The second double to compare. This is the double produced by the code under test.

+            </param>

+            <param name="delta">

+            The required accuracy. An exception will be thrown only if

+            <paramref name="actual"/> is different than <paramref name="expected"/>

+            by more than <paramref name="delta"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.Double,System.Double,System.Double,System.String)">

+            <summary>

+            Tests whether the specified doubles are equal and throws an exception

+            if they are not equal.

+            </summary>

+            <param name="expected">

+            The first double to compare. This is the double the tests expects.

+            </param>

+            <param name="actual">

+            The second double to compare. This is the double produced by the code under test.

+            </param>

+            <param name="delta">

+            The required accuracy. An exception will be thrown only if

+            <paramref name="actual"/> is different than <paramref name="expected"/>

+            by more than <paramref name="delta"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is different than <paramref name="expected"/> by more than

+            <paramref name="delta"/>. The message is shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.Double,System.Double,System.Double,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified doubles are equal and throws an exception

+            if they are not equal.

+            </summary>

+            <param name="expected">

+            The first double to compare. This is the double the tests expects.

+            </param>

+            <param name="actual">

+            The second double to compare. This is the double produced by the code under test.

+            </param>

+            <param name="delta">

+            The required accuracy. An exception will be thrown only if

+            <paramref name="actual"/> is different than <paramref name="expected"/>

+            by more than <paramref name="delta"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is different than <paramref name="expected"/> by more than

+            <paramref name="delta"/>. The message is shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.Double,System.Double,System.Double)">

+            <summary>

+            Tests whether the specified doubles are unequal and throws an exception

+            if they are equal.

+            </summary>

+            <param name="notExpected">

+            The first double to compare. This is the double the test expects not to

+            match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second double to compare. This is the double produced by the code under test.

+            </param>

+            <param name="delta">

+            The required accuracy. An exception will be thrown only if

+            <paramref name="actual"/> is different than <paramref name="notExpected"/>

+            by at most <paramref name="delta"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.Double,System.Double,System.Double,System.String)">

+            <summary>

+            Tests whether the specified doubles are unequal and throws an exception

+            if they are equal.

+            </summary>

+            <param name="notExpected">

+            The first double to compare. This is the double the test expects not to

+            match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second double to compare. This is the double produced by the code under test.

+            </param>

+            <param name="delta">

+            The required accuracy. An exception will be thrown only if

+            <paramref name="actual"/> is different than <paramref name="notExpected"/>

+            by at most <paramref name="delta"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/> or different by less than

+            <paramref name="delta"/>. The message is shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.Double,System.Double,System.Double,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified doubles are unequal and throws an exception

+            if they are equal.

+            </summary>

+            <param name="notExpected">

+            The first double to compare. This is the double the test expects not to

+            match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second double to compare. This is the double produced by the code under test.

+            </param>

+            <param name="delta">

+            The required accuracy. An exception will be thrown only if

+            <paramref name="actual"/> is different than <paramref name="notExpected"/>

+            by at most <paramref name="delta"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/> or different by less than

+            <paramref name="delta"/>. The message is shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.String,System.String,System.Boolean)">

+            <summary>

+            Tests whether the specified strings are equal and throws an exception

+            if they are not equal. The invariant culture is used for the comparison.

+            </summary>

+            <param name="expected">

+            The first string to compare. This is the string the tests expects.

+            </param>

+            <param name="actual">

+            The second string to compare. This is the string produced by the code under test.

+            </param>

+            <param name="ignoreCase">

+            A Boolean indicating a case-sensitive or insensitive comparison. (true

+            indicates a case-insensitive comparison.)

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.String,System.String,System.Boolean,System.String)">

+            <summary>

+            Tests whether the specified strings are equal and throws an exception

+            if they are not equal. The invariant culture is used for the comparison.

+            </summary>

+            <param name="expected">

+            The first string to compare. This is the string the tests expects.

+            </param>

+            <param name="actual">

+            The second string to compare. This is the string produced by the code under test.

+            </param>

+            <param name="ignoreCase">

+            A Boolean indicating a case-sensitive or insensitive comparison. (true

+            indicates a case-insensitive comparison.)

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not equal to <paramref name="expected"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.String,System.String,System.Boolean,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified strings are equal and throws an exception

+            if they are not equal. The invariant culture is used for the comparison.

+            </summary>

+            <param name="expected">

+            The first string to compare. This is the string the tests expects.

+            </param>

+            <param name="actual">

+            The second string to compare. This is the string produced by the code under test.

+            </param>

+            <param name="ignoreCase">

+            A Boolean indicating a case-sensitive or insensitive comparison. (true

+            indicates a case-insensitive comparison.)

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not equal to <paramref name="expected"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.String,System.String,System.Boolean,System.Globalization.CultureInfo)">

+            <summary>

+            Tests whether the specified strings are equal and throws an exception

+            if they are not equal.

+            </summary>

+            <param name="expected">

+            The first string to compare. This is the string the tests expects.

+            </param>

+            <param name="actual">

+            The second string to compare. This is the string produced by the code under test.

+            </param>

+            <param name="ignoreCase">

+            A Boolean indicating a case-sensitive or insensitive comparison. (true

+            indicates a case-insensitive comparison.)

+            </param>

+            <param name="culture">

+            A CultureInfo object that supplies culture-specific comparison information.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.String,System.String,System.Boolean,System.Globalization.CultureInfo,System.String)">

+            <summary>

+            Tests whether the specified strings are equal and throws an exception

+            if they are not equal.

+            </summary>

+            <param name="expected">

+            The first string to compare. This is the string the tests expects.

+            </param>

+            <param name="actual">

+            The second string to compare. This is the string produced by the code under test.

+            </param>

+            <param name="ignoreCase">

+            A Boolean indicating a case-sensitive or insensitive comparison. (true

+            indicates a case-insensitive comparison.)

+            </param>

+            <param name="culture">

+            A CultureInfo object that supplies culture-specific comparison information.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not equal to <paramref name="expected"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(System.String,System.String,System.Boolean,System.Globalization.CultureInfo,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified strings are equal and throws an exception

+            if they are not equal.

+            </summary>

+            <param name="expected">

+            The first string to compare. This is the string the tests expects.

+            </param>

+            <param name="actual">

+            The second string to compare. This is the string produced by the code under test.

+            </param>

+            <param name="ignoreCase">

+            A Boolean indicating a case-sensitive or insensitive comparison. (true

+            indicates a case-insensitive comparison.)

+            </param>

+            <param name="culture">

+            A CultureInfo object that supplies culture-specific comparison information.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not equal to <paramref name="expected"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.String,System.String,System.Boolean)">

+            <summary>

+            Tests whether the specified strings are unequal and throws an exception

+            if they are equal. The invariant culture is used for the comparison.

+            </summary>

+            <param name="notExpected">

+            The first string to compare. This is the string the test expects not to

+            match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second string to compare. This is the string produced by the code under test.

+            </param>

+            <param name="ignoreCase">

+            A Boolean indicating a case-sensitive or insensitive comparison. (true

+            indicates a case-insensitive comparison.)

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.String,System.String,System.Boolean,System.String)">

+            <summary>

+            Tests whether the specified strings are unequal and throws an exception

+            if they are equal. The invariant culture is used for the comparison.

+            </summary>

+            <param name="notExpected">

+            The first string to compare. This is the string the test expects not to

+            match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second string to compare. This is the string produced by the code under test.

+            </param>

+            <param name="ignoreCase">

+            A Boolean indicating a case-sensitive or insensitive comparison. (true

+            indicates a case-insensitive comparison.)

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.String,System.String,System.Boolean,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified strings are unequal and throws an exception

+            if they are equal. The invariant culture is used for the comparison.

+            </summary>

+            <param name="notExpected">

+            The first string to compare. This is the string the test expects not to

+            match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second string to compare. This is the string produced by the code under test.

+            </param>

+            <param name="ignoreCase">

+            A Boolean indicating a case-sensitive or insensitive comparison. (true

+            indicates a case-insensitive comparison.)

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.String,System.String,System.Boolean,System.Globalization.CultureInfo)">

+            <summary>

+            Tests whether the specified strings are unequal and throws an exception

+            if they are equal.

+            </summary>

+            <param name="notExpected">

+            The first string to compare. This is the string the test expects not to

+            match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second string to compare. This is the string produced by the code under test.

+            </param>

+            <param name="ignoreCase">

+            A Boolean indicating a case-sensitive or insensitive comparison. (true

+            indicates a case-insensitive comparison.)

+            </param>

+            <param name="culture">

+            A CultureInfo object that supplies culture-specific comparison information.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.String,System.String,System.Boolean,System.Globalization.CultureInfo,System.String)">

+            <summary>

+            Tests whether the specified strings are unequal and throws an exception

+            if they are equal.

+            </summary>

+            <param name="notExpected">

+            The first string to compare. This is the string the test expects not to

+            match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second string to compare. This is the string produced by the code under test.

+            </param>

+            <param name="ignoreCase">

+            A Boolean indicating a case-sensitive or insensitive comparison. (true

+            indicates a case-insensitive comparison.)

+            </param>

+            <param name="culture">

+            A CultureInfo object that supplies culture-specific comparison information.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreNotEqual(System.String,System.String,System.Boolean,System.Globalization.CultureInfo,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified strings are unequal and throws an exception

+            if they are equal.

+            </summary>

+            <param name="notExpected">

+            The first string to compare. This is the string the test expects not to

+            match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second string to compare. This is the string produced by the code under test.

+            </param>

+            <param name="ignoreCase">

+            A Boolean indicating a case-sensitive or insensitive comparison. (true

+            indicates a case-insensitive comparison.)

+            </param>

+            <param name="culture">

+            A CultureInfo object that supplies culture-specific comparison information.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsInstanceOfType(System.Object,System.Type)">

+            <summary>

+            Tests whether the specified object is an instance of the expected

+            type and throws an exception if the expected type is not in the

+            inheritance hierarchy of the object.

+            </summary>

+            <param name="value">

+            The object the test expects to be of the specified type.

+            </param>

+            <param name="expectedType">

+            The expected type of <paramref name="value"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> is null or

+            <paramref name="expectedType"/> is not in the inheritance hierarchy

+            of <paramref name="value"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsInstanceOfType(System.Object,System.Type,System.String)">

+            <summary>

+            Tests whether the specified object is an instance of the expected

+            type and throws an exception if the expected type is not in the

+            inheritance hierarchy of the object.

+            </summary>

+            <param name="value">

+            The object the test expects to be of the specified type.

+            </param>

+            <param name="expectedType">

+            The expected type of <paramref name="value"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            is not an instance of <paramref name="expectedType"/>. The message is

+            shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> is null or

+            <paramref name="expectedType"/> is not in the inheritance hierarchy

+            of <paramref name="value"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsInstanceOfType(System.Object,System.Type,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified object is an instance of the expected

+            type and throws an exception if the expected type is not in the

+            inheritance hierarchy of the object.

+            </summary>

+            <param name="value">

+            The object the test expects to be of the specified type.

+            </param>

+            <param name="expectedType">

+            The expected type of <paramref name="value"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            is not an instance of <paramref name="expectedType"/>. The message is

+            shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> is null or

+            <paramref name="expectedType"/> is not in the inheritance hierarchy

+            of <paramref name="value"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNotInstanceOfType(System.Object,System.Type)">

+            <summary>

+            Tests whether the specified object is not an instance of the wrong

+            type and throws an exception if the specified type is in the

+            inheritance hierarchy of the object.

+            </summary>

+            <param name="value">

+            The object the test expects not to be of the specified type.

+            </param>

+            <param name="wrongType">

+            The type that <paramref name="value"/> should not be.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> is not null and

+            <paramref name="wrongType"/> is in the inheritance hierarchy

+            of <paramref name="value"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNotInstanceOfType(System.Object,System.Type,System.String)">

+            <summary>

+            Tests whether the specified object is not an instance of the wrong

+            type and throws an exception if the specified type is in the

+            inheritance hierarchy of the object.

+            </summary>

+            <param name="value">

+            The object the test expects not to be of the specified type.

+            </param>

+            <param name="wrongType">

+            The type that <paramref name="value"/> should not be.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            is an instance of <paramref name="wrongType"/>. The message is shown

+            in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> is not null and

+            <paramref name="wrongType"/> is in the inheritance hierarchy

+            of <paramref name="value"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNotInstanceOfType(System.Object,System.Type,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified object is not an instance of the wrong

+            type and throws an exception if the specified type is in the

+            inheritance hierarchy of the object.

+            </summary>

+            <param name="value">

+            The object the test expects not to be of the specified type.

+            </param>

+            <param name="wrongType">

+            The type that <paramref name="value"/> should not be.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            is an instance of <paramref name="wrongType"/>. The message is shown

+            in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> is not null and

+            <paramref name="wrongType"/> is in the inheritance hierarchy

+            of <paramref name="value"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Fail">

+            <summary>

+            Throws an AssertFailedException.

+            </summary>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Always thrown.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Fail(System.String)">

+            <summary>

+            Throws an AssertFailedException.

+            </summary>

+            <param name="message">

+            The message to include in the exception. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Always thrown.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Fail(System.String,System.Object[])">

+            <summary>

+            Throws an AssertFailedException.

+            </summary>

+            <param name="message">

+            The message to include in the exception. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Always thrown.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Inconclusive">

+            <summary>

+            Throws an AssertInconclusiveException.

+            </summary>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertInconclusiveException">

+            Always thrown.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Inconclusive(System.String)">

+            <summary>

+            Throws an AssertInconclusiveException.

+            </summary>

+            <param name="message">

+            The message to include in the exception. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertInconclusiveException">

+            Always thrown.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Inconclusive(System.String,System.Object[])">

+            <summary>

+            Throws an AssertInconclusiveException.

+            </summary>

+            <param name="message">

+            The message to include in the exception. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertInconclusiveException">

+            Always thrown.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.HandleFail(System.String,System.String,System.Object[])">

+            <summary>

+            Helper function that creates and throws an AssertionFailedException.

+            </summary>

+            <param name="assertionName">name of the assertion throwing an exception.</param>

+            <param name="message">message describing conditions for assertion failure.</param>

+            <param name="parameters">The parameters.</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.CheckParameterNotNull(System.Object,System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Checks the parameter for valid conditions

+            </summary>

+            <param name="param">The parameter.</param>

+            <param name="assertionName">The assertion name.</param>

+            <param name="parameterName">The parameter name.</param>

+            <param name="message">The message.</param>

+            <param name="parameters">The parameters.</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.ReplaceNulls(System.Object)">

+            <summary>

+            Safely converts an object to a string, handling null values and null characters.

+            Null values are converted to "(null)". Null characters are converted to "\\0".

+            </summary>

+            <param name="input">The object to convert to a string.</param>

+            <returns>The converted string.</returns>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Assert.ReplaceNullChars(System.String)">

+            <summary>

+            Replaces null characters ('\0') with "\\0".

+            </summary>

+            <param name="input">The string to search.</param>

+            <returns>The converted string with null characters replaced by "\\0".</returns>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.Helper.ThrowInnerException(System.Reflection.TargetInvocationException)">

+            <summary>

+            An exception from reflection will always be a TargetInvocationException - however

+            the goal of Private Accessors is to be seamless to the original code.

+            The only problem with throwing the inner exception is that the stack trace will

+            be overwritten.  From here we register the stack trace of the inner exception

+            and then throw it.  The Unit Test Adapter will then later rebuild the stack

+            from the cached shadow information plus the remaining stack from this throw.

+            </summary>

+            <param name="outer"></param>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert">

+            <summary>

+            A collection of helper classes to test various conditions associated

+            with collections within unit tests. If the condition being tested is not

+            met, an exception is thrown.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.Contains(System.Collections.ICollection,System.Object)">

+            <summary>

+            Tests whether the specified collection contains the specified element

+            and throws an exception if the element is not in the collection.

+            </summary>

+            <param name="collection">

+            The collection in which to search for the element.

+            </param>

+            <param name="element">

+            The element that is expected to be in the collection.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="element"/> is not found in

+            <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.Contains(System.Collections.ICollection,System.Object,System.String)">

+            <summary>

+            Tests whether the specified collection contains the specified element

+            and throws an exception if the element is not in the collection.

+            </summary>

+            <param name="collection">

+            The collection in which to search for the element.

+            </param>

+            <param name="element">

+            The element that is expected to be in the collection.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="element"/>

+            is not in <paramref name="collection"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="element"/> is not found in

+            <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.Contains(System.Collections.ICollection,System.Object,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified collection contains the specified element

+            and throws an exception if the element is not in the collection.

+            </summary>

+            <param name="collection">

+            The collection in which to search for the element.

+            </param>

+            <param name="element">

+            The element that is expected to be in the collection.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="element"/>

+            is not in <paramref name="collection"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="element"/> is not found in

+            <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.DoesNotContain(System.Collections.ICollection,System.Object)">

+            <summary>

+            Tests whether the specified collection does not contain the specified

+            element and throws an exception if the element is in the collection.

+            </summary>

+            <param name="collection">

+            The collection in which to search for the element.

+            </param>

+            <param name="element">

+            The element that is expected not to be in the collection.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="element"/> is found in

+            <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.DoesNotContain(System.Collections.ICollection,System.Object,System.String)">

+            <summary>

+            Tests whether the specified collection does not contain the specified

+            element and throws an exception if the element is in the collection.

+            </summary>

+            <param name="collection">

+            The collection in which to search for the element.

+            </param>

+            <param name="element">

+            The element that is expected not to be in the collection.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="element"/>

+            is in <paramref name="collection"/>. The message is shown in test

+            results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="element"/> is found in

+            <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.DoesNotContain(System.Collections.ICollection,System.Object,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified collection does not contain the specified

+            element and throws an exception if the element is in the collection.

+            </summary>

+            <param name="collection">

+            The collection in which to search for the element.

+            </param>

+            <param name="element">

+            The element that is expected not to be in the collection.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="element"/>

+            is in <paramref name="collection"/>. The message is shown in test

+            results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="element"/> is found in

+            <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AllItemsAreNotNull(System.Collections.ICollection)">

+            <summary>

+            Tests whether all items in the specified collection are non-null and throws

+            an exception if any element is null.

+            </summary>

+            <param name="collection">

+            The collection in which to search for null elements.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if a null element is found in <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AllItemsAreNotNull(System.Collections.ICollection,System.String)">

+            <summary>

+            Tests whether all items in the specified collection are non-null and throws

+            an exception if any element is null.

+            </summary>

+            <param name="collection">

+            The collection in which to search for null elements.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="collection"/>

+            contains a null element. The message is shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if a null element is found in <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AllItemsAreNotNull(System.Collections.ICollection,System.String,System.Object[])">

+            <summary>

+            Tests whether all items in the specified collection are non-null and throws

+            an exception if any element is null.

+            </summary>

+            <param name="collection">

+            The collection in which to search for null elements.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="collection"/>

+            contains a null element. The message is shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if a null element is found in <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AllItemsAreUnique(System.Collections.ICollection)">

+            <summary>

+            Tests whether all items in the specified collection are unique or not and

+            throws if any two elements in the collection are equal.

+            </summary>

+            <param name="collection">

+            The collection in which to search for duplicate elements.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if a two or more equal elements are found in

+            <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AllItemsAreUnique(System.Collections.ICollection,System.String)">

+            <summary>

+            Tests whether all items in the specified collection are unique or not and

+            throws if any two elements in the collection are equal.

+            </summary>

+            <param name="collection">

+            The collection in which to search for duplicate elements.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="collection"/>

+            contains at least one duplicate element. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if a two or more equal elements are found in

+            <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AllItemsAreUnique(System.Collections.ICollection,System.String,System.Object[])">

+            <summary>

+            Tests whether all items in the specified collection are unique or not and

+            throws if any two elements in the collection are equal.

+            </summary>

+            <param name="collection">

+            The collection in which to search for duplicate elements.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="collection"/>

+            contains at least one duplicate element. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if a two or more equal elements are found in

+            <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.IsSubsetOf(System.Collections.ICollection,System.Collections.ICollection)">

+            <summary>

+            Tests whether one collection is a subset of another collection and

+            throws an exception if any element in the subset is not also in the

+            superset.

+            </summary>

+            <param name="subset">

+            The collection expected to be a subset of <paramref name="superset"/>.

+            </param>

+            <param name="superset">

+            The collection expected to be a superset of <paramref name="subset"/>

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if an element in <paramref name="subset"/> is not found in

+            <paramref name="superset"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.IsSubsetOf(System.Collections.ICollection,System.Collections.ICollection,System.String)">

+            <summary>

+            Tests whether one collection is a subset of another collection and

+            throws an exception if any element in the subset is not also in the

+            superset.

+            </summary>

+            <param name="subset">

+            The collection expected to be a subset of <paramref name="superset"/>.

+            </param>

+            <param name="superset">

+            The collection expected to be a superset of <paramref name="subset"/>

+            </param>

+            <param name="message">

+            The message to include in the exception when an element in

+            <paramref name="subset"/> is not found in <paramref name="superset"/>.

+            The message is shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if an element in <paramref name="subset"/> is not found in

+            <paramref name="superset"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.IsSubsetOf(System.Collections.ICollection,System.Collections.ICollection,System.String,System.Object[])">

+            <summary>

+            Tests whether one collection is a subset of another collection and

+            throws an exception if any element in the subset is not also in the

+            superset.

+            </summary>

+            <param name="subset">

+            The collection expected to be a subset of <paramref name="superset"/>.

+            </param>

+            <param name="superset">

+            The collection expected to be a superset of <paramref name="subset"/>

+            </param>

+            <param name="message">

+            The message to include in the exception when an element in

+            <paramref name="subset"/> is not found in <paramref name="superset"/>.

+            The message is shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if an element in <paramref name="subset"/> is not found in

+            <paramref name="superset"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.IsNotSubsetOf(System.Collections.ICollection,System.Collections.ICollection)">

+            <summary>

+            Tests whether one collection is not a subset of another collection and

+            throws an exception if all elements in the subset are also in the

+            superset.

+            </summary>

+            <param name="subset">

+            The collection expected not to be a subset of <paramref name="superset"/>.

+            </param>

+            <param name="superset">

+            The collection expected not to be a superset of <paramref name="subset"/>

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if every element in <paramref name="subset"/> is also found in

+            <paramref name="superset"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.IsNotSubsetOf(System.Collections.ICollection,System.Collections.ICollection,System.String)">

+            <summary>

+            Tests whether one collection is not a subset of another collection and

+            throws an exception if all elements in the subset are also in the

+            superset.

+            </summary>

+            <param name="subset">

+            The collection expected not to be a subset of <paramref name="superset"/>.

+            </param>

+            <param name="superset">

+            The collection expected not to be a superset of <paramref name="subset"/>

+            </param>

+            <param name="message">

+            The message to include in the exception when every element in

+            <paramref name="subset"/> is also found in <paramref name="superset"/>.

+            The message is shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if every element in <paramref name="subset"/> is also found in

+            <paramref name="superset"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.IsNotSubsetOf(System.Collections.ICollection,System.Collections.ICollection,System.String,System.Object[])">

+            <summary>

+            Tests whether one collection is not a subset of another collection and

+            throws an exception if all elements in the subset are also in the

+            superset.

+            </summary>

+            <param name="subset">

+            The collection expected not to be a subset of <paramref name="superset"/>.

+            </param>

+            <param name="superset">

+            The collection expected not to be a superset of <paramref name="subset"/>

+            </param>

+            <param name="message">

+            The message to include in the exception when every element in

+            <paramref name="subset"/> is also found in <paramref name="superset"/>.

+            The message is shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if every element in <paramref name="subset"/> is also found in

+            <paramref name="superset"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreEquivalent(System.Collections.ICollection,System.Collections.ICollection)">

+            <summary>

+            Tests whether two collections contain the same elements and throws an

+            exception if either collection contains an element not in the other

+            collection.

+            </summary>

+            <param name="expected">

+            The first collection to compare. This contains the elements the test

+            expects.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by

+            the code under test.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if an element was found in one of the collections but not

+            the other.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreEquivalent(System.Collections.ICollection,System.Collections.ICollection,System.String)">

+            <summary>

+            Tests whether two collections contain the same elements and throws an

+            exception if either collection contains an element not in the other

+            collection.

+            </summary>

+            <param name="expected">

+            The first collection to compare. This contains the elements the test

+            expects.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by

+            the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when an element was found

+            in one of the collections but not the other. The message is shown

+            in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if an element was found in one of the collections but not

+            the other.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreEquivalent(System.Collections.ICollection,System.Collections.ICollection,System.String,System.Object[])">

+            <summary>

+            Tests whether two collections contain the same elements and throws an

+            exception if either collection contains an element not in the other

+            collection.

+            </summary>

+            <param name="expected">

+            The first collection to compare. This contains the elements the test

+            expects.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by

+            the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when an element was found

+            in one of the collections but not the other. The message is shown

+            in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if an element was found in one of the collections but not

+            the other.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreNotEquivalent(System.Collections.ICollection,System.Collections.ICollection)">

+            <summary>

+            Tests whether two collections contain the different elements and throws an

+            exception if the two collections contain identical elements without regard

+            to order.

+            </summary>

+            <param name="expected">

+            The first collection to compare. This contains the elements the test

+            expects to be different than the actual collection.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by

+            the code under test.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if the two collections contained the same elements, including

+            the same number of duplicate occurrences of each element.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreNotEquivalent(System.Collections.ICollection,System.Collections.ICollection,System.String)">

+            <summary>

+            Tests whether two collections contain the different elements and throws an

+            exception if the two collections contain identical elements without regard

+            to order.

+            </summary>

+            <param name="expected">

+            The first collection to compare. This contains the elements the test

+            expects to be different than the actual collection.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by

+            the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            contains the same elements as <paramref name="expected"/>. The message

+            is shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if the two collections contained the same elements, including

+            the same number of duplicate occurrences of each element.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreNotEquivalent(System.Collections.ICollection,System.Collections.ICollection,System.String,System.Object[])">

+            <summary>

+            Tests whether two collections contain the different elements and throws an

+            exception if the two collections contain identical elements without regard

+            to order.

+            </summary>

+            <param name="expected">

+            The first collection to compare. This contains the elements the test

+            expects to be different than the actual collection.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by

+            the code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            contains the same elements as <paramref name="expected"/>. The message

+            is shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if the two collections contained the same elements, including

+            the same number of duplicate occurrences of each element.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AllItemsAreInstancesOfType(System.Collections.ICollection,System.Type)">

+            <summary>

+            Tests whether all elements in the specified collection are instances

+            of the expected type and throws an exception if the expected type is

+            not in the inheritance hierarchy of one or more of the elements.

+            </summary>

+            <param name="collection">

+            The collection containing elements the test expects to be of the

+            specified type.

+            </param>

+            <param name="expectedType">

+            The expected type of each element of <paramref name="collection"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if an element in <paramref name="collection"/> is null or

+            <paramref name="expectedType"/> is not in the inheritance hierarchy

+            of an element in <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AllItemsAreInstancesOfType(System.Collections.ICollection,System.Type,System.String)">

+            <summary>

+            Tests whether all elements in the specified collection are instances

+            of the expected type and throws an exception if the expected type is

+            not in the inheritance hierarchy of one or more of the elements.

+            </summary>

+            <param name="collection">

+            The collection containing elements the test expects to be of the

+            specified type.

+            </param>

+            <param name="expectedType">

+            The expected type of each element of <paramref name="collection"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when an element in

+            <paramref name="collection"/> is not an instance of

+            <paramref name="expectedType"/>. The message is shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if an element in <paramref name="collection"/> is null or

+            <paramref name="expectedType"/> is not in the inheritance hierarchy

+            of an element in <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AllItemsAreInstancesOfType(System.Collections.ICollection,System.Type,System.String,System.Object[])">

+            <summary>

+            Tests whether all elements in the specified collection are instances

+            of the expected type and throws an exception if the expected type is

+            not in the inheritance hierarchy of one or more of the elements.

+            </summary>

+            <param name="collection">

+            The collection containing elements the test expects to be of the

+            specified type.

+            </param>

+            <param name="expectedType">

+            The expected type of each element of <paramref name="collection"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when an element in

+            <paramref name="collection"/> is not an instance of

+            <paramref name="expectedType"/>. The message is shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if an element in <paramref name="collection"/> is null or

+            <paramref name="expectedType"/> is not in the inheritance hierarchy

+            of an element in <paramref name="collection"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreEqual(System.Collections.ICollection,System.Collections.ICollection)">

+            <summary>

+            Tests whether the specified collections are equal and throws an exception

+            if the two collections are not equal. Equality is defined as having the same

+            elements in the same order and quantity. Different references to the same

+            value are considered equal.

+            </summary>

+            <param name="expected">

+            The first collection to compare. This is the collection the tests expects.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by the

+            code under test.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreEqual(System.Collections.ICollection,System.Collections.ICollection,System.String)">

+            <summary>

+            Tests whether the specified collections are equal and throws an exception

+            if the two collections are not equal. Equality is defined as having the same

+            elements in the same order and quantity. Different references to the same

+            value are considered equal.

+            </summary>

+            <param name="expected">

+            The first collection to compare. This is the collection the tests expects.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by the

+            code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not equal to <paramref name="expected"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreEqual(System.Collections.ICollection,System.Collections.ICollection,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified collections are equal and throws an exception

+            if the two collections are not equal. Equality is defined as having the same

+            elements in the same order and quantity. Different references to the same

+            value are considered equal.

+            </summary>

+            <param name="expected">

+            The first collection to compare. This is the collection the tests expects.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by the

+            code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not equal to <paramref name="expected"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreNotEqual(System.Collections.ICollection,System.Collections.ICollection)">

+            <summary>

+            Tests whether the specified collections are unequal and throws an exception

+            if the two collections are equal. Equality is defined as having the same

+            elements in the same order and quantity. Different references to the same

+            value are considered equal.

+            </summary>

+            <param name="notExpected">

+            The first collection to compare. This is the collection the tests expects

+            not to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by the

+            code under test.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreNotEqual(System.Collections.ICollection,System.Collections.ICollection,System.String)">

+            <summary>

+            Tests whether the specified collections are unequal and throws an exception

+            if the two collections are equal. Equality is defined as having the same

+            elements in the same order and quantity. Different references to the same

+            value are considered equal.

+            </summary>

+            <param name="notExpected">

+            The first collection to compare. This is the collection the tests expects

+            not to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by the

+            code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreNotEqual(System.Collections.ICollection,System.Collections.ICollection,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified collections are unequal and throws an exception

+            if the two collections are equal. Equality is defined as having the same

+            elements in the same order and quantity. Different references to the same

+            value are considered equal.

+            </summary>

+            <param name="notExpected">

+            The first collection to compare. This is the collection the tests expects

+            not to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by the

+            code under test.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreEqual(System.Collections.ICollection,System.Collections.ICollection,System.Collections.IComparer)">

+            <summary>

+            Tests whether the specified collections are equal and throws an exception

+            if the two collections are not equal. Equality is defined as having the same

+            elements in the same order and quantity. Different references to the same

+            value are considered equal.

+            </summary>

+            <param name="expected">

+            The first collection to compare. This is the collection the tests expects.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by the

+            code under test.

+            </param>

+            <param name="comparer">

+            The compare implementation to use when comparing elements of the collection.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreEqual(System.Collections.ICollection,System.Collections.ICollection,System.Collections.IComparer,System.String)">

+            <summary>

+            Tests whether the specified collections are equal and throws an exception

+            if the two collections are not equal. Equality is defined as having the same

+            elements in the same order and quantity. Different references to the same

+            value are considered equal.

+            </summary>

+            <param name="expected">

+            The first collection to compare. This is the collection the tests expects.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by the

+            code under test.

+            </param>

+            <param name="comparer">

+            The compare implementation to use when comparing elements of the collection.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not equal to <paramref name="expected"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreEqual(System.Collections.ICollection,System.Collections.ICollection,System.Collections.IComparer,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified collections are equal and throws an exception

+            if the two collections are not equal. Equality is defined as having the same

+            elements in the same order and quantity. Different references to the same

+            value are considered equal.

+            </summary>

+            <param name="expected">

+            The first collection to compare. This is the collection the tests expects.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by the

+            code under test.

+            </param>

+            <param name="comparer">

+            The compare implementation to use when comparing elements of the collection.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is not equal to <paramref name="expected"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="expected"/> is not equal to 

+            <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreNotEqual(System.Collections.ICollection,System.Collections.ICollection,System.Collections.IComparer)">

+            <summary>

+            Tests whether the specified collections are unequal and throws an exception

+            if the two collections are equal. Equality is defined as having the same

+            elements in the same order and quantity. Different references to the same

+            value are considered equal.

+            </summary>

+            <param name="notExpected">

+            The first collection to compare. This is the collection the tests expects

+            not to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by the

+            code under test.

+            </param>

+            <param name="comparer">

+            The compare implementation to use when comparing elements of the collection.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreNotEqual(System.Collections.ICollection,System.Collections.ICollection,System.Collections.IComparer,System.String)">

+            <summary>

+            Tests whether the specified collections are unequal and throws an exception

+            if the two collections are equal. Equality is defined as having the same

+            elements in the same order and quantity. Different references to the same

+            value are considered equal.

+            </summary>

+            <param name="notExpected">

+            The first collection to compare. This is the collection the tests expects

+            not to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by the

+            code under test.

+            </param>

+            <param name="comparer">

+            The compare implementation to use when comparing elements of the collection.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.AreNotEqual(System.Collections.ICollection,System.Collections.ICollection,System.Collections.IComparer,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified collections are unequal and throws an exception

+            if the two collections are equal. Equality is defined as having the same

+            elements in the same order and quantity. Different references to the same

+            value are considered equal.

+            </summary>

+            <param name="notExpected">

+            The first collection to compare. This is the collection the tests expects

+            not to match <paramref name="actual"/>.

+            </param>

+            <param name="actual">

+            The second collection to compare. This is the collection produced by the

+            code under test.

+            </param>

+            <param name="comparer">

+            The compare implementation to use when comparing elements of the collection.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="actual"/>

+            is equal to <paramref name="notExpected"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="notExpected"/> is equal to <paramref name="actual"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.GetElementCounts(System.Collections.ICollection,System.Int32@)">

+            <summary>

+            Constructs a dictionary containing the number of occurrences of each

+            element in the specified collection.

+            </summary>

+            <param name="collection">

+            The collection to process.

+            </param>

+            <param name="nullCount">

+            The number of null elements in the collection.

+            </param>

+            <returns>

+            A dictionary containing the number of occurrences of each element

+            in the specified collection.

+            </returns>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.IsSubsetOfHelper(System.Collections.ICollection,System.Collections.ICollection)">

+            <summary>

+            Determines whether the first collection is a subset of the second

+            collection. If either set contains duplicate elements, the number

+            of occurrences of the element in the subset must be less than or

+            equal to the number of occurrences in the superset.

+            </summary>

+            <param name="subset">

+            The collection the test expects to be contained in <paramref name="superset"/>.

+            </param>

+            <param name="superset">

+            The collection the test expects to contain <paramref name="subset"/>.

+            </param>

+            <returns>

+            True if <paramref name="subset"/> is a subset of

+            <paramref name="superset"/>, false otherwise.

+            </returns>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.FindMismatchedElement(System.Collections.ICollection,System.Collections.ICollection,System.Int32@,System.Int32@,System.Object@)">

+            <summary>

+            Finds a mismatched element between the two collections. A mismatched

+            element is one that appears a different number of times in the

+            expected collection than it does in the actual collection. The

+            collections are assumed to be different non-null references with the

+            same number of elements. The caller is responsible for this level of

+            verification. If there is no mismatched element, the function returns

+            false and the out parameters should not be used.

+            </summary>

+            <param name="expected">The first collection to compare.</param>

+            <param name="actual">The second collection to compare.</param>

+            <param name="expectedCount">

+            The expected number of occurrences of

+            <paramref name="mismatchedElement"/> or 0 if there is no mismatched

+            element.

+            </param>

+            <param name="actualCount">

+            The actual number of occurrences of

+            <paramref name="mismatchedElement"/> or 0 if there is no mismatched

+            element.

+            </param>

+            <param name="mismatchedElement">

+            The mismatched element (may be null) or null if there is no

+            mismatched element.

+            </param>

+            <returns>

+            true if a mismatched element was found; false otherwise.

+            </returns>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.CollectionAssert.ObjectComparer">

+            <summary>

+            compares the objects using object.Equals

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.GenericParameterHelper">

+            <summary>

+            This class is designed to help user doing unit testing.

+            GenericParameterHelper satisfies some comment generic type constraints

+            such as:

+            1. public default constructor

+            2. implements common interface: IComparable, IEnumerable, ICloneable

+            

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.GenericParameterHelper.#ctor">

+            <summary>

+            public default constructor, satisfies the constraint in C# generics.

+            This constructor initializes the Data property to a random value.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.GenericParameterHelper.#ctor(System.Int32)">

+            <summary>

+            This constructor initializes the Data property to a user-supplied value

+            </summary>

+            <param name="data"></param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.GenericParameterHelper.Equals(System.Object)">

+            <summary>

+            Do the value comparison for two GenericParameterHelper object

+            </summary>

+            <param name="obj">object to do comparison with</param>

+            <returns>true if obj has the same value as 'this' GenericParameterHelper object.

+            false otherwise.</returns>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.GenericParameterHelper.GetHashCode">

+            <summary>

+            Returns a hash code for this object.

+            </summary>

+            <returns></returns>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.GenericParameterHelper.CompareTo(System.Object)">

+            <summary>

+            Compares to the object.

+            </summary>

+            <param name="obj"></param>

+            <returns></returns>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.GenericParameterHelper.GetEnumerator">

+            <summary>

+            Returns an IEnumerator object whose length is derived from

+            the Data property.

+            </summary>

+            <returns></returns>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.GenericParameterHelper.Clone">

+            <summary>

+            Returns a GenericParameterHelper object that is equal to 

+            'this' one.

+            </summary>

+            <returns></returns>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.GenericParameterHelper.Data">

+            <summary>

+            Gets or sets the Data property.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.RuntimeTypeHelper">

+            <summary>

+            Provides method signature discovery for generic methods.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.RuntimeTypeHelper.SelectMethod(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[])">

+            <summary>

+            Given a set of methods that match the base criteria, select a method based

+            upon an array of types.  This method should return null if no method matches

+            the criteria.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert">

+            <summary>

+            Set of string assertions.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.Contains(System.String,System.String)">

+            <summary>

+            Tests whether the specified string contains the specified substring

+            and throws an exception if the substring does not occur within the

+            test string.

+            </summary>

+            <param name="value">

+            The string that is expected to contain <paramref name="substring"/>.

+            </param>

+            <param name="substring">

+            The string expected to occur within <paramref name="value"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="substring"/> is not found in

+            <paramref name="value"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.Contains(System.String,System.String,System.String)">

+            <summary>

+            Tests whether the specified string contains the specified substring

+            and throws an exception if the substring does not occur within the

+            test string.

+            </summary>

+            <param name="value">

+            The string that is expected to contain <paramref name="substring"/>.

+            </param>

+            <param name="substring">

+            The string expected to occur within <paramref name="value"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="substring"/>

+            is not in <paramref name="value"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="substring"/> is not found in

+            <paramref name="value"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.Contains(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified string contains the specified substring

+            and throws an exception if the substring does not occur within the

+            test string.

+            </summary>

+            <param name="value">

+            The string that is expected to contain <paramref name="substring"/>.

+            </param>

+            <param name="substring">

+            The string expected to occur within <paramref name="value"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="substring"/>

+            is not in <paramref name="value"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="substring"/> is not found in

+            <paramref name="value"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.StartsWith(System.String,System.String)">

+            <summary>

+            Tests whether the specified string begins with the specified substring

+            and throws an exception if the test string does not start with the

+            substring.

+            </summary>

+            <param name="value">

+            The string that is expected to begin with <paramref name="substring"/>.

+            </param>

+            <param name="substring">

+            The string expected to be a prefix of <paramref name="value"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> does not begin with

+            <paramref name="substring"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.StartsWith(System.String,System.String,System.String)">

+            <summary>

+            Tests whether the specified string begins with the specified substring

+            and throws an exception if the test string does not start with the

+            substring.

+            </summary>

+            <param name="value">

+            The string that is expected to begin with <paramref name="substring"/>.

+            </param>

+            <param name="substring">

+            The string expected to be a prefix of <paramref name="value"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            does not begin with <paramref name="substring"/>. The message is

+            shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> does not begin with

+            <paramref name="substring"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.StartsWith(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified string begins with the specified substring

+            and throws an exception if the test string does not start with the

+            substring.

+            </summary>

+            <param name="value">

+            The string that is expected to begin with <paramref name="substring"/>.

+            </param>

+            <param name="substring">

+            The string expected to be a prefix of <paramref name="value"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            does not begin with <paramref name="substring"/>. The message is

+            shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> does not begin with

+            <paramref name="substring"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.EndsWith(System.String,System.String)">

+            <summary>

+            Tests whether the specified string ends with the specified substring

+            and throws an exception if the test string does not end with the

+            substring.

+            </summary>

+            <param name="value">

+            The string that is expected to end with <paramref name="substring"/>.

+            </param>

+            <param name="substring">

+            The string expected to be a suffix of <paramref name="value"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> does not end with

+            <paramref name="substring"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.EndsWith(System.String,System.String,System.String)">

+            <summary>

+            Tests whether the specified string ends with the specified substring

+            and throws an exception if the test string does not end with the

+            substring.

+            </summary>

+            <param name="value">

+            The string that is expected to end with <paramref name="substring"/>.

+            </param>

+            <param name="substring">

+            The string expected to be a suffix of <paramref name="value"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            does not end with <paramref name="substring"/>. The message is

+            shown in test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> does not end with

+            <paramref name="substring"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.EndsWith(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified string ends with the specified substring

+            and throws an exception if the test string does not end with the

+            substring.

+            </summary>

+            <param name="value">

+            The string that is expected to end with <paramref name="substring"/>.

+            </param>

+            <param name="substring">

+            The string expected to be a suffix of <paramref name="value"/>.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            does not end with <paramref name="substring"/>. The message is

+            shown in test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> does not end with

+            <paramref name="substring"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.Matches(System.String,System.Text.RegularExpressions.Regex)">

+            <summary>

+            Tests whether the specified string matches a regular expression and

+            throws an exception if the string does not match the expression.

+            </summary>

+            <param name="value">

+            The string that is expected to match <paramref name="pattern"/>.

+            </param>

+            <param name="pattern">

+            The regular expression that <paramref name="value"/> is

+            expected to match.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> does not match

+            <paramref name="pattern"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.Matches(System.String,System.Text.RegularExpressions.Regex,System.String)">

+            <summary>

+            Tests whether the specified string matches a regular expression and

+            throws an exception if the string does not match the expression.

+            </summary>

+            <param name="value">

+            The string that is expected to match <paramref name="pattern"/>.

+            </param>

+            <param name="pattern">

+            The regular expression that <paramref name="value"/> is

+            expected to match.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            does not match <paramref name="pattern"/>. The message is shown in

+            test results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> does not match

+            <paramref name="pattern"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.Matches(System.String,System.Text.RegularExpressions.Regex,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified string matches a regular expression and

+            throws an exception if the string does not match the expression.

+            </summary>

+            <param name="value">

+            The string that is expected to match <paramref name="pattern"/>.

+            </param>

+            <param name="pattern">

+            The regular expression that <paramref name="value"/> is

+            expected to match.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            does not match <paramref name="pattern"/>. The message is shown in

+            test results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> does not match

+            <paramref name="pattern"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.DoesNotMatch(System.String,System.Text.RegularExpressions.Regex)">

+            <summary>

+            Tests whether the specified string does not match a regular expression

+            and throws an exception if the string matches the expression.

+            </summary>

+            <param name="value">

+            The string that is expected not to match <paramref name="pattern"/>.

+            </param>

+            <param name="pattern">

+            The regular expression that <paramref name="value"/> is

+            expected to not match.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> matches <paramref name="pattern"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.DoesNotMatch(System.String,System.Text.RegularExpressions.Regex,System.String)">

+            <summary>

+            Tests whether the specified string does not match a regular expression

+            and throws an exception if the string matches the expression.

+            </summary>

+            <param name="value">

+            The string that is expected not to match <paramref name="pattern"/>.

+            </param>

+            <param name="pattern">

+            The regular expression that <paramref name="value"/> is

+            expected to not match.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            matches <paramref name="pattern"/>. The message is shown in test

+            results.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> matches <paramref name="pattern"/>.

+            </exception>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.StringAssert.DoesNotMatch(System.String,System.Text.RegularExpressions.Regex,System.String,System.Object[])">

+            <summary>

+            Tests whether the specified string does not match a regular expression

+            and throws an exception if the string matches the expression.

+            </summary>

+            <param name="value">

+            The string that is expected not to match <paramref name="pattern"/>.

+            </param>

+            <param name="pattern">

+            The regular expression that <paramref name="value"/> is

+            expected to not match.

+            </param>

+            <param name="message">

+            The message to include in the exception when <paramref name="value"/>

+            matches <paramref name="pattern"/>. The message is shown in test

+            results.

+            </param>

+            <param name="parameters">

+            An array of parameters to use when formatting <paramref name="message"/>.

+            </param>

+            <exception cref="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException">

+            Thrown if <paramref name="value"/> matches <paramref name="pattern"/>.

+            </exception>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.TestContext">

+            <summary>

+            TestContext class. This class should be fully abstract and not contain any 

+            members. The adapter will implement the members. Users in the framework should

+            only access this via a well-defined interface.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.WriteLine(System.String,System.Object[])">

+            <summary>

+            Used to write trace messages while the test is running

+            </summary>

+            <param name="format">format string</param>

+            <param name="args">the arguments</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.AddResultFile(System.String)">

+            <summary>

+            Adds a file name to the list in TestResult.ResultFileNames

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.BeginTimer(System.String)">

+            <summary>

+            Begins a timer with the specified name

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.EndTimer(System.String)">

+            <summary>

+            Ends a timer with the specified name

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.Properties">

+            <summary>

+            Per test properties

+            </summary>

+            <value></value>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.DataRow">

+            <summary>

+            Current data row when test is used for data driven testing.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.DataConnection">

+            <summary>

+            Current data connection row when test is used for data driven testing.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.TestLogsDir">

+            <summary>

+            Gets the test logs directory.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.TestDir">

+            <summary>

+            Gets the test directory.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.TestDeploymentDir">

+            <summary>

+            Gets the test deployment directory.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.TestName">

+            <summary>

+            Gets the test name.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.TestContext.CurrentTestOutcome">

+            <summary>

+            Gets the CurrentTestOutcome.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestOutcome">

+            <summary>

+            Outcome of a test or a run.

+            If a new successful state needs to be added you will need to modify 

+            RunResultAndStatistics in TestRun and TestOutcomeHelper below.

+            

+            NOTE: the order is important and is used for computing outcome for aggregations. 

+                  More important outcomes come first. See TestOutcomeHelper.GetAggregationOutcome.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestOutcome.Failed">

+            <summary>

+            Test was executed, but there were issues.

+            Issues may involve exceptions or failed assertions.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestOutcome.Inconclusive">

+            <summary>

+            Test has completed, but we can't say if it passed or failed.

+            May be used for aborted tests...

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestOutcome.Passed">

+            <summary>

+            Test was executed w/o any issues.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestOutcome.InProgress">

+            <summary>

+            Test is currently executing.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestOutcome.Error">

+            <summary>

+            There was a system error while we were trying to execute a test.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestOutcome.Timeout">

+            <summary>

+            The test timed out.

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestOutcome.Aborted">

+            <summary>

+            Test was aborted by the user. 

+            </summary>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.UnitTestOutcome.Unknown">

+            <summary>

+            Test is in an unknown state

+            </summary>

+        </member>

+        <member name="T:System.Data.DataRow">

+            <summary>

+            The data row.

+            </summary>

+        </member>

+        <member name="T:System.Data.Common.DbConnection">

+            <summary>

+            The database connection.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute">

+            <summary>

+            Marks a test class.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute.#ctor">

+            <summary>

+            Initializes a new test class attribute.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute">

+            <summary>

+            Marks a test method.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute.#ctor">

+            <summary>

+            Initializes a new TestMethodAttribute.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute">

+            <summary>

+            A method marker called before a test method runs.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute.#ctor">

+            <summary>

+            Initializes a new TestInitializeAttribute.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute">

+            <summary>

+            A method marker called after a test method runs.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute.#ctor">

+            <summary>

+            Initializes a new TestCleanupAttribute.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.IgnoreAttribute">

+            <summary>

+            Ignores a unit test.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.IgnoreAttribute.#ctor">

+            <summary>

+            Initializes a new IgnoreAttribute.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.ExpectedExceptionAttribute">

+            <summary>

+            The ExpectedExceptionAttribute.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.ExpectedExceptionAttribute.#ctor(System.Type)">

+            <summary>

+            Initializes the ExpectedExceptionAttribute.

+            </summary>

+            <param name="exceptionType">The exception type.</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.ExpectedExceptionAttribute.#ctor(System.Type,System.String)">

+            <summary>

+            Initializes the ExpectedExceptionAttribute.

+            </summary>

+            <param name="exceptionType">The exception type.</param>

+            <param name="message">The message.</param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.ExpectedExceptionAttribute.ExceptionType">

+            <summary>

+            Gets the exception type.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.ExpectedExceptionAttribute.Message">

+            <summary>

+            Gets the message.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute">

+            <summary>

+            The test property attribute.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute.#ctor(System.String,System.String)">

+            <summary>

+            Initializes the TestPropertyAttribute.

+            </summary>

+            <param name="name"></param>

+            <param name="value"></param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute.Name">

+            <summary>

+            Gets the name.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute.Value">

+            <summary>

+            Gets the value.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.ClassInitializeAttribute">

+            <summary>

+            The ClassInitializeAttribute.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.ClassInitializeAttribute.#ctor">

+            <summary>

+            Initializes the ClassInitializeAttribute.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupAttribute">

+            <summary>

+            The ClassCleanupAttribute.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupAttribute.#ctor">

+            <summary>

+            Initializes the ClassCleanupAttribute.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitializeAttribute">

+            <summary>

+            The AssemblyInitializeAttribute.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitializeAttribute.#ctor">

+            <summary>

+            Initializes the AssemblyInitializeAttribute.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyCleanupAttribute">

+            <summary>

+            The AssemblyCleanupAttribute.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyCleanupAttribute.#ctor">

+            <summary>

+            Initializes the AssemblyCleanupAttribute.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute">

+            <summary>

+            Description of the test.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute.#ctor(System.String)">

+            <summary>

+            Initializes the DescriptionAttribute.

+            </summary>

+            <param name="description">The description.</param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.DescriptionAttribute.Description">

+            <summary>

+            Gets the description.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.OwnerAttribute">

+            <summary>

+            The OwnerAttribute.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.OwnerAttribute.#ctor(System.String)">

+            <summary>

+            Initializes the OwnerAttribute.

+            </summary>

+            <param name="owner">The owner.</param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.OwnerAttribute.Owner">

+            <summary>

+            Gets the owner.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.CssProjectStructureAttribute">

+            <summary>

+            CSS Project Structure URI.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CssProjectStructureAttribute.#ctor(System.String)">

+            <summary>

+            Initializes the CSS Project Structure URI.

+            </summary>

+            <param name="cssProjectStructure">The structure.</param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.CssProjectStructureAttribute.CssProjectStructure">

+            <summary>

+            Gets the property structure.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.CssIterationAttribute">

+            <summary>

+            CSS Iteration URI

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.CssIterationAttribute.#ctor(System.String)">

+            <summary>

+            Initializes the CssIterationAttribute.

+            </summary>

+            <param name="cssIteration">The parameter.</param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.CssIterationAttribute.CssIteration">

+            <summary>

+            Gets the CssIteration.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.PriorityAttribute">

+            <summary>

+            Priority attribute; used to specify the priority of a unit test.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.PriorityAttribute.#ctor(System.Int32)">

+            <summary>

+            Initializes the PriorityAttribute.

+            </summary>

+            <param name="priority">The priority.</param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.PriorityAttribute.Priority">

+            <summary>

+            Gets the Priority.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.TimeoutAttribute">

+            <summary>

+            Timeout attribute; used to specify the timeout of a unit test.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.TimeoutAttribute.#ctor(System.Int32)">

+            <summary>

+            Initializes the TimeoutAttribute.

+            </summary>

+            <param name="timeout"></param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.TimeoutAttribute.Timeout">

+            <summary>

+            Gets the Timeout.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.WorkItemAttribute">

+            <summary>

+            WorkItem attribute; used to specify a work item associated with this test.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.WorkItemAttribute.#ctor(System.Int32)">

+            <summary>

+            Initializes the WorkItemAttribute.

+            </summary>

+            <param name="id"></param>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.WorkItemAttribute.Id">

+            <summary>

+            Gets the ID.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.HostTypeAttribute">

+            <summary>

+            HostType specifies the type of host that this unit test will

+            run in.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.HostTypeAttribute.#ctor(System.String)">

+            <summary>

+            Initializes the host type attribute.

+            </summary>

+            <param name="hostType"></param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.HostTypeAttribute.#ctor(System.String,System.String)">

+            <summary>

+            Constructor of HostTypeAttribute.

+            </summary>

+            <param name="hostType">The type of the host.</param>

+            <param name="hostData">Custom data for the host adapter.</param>

+        </member>

+        <member name="F:Microsoft.VisualStudio.TestTools.UnitTesting.HostTypeAttribute.m_hostData">

+            The reason this is string (and not object) is that currently CMI cannot parse arbitrary instances of object and we deprioritized changing CMI.

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.HostTypeAttribute.HostType">

+            <summary>

+            Gets the host type.

+            </summary>

+        </member>

+        <member name="P:Microsoft.VisualStudio.TestTools.UnitTesting.HostTypeAttribute.HostData">

+            <summary>

+            Gets the host data.

+            </summary>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.DeploymentItemAttribute">

+            <summary>

+            Used to specify deployment item (file or directory) for per-test deployment.

+            Can be specified on test class or test method.

+            Can have multiple instances of the attribute to specify more than one item.

+            The item path can be absolute or relative, if relative, it is relative to RunConfig.RelativePathRoot.

+            </summary>

+            <example>

+            [DeploymentItem("file1.xml")]

+            [DeploymentItem("file2.xml", "DataFiles")]

+            [DeploymentItem("bin\Debug")]

+            </example>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.DeploymentItemAttribute.#ctor(System.String)">

+            <summary>

+            Initializes DeploymentItemAttribute.

+            </summary>

+            <param name="path">The path.</param>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.DeploymentItemAttribute.#ctor(System.String,System.String)">

+            <summary>

+            Initializes DeploymentItemAttribute.

+            </summary>

+            <param name="path">The path.</param>

+            <param name="outputDirectory">The output directory.</param>

+        </member>

+        <member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.IVerifiable">

+            <summary>

+            Verifiable interface.

+            </summary>

+        </member>

+        <member name="M:Microsoft.VisualStudio.TestTools.UnitTesting.IVerifiable.IsValid">

+            <summary>

+            The IsValid method.

+            </summary>

+            <returns>Returns a value.</returns>

+        </member>

+    </members>

+</doc>

diff --git a/csharp/lib/NUnit-config/Microsoft.VisualStudio.TestTools.cs b/csharp/lib/NUnit-config/Microsoft.VisualStudio.TestTools.cs
new file mode 100644
index 0000000..fd151da
--- /dev/null
+++ b/csharp/lib/NUnit-config/Microsoft.VisualStudio.TestTools.cs
@@ -0,0 +1,54 @@
+

+using System;

+#if CLIENTPROFILE

+namespace Microsoft.VisualStudio.TestTools.UnitTesting

+{

+    [AttributeUsage(AttributeTargets.Class, Inherited = true, AllowMultiple = false)]

+    public sealed class TestClassAttribute : NUnit.Framework.TestFixtureAttribute

+    {

+    }

+

+    [AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = false)]

+    public sealed class TestMethodAttribute : NUnit.Framework.TestAttribute

+    {

+    }

+

+    [AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = false)]

+    public sealed class TestInitializeAttribute : NUnit.Framework.SetUpAttribute

+    {

+    }

+

+    [AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = false)]

+    public sealed class IgnoreAttribute : NUnit.Framework.IgnoreAttribute

+    {

+    }

+

+    [AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = false)]

+    public sealed class ExpectedExceptionAttribute : NUnit.Framework.ExpectedExceptionAttribute

+    {

+        public ExpectedExceptionAttribute(Type type) : base(type)

+        { }

+    }

+

+    public class Assert : NUnit.Framework.Assert

+    {

+        [Obsolete("Do not use AreEqual on Byte[], use TestUtil.AssertBytesEqual(,)")]

+        public static void AreEqual(byte[] b1, byte[] b2)

+        {

+            NUnit.Framework.Assert.AreEqual(b1, b2);

+        }

+

+        [Obsolete("No not use assert with miss-matched types.")]

+        public static new void AreEqual(object b1, object b2)

+        {

+            NUnit.Framework.Assert.AreEqual(b1, b2);

+        }

+

+        //Allowed if the types match

+        public static void AreEqual<T>(T b1, T b2)

+        {

+            NUnit.Framework.Assert.AreEqual(b1, b2);

+        }

+    }

+}

+#endif
\ No newline at end of file
diff --git a/csharp/lib/NUnit-config/nunit-console.v2.0.config b/csharp/lib/NUnit-config/nunit-console.v2.0.config
new file mode 100644
index 0000000..30453c9
--- /dev/null
+++ b/csharp/lib/NUnit-config/nunit-console.v2.0.config
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<configuration>
+
+  <startup>
+    <requiredRuntime version="v2.0.50727" />
+  </startup>
+
+  <runtime>
+    <!-- We need this so test exceptions don't crash NUnit -->
+    <legacyUnhandledExceptionPolicy enabled="1" />
+
+    <!-- Look for addins in the addins directory for now -->
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <probing privatePath="lib;addins"/>
+   </assemblyBinding>
+  </runtime>
+  
+</configuration>
\ No newline at end of file
diff --git a/csharp/lib/NUnit-config/nunit-console.v3.5.config b/csharp/lib/NUnit-config/nunit-console.v3.5.config
new file mode 100644
index 0000000..30453c9
--- /dev/null
+++ b/csharp/lib/NUnit-config/nunit-console.v3.5.config
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<configuration>
+
+  <startup>
+    <requiredRuntime version="v2.0.50727" />
+  </startup>
+
+  <runtime>
+    <!-- We need this so test exceptions don't crash NUnit -->
+    <legacyUnhandledExceptionPolicy enabled="1" />
+
+    <!-- Look for addins in the addins directory for now -->
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <probing privatePath="lib;addins"/>
+   </assemblyBinding>
+  </runtime>
+  
+</configuration>
\ No newline at end of file
diff --git a/csharp/lib/NUnit-config/nunit-console.v4.0.config b/csharp/lib/NUnit-config/nunit-console.v4.0.config
new file mode 100644
index 0000000..08ee954
--- /dev/null
+++ b/csharp/lib/NUnit-config/nunit-console.v4.0.config
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<configuration>
+
+  <startup useLegacyV2RuntimeActivationPolicy="true">
+    <requiredRuntime version="v4.0.30319" safemode="true"/>
+  </startup>
+
+  <runtime>
+    <!-- We need this so test exceptions don't crash NUnit -->
+    <legacyUnhandledExceptionPolicy enabled="1" />
+
+    <!-- Look for addins in the addins directory for now -->
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <probing privatePath="lib;addins"/>
+   </assemblyBinding>
+  </runtime>
+  
+</configuration>
\ No newline at end of file
diff --git a/csharp/lib/NUnit/Logo.ico b/csharp/lib/NUnit/Logo.ico
new file mode 100644
index 0000000..13c4ff9
--- /dev/null
+++ b/csharp/lib/NUnit/Logo.ico
Binary files differ
diff --git a/csharp/lib/NUnit/NUnit.nupkg b/csharp/lib/NUnit/NUnit.nupkg
new file mode 100644
index 0000000..7e9a777
--- /dev/null
+++ b/csharp/lib/NUnit/NUnit.nupkg
Binary files differ
diff --git a/csharp/lib/NUnit/NUnitFitTests.html b/csharp/lib/NUnit/NUnitFitTests.html
new file mode 100644
index 0000000..b7eb5c9
--- /dev/null
+++ b/csharp/lib/NUnit/NUnitFitTests.html
@@ -0,0 +1,277 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

+<html>

+	<body>

+		<h1>NUnit Acceptance Tests</h1>

+		<p>

+		Developers love self-referential programs! Hence, NUnit has always run all it's 

+		own tests, even those that are not really unit tests.

+		<p>Now, beginning with NUnit 2.4, NUnit has top-level tests using Ward Cunningham's 

+			FIT framework. At this time, the tests are pretty rudimentary, but it's a start 

+			and it's a framework for doing more.

+			<h2>Running the Tests</h2>

+		<p>Open a console or shell window and navigate to the NUnit bin directory, which 

+			contains this file. To run the test under Microsoft .Net, enter the command

+			<pre>    runFile NUnitFitTests.html TestResults.html .</pre>

+			To run it under Mono, enter

+			<pre>    mono runFile.exe NUnitFitTests.html TestResults.html .</pre>

+			Note the space and dot at the end of each command. The results of your test 

+			will be in TestResults.html in the same directory.

+			<h2>Platform and CLR Version</h2>

+			<table BORDER cellSpacing="0" cellPadding="5">

+				<tr>

+					<td colspan="2">NUnit.Fixtures.PlatformInfo</td>

+				</tr>

+			</table>

+			<h2>Verify Unit Tests</h2>

+		<p>

+		Load and run the NUnit unit tests, verifying that the results are as expected. 

+		When these tests are run on different platforms, different numbers of tests may 

+		be skipped, so the values for Skipped and Run tests are informational only.

+		<p>

+		The number of tests in each assembly should be constant across all platforms - 

+		any discrepancy usually means that one of the test source files was not 

+		compiled on the platform. There should be no failures and no tests ignored.

+		<p><b>Note:</b>

+		At the moment, the nunit.extensions.tests assembly is failing because the 

+		fixture doesn't initialize addins in the test domain.

+		<p>

+			<table BORDER cellSpacing="0" cellPadding="5">

+				<tr>

+					<td colspan="6">NUnit.Fixtures.AssemblyRunner</td>

+				</tr>

+				<tr>

+					<td>Assembly</td>

+					<td>Tests()</td>

+					<td>Run()</td>

+					<td>Skipped()</td>

+					<td>Ignored()</td>

+					<td>Failures()</td>

+				</tr>

+				<tr>

+					<td>nunit.framework.tests.dll</td>

+					<td>397</td>

+					<td>&nbsp;</td>

+					<td>&nbsp;</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+				<tr>

+					<td>nunit.core.tests.dll</td>

+					<td>355</td>

+					<td>&nbsp;</td>

+					<td>&nbsp;</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+				<tr>

+					<td>nunit.util.tests.dll</td>

+					<td>238</td>

+					<td>&nbsp;</td>

+					<td>&nbsp;</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+				<tr>

+					<td>nunit.mocks.tests.dll</td>

+					<td>43</td>

+					<td>&nbsp;</td>

+					<td>&nbsp;</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+				<tr>

+					<td>nunit.extensions.tests.dll</td>

+					<td>5</td>

+					<td>&nbsp;</td>

+					<td>&nbsp;</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+				<tr>

+					<td>nunit-console.tests.dll</td>

+					<td>40</td>

+					<td>&nbsp;</td>

+					<td>&nbsp;</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+				<tr>

+					<td>nunit.uikit.tests.dll</td>

+					<td>34</td>

+					<td>&nbsp;</td>

+					<td>&nbsp;</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+				<tr>

+					<td>nunit-gui.tests.dll</td>

+					<td>15</td>

+					<td>&nbsp;</td>

+					<td>&nbsp;</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+				<tr>

+					<td>nunit.fixtures.tests.dll</td>

+					<td>6</td>

+					<td>&nbsp;</td>

+					<td>&nbsp;</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+			</table>

+			<h2>Code Snippet Tests</h2>

+		<p>

+		These tests create a test assembly from a snippet of code and then load and run 

+		the tests that it contains, verifying that the structure of the loaded tests is 

+		as expected and that the number of tests run, skipped, ignored or failed is 

+		correct.

+		<p>

+			<table BORDER cellSpacing="0" cellPadding="5">

+				<tr>

+					<td colspan="6">NUnit.Fixtures.SnippetRunner</td>

+				</tr>

+				<tr>

+					<td>Code</td>

+					<td>Tree()</td>

+					<td>Run()</td>

+					<td>Skipped()</td>

+					<td>Ignored()</td>

+					<td>Failures()</td>

+				</tr>

+				<tr>

+					<td><pre>public class TestClass

+{

+}</pre>

+					</td>

+					<td>EMPTY</td>

+					<td>0</td>

+					<td>0</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+				<tr>

+					<td><pre>using NUnit.Framework;

+

+[TestFixture]

+public class TestClass

+{

+}</pre>

+					</td>

+					<td>TestClass</td>

+					<td>0</td>

+					<td>0</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+				<tr>

+					<td><pre>using NUnit.Framework;

+

+[TestFixture]

+public class TestClass

+{

+    [Test]

+    public void T1() { }

+    [Test]

+    public void T2() { }

+    [Test]

+    public void T3() { }

+}</pre>

+					</td>

+					<td><pre>TestClass

+&gt;T1

+&gt;T2

+&gt;T3</pre>

+					</td>

+					<td>3</td>

+					<td>0</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+				<tr>

+					<td><pre>using NUnit.Framework;

+

+[TestFixture]

+public class TestClass1

+{

+    [Test]

+    public void T1() { }

+}

+

+[TestFixture]

+public class TestClass2

+{

+    [Test]

+    public void T2() { }

+    [Test]

+    public void T3() { }

+}</pre>

+					</td>

+					<td><pre>TestClass1

+&gt;T1

+TestClass2

+&gt;T2

+&gt;T3</pre>

+					</td>

+					<td>3</td>

+					<td>0</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+				<tr>

+					<td><pre>using NUnit.Framework;

+

+[TestFixture]

+public class TestClass

+{

+    [Test]

+    public void T1() { }

+    [Test, Ignore]

+    public void T2() { }

+    [Test]

+    public void T3() { }

+}</pre>

+					</td>

+					<td><pre>TestClass

+&gt;T1

+&gt;T2

+&gt;T3</pre>

+					</td>

+					<td>2</td>

+					<td>0</td>

+					<td>1</td>

+					<td>0</td>

+				</tr>

+				<tr>

+					<td><pre>using NUnit.Framework;

+

+[TestFixture]

+public class TestClass

+{

+    [Test]

+    public void T1() { }

+    [Test, Explicit]

+    public void T2() { }

+    [Test]

+    public void T3() { }

+}</pre>

+					</td>

+					<td><pre>TestClass

+&gt;T1

+&gt;T2

+&gt;T3</pre>

+					</td>

+					<td>2</td>

+					<td>1</td>

+					<td>0</td>

+					<td>0</td>

+				</tr>

+			</table>

+			<h2>Summary Information</h2>

+			<table BORDER cellSpacing="0" cellPadding="5">

+				<tr>

+					<td colspan="2">fit.Summary</td>

+				</tr>

+			</table>

+	</body>

+</html>

diff --git a/csharp/lib/NUnit/fit-license.txt b/csharp/lib/NUnit/fit-license.txt
new file mode 100644
index 0000000..af37532
--- /dev/null
+++ b/csharp/lib/NUnit/fit-license.txt
Binary files differ
diff --git a/csharp/lib/NUnit/lib/nunit.framework.dll b/csharp/lib/NUnit/lib/nunit.framework.dll
new file mode 100644
index 0000000..6856e51
--- /dev/null
+++ b/csharp/lib/NUnit/lib/nunit.framework.dll
Binary files differ
diff --git a/csharp/lib/NUnit/lib/nunit.framework.xml b/csharp/lib/NUnit/lib/nunit.framework.xml
new file mode 100644
index 0000000..c98e5ad
--- /dev/null
+++ b/csharp/lib/NUnit/lib/nunit.framework.xml
@@ -0,0 +1,10407 @@
+<?xml version="1.0"?>

+<doc>

+    <assembly>

+        <name>nunit.framework</name>

+    </assembly>

+    <members>

+        <member name="T:NUnit.Framework.CategoryAttribute">

+            <summary>

+            Attribute used to apply a category to a test

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.CategoryAttribute.categoryName">

+            <summary>

+            The name of the category

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.CategoryAttribute.#ctor(System.String)">

+            <summary>

+            Construct attribute for a given category based on

+            a name. The name may not contain the characters ',',

+            '+', '-' or '!'. However, this is not checked in the

+            constructor since it would cause an error to arise at

+            as the test was loaded without giving a clear indication

+            of where the problem is located. The error is handled

+            in NUnitFramework.cs by marking the test as not

+            runnable.

+            </summary>

+            <param name="name">The name of the category</param>

+        </member>

+        <member name="M:NUnit.Framework.CategoryAttribute.#ctor">

+            <summary>

+            Protected constructor uses the Type name as the name

+            of the category.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.CategoryAttribute.Name">

+            <summary>

+            The name of the category

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.DatapointAttribute">

+            <summary>

+            Used to mark a field for use as a datapoint when executing a theory

+            within the same fixture that requires an argument of the field's Type.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.DatapointsAttribute">

+            <summary>

+            Used to mark an array as containing a set of datapoints to be used

+            executing a theory within the same fixture that requires an argument 

+            of the Type of the array elements.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.DescriptionAttribute">

+            <summary>

+            Attribute used to provide descriptive text about a 

+            test case or fixture.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.DescriptionAttribute.#ctor(System.String)">

+            <summary>

+            Construct the attribute

+            </summary>

+            <param name="description">Text describing the test</param>

+        </member>

+        <member name="P:NUnit.Framework.DescriptionAttribute.Description">

+            <summary>

+            Gets the test description

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.MessageMatch">

+            <summary>

+            Enumeration indicating how the expected message parameter is to be used

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.MessageMatch.Exact">

+            Expect an exact match

+        </member>

+        <member name="F:NUnit.Framework.MessageMatch.Contains">

+            Expect a message containing the parameter string

+        </member>

+        <member name="F:NUnit.Framework.MessageMatch.Regex">

+            Match the regular expression provided as a parameter

+        </member>

+        <member name="F:NUnit.Framework.MessageMatch.StartsWith">

+            Expect a message that starts with the parameter string

+        </member>

+        <member name="T:NUnit.Framework.ExpectedExceptionAttribute">

+            <summary>

+            ExpectedExceptionAttribute

+            </summary>

+            

+        </member>

+        <member name="M:NUnit.Framework.ExpectedExceptionAttribute.#ctor">

+            <summary>

+            Constructor for a non-specific exception

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.ExpectedExceptionAttribute.#ctor(System.Type)">

+            <summary>

+            Constructor for a given type of exception

+            </summary>

+            <param name="exceptionType">The type of the expected exception</param>

+        </member>

+        <member name="M:NUnit.Framework.ExpectedExceptionAttribute.#ctor(System.String)">

+            <summary>

+            Constructor for a given exception name

+            </summary>

+            <param name="exceptionName">The full name of the expected exception</param>

+        </member>

+        <member name="P:NUnit.Framework.ExpectedExceptionAttribute.ExpectedException">

+            <summary>

+            Gets or sets the expected exception type

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.ExpectedExceptionAttribute.ExpectedExceptionName">

+            <summary>

+            Gets or sets the full Type name of the expected exception

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.ExpectedExceptionAttribute.ExpectedMessage">

+            <summary>

+            Gets or sets the expected message text

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.ExpectedExceptionAttribute.UserMessage">

+            <summary>

+            Gets or sets the user message displayed in case of failure

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.ExpectedExceptionAttribute.MatchType">

+            <summary>

+             Gets or sets the type of match to be performed on the expected message

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.ExpectedExceptionAttribute.Handler">

+            <summary>

+             Gets the name of a method to be used as an exception handler

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.ExplicitAttribute">

+            <summary>

+            ExplicitAttribute marks a test or test fixture so that it will

+            only be run if explicitly executed from the gui or command line

+            or if it is included by use of a filter. The test will not be

+            run simply because an enclosing suite is run.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.ExplicitAttribute.#ctor">

+            <summary>

+            Default constructor

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.ExplicitAttribute.#ctor(System.String)">

+            <summary>

+            Constructor with a reason

+            </summary>

+            <param name="reason">The reason test is marked explicit</param>

+        </member>

+        <member name="P:NUnit.Framework.ExplicitAttribute.Reason">

+            <summary>

+            The reason test is marked explicit

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.IgnoreAttribute">

+            <summary>

+            Attribute used to mark a test that is to be ignored.

+            Ignored tests result in a warning message when the

+            tests are run.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.IgnoreAttribute.#ctor">

+            <summary>

+            Constructs the attribute without giving a reason 

+            for ignoring the test.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.IgnoreAttribute.#ctor(System.String)">

+            <summary>

+            Constructs the attribute giving a reason for ignoring the test

+            </summary>

+            <param name="reason">The reason for ignoring the test</param>

+        </member>

+        <member name="P:NUnit.Framework.IgnoreAttribute.Reason">

+            <summary>

+            The reason for ignoring a test

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.IncludeExcludeAttribute">

+            <summary>

+            Abstract base for Attributes that are used to include tests

+            in the test run based on environmental settings.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.IncludeExcludeAttribute.#ctor">

+            <summary>

+            Constructor with no included items specified, for use

+            with named property syntax.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.IncludeExcludeAttribute.#ctor(System.String)">

+            <summary>

+            Constructor taking one or more included items

+            </summary>

+            <param name="include">Comma-delimited list of included items</param>

+        </member>

+        <member name="P:NUnit.Framework.IncludeExcludeAttribute.Include">

+            <summary>

+            Name of the item that is needed in order for

+            a test to run. Multiple itemss may be given,

+            separated by a comma.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.IncludeExcludeAttribute.Exclude">

+            <summary>

+            Name of the item to be excluded. Multiple items

+            may be given, separated by a comma.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.IncludeExcludeAttribute.Reason">

+            <summary>

+            The reason for including or excluding the test

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.PlatformAttribute">

+            <summary>

+            PlatformAttribute is used to mark a test fixture or an

+            individual method as applying to a particular platform only.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.PlatformAttribute.#ctor">

+            <summary>

+            Constructor with no platforms specified, for use

+            with named property syntax.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.PlatformAttribute.#ctor(System.String)">

+            <summary>

+            Constructor taking one or more platforms

+            </summary>

+            <param name="platforms">Comma-deliminted list of platforms</param>

+        </member>

+        <member name="T:NUnit.Framework.CultureAttribute">

+            <summary>

+            CultureAttribute is used to mark a test fixture or an

+            individual method as applying to a particular Culture only.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.CultureAttribute.#ctor">

+            <summary>

+            Constructor with no cultures specified, for use

+            with named property syntax.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.CultureAttribute.#ctor(System.String)">

+            <summary>

+            Constructor taking one or more cultures

+            </summary>

+            <param name="cultures">Comma-deliminted list of cultures</param>

+        </member>

+        <member name="T:NUnit.Framework.CombinatorialAttribute">

+            <summary>

+            Marks a test to use a combinatorial join of any argument data 

+            provided. NUnit will create a test case for every combination of 

+            the arguments provided. This can result in a large number of test

+            cases and so should be used judiciously. This is the default join

+            type, so the attribute need not be used except as documentation.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.PropertyAttribute">

+            <summary>

+            PropertyAttribute is used to attach information to a test as a name/value pair..

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.PropertyAttribute.#ctor(System.String,System.String)">

+            <summary>

+            Construct a PropertyAttribute with a name and string value

+            </summary>

+            <param name="propertyName">The name of the property</param>

+            <param name="propertyValue">The property value</param>

+        </member>

+        <member name="M:NUnit.Framework.PropertyAttribute.#ctor(System.String,System.Int32)">

+            <summary>

+            Construct a PropertyAttribute with a name and int value

+            </summary>

+            <param name="propertyName">The name of the property</param>

+            <param name="propertyValue">The property value</param>

+        </member>

+        <member name="M:NUnit.Framework.PropertyAttribute.#ctor(System.String,System.Double)">

+            <summary>

+            Construct a PropertyAttribute with a name and double value

+            </summary>

+            <param name="propertyName">The name of the property</param>

+            <param name="propertyValue">The property value</param>

+        </member>

+        <member name="M:NUnit.Framework.PropertyAttribute.#ctor">

+            <summary>

+            Constructor for derived classes that set the

+            property dictionary directly.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.PropertyAttribute.#ctor(System.Object)">

+            <summary>

+            Constructor for use by derived classes that use the

+            name of the type as the property name. Derived classes

+            must ensure that the Type of the property value is

+            a standard type supported by the BCL. Any custom

+            types will cause a serialization Exception when

+            in the client.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.PropertyAttribute.Properties">

+            <summary>

+            Gets the property dictionary for this attribute

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.CombinatorialAttribute.#ctor">

+            <summary>

+            Default constructor

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.PairwiseAttribute">

+            <summary>

+            Marks a test to use pairwise join of any argument data provided. 

+            NUnit will attempt too excercise every pair of argument values at 

+            least once, using as small a number of test cases as it can. With

+            only two arguments, this is the same as a combinatorial join.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.PairwiseAttribute.#ctor">

+            <summary>

+            Default constructor

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.SequentialAttribute">

+            <summary>

+            Marks a test to use a sequential join of any argument data

+            provided. NUnit will use arguements for each parameter in

+            sequence, generating test cases up to the largest number

+            of argument values provided and using null for any arguments

+            for which it runs out of values. Normally, this should be

+            used with the same number of arguments for each parameter.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.SequentialAttribute.#ctor">

+            <summary>

+            Default constructor

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.MaxTimeAttribute">

+            <summary>

+            Summary description for MaxTimeAttribute.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.MaxTimeAttribute.#ctor(System.Int32)">

+            <summary>

+            Construct a MaxTimeAttribute, given a time in milliseconds.

+            </summary>

+            <param name="milliseconds">The maximum elapsed time in milliseconds</param>

+        </member>

+        <member name="T:NUnit.Framework.RandomAttribute">

+            <summary>

+            RandomAttribute is used to supply a set of random values

+            to a single parameter of a parameterized test.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.ValuesAttribute">

+            <summary>

+            ValuesAttribute is used to provide literal arguments for

+            an individual parameter of a test.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.ParameterDataAttribute">

+            <summary>

+            Abstract base class for attributes that apply to parameters 

+            and supply data for the parameter.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.ParameterDataAttribute.GetData(System.Reflection.ParameterInfo)">

+            <summary>

+            Gets the data to be provided to the specified parameter

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.ValuesAttribute.data">

+            <summary>

+            The collection of data to be returned. Must

+            be set by any derived attribute classes.

+            We use an object[] so that the individual

+            elements may have their type changed in GetData

+            if necessary.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.ValuesAttribute.#ctor(System.Object)">

+            <summary>

+            Construct with one argument

+            </summary>

+            <param name="arg1"></param>

+        </member>

+        <member name="M:NUnit.Framework.ValuesAttribute.#ctor(System.Object,System.Object)">

+            <summary>

+            Construct with two arguments

+            </summary>

+            <param name="arg1"></param>

+            <param name="arg2"></param>

+        </member>

+        <member name="M:NUnit.Framework.ValuesAttribute.#ctor(System.Object,System.Object,System.Object)">

+            <summary>

+            Construct with three arguments

+            </summary>

+            <param name="arg1"></param>

+            <param name="arg2"></param>

+            <param name="arg3"></param>

+        </member>

+        <member name="M:NUnit.Framework.ValuesAttribute.#ctor(System.Object[])">

+            <summary>

+            Construct with an array of arguments

+            </summary>

+            <param name="args"></param>

+        </member>

+        <member name="M:NUnit.Framework.ValuesAttribute.GetData(System.Reflection.ParameterInfo)">

+            <summary>

+            Get the collection of values to be used as arguments

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.RandomAttribute.#ctor(System.Int32)">

+            <summary>

+            Construct a set of doubles from 0.0 to 1.0,

+            specifying only the count.

+            </summary>

+            <param name="count"></param>

+        </member>

+        <member name="M:NUnit.Framework.RandomAttribute.#ctor(System.Double,System.Double,System.Int32)">

+            <summary>

+            Construct a set of doubles from min to max

+            </summary>

+            <param name="min"></param>

+            <param name="max"></param>

+            <param name="count"></param>

+        </member>

+        <member name="M:NUnit.Framework.RandomAttribute.#ctor(System.Int32,System.Int32,System.Int32)">

+            <summary>

+            Construct a set of ints from min to max

+            </summary>

+            <param name="min"></param>

+            <param name="max"></param>

+            <param name="count"></param>

+        </member>

+        <member name="M:NUnit.Framework.RandomAttribute.GetData(System.Reflection.ParameterInfo)">

+            <summary>

+            Get the collection of values to be used as arguments

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.RangeAttribute">

+            <summary>

+            RangeAttribute is used to supply a range of values to an

+            individual parameter of a parameterized test.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.RangeAttribute.#ctor(System.Int32,System.Int32)">

+            <summary>

+            Construct a range of ints using default step of 1

+            </summary>

+            <param name="from"></param>

+            <param name="to"></param>

+        </member>

+        <member name="M:NUnit.Framework.RangeAttribute.#ctor(System.Int32,System.Int32,System.Int32)">

+            <summary>

+            Construct a range of ints specifying the step size 

+            </summary>

+            <param name="from"></param>

+            <param name="to"></param>

+            <param name="step"></param>

+        </member>

+        <member name="M:NUnit.Framework.RangeAttribute.#ctor(System.Int64,System.Int64,System.Int64)">

+            <summary>

+            Construct a range of longs

+            </summary>

+            <param name="from"></param>

+            <param name="to"></param>

+            <param name="step"></param>

+        </member>

+        <member name="M:NUnit.Framework.RangeAttribute.#ctor(System.Double,System.Double,System.Double)">

+            <summary>

+            Construct a range of doubles

+            </summary>

+            <param name="from"></param>

+            <param name="to"></param>

+            <param name="step"></param>

+        </member>

+        <member name="M:NUnit.Framework.RangeAttribute.#ctor(System.Single,System.Single,System.Single)">

+            <summary>

+            Construct a range of floats

+            </summary>

+            <param name="from"></param>

+            <param name="to"></param>

+            <param name="step"></param>

+        </member>

+        <member name="T:NUnit.Framework.RepeatAttribute">

+            <summary>

+            RepeatAttribute may be applied to test case in order

+            to run it multiple times.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.RepeatAttribute.#ctor(System.Int32)">

+            <summary>

+            Construct a RepeatAttribute

+            </summary>

+            <param name="count">The number of times to run the test</param>

+        </member>

+        <member name="T:NUnit.Framework.RequiredAddinAttribute">

+            <summary>

+            RequiredAddinAttribute may be used to indicate the names of any addins

+            that must be present in order to run some or all of the tests in an

+            assembly. If the addin is not loaded, the entire assembly is marked

+            as NotRunnable.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.RequiredAddinAttribute.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the <see cref="T:RequiredAddinAttribute"/> class.

+            </summary>

+            <param name="requiredAddin">The required addin.</param>

+        </member>

+        <member name="P:NUnit.Framework.RequiredAddinAttribute.RequiredAddin">

+            <summary>

+            Gets the name of required addin.

+            </summary>

+            <value>The required addin name.</value>

+        </member>

+        <member name="T:NUnit.Framework.SetCultureAttribute">

+            <summary>

+            Summary description for SetCultureAttribute.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.SetCultureAttribute.#ctor(System.String)">

+            <summary>

+            Construct given the name of a culture

+            </summary>

+            <param name="culture"></param>

+        </member>

+        <member name="T:NUnit.Framework.SetUICultureAttribute">

+            <summary>

+            Summary description for SetUICultureAttribute.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.SetUICultureAttribute.#ctor(System.String)">

+            <summary>

+            Construct given the name of a culture

+            </summary>

+            <param name="culture"></param>

+        </member>

+        <member name="T:NUnit.Framework.SetUpAttribute">

+            <summary>

+            Attribute used to mark a class that contains one-time SetUp 

+            and/or TearDown methods that apply to all the tests in a

+            namespace or an assembly.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.SetUpFixtureAttribute">

+            <summary>

+            SetUpFixtureAttribute is used to identify a SetUpFixture

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.SuiteAttribute">

+            <summary>

+            Attribute used to mark a static (shared in VB) property

+            that returns a list of tests.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TearDownAttribute">

+            <summary>

+            Attribute used to identify a method that is called 

+            immediately after each test is run. The method is 

+            guaranteed to be called, even if an exception is thrown.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TestAttribute">

+            <summary>

+            Adding this attribute to a method within a <seealso cref="T:NUnit.Framework.TestFixtureAttribute"/> 

+            class makes the method callable from the NUnit test runner. There is a property 

+            called Description which is optional which you can provide a more detailed test

+            description. This class cannot be inherited.

+            </summary>

+            

+            <example>

+            [TestFixture]

+            public class Fixture

+            {

+              [Test]

+              public void MethodToTest()

+              {}

+              

+              [Test(Description = "more detailed description")]

+              publc void TestDescriptionMethod()

+              {}

+            }

+            </example>

+            

+        </member>

+        <member name="P:NUnit.Framework.TestAttribute.Description">

+            <summary>

+            Descriptive text for this test

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TestCaseAttribute">

+            <summary>

+            TestCaseAttribute is used to mark parameterized test cases

+            and provide them with their arguments.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.ITestCaseData">

+            <summary>

+            The ITestCaseData interface is implemented by a class

+            that is able to return complete testcases for use by

+            a parameterized test method.

+            

+            NOTE: This interface is used in both the framework

+            and the core, even though that results in two different

+            types. However, sharing the source code guarantees that

+            the various implementations will be compatible and that

+            the core is able to reflect successfully over the

+            framework implementations of ITestCaseData.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.ITestCaseData.Arguments">

+            <summary>

+            Gets the argument list to be provided to the test

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.ITestCaseData.Result">

+            <summary>

+            Gets the expected result

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.ITestCaseData.ExpectedException">

+            <summary>

+             Gets the expected exception Type

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.ITestCaseData.ExpectedExceptionName">

+            <summary>

+            Gets the FullName of the expected exception

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.ITestCaseData.TestName">

+            <summary>

+            Gets the name to be used for the test

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.ITestCaseData.Description">

+            <summary>

+            Gets the description of the test

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.ITestCaseData.Ignored">

+            <summary>

+            Gets a value indicating whether this <see cref="T:NUnit.Framework.ITestCaseData"/> is ignored.

+            </summary>

+            <value><c>true</c> if ignored; otherwise, <c>false</c>.</value>

+        </member>

+        <member name="P:NUnit.Framework.ITestCaseData.IgnoreReason">

+            <summary>

+            Gets the ignore reason.

+            </summary>

+            <value>The ignore reason.</value>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseAttribute.#ctor(System.Object[])">

+            <summary>

+            Construct a TestCaseAttribute with a list of arguments.

+            This constructor is not CLS-Compliant

+            </summary>

+            <param name="arguments"></param>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseAttribute.#ctor(System.Object)">

+            <summary>

+            Construct a TestCaseAttribute with a single argument

+            </summary>

+            <param name="arg"></param>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseAttribute.#ctor(System.Object,System.Object)">

+            <summary>

+            Construct a TestCaseAttribute with a two arguments

+            </summary>

+            <param name="arg1"></param>

+            <param name="arg2"></param>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseAttribute.#ctor(System.Object,System.Object,System.Object)">

+            <summary>

+            Construct a TestCaseAttribute with a three arguments

+            </summary>

+            <param name="arg1"></param>

+            <param name="arg2"></param>

+            <param name="arg3"></param>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseAttribute.Arguments">

+            <summary>

+            Gets the list of arguments to a test case

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseAttribute.Result">

+            <summary>

+            Gets or sets the expected result.

+            </summary>

+            <value>The result.</value>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseAttribute.Categories">

+            <summary>

+            Gets a list of categories associated with this test;

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseAttribute.Category">

+            <summary>

+            Gets or sets the category associated with this test.

+            May be a single category or a comma-separated list.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseAttribute.ExpectedException">

+            <summary>

+            Gets or sets the expected exception.

+            </summary>

+            <value>The expected exception.</value>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseAttribute.ExpectedExceptionName">

+            <summary>

+            Gets or sets the name the expected exception.

+            </summary>

+            <value>The expected name of the exception.</value>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseAttribute.ExpectedMessage">

+            <summary>

+            Gets or sets the expected message of the expected exception

+            </summary>

+            <value>The expected message of the exception.</value>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseAttribute.MatchType">

+            <summary>

+             Gets or sets the type of match to be performed on the expected message

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseAttribute.Description">

+            <summary>

+            Gets or sets the description.

+            </summary>

+            <value>The description.</value>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseAttribute.TestName">

+            <summary>

+            Gets or sets the name of the test.

+            </summary>

+            <value>The name of the test.</value>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseAttribute.Ignore">

+            <summary>

+            Gets or sets the ignored status of the test

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseAttribute.Ignored">

+            <summary>

+            Gets or sets the ignored status of the test

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseAttribute.IgnoreReason">

+            <summary>

+            Gets the ignore reason.

+            </summary>

+            <value>The ignore reason.</value>

+        </member>

+        <member name="T:NUnit.Framework.TestCaseSourceAttribute">

+            <summary>

+            FactoryAttribute indicates the source to be used to

+            provide test cases for a test method.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseSourceAttribute.#ctor(System.String)">

+            <summary>

+            Construct with the name of the factory - for use with languages

+            that don't support params arrays.

+            </summary>

+            <param name="sourceName">An array of the names of the factories that will provide data</param>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseSourceAttribute.#ctor(System.Type,System.String)">

+            <summary>

+            Construct with a Type and name - for use with languages

+            that don't support params arrays.

+            </summary>

+            <param name="sourceType">The Type that will provide data</param>

+            <param name="sourceName">The name of the method, property or field that will provide data</param>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseSourceAttribute.SourceName">

+            <summary>

+            The name of a the method, property or fiend to be used as a source

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseSourceAttribute.SourceType">

+            <summary>

+            A Type to be used as a source

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TestFixtureAttribute">

+            <example>

+            [TestFixture]

+            public class ExampleClass 

+            {}

+            </example>

+        </member>

+        <member name="M:NUnit.Framework.TestFixtureAttribute.#ctor">

+            <summary>

+            Default constructor

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.TestFixtureAttribute.#ctor(System.Object[])">

+            <summary>

+            Construct with a object[] representing a set of arguments. 

+            In .NET 2.0, the arguments may later be separated into

+            type arguments and constructor arguments.

+            </summary>

+            <param name="arguments"></param>

+        </member>

+        <member name="P:NUnit.Framework.TestFixtureAttribute.Description">

+            <summary>

+            Descriptive text for this fixture

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestFixtureAttribute.Category">

+            <summary>

+            Gets and sets the category for this fixture.

+            May be a comma-separated list of categories.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestFixtureAttribute.Categories">

+            <summary>

+            Gets a list of categories for this fixture

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestFixtureAttribute.Arguments">

+            <summary>

+            The arguments originally provided to the attribute

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestFixtureAttribute.Ignore">

+            <summary>

+            Gets or sets a value indicating whether this <see cref="T:NUnit.Framework.TestFixtureAttribute"/> should be ignored.

+            </summary>

+            <value><c>true</c> if ignore; otherwise, <c>false</c>.</value>

+        </member>

+        <member name="P:NUnit.Framework.TestFixtureAttribute.IgnoreReason">

+            <summary>

+            Gets or sets the ignore reason. May set Ignored as a side effect.

+            </summary>

+            <value>The ignore reason.</value>

+        </member>

+        <member name="P:NUnit.Framework.TestFixtureAttribute.TypeArgs">

+            <summary>

+            Get or set the type arguments. If not set

+            explicitly, any leading arguments that are

+            Types are taken as type arguments.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TestFixtureSetUpAttribute">

+            <summary>

+            Attribute used to identify a method that is 

+            called before any tests in a fixture are run.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TestFixtureTearDownAttribute">

+            <summary>

+            Attribute used to identify a method that is called after

+            all the tests in a fixture have run. The method is 

+            guaranteed to be called, even if an exception is thrown.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TheoryAttribute">

+            <summary>

+            Adding this attribute to a method within a <seealso cref="T:NUnit.Framework.TestFixtureAttribute"/> 

+            class makes the method callable from the NUnit test runner. There is a property 

+            called Description which is optional which you can provide a more detailed test

+            description. This class cannot be inherited.

+            </summary>

+            

+            <example>

+            [TestFixture]

+            public class Fixture

+            {

+              [Test]

+              public void MethodToTest()

+              {}

+              

+              [Test(Description = "more detailed description")]

+              publc void TestDescriptionMethod()

+              {}

+            }

+            </example>

+            

+        </member>

+        <member name="T:NUnit.Framework.TimeoutAttribute">

+            <summary>

+            WUsed on a method, marks the test with a timeout value in milliseconds. 

+            The test will be run in a separate thread and is cancelled if the timeout 

+            is exceeded. Used on a method or assembly, sets the default timeout 

+            for all contained test methods.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.TimeoutAttribute.#ctor(System.Int32)">

+            <summary>

+            Construct a TimeoutAttribute given a time in milliseconds

+            </summary>

+            <param name="timeout">The timeout value in milliseconds</param>

+        </member>

+        <member name="T:NUnit.Framework.RequiresSTAAttribute">

+            <summary>

+            Marks a test that must run in the STA, causing it

+            to run in a separate thread if necessary.

+            

+            On methods, you may also use STAThreadAttribute

+            to serve the same purpose.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.RequiresSTAAttribute.#ctor">

+            <summary>

+            Construct a RequiresSTAAttribute

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.RequiresMTAAttribute">

+            <summary>

+            Marks a test that must run in the MTA, causing it

+            to run in a separate thread if necessary.

+            

+            On methods, you may also use MTAThreadAttribute

+            to serve the same purpose.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.RequiresMTAAttribute.#ctor">

+            <summary>

+            Construct a RequiresMTAAttribute

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.RequiresThreadAttribute">

+            <summary>

+            Marks a test that must run on a separate thread.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.RequiresThreadAttribute.#ctor">

+            <summary>

+            Construct a RequiresThreadAttribute

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.RequiresThreadAttribute.#ctor(System.Threading.ApartmentState)">

+            <summary>

+            Construct a RequiresThreadAttribute, specifying the apartment

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.ValueSourceAttribute">

+            <summary>

+            ValueSourceAttribute indicates the source to be used to

+            provide data for one parameter of a test method.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.ValueSourceAttribute.#ctor(System.String)">

+            <summary>

+            Construct with the name of the factory - for use with languages

+            that don't support params arrays.

+            </summary>

+            <param name="sourceName">The name of the data source to be used</param>

+        </member>

+        <member name="M:NUnit.Framework.ValueSourceAttribute.#ctor(System.Type,System.String)">

+            <summary>

+            Construct with a Type and name - for use with languages

+            that don't support params arrays.

+            </summary>

+            <param name="sourceType">The Type that will provide data</param>

+            <param name="sourceName">The name of the method, property or field that will provide data</param>

+        </member>

+        <member name="P:NUnit.Framework.ValueSourceAttribute.SourceName">

+            <summary>

+            The name of a the method, property or fiend to be used as a source

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.ValueSourceAttribute.SourceType">

+            <summary>

+            A Type to be used as a source

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.AttributeExistsConstraint">

+            <summary>

+            AttributeExistsConstraint tests for the presence of a

+            specified attribute on  a Type.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.Constraint">

+            <summary>

+            The Constraint class is the base of all built-in constraints

+            within NUnit. It provides the operator overloads used to combine 

+            constraints.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.IResolveConstraint">

+            <summary>

+            The IConstraintExpression interface is implemented by all

+            complete and resolvable constraints and expressions.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.IResolveConstraint.Resolve">

+            <summary>

+            Return the top-level constraint for this expression

+            </summary>

+            <returns></returns>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.Constraint.UNSET">

+            <summary>

+            Static UnsetObject used to detect derived constraints

+            failing to set the actual value.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.Constraint.actual">

+            <summary>

+            The actual value being tested against a constraint

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.Constraint.displayName">

+            <summary>

+            The display name of this Constraint for use by ToString()

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.Constraint.argcnt">

+            <summary>

+            Argument fields used by ToString();

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.Constraint.builder">

+            <summary>

+            The builder holding this constraint

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.#ctor">

+            <summary>

+            Construct a constraint with no arguments

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.#ctor(System.Object)">

+            <summary>

+            Construct a constraint with one argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.#ctor(System.Object,System.Object)">

+            <summary>

+            Construct a constraint with two arguments

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.SetBuilder(NUnit.Framework.Constraints.ConstraintBuilder)">

+            <summary>

+            Sets the ConstraintBuilder holding this constraint

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.WriteMessageTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the failure message to the MessageWriter provided

+            as an argument. The default implementation simply passes

+            the constraint and the actual value to the writer, which

+            then displays the constraint description and the value.

+            

+            Constraints that need to provide additional details,

+            such as where the error occured can override this.

+            </summary>

+            <param name="writer">The MessageWriter on which to display the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.Matches(NUnit.Framework.Constraints.ActualValueDelegate)">

+            <summary>

+            Test whether the constraint is satisfied by an

+            ActualValueDelegate that returns the value to be tested.

+            The default implementation simply evaluates the delegate

+            but derived classes may override it to provide for delayed 

+            processing.

+            </summary>

+            <param name="del">An ActualValueDelegate</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.Matches``1(``0@)">

+            <summary>

+            Test whether the constraint is satisfied by a given reference.

+            The default implementation simply dereferences the value but

+            derived classes may override it to provide for delayed processing.

+            </summary>

+            <param name="actual">A reference to the value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.WriteActualValueTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the actual value for a failing constraint test to a

+            MessageWriter. The default implementation simply writes

+            the raw value of actual, leaving it to the writer to

+            perform any formatting.

+            </summary>

+            <param name="writer">The writer on which the actual value is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.ToString">

+            <summary>

+            Default override of ToString returns the constraint DisplayName

+            followed by any arguments within angle brackets.

+            </summary>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.GetStringRepresentation">

+            <summary>

+            Returns the string representation of this constraint

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.op_BitwiseAnd(NUnit.Framework.Constraints.Constraint,NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            This operator creates a constraint that is satisfied only if both 

+            argument constraints are satisfied.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.op_BitwiseOr(NUnit.Framework.Constraints.Constraint,NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            This operator creates a constraint that is satisfied if either 

+            of the argument constraints is satisfied.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.op_LogicalNot(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            This operator creates a constraint that is satisfied if the 

+            argument constraint is not satisfied.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.After(System.Int32)">

+            <summary>

+            Returns a DelayedConstraint with the specified delay time.

+            </summary>

+            <param name="delayInMilliseconds">The delay in milliseconds.</param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Constraint.After(System.Int32,System.Int32)">

+            <summary>

+            Returns a DelayedConstraint with the specified delay time

+            and polling interval.

+            </summary>

+            <param name="delayInMilliseconds">The delay in milliseconds.</param>

+            <param name="pollingInterval">The interval at which to test the constraint.</param>

+            <returns></returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Constraint.DisplayName">

+            <summary>

+            The display name of this Constraint for use by ToString().

+            The default value is the name of the constraint with

+            trailing "Constraint" removed. Derived classes may set

+            this to another name in their constructors.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Constraint.And">

+            <summary>

+            Returns a ConstraintExpression by appending And

+            to the current constraint.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Constraint.With">

+            <summary>

+            Returns a ConstraintExpression by appending And

+            to the current constraint.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Constraint.Or">

+            <summary>

+            Returns a ConstraintExpression by appending Or

+            to the current constraint.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.Constraint.UnsetObject">

+            <summary>

+            Class used to detect any derived constraints

+            that fail to set the actual value in their

+            Matches override.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AttributeExistsConstraint.#ctor(System.Type)">

+            <summary>

+            Constructs an AttributeExistsConstraint for a specific attribute Type

+            </summary>

+            <param name="type"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AttributeExistsConstraint.Matches(System.Object)">

+            <summary>

+            Tests whether the object provides the expected attribute.

+            </summary>

+            <param name="actual">A Type, MethodInfo, or other ICustomAttributeProvider</param>

+            <returns>True if the expected attribute is present, otherwise false</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AttributeExistsConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Writes the description of the constraint to the specified writer

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.AttributeConstraint">

+            <summary>

+            AttributeConstraint tests that a specified attribute is present

+            on a Type or other provider and that the value of the attribute

+            satisfies some other constraint.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.PrefixConstraint">

+            <summary>

+            Abstract base class used for prefixes

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.PrefixConstraint.baseConstraint">

+            <summary>

+            The base constraint

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PrefixConstraint.#ctor(NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Construct given a base constraint

+            </summary>

+            <param name="resolvable"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AttributeConstraint.#ctor(System.Type,NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Constructs an AttributeConstraint for a specified attriute

+            Type and base constraint.

+            </summary>

+            <param name="type"></param>

+            <param name="baseConstraint"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AttributeConstraint.Matches(System.Object)">

+            <summary>

+            Determines whether the Type or other provider has the 

+            expected attribute and if its value matches the

+            additional constraint specified.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AttributeConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Writes a description of the attribute to the specified writer.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AttributeConstraint.WriteActualValueTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Writes the actual value supplied to the specified writer.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AttributeConstraint.GetStringRepresentation">

+            <summary>

+            Returns a string representation of the constraint.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.BasicConstraint">

+            <summary>

+            BasicConstraint is the abstract base for constraints that

+            perform a simple comparison to a constant value.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.BasicConstraint.#ctor(System.Object,System.String)">

+            <summary>

+            Initializes a new instance of the <see cref="T:BasicConstraint"/> class.

+            </summary>

+            <param name="expected">The expected.</param>

+            <param name="description">The description.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.BasicConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.BasicConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.NullConstraint">

+            <summary>

+            NullConstraint tests that the actual value is null

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NullConstraint.#ctor">

+            <summary>

+            Initializes a new instance of the <see cref="T:NullConstraint"/> class.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.TrueConstraint">

+            <summary>

+            TrueConstraint tests that the actual value is true

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.TrueConstraint.#ctor">

+            <summary>

+            Initializes a new instance of the <see cref="T:TrueConstraint"/> class.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.FalseConstraint">

+            <summary>

+            FalseConstraint tests that the actual value is false

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.FalseConstraint.#ctor">

+            <summary>

+            Initializes a new instance of the <see cref="T:FalseConstraint"/> class.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.NaNConstraint">

+            <summary>

+            NaNConstraint tests that the actual value is a double or float NaN

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NaNConstraint.Matches(System.Object)">

+            <summary>

+            Test that the actual value is an NaN

+            </summary>

+            <param name="actual"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NaNConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a specified writer

+            </summary>

+            <param name="writer"></param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.BinaryConstraint">

+            <summary>

+            BinaryConstraint is the abstract base of all constraints

+            that combine two other constraints in some fashion.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.BinaryConstraint.left">

+            <summary>

+            The first constraint being combined

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.BinaryConstraint.right">

+            <summary>

+            The second constraint being combined

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.BinaryConstraint.#ctor(NUnit.Framework.Constraints.Constraint,NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Construct a BinaryConstraint from two other constraints

+            </summary>

+            <param name="left">The first constraint</param>

+            <param name="right">The second constraint</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.AndConstraint">

+            <summary>

+            AndConstraint succeeds only if both members succeed.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AndConstraint.#ctor(NUnit.Framework.Constraints.Constraint,NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Create an AndConstraint from two other constraints

+            </summary>

+            <param name="left">The first constraint</param>

+            <param name="right">The second constraint</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AndConstraint.Matches(System.Object)">

+            <summary>

+            Apply both member constraints to an actual value, succeeding 

+            succeeding only if both of them succeed.

+            </summary>

+            <param name="actual">The actual value</param>

+            <returns>True if the constraints both succeeded</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AndConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a description for this contraint to a MessageWriter

+            </summary>

+            <param name="writer">The MessageWriter to receive the description</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AndConstraint.WriteActualValueTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the actual value for a failing constraint test to a

+            MessageWriter. The default implementation simply writes

+            the raw value of actual, leaving it to the writer to

+            perform any formatting.

+            </summary>

+            <param name="writer">The writer on which the actual value is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.OrConstraint">

+            <summary>

+            OrConstraint succeeds if either member succeeds

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.OrConstraint.#ctor(NUnit.Framework.Constraints.Constraint,NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Create an OrConstraint from two other constraints

+            </summary>

+            <param name="left">The first constraint</param>

+            <param name="right">The second constraint</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.OrConstraint.Matches(System.Object)">

+            <summary>

+            Apply the member constraints to an actual value, succeeding 

+            succeeding as soon as one of them succeeds.

+            </summary>

+            <param name="actual">The actual value</param>

+            <returns>True if either constraint succeeded</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.OrConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a description for this contraint to a MessageWriter

+            </summary>

+            <param name="writer">The MessageWriter to receive the description</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.CollectionConstraint">

+            <summary>

+            CollectionConstraint is the abstract base class for

+            constraints that operate on collections.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionConstraint.#ctor">

+            <summary>

+            Construct an empty CollectionConstraint

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionConstraint.#ctor(System.Object)">

+            <summary>

+            Construct a CollectionConstraint

+            </summary>

+            <param name="arg"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionConstraint.IsEmpty(System.Collections.IEnumerable)">

+            <summary>

+            Determines whether the specified enumerable is empty.

+            </summary>

+            <param name="enumerable">The enumerable.</param>

+            <returns>

+            	<c>true</c> if the specified enumerable is empty; otherwise, <c>false</c>.

+            </returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionConstraint.doMatch(System.Collections.IEnumerable)">

+            <summary>

+            Protected method to be implemented by derived classes

+            </summary>

+            <param name="collection"></param>

+            <returns></returns>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.CollectionItemsEqualConstraint">

+            <summary>

+            CollectionItemsEqualConstraint is the abstract base class for all

+            collection constraints that apply some notion of item equality

+            as a part of their operation.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionItemsEqualConstraint.#ctor">

+            <summary>

+            Construct an empty CollectionConstraint

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionItemsEqualConstraint.#ctor(System.Object)">

+            <summary>

+            Construct a CollectionConstraint

+            </summary>

+            <param name="arg"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionItemsEqualConstraint.Using(System.Collections.IComparer)">

+            <summary>

+            Flag the constraint to use the supplied IComparer object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionItemsEqualConstraint.Using``1(System.Collections.Generic.IComparer{``0})">

+            <summary>

+            Flag the constraint to use the supplied IComparer object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionItemsEqualConstraint.Using``1(System.Comparison{``0})">

+            <summary>

+            Flag the constraint to use the supplied Comparison object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionItemsEqualConstraint.Using(System.Collections.IEqualityComparer)">

+            <summary>

+            Flag the constraint to use the supplied IEqualityComparer object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionItemsEqualConstraint.Using``1(System.Collections.Generic.IEqualityComparer{``0})">

+            <summary>

+            Flag the constraint to use the supplied IEqualityComparer object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionItemsEqualConstraint.ItemsEqual(System.Object,System.Object)">

+            <summary>

+            Compares two collection members for equality

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionItemsEqualConstraint.Tally(System.Collections.IEnumerable)">

+            <summary>

+            Return a new CollectionTally for use in making tests

+            </summary>

+            <param name="c">The collection to be included in the tally</param>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.CollectionItemsEqualConstraint.IgnoreCase">

+            <summary>

+            Flag the constraint to ignore case and return self.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.EmptyCollectionConstraint">

+            <summary>

+            EmptyCollectionConstraint tests whether a collection is empty. 

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EmptyCollectionConstraint.doMatch(System.Collections.IEnumerable)">

+            <summary>

+            Check that the collection is empty

+            </summary>

+            <param name="collection"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EmptyCollectionConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer"></param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.UniqueItemsConstraint">

+            <summary>

+            UniqueItemsConstraint tests whether all the items in a 

+            collection are unique.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.UniqueItemsConstraint.doMatch(System.Collections.IEnumerable)">

+            <summary>

+            Check that all items are unique.

+            </summary>

+            <param name="actual"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.UniqueItemsConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a description of this constraint to a MessageWriter

+            </summary>

+            <param name="writer"></param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.CollectionContainsConstraint">

+            <summary>

+            CollectionContainsConstraint is used to test whether a collection

+            contains an expected object as a member.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionContainsConstraint.#ctor(System.Object)">

+            <summary>

+            Construct a CollectionContainsConstraint

+            </summary>

+            <param name="expected"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionContainsConstraint.doMatch(System.Collections.IEnumerable)">

+            <summary>

+            Test whether the expected item is contained in the collection

+            </summary>

+            <param name="actual"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionContainsConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a descripton of the constraint to a MessageWriter

+            </summary>

+            <param name="writer"></param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.CollectionEquivalentConstraint">

+            <summary>

+            CollectionEquivalentCOnstraint is used to determine whether two

+            collections are equivalent.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionEquivalentConstraint.#ctor(System.Collections.IEnumerable)">

+            <summary>

+            Construct a CollectionEquivalentConstraint

+            </summary>

+            <param name="expected"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionEquivalentConstraint.doMatch(System.Collections.IEnumerable)">

+            <summary>

+            Test whether two collections are equivalent

+            </summary>

+            <param name="actual"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionEquivalentConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a description of this constraint to a MessageWriter

+            </summary>

+            <param name="writer"></param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.CollectionSubsetConstraint">

+            <summary>

+            CollectionSubsetConstraint is used to determine whether

+            one collection is a subset of another

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionSubsetConstraint.#ctor(System.Collections.IEnumerable)">

+            <summary>

+            Construct a CollectionSubsetConstraint

+            </summary>

+            <param name="expected">The collection that the actual value is expected to be a subset of</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionSubsetConstraint.doMatch(System.Collections.IEnumerable)">

+            <summary>

+            Test whether the actual collection is a subset of 

+            the expected collection provided.

+            </summary>

+            <param name="actual"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionSubsetConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a description of this constraint to a MessageWriter

+            </summary>

+            <param name="writer"></param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.CollectionOrderedConstraint">

+            <summary>

+            CollectionOrderedConstraint is used to test whether a collection is ordered.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionOrderedConstraint.#ctor">

+            <summary>

+            Construct a CollectionOrderedConstraint

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionOrderedConstraint.Using(System.Collections.IComparer)">

+            <summary>

+            Modifies the constraint to use an IComparer and returns self.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionOrderedConstraint.Using``1(System.Collections.Generic.IComparer{``0})">

+            <summary>

+            Modifies the constraint to use an IComparer&lt;T&gt; and returns self.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionOrderedConstraint.Using``1(System.Comparison{``0})">

+            <summary>

+            Modifies the constraint to use a Comparison&lt;T&gt; and returns self.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionOrderedConstraint.By(System.String)">

+            <summary>

+            Modifies the constraint to test ordering by the value of

+            a specified property and returns self.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionOrderedConstraint.doMatch(System.Collections.IEnumerable)">

+            <summary>

+            Test whether the collection is ordered

+            </summary>

+            <param name="actual"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionOrderedConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a description of the constraint to a MessageWriter

+            </summary>

+            <param name="writer"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionOrderedConstraint.GetStringRepresentation">

+            <summary>

+            Returns the string representation of the constraint.

+            </summary>

+            <returns></returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.CollectionOrderedConstraint.Descending">

+            <summary>

+             If used performs a reverse comparison

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.CollectionTally">

+            <summary>

+            CollectionTally counts (tallies) the number of

+            occurences of each object in one or more enumerations.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionTally.#ctor(NUnit.Framework.Constraints.NUnitEqualityComparer,System.Collections.IEnumerable)">

+            <summary>

+            Construct a CollectionTally object from a comparer and a collection

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionTally.TryRemove(System.Object)">

+            <summary>

+            Try to remove an object from the tally

+            </summary>

+            <param name="o">The object to remove</param>

+            <returns>True if successful, false if the object was not found</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionTally.TryRemove(System.Collections.IEnumerable)">

+            <summary>

+            Try to remove a set of objects from the tally

+            </summary>

+            <param name="c">The objects to remove</param>

+            <returns>True if successful, false if any object was not found</returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.CollectionTally.Count">

+            <summary>

+            The number of objects remaining in the tally

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ComparisonAdapter">

+            <summary>

+            ComparisonAdapter class centralizes all comparisons of

+            values in NUnit, adapting to the use of any provided

+            IComparer, IComparer&lt;T&gt; or Comparison&lt;T&gt;

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonAdapter.For(System.Collections.IComparer)">

+            <summary>

+            Returns a ComparisonAdapter that wraps an IComparer

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonAdapter.For``1(System.Collections.Generic.IComparer{``0})">

+            <summary>

+            Returns a ComparisonAdapter that wraps an IComparer&lt;T&gt;

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonAdapter.For``1(System.Comparison{``0})">

+            <summary>

+            Returns a ComparisonAdapter that wraps a Comparison&lt;T&gt;

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonAdapter.Compare(System.Object,System.Object)">

+            <summary>

+            Compares two objects

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ComparisonAdapter.Default">

+            <summary>

+            Gets the default ComparisonAdapter, which wraps an

+            NUnitComparer object.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonAdapter.ComparerAdapter.#ctor(System.Collections.IComparer)">

+            <summary>

+            Construct a ComparisonAdapter for an IComparer

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonAdapter.ComparerAdapter.Compare(System.Object,System.Object)">

+            <summary>

+            Compares two objects

+            </summary>

+            <param name="expected"></param>

+            <param name="actual"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonAdapter.DefaultComparisonAdapter.#ctor">

+            <summary>

+            Construct a default ComparisonAdapter

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ComparisonAdapter.ComparerAdapter`1">

+            <summary>

+            ComparisonAdapter&lt;T&gt; extends ComparisonAdapter and

+            allows use of an IComparer&lt;T&gt; or Comparison&lt;T&gt;

+            to actually perform the comparison.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonAdapter.ComparerAdapter`1.#ctor(System.Collections.Generic.IComparer{`0})">

+            <summary>

+            Construct a ComparisonAdapter for an IComparer&lt;T&gt;

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonAdapter.ComparerAdapter`1.Compare(System.Object,System.Object)">

+            <summary>

+            Compare a Type T to an object

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonAdapter.ComparisonAdapterForComparison`1.#ctor(System.Comparison{`0})">

+            <summary>

+            Construct a ComparisonAdapter for a Comparison&lt;T&gt;

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonAdapter.ComparisonAdapterForComparison`1.Compare(System.Object,System.Object)">

+            <summary>

+            Compare a Type T to an object

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ComparisonConstraint">

+            <summary>

+            Abstract base class for constraints that compare values to

+            determine if one is greater than, equal to or less than

+            the other.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.ComparisonConstraint.expected">

+            <summary>

+            The value against which a comparison is to be made

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.ComparisonConstraint.ltOK">

+            <summary>

+            If true, less than returns success

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.ComparisonConstraint.eqOK">

+            <summary>

+            if true, equal returns success

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.ComparisonConstraint.gtOK">

+            <summary>

+            if true, greater than returns success

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.ComparisonConstraint.predicate">

+            <summary>

+            The predicate used as a part of the description

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.ComparisonConstraint.comparer">

+            <summary>

+            ComparisonAdapter to be used in making the comparison

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonConstraint.#ctor(System.Object,System.Boolean,System.Boolean,System.Boolean,System.String)">

+            <summary>

+            Initializes a new instance of the <see cref="T:ComparisonConstraint"/> class.

+            </summary>

+            <param name="value">The value against which to make a comparison.</param>

+            <param name="ltOK">if set to <c>true</c> less succeeds.</param>

+            <param name="eqOK">if set to <c>true</c> equal succeeds.</param>

+            <param name="gtOK">if set to <c>true</c> greater succeeds.</param>

+            <param name="predicate">String used in describing the constraint.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonConstraint.Using(System.Collections.IComparer)">

+            <summary>

+            Modifies the constraint to use an IComparer and returns self

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonConstraint.Using``1(System.Collections.Generic.IComparer{``0})">

+            <summary>

+            Modifies the constraint to use an IComparer&lt;T&gt; and returns self

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ComparisonConstraint.Using``1(System.Comparison{``0})">

+            <summary>

+            Modifies the constraint to use a Comparison&lt;T&gt; and returns self

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.GreaterThanConstraint">

+            <summary>

+            Tests whether a value is greater than the value supplied to its constructor

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.GreaterThanConstraint.#ctor(System.Object)">

+            <summary>

+            Initializes a new instance of the <see cref="T:GreaterThanConstraint"/> class.

+            </summary>

+            <param name="expected">The expected value.</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.GreaterThanOrEqualConstraint">

+            <summary>

+            Tests whether a value is greater than or equal to the value supplied to its constructor

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.GreaterThanOrEqualConstraint.#ctor(System.Object)">

+            <summary>

+            Initializes a new instance of the <see cref="T:GreaterThanOrEqualConstraint"/> class.

+            </summary>

+            <param name="expected">The expected value.</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.LessThanConstraint">

+            <summary>

+            Tests whether a value is less than the value supplied to its constructor

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.LessThanConstraint.#ctor(System.Object)">

+            <summary>

+            Initializes a new instance of the <see cref="T:LessThanConstraint"/> class.

+            </summary>

+            <param name="expected">The expected value.</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.LessThanOrEqualConstraint">

+            <summary>

+            Tests whether a value is less than or equal to the value supplied to its constructor

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.LessThanOrEqualConstraint.#ctor(System.Object)">

+            <summary>

+            Initializes a new instance of the <see cref="T:LessThanOrEqualConstraint"/> class.

+            </summary>

+            <param name="expected">The expected value.</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ActualValueDelegate">

+            <summary>

+            Delegate used to delay evaluation of the actual value

+            to be used in evaluating a constraint

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ConstraintBuilder">

+            <summary>

+            ConstraintBuilder maintains the stacks that are used in

+            processing a ConstraintExpression. An OperatorStack

+            is used to hold operators that are waiting for their

+            operands to be reognized. a ConstraintStack holds 

+            input constraints as well as the results of each

+            operator applied.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintBuilder.#ctor">

+            <summary>

+            Initializes a new instance of the <see cref="T:ConstraintBuilder"/> class.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintBuilder.Append(NUnit.Framework.Constraints.ConstraintOperator)">

+            <summary>

+            Appends the specified operator to the expression by first

+            reducing the operator stack and then pushing the new

+            operator on the stack.

+            </summary>

+            <param name="op">The operator to push.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintBuilder.Append(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Appends the specified constraint to the expresson by pushing

+            it on the constraint stack.

+            </summary>

+            <param name="constraint">The constraint to push.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintBuilder.SetTopOperatorRightContext(System.Object)">

+            <summary>

+            Sets the top operator right context.

+            </summary>

+            <param name="rightContext">The right context.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintBuilder.ReduceOperatorStack(System.Int32)">

+            <summary>

+            Reduces the operator stack until the topmost item

+            precedence is greater than or equal to the target precedence.

+            </summary>

+            <param name="targetPrecedence">The target precedence.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintBuilder.Resolve">

+            <summary>

+            Resolves this instance, returning a Constraint. If the builder

+            is not currently in a resolvable state, an exception is thrown.

+            </summary>

+            <returns>The resolved constraint</returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintBuilder.IsResolvable">

+            <summary>

+            Gets a value indicating whether this instance is resolvable.

+            </summary>

+            <value>

+            	<c>true</c> if this instance is resolvable; otherwise, <c>false</c>.

+            </value>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ConstraintBuilder.OperatorStack">

+            <summary>

+            OperatorStack is a type-safe stack for holding ConstraintOperators

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintBuilder.OperatorStack.#ctor(NUnit.Framework.Constraints.ConstraintBuilder)">

+            <summary>

+            Initializes a new instance of the <see cref="T:OperatorStack"/> class.

+            </summary>

+            <param name="builder">The builder.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintBuilder.OperatorStack.Push(NUnit.Framework.Constraints.ConstraintOperator)">

+            <summary>

+            Pushes the specified operator onto the stack.

+            </summary>

+            <param name="op">The op.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintBuilder.OperatorStack.Pop">

+            <summary>

+            Pops the topmost operator from the stack.

+            </summary>

+            <returns></returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintBuilder.OperatorStack.Empty">

+            <summary>

+            Gets a value indicating whether this <see cref="T:OpStack"/> is empty.

+            </summary>

+            <value><c>true</c> if empty; otherwise, <c>false</c>.</value>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintBuilder.OperatorStack.Top">

+            <summary>

+            Gets the topmost operator without modifying the stack.

+            </summary>

+            <value>The top.</value>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ConstraintBuilder.ConstraintStack">

+            <summary>

+            ConstraintStack is a type-safe stack for holding Constraints

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintBuilder.ConstraintStack.#ctor(NUnit.Framework.Constraints.ConstraintBuilder)">

+            <summary>

+            Initializes a new instance of the <see cref="T:ConstraintStack"/> class.

+            </summary>

+            <param name="builder">The builder.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintBuilder.ConstraintStack.Push(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Pushes the specified constraint. As a side effect,

+            the constraint's builder field is set to the 

+            ConstraintBuilder owning this stack.

+            </summary>

+            <param name="constraint">The constraint.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintBuilder.ConstraintStack.Pop">

+            <summary>

+            Pops this topmost constrait from the stack.

+            As a side effect, the constraint's builder

+            field is set to null.

+            </summary>

+            <returns></returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintBuilder.ConstraintStack.Empty">

+            <summary>

+            Gets a value indicating whether this <see cref="T:ConstraintStack"/> is empty.

+            </summary>

+            <value><c>true</c> if empty; otherwise, <c>false</c>.</value>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintBuilder.ConstraintStack.Top">

+            <summary>

+            Gets the topmost constraint without modifying the stack.

+            </summary>

+            <value>The topmost constraint</value>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ConstraintExpression">

+            <summary>

+            ConstraintExpression represents a compound constraint in the 

+            process of being constructed from a series of syntactic elements.

+            

+            Individual elements are appended to the expression as they are

+            reognized. Once an actual Constraint is appended, the expression

+            returns a resolvable Constraint.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ConstraintExpressionBase">

+            <summary>

+            ConstraintExpressionBase is the abstract base class for the 

+            generated ConstraintExpression class, which represents a 

+            compound constraint in the process of being constructed 

+            from a series of syntactic elements.

+            

+            NOTE: ConstraintExpressionBase is aware of some of its

+            derived classes, which is an apparent violation of 

+            encapsulation. Ideally, these classes would be a 

+            single class, but they must be separated in order to

+            allow parts to be generated under .NET 1.x and to

+            provide proper user feedback in syntactically 

+            aware IDEs.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.ConstraintExpressionBase.builder">

+            <summary>

+            The ConstraintBuilder holding the elements recognized so far

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpressionBase.#ctor">

+            <summary>

+            Initializes a new instance of the <see cref="T:ConstraintExpressionBase"/> class.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpressionBase.#ctor(NUnit.Framework.Constraints.ConstraintBuilder)">

+            <summary>

+            Initializes a new instance of the <see cref="T:ConstraintExpressionBase"/> 

+            class passing in a ConstraintBuilder, which may be pre-populated.

+            </summary>

+            <param name="builder">The builder.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpressionBase.ToString">

+            <summary>

+            Returns a string representation of the expression as it

+            currently stands. This should only be used for testing,

+            since it has the side-effect of resolving the expression.

+            </summary>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpressionBase.Append(NUnit.Framework.Constraints.ConstraintOperator)">

+            <summary>

+            Appends an operator to the expression and returns the

+            resulting expression itself.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpressionBase.Append(NUnit.Framework.Constraints.SelfResolvingOperator)">

+            <summary>

+            Appends a self-resolving operator to the expression and

+            returns a new ResolvableConstraintExpression.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpressionBase.Append(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Appends a constraint to the expression and returns that

+            constraint, which is associated with the current state

+            of the expression being built.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.#ctor">

+            <summary>

+            Initializes a new instance of the <see cref="T:ConstraintExpression"/> class.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.#ctor(NUnit.Framework.Constraints.ConstraintBuilder)">

+            <summary>

+            Initializes a new instance of the <see cref="T:ConstraintExpression"/> 

+            class passing in a ConstraintBuilder, which may be pre-populated.

+            </summary>

+            <param name="builder">The builder.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.Property(System.String)">

+            <summary>

+            Returns a new PropertyConstraintExpression, which will either

+            test for the existence of the named property on the object

+            being tested or apply any following constraint to that property.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.Attribute(System.Type)">

+            <summary>

+            Returns a new AttributeConstraint checking for the

+            presence of a particular attribute on an object.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.Attribute``1">

+            <summary>

+            Returns a new AttributeConstraint checking for the

+            presence of a particular attribute on an object.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.Matches(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Returns the constraint provided as an argument - used to allow custom

+            custom constraints to easily participate in the syntax.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.Matches``1(System.Predicate{``0})">

+            <summary>

+            Returns the constraint provided as an argument - used to allow custom

+            custom constraints to easily participate in the syntax.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.EqualTo(System.Object)">

+            <summary>

+            Returns a constraint that tests two items for equality

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.SameAs(System.Object)">

+            <summary>

+            Returns a constraint that tests that two references are the same object

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.GreaterThan(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is greater than the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.GreaterThanOrEqualTo(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is greater than or equal to the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.AtLeast(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is greater than or equal to the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.LessThan(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is less than the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.LessThanOrEqualTo(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is less than or equal to the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.AtMost(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is less than or equal to the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.TypeOf(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual

+            value is of the exact type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.TypeOf``1">

+            <summary>

+            Returns a constraint that tests whether the actual

+            value is of the exact type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.InstanceOf(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is of the type supplied as an argument or a derived type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.InstanceOf``1">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is of the type supplied as an argument or a derived type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.InstanceOfType(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is of the type supplied as an argument or a derived type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.InstanceOfType``1">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is of the type supplied as an argument or a derived type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.AssignableFrom(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is assignable from the type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.AssignableFrom``1">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is assignable from the type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.AssignableTo(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is assignable from the type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.AssignableTo``1">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is assignable from the type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.EquivalentTo(System.Collections.IEnumerable)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is a collection containing the same elements as the 

+            collection supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.SubsetOf(System.Collections.IEnumerable)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is a subset of the collection supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.Member(System.Object)">

+            <summary>

+            Returns a new CollectionContainsConstraint checking for the

+            presence of a particular object in the collection.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.Contains(System.Object)">

+            <summary>

+            Returns a new CollectionContainsConstraint checking for the

+            presence of a particular object in the collection.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.Contains(System.String)">

+            <summary>

+            Returns a new ContainsConstraint. This constraint

+            will, in turn, make use of the appropriate second-level

+            constraint, depending on the type of the actual argument. 

+            This overload is only used if the item sought is a string,

+            since any other type implies that we are looking for a 

+            collection member.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.StringContaining(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value contains the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.ContainsSubstring(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value contains the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.StartsWith(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value starts with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.StringStarting(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value starts with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.EndsWith(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value ends with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.StringEnding(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value ends with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.Matches(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value matches the Regex pattern supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.StringMatching(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value matches the Regex pattern supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.SamePath(System.String)">

+            <summary>

+            Returns a constraint that tests whether the path provided 

+            is the same as an expected path after canonicalization.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.SubPath(System.String)">

+            <summary>

+            Returns a constraint that tests whether the path provided 

+            is the same path or under an expected path after canonicalization.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.SamePathOrUnder(System.String)">

+            <summary>

+            Returns a constraint that tests whether the path provided 

+            is the same path or under an expected path after canonicalization.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintExpression.InRange(System.IComparable,System.IComparable)">

+            <summary>

+            Returns a constraint that tests whether the actual value falls 

+            within a specified range.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.Not">

+            <summary>

+            Returns a ConstraintExpression that negates any

+            following constraint.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.No">

+            <summary>

+            Returns a ConstraintExpression that negates any

+            following constraint.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.All">

+            <summary>

+            Returns a ConstraintExpression, which will apply

+            the following constraint to all members of a collection,

+            succeeding if all of them succeed.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.Some">

+            <summary>

+            Returns a ConstraintExpression, which will apply

+            the following constraint to all members of a collection,

+            succeeding if at least one of them succeeds.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.None">

+            <summary>

+            Returns a ConstraintExpression, which will apply

+            the following constraint to all members of a collection,

+            succeeding if all of them fail.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.Length">

+            <summary>

+            Returns a new ConstraintExpression, which will apply the following

+            constraint to the Length property of the object being tested.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.Count">

+            <summary>

+            Returns a new ConstraintExpression, which will apply the following

+            constraint to the Count property of the object being tested.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.Message">

+            <summary>

+            Returns a new ConstraintExpression, which will apply the following

+            constraint to the Message property of the object being tested.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.InnerException">

+            <summary>

+            Returns a new ConstraintExpression, which will apply the following

+            constraint to the InnerException property of the object being tested.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.With">

+            <summary>

+            With is currently a NOP - reserved for future use.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.Null">

+            <summary>

+            Returns a constraint that tests for null

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.True">

+            <summary>

+            Returns a constraint that tests for True

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.False">

+            <summary>

+            Returns a constraint that tests for False

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.NaN">

+            <summary>

+            Returns a constraint that tests for NaN

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.Empty">

+            <summary>

+            Returns a constraint that tests for empty

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.Unique">

+            <summary>

+            Returns a constraint that tests whether a collection 

+            contains all unique items.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.BinarySerializable">

+            <summary>

+            Returns a constraint that tests whether an object graph is serializable in binary format.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.XmlSerializable">

+            <summary>

+            Returns a constraint that tests whether an object graph is serializable in xml format.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintExpression.Ordered">

+            <summary>

+            Returns a constraint that tests whether a collection is ordered

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ConstraintFactory">

+            <summary>

+            Helper class with properties and methods that supply

+            a number of constraints used in Asserts.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.Property(System.String)">

+            <summary>

+            Returns a new PropertyConstraintExpression, which will either

+            test for the existence of the named property on the object

+            being tested or apply any following constraint to that property.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.Attribute(System.Type)">

+            <summary>

+            Returns a new AttributeConstraint checking for the

+            presence of a particular attribute on an object.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.Attribute``1">

+            <summary>

+            Returns a new AttributeConstraint checking for the

+            presence of a particular attribute on an object.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.EqualTo(System.Object)">

+            <summary>

+            Returns a constraint that tests two items for equality

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.SameAs(System.Object)">

+            <summary>

+            Returns a constraint that tests that two references are the same object

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.GreaterThan(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is greater than the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.GreaterThanOrEqualTo(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is greater than or equal to the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.AtLeast(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is greater than or equal to the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.LessThan(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is less than the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.LessThanOrEqualTo(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is less than or equal to the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.AtMost(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is less than or equal to the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.TypeOf(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual

+            value is of the exact type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.TypeOf``1">

+            <summary>

+            Returns a constraint that tests whether the actual

+            value is of the exact type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.InstanceOf(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is of the type supplied as an argument or a derived type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.InstanceOf``1">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is of the type supplied as an argument or a derived type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.InstanceOfType(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is of the type supplied as an argument or a derived type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.InstanceOfType``1">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is of the type supplied as an argument or a derived type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.AssignableFrom(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is assignable from the type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.AssignableFrom``1">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is assignable from the type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.AssignableTo(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is assignable from the type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.AssignableTo``1">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is assignable from the type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.EquivalentTo(System.Collections.IEnumerable)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is a collection containing the same elements as the 

+            collection supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.SubsetOf(System.Collections.IEnumerable)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is a subset of the collection supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.Member(System.Object)">

+            <summary>

+            Returns a new CollectionContainsConstraint checking for the

+            presence of a particular object in the collection.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.Contains(System.Object)">

+            <summary>

+            Returns a new CollectionContainsConstraint checking for the

+            presence of a particular object in the collection.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.Contains(System.String)">

+            <summary>

+            Returns a new ContainsConstraint. This constraint

+            will, in turn, make use of the appropriate second-level

+            constraint, depending on the type of the actual argument. 

+            This overload is only used if the item sought is a string,

+            since any other type implies that we are looking for a 

+            collection member.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.StringContaining(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value contains the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.ContainsSubstring(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value contains the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.DoesNotContain(System.String)">

+            <summary>

+            Returns a constraint that fails if the actual

+            value contains the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.StartsWith(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value starts with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.StringStarting(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value starts with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.DoesNotStartWith(System.String)">

+            <summary>

+            Returns a constraint that fails if the actual

+            value starts with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.EndsWith(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value ends with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.StringEnding(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value ends with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.DoesNotEndWith(System.String)">

+            <summary>

+            Returns a constraint that fails if the actual

+            value ends with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.Matches(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value matches the Regex pattern supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.StringMatching(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value matches the Regex pattern supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.DoesNotMatch(System.String)">

+            <summary>

+            Returns a constraint that fails if the actual

+            value matches the pattern supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.SamePath(System.String)">

+            <summary>

+            Returns a constraint that tests whether the path provided 

+            is the same as an expected path after canonicalization.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.SubPath(System.String)">

+            <summary>

+            Returns a constraint that tests whether the path provided 

+            is the same path or under an expected path after canonicalization.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.SamePathOrUnder(System.String)">

+            <summary>

+            Returns a constraint that tests whether the path provided 

+            is the same path or under an expected path after canonicalization.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintFactory.InRange(System.IComparable,System.IComparable)">

+            <summary>

+            Returns a constraint that tests whether the actual value falls 

+            within a specified range.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.Not">

+            <summary>

+            Returns a ConstraintExpression that negates any

+            following constraint.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.No">

+            <summary>

+            Returns a ConstraintExpression that negates any

+            following constraint.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.All">

+            <summary>

+            Returns a ConstraintExpression, which will apply

+            the following constraint to all members of a collection,

+            succeeding if all of them succeed.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.Some">

+            <summary>

+            Returns a ConstraintExpression, which will apply

+            the following constraint to all members of a collection,

+            succeeding if at least one of them succeeds.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.None">

+            <summary>

+            Returns a ConstraintExpression, which will apply

+            the following constraint to all members of a collection,

+            succeeding if all of them fail.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.Length">

+            <summary>

+            Returns a new ConstraintExpression, which will apply the following

+            constraint to the Length property of the object being tested.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.Count">

+            <summary>

+            Returns a new ConstraintExpression, which will apply the following

+            constraint to the Count property of the object being tested.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.Message">

+            <summary>

+            Returns a new ConstraintExpression, which will apply the following

+            constraint to the Message property of the object being tested.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.InnerException">

+            <summary>

+            Returns a new ConstraintExpression, which will apply the following

+            constraint to the InnerException property of the object being tested.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.Null">

+            <summary>

+            Returns a constraint that tests for null

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.True">

+            <summary>

+            Returns a constraint that tests for True

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.False">

+            <summary>

+            Returns a constraint that tests for False

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.NaN">

+            <summary>

+            Returns a constraint that tests for NaN

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.Empty">

+            <summary>

+            Returns a constraint that tests for empty

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.Unique">

+            <summary>

+            Returns a constraint that tests whether a collection 

+            contains all unique items.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.BinarySerializable">

+            <summary>

+            Returns a constraint that tests whether an object graph is serializable in binary format.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.XmlSerializable">

+            <summary>

+            Returns a constraint that tests whether an object graph is serializable in xml format.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintFactory.Ordered">

+            <summary>

+            Returns a constraint that tests whether a collection is ordered

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ConstraintOperator">

+            <summary>

+            The ConstraintOperator class is used internally by a

+            ConstraintBuilder to represent an operator that 

+            modifies or combines constraints. 

+            

+            Constraint operators use left and right precedence

+            values to determine whether the top operator on the

+            stack should be reduced before pushing a new operator.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.ConstraintOperator.left_precedence">

+            <summary>

+            The precedence value used when the operator

+            is about to be pushed to the stack.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.ConstraintOperator.right_precedence">

+            <summary>

+            The precedence value used when the operator

+            is on the top of the stack.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ConstraintOperator.Reduce(NUnit.Framework.Constraints.ConstraintBuilder.ConstraintStack)">

+            <summary>

+            Reduce produces a constraint from the operator and 

+            any arguments. It takes the arguments from the constraint 

+            stack and pushes the resulting constraint on it.

+            </summary>

+            <param name="stack"></param>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintOperator.LeftContext">

+            <summary>

+            The syntax element preceding this operator

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintOperator.RightContext">

+            <summary>

+            The syntax element folowing this operator

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintOperator.LeftPrecedence">

+            <summary>

+            The precedence value used when the operator

+            is about to be pushed to the stack.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ConstraintOperator.RightPrecedence">

+            <summary>

+            The precedence value used when the operator

+            is on the top of the stack.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.PrefixOperator">

+            <summary>

+            PrefixOperator takes a single constraint and modifies

+            it's action in some way.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PrefixOperator.Reduce(NUnit.Framework.Constraints.ConstraintBuilder.ConstraintStack)">

+            <summary>

+            Reduce produces a constraint from the operator and 

+            any arguments. It takes the arguments from the constraint 

+            stack and pushes the resulting constraint on it.

+            </summary>

+            <param name="stack"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PrefixOperator.ApplyPrefix(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Returns the constraint created by applying this

+            prefix to another constraint.

+            </summary>

+            <param name="constraint"></param>

+            <returns></returns>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.NotOperator">

+            <summary>

+            Negates the test of the constraint it wraps.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NotOperator.#ctor">

+            <summary>

+            Constructs a new NotOperator

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NotOperator.ApplyPrefix(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Returns a NotConstraint applied to its argument.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.CollectionOperator">

+            <summary>

+            Abstract base for operators that indicate how to

+            apply a constraint to items in a collection.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.CollectionOperator.#ctor">

+            <summary>

+            Constructs a CollectionOperator

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.AllOperator">

+            <summary>

+            Represents a constraint that succeeds if all the 

+            members of a collection match a base constraint.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AllOperator.ApplyPrefix(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Returns a constraint that will apply the argument

+            to the members of a collection, succeeding if

+            they all succeed.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.SomeOperator">

+            <summary>

+            Represents a constraint that succeeds if any of the 

+            members of a collection match a base constraint.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SomeOperator.ApplyPrefix(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Returns a constraint that will apply the argument

+            to the members of a collection, succeeding if

+            any of them succeed.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.NoneOperator">

+            <summary>

+            Represents a constraint that succeeds if none of the 

+            members of a collection match a base constraint.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NoneOperator.ApplyPrefix(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Returns a constraint that will apply the argument

+            to the members of a collection, succeeding if

+            none of them succeed.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.WithOperator">

+            <summary>

+            Represents a constraint that simply wraps the

+            constraint provided as an argument, without any

+            further functionality, but which modifes the

+            order of evaluation because of its precedence.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.WithOperator.#ctor">

+            <summary>

+            Constructor for the WithOperator

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.WithOperator.ApplyPrefix(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Returns a constraint that wraps its argument

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.SelfResolvingOperator">

+            <summary>

+            Abstract base class for operators that are able to reduce to a 

+            constraint whether or not another syntactic element follows.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.PropOperator">

+            <summary>

+            Operator used to test for the presence of a named Property

+            on an object and optionally apply further tests to the

+            value of that property.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PropOperator.#ctor(System.String)">

+            <summary>

+            Constructs a PropOperator for a particular named property

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PropOperator.Reduce(NUnit.Framework.Constraints.ConstraintBuilder.ConstraintStack)">

+            <summary>

+            Reduce produces a constraint from the operator and 

+            any arguments. It takes the arguments from the constraint 

+            stack and pushes the resulting constraint on it.

+            </summary>

+            <param name="stack"></param>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.PropOperator.Name">

+            <summary>

+            Gets the name of the property to which the operator applies

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.AttributeOperator">

+            <summary>

+            Operator that tests for the presence of a particular attribute

+            on a type and optionally applies further tests to the attribute.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AttributeOperator.#ctor(System.Type)">

+            <summary>

+            Construct an AttributeOperator for a particular Type

+            </summary>

+            <param name="type">The Type of attribute tested</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AttributeOperator.Reduce(NUnit.Framework.Constraints.ConstraintBuilder.ConstraintStack)">

+            <summary>

+            Reduce produces a constraint from the operator and 

+            any arguments. It takes the arguments from the constraint 

+            stack and pushes the resulting constraint on it.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ThrowsOperator">

+            <summary>

+            Operator that tests that an exception is thrown and

+            optionally applies further tests to the exception.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ThrowsOperator.#ctor">

+            <summary>

+            Construct a ThrowsOperator

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ThrowsOperator.Reduce(NUnit.Framework.Constraints.ConstraintBuilder.ConstraintStack)">

+            <summary>

+            Reduce produces a constraint from the operator and 

+            any arguments. It takes the arguments from the constraint 

+            stack and pushes the resulting constraint on it.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.BinaryOperator">

+            <summary>

+            Abstract base class for all binary operators

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.BinaryOperator.Reduce(NUnit.Framework.Constraints.ConstraintBuilder.ConstraintStack)">

+            <summary>

+            Reduce produces a constraint from the operator and 

+            any arguments. It takes the arguments from the constraint 

+            stack and pushes the resulting constraint on it.

+            </summary>

+            <param name="stack"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.BinaryOperator.ApplyOperator(NUnit.Framework.Constraints.Constraint,NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Abstract method that produces a constraint by applying

+            the operator to its left and right constraint arguments.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.BinaryOperator.LeftPrecedence">

+            <summary>

+            Gets the left precedence of the operator

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.BinaryOperator.RightPrecedence">

+            <summary>

+            Gets the right precedence of the operator

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.AndOperator">

+            <summary>

+            Operator that requires both it's arguments to succeed

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AndOperator.#ctor">

+            <summary>

+            Construct an AndOperator

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AndOperator.ApplyOperator(NUnit.Framework.Constraints.Constraint,NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Apply the operator to produce an AndConstraint

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.OrOperator">

+            <summary>

+            Operator that requires at least one of it's arguments to succeed

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.OrOperator.#ctor">

+            <summary>

+            Construct an OrOperator

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.OrOperator.ApplyOperator(NUnit.Framework.Constraints.Constraint,NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Apply the operator to produce an OrConstraint

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ContainsConstraint">

+            <summary>

+            ContainsConstraint tests a whether a string contains a substring

+            or a collection contains an object. It postpones the decision of

+            which test to use until the type of the actual argument is known.

+            This allows testing whether a string is contained in a collection

+            or as a substring of another string using the same syntax.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ContainsConstraint.#ctor(System.Object)">

+            <summary>

+            Initializes a new instance of the <see cref="T:ContainsConstraint"/> class.

+            </summary>

+            <param name="expected">The expected.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ContainsConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ContainsConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ContainsConstraint.Using(System.Collections.IComparer)">

+            <summary>

+            Flag the constraint to use the supplied IComparer object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ContainsConstraint.Using``1(System.Collections.Generic.IComparer{``0})">

+            <summary>

+            Flag the constraint to use the supplied IComparer object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ContainsConstraint.Using``1(System.Comparison{``0})">

+            <summary>

+            Flag the constraint to use the supplied Comparison object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ContainsConstraint.Using(System.Collections.IEqualityComparer)">

+            <summary>

+            Flag the constraint to use the supplied IEqualityComparer object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ContainsConstraint.Using``1(System.Collections.Generic.IEqualityComparer{``0})">

+            <summary>

+            Flag the constraint to use the supplied IEqualityComparer object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ContainsConstraint.IgnoreCase">

+            <summary>

+            Flag the constraint to ignore case and return self.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.DelayedConstraint">

+            <summary>

+             Applies a delay to the match so that a match can be evaluated in the future.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.DelayedConstraint.#ctor(NUnit.Framework.Constraints.Constraint,System.Int32)">

+            <summary>

+             Creates a new DelayedConstraint

+            </summary>

+            <param name="baseConstraint">The inner constraint two decorate</param>

+            <param name="delayInMilliseconds">The time interval after which the match is performed</param>

+            <exception cref="T:System.InvalidOperationException">If the value of <paramref name="delayInMilliseconds"/> is less than 0</exception>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.DelayedConstraint.#ctor(NUnit.Framework.Constraints.Constraint,System.Int32,System.Int32)">

+            <summary>

+             Creates a new DelayedConstraint

+            </summary>

+            <param name="baseConstraint">The inner constraint two decorate</param>

+            <param name="delayInMilliseconds">The time interval after which the match is performed</param>

+            <param name="pollingInterval">The time interval used for polling</param>

+            <exception cref="T:System.InvalidOperationException">If the value of <paramref name="delayInMilliseconds"/> is less than 0</exception>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.DelayedConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for if the base constraint fails, false if it succeeds</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.DelayedConstraint.Matches(NUnit.Framework.Constraints.ActualValueDelegate)">

+            <summary>

+            Test whether the constraint is satisfied by a delegate

+            </summary>

+            <param name="del">The delegate whose value is to be tested</param>

+            <returns>True for if the base constraint fails, false if it succeeds</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.DelayedConstraint.Matches``1(``0@)">

+            <summary>

+            Test whether the constraint is satisfied by a given reference.

+            Overridden to wait for the specified delay period before

+            calling the base constraint with the dereferenced value.

+            </summary>

+            <param name="actual">A reference to the value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.DelayedConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.DelayedConstraint.WriteActualValueTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the actual value for a failing constraint test to a MessageWriter.

+            </summary>

+            <param name="writer">The writer on which the actual value is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.DelayedConstraint.GetStringRepresentation">

+            <summary>

+            Returns the string representation of the constraint.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.EmptyDirectoryContraint">

+            <summary>

+            EmptyDirectoryConstraint is used to test that a directory is empty

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EmptyDirectoryContraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EmptyDirectoryContraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EmptyDirectoryContraint.WriteActualValueTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the actual value for a failing constraint test to a

+            MessageWriter. The default implementation simply writes

+            the raw value of actual, leaving it to the writer to

+            perform any formatting.

+            </summary>

+            <param name="writer">The writer on which the actual value is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.EmptyConstraint">

+            <summary>

+            EmptyConstraint tests a whether a string or collection is empty,

+            postponing the decision about which test is applied until the

+            type of the actual argument is known.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EmptyConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EmptyConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.EqualConstraint">

+            <summary>

+            EqualConstraint is able to compare an actual value with the

+            expected value provided in its constructor. Two objects are 

+            considered equal if both are null, or if both have the same 

+            value. NUnit has special semantics for some object types.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.EqualConstraint.clipStrings">

+            <summary>

+            If true, strings in error messages will be clipped

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.EqualConstraint.comparer">

+            <summary>

+            NUnitEqualityComparer used to test equality.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.#ctor(System.Object)">

+            <summary>

+            Initializes a new instance of the <see cref="T:NUnit.Framework.Constraints.EqualConstraint"/> class.

+            </summary>

+            <param name="expected">The expected value.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.Within(System.Object)">

+            <summary>

+            Flag the constraint to use a tolerance when determining equality.

+            </summary>

+            <param name="amount">Tolerance value to be used</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.Comparer(System.Collections.IComparer)">

+            <summary>

+            Flag the constraint to use the supplied IComparer object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.Using(System.Collections.IComparer)">

+            <summary>

+            Flag the constraint to use the supplied IComparer object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.Using``1(System.Collections.Generic.IComparer{``0})">

+            <summary>

+            Flag the constraint to use the supplied IComparer object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.Using``1(System.Comparison{``0})">

+            <summary>

+            Flag the constraint to use the supplied Comparison object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.Using(System.Collections.IEqualityComparer)">

+            <summary>

+            Flag the constraint to use the supplied IEqualityComparer object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.Using``1(System.Collections.Generic.IEqualityComparer{``0})">

+            <summary>

+            Flag the constraint to use the supplied IEqualityComparer object.

+            </summary>

+            <param name="comparer">The IComparer object to use.</param>

+            <returns>Self.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.WriteMessageTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a failure message. Overridden to provide custom 

+            failure messages for EqualConstraint.

+            </summary>

+            <param name="writer">The MessageWriter to write to</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write description of this constraint

+            </summary>

+            <param name="writer">The MessageWriter to write to</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.DisplayCollectionDifferences(NUnit.Framework.Constraints.MessageWriter,System.Collections.ICollection,System.Collections.ICollection,System.Int32)">

+            <summary>

+            Display the failure information for two collections that did not match.

+            </summary>

+            <param name="writer">The MessageWriter on which to display</param>

+            <param name="expected">The expected collection.</param>

+            <param name="actual">The actual collection</param>

+            <param name="depth">The depth of this failure in a set of nested collections</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.DisplayCollectionTypesAndSizes(NUnit.Framework.Constraints.MessageWriter,System.Collections.ICollection,System.Collections.ICollection,System.Int32)">

+            <summary>

+            Displays a single line showing the types and sizes of the expected

+            and actual collections or arrays. If both are identical, the value is 

+            only shown once.

+            </summary>

+            <param name="writer">The MessageWriter on which to display</param>

+            <param name="expected">The expected collection or array</param>

+            <param name="actual">The actual collection or array</param>

+            <param name="indent">The indentation level for the message line</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualConstraint.DisplayFailurePoint(NUnit.Framework.Constraints.MessageWriter,System.Collections.ICollection,System.Collections.ICollection,System.Int32,System.Int32)">

+            <summary>

+            Displays a single line showing the point in the expected and actual

+            arrays at which the comparison failed. If the arrays have different

+            structures or dimensions, both values are shown.

+            </summary>

+            <param name="writer">The MessageWriter on which to display</param>

+            <param name="expected">The expected array</param>

+            <param name="actual">The actual array</param>

+            <param name="failurePoint">Index of the failure point in the underlying collections</param>

+            <param name="indent">The indentation level for the message line</param>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.EqualConstraint.IgnoreCase">

+            <summary>

+            Flag the constraint to ignore case and return self.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.EqualConstraint.NoClip">

+            <summary>

+            Flag the constraint to suppress string clipping 

+            and return self.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.EqualConstraint.AsCollection">

+            <summary>

+            Flag the constraint to compare arrays as collections

+            and return self.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.EqualConstraint.Ulps">

+            <summary>

+            Switches the .Within() modifier to interpret its tolerance as

+            a distance in representable values (see remarks).

+            </summary>

+            <returns>Self.</returns>

+            <remarks>

+            Ulp stands for "unit in the last place" and describes the minimum

+            amount a given value can change. For any integers, an ulp is 1 whole

+            digit. For floating point values, the accuracy of which is better

+            for smaller numbers and worse for larger numbers, an ulp depends

+            on the size of the number. Using ulps for comparison of floating

+            point results instead of fixed tolerances is safer because it will

+            automatically compensate for the added inaccuracy of larger numbers.

+            </remarks>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.EqualConstraint.Percent">

+            <summary>

+            Switches the .Within() modifier to interpret its tolerance as

+            a percentage that the actual values is allowed to deviate from

+            the expected value.

+            </summary>

+            <returns>Self</returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.EqualConstraint.Days">

+            <summary>

+            Causes the tolerance to be interpreted as a TimeSpan in days.

+            </summary>

+            <returns>Self</returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.EqualConstraint.Hours">

+            <summary>

+            Causes the tolerance to be interpreted as a TimeSpan in hours.

+            </summary>

+            <returns>Self</returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.EqualConstraint.Minutes">

+            <summary>

+            Causes the tolerance to be interpreted as a TimeSpan in minutes.

+            </summary>

+            <returns>Self</returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.EqualConstraint.Seconds">

+            <summary>

+            Causes the tolerance to be interpreted as a TimeSpan in seconds.

+            </summary>

+            <returns>Self</returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.EqualConstraint.Milliseconds">

+            <summary>

+            Causes the tolerance to be interpreted as a TimeSpan in milliseconds.

+            </summary>

+            <returns>Self</returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.EqualConstraint.Ticks">

+            <summary>

+            Causes the tolerance to be interpreted as a TimeSpan in clock ticks.

+            </summary>

+            <returns>Self</returns>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.EqualityAdapter">

+            <summary>

+            EqualityAdapter class handles all equality comparisons

+            that use an IEqualityComparer, IEqualityComparer&lt;T&gt;

+            or a ComparisonAdapter.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualityAdapter.ObjectsEqual(System.Object,System.Object)">

+            <summary>

+            Compares two objects, returning true if they are equal

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualityAdapter.For(System.Collections.IComparer)">

+            <summary>

+            Returns an EqualityAdapter that wraps an IComparer.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualityAdapter.For(System.Collections.IEqualityComparer)">

+            <summary>

+            Returns an EqualityAdapter that wraps an IEqualityComparer.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualityAdapter.For``1(System.Collections.Generic.IEqualityComparer{``0})">

+            <summary>

+            Returns an EqualityAdapter that wraps an IEqualityComparer&lt;T&gt;.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualityAdapter.For``1(System.Collections.Generic.IComparer{``0})">

+            <summary>

+            Returns an EqualityAdapter that wraps an IComparer&lt;T&gt;.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EqualityAdapter.For``1(System.Comparison{``0})">

+            <summary>

+            Returns an EqualityAdapter that wraps a Comparison&lt;T&gt;.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.FloatingPointNumerics">

+            <summary>Helper routines for working with floating point numbers</summary>

+            <remarks>

+              <para>

+                The floating point comparison code is based on this excellent article:

+                http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

+              </para>

+              <para>

+                "ULP" means Unit in the Last Place and in the context of this library refers to

+                the distance between two adjacent floating point numbers. IEEE floating point

+                numbers can only represent a finite subset of natural numbers, with greater

+                accuracy for smaller numbers and lower accuracy for very large numbers.

+              </para>

+              <para>

+                If a comparison is allowed "2 ulps" of deviation, that means the values are

+                allowed to deviate by up to 2 adjacent floating point values, which might be

+                as low as 0.0000001 for small numbers or as high as 10.0 for large numbers.

+              </para>

+            </remarks>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.FloatingPointNumerics.AreAlmostEqualUlps(System.Single,System.Single,System.Int32)">

+            <summary>Compares two floating point values for equality</summary>

+            <param name="left">First floating point value to be compared</param>

+            <param name="right">Second floating point value t be compared</param>

+            <param name="maxUlps">

+              Maximum number of representable floating point values that are allowed to

+              be between the left and the right floating point values

+            </param>

+            <returns>True if both numbers are equal or close to being equal</returns>

+            <remarks>

+              <para>

+                Floating point values can only represent a finite subset of natural numbers.

+                For example, the values 2.00000000 and 2.00000024 can be stored in a float,

+                but nothing inbetween them.

+              </para>

+              <para>

+                This comparison will count how many possible floating point values are between

+                the left and the right number. If the number of possible values between both

+                numbers is less than or equal to maxUlps, then the numbers are considered as

+                being equal.

+              </para>

+              <para>

+                Implementation partially follows the code outlined here:

+                http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/

+              </para>

+            </remarks>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.FloatingPointNumerics.AreAlmostEqualUlps(System.Double,System.Double,System.Int64)">

+            <summary>Compares two double precision floating point values for equality</summary>

+            <param name="left">First double precision floating point value to be compared</param>

+            <param name="right">Second double precision floating point value t be compared</param>

+            <param name="maxUlps">

+              Maximum number of representable double precision floating point values that are

+              allowed to be between the left and the right double precision floating point values

+            </param>

+            <returns>True if both numbers are equal or close to being equal</returns>

+            <remarks>

+              <para>

+                Double precision floating point values can only represent a limited series of

+                natural numbers. For example, the values 2.0000000000000000 and 2.0000000000000004

+                can be stored in a double, but nothing inbetween them.

+              </para>

+              <para>

+                This comparison will count how many possible double precision floating point

+                values are between the left and the right number. If the number of possible

+                values between both numbers is less than or equal to maxUlps, then the numbers

+                are considered as being equal.

+              </para>

+              <para>

+                Implementation partially follows the code outlined here:

+                http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/

+              </para>

+            </remarks>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.FloatingPointNumerics.ReinterpretAsInt(System.Single)">

+            <summary>

+              Reinterprets the memory contents of a floating point value as an integer value

+            </summary>

+            <param name="value">

+              Floating point value whose memory contents to reinterpret

+            </param>

+            <returns>

+              The memory contents of the floating point value interpreted as an integer

+            </returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.FloatingPointNumerics.ReinterpretAsLong(System.Double)">

+            <summary>

+              Reinterprets the memory contents of a double precision floating point

+              value as an integer value

+            </summary>

+            <param name="value">

+              Double precision floating point value whose memory contents to reinterpret

+            </param>

+            <returns>

+              The memory contents of the double precision floating point value

+              interpreted as an integer

+            </returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.FloatingPointNumerics.ReinterpretAsFloat(System.Int32)">

+            <summary>

+              Reinterprets the memory contents of an integer as a floating point value

+            </summary>

+            <param name="value">Integer value whose memory contents to reinterpret</param>

+            <returns>

+              The memory contents of the integer value interpreted as a floating point value

+            </returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.FloatingPointNumerics.ReinterpretAsDouble(System.Int64)">

+            <summary>

+              Reinterprets the memory contents of an integer value as a double precision

+              floating point value

+            </summary>

+            <param name="value">Integer whose memory contents to reinterpret</param>

+            <returns>

+              The memory contents of the integer interpreted as a double precision

+              floating point value

+            </returns>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.FloatingPointNumerics.FloatIntUnion">

+            <summary>Union of a floating point variable and an integer</summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.FloatingPointNumerics.FloatIntUnion.Float">

+            <summary>The union's value as a floating point variable</summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.FloatingPointNumerics.FloatIntUnion.Int">

+            <summary>The union's value as an integer</summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.FloatingPointNumerics.FloatIntUnion.UInt">

+            <summary>The union's value as an unsigned integer</summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.FloatingPointNumerics.DoubleLongUnion">

+            <summary>Union of a double precision floating point variable and a long</summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.FloatingPointNumerics.DoubleLongUnion.Double">

+            <summary>The union's value as a double precision floating point variable</summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.FloatingPointNumerics.DoubleLongUnion.Long">

+            <summary>The union's value as a long</summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.FloatingPointNumerics.DoubleLongUnion.ULong">

+            <summary>The union's value as an unsigned long</summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.MessageWriter">

+            <summary>

+            MessageWriter is the abstract base for classes that write

+            constraint descriptions and messages in some form. The

+            class has separate methods for writing various components

+            of a message, allowing implementations to tailor the

+            presentation as needed.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.#ctor">

+            <summary>

+            Construct a MessageWriter given a culture

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.WriteMessageLine(System.String,System.Object[])">

+            <summary>

+            Method to write single line  message with optional args, usually

+            written to precede the general failure message.

+            </summary>

+            <param name="message">The message to be written</param>

+            <param name="args">Any arguments used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.WriteMessageLine(System.Int32,System.String,System.Object[])">

+            <summary>

+            Method to write single line  message with optional args, usually

+            written to precede the general failure message, at a givel 

+            indentation level.

+            </summary>

+            <param name="level">The indentation level of the message</param>

+            <param name="message">The message to be written</param>

+            <param name="args">Any arguments used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.DisplayDifferences(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Display Expected and Actual lines for a constraint. This

+            is called by MessageWriter's default implementation of 

+            WriteMessageTo and provides the generic two-line display. 

+            </summary>

+            <param name="constraint">The constraint that failed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.DisplayDifferences(System.Object,System.Object)">

+            <summary>

+            Display Expected and Actual lines for given values. This

+            method may be called by constraints that need more control over

+            the display of actual and expected values than is provided

+            by the default implementation.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value causing the failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.DisplayDifferences(System.Object,System.Object,NUnit.Framework.Constraints.Tolerance)">

+            <summary>

+            Display Expected and Actual lines for given values, including

+            a tolerance value on the Expected line.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value causing the failure</param>

+            <param name="tolerance">The tolerance within which the test was made</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.DisplayStringDifferences(System.String,System.String,System.Int32,System.Boolean,System.Boolean)">

+            <summary>

+            Display the expected and actual string values on separate lines.

+            If the mismatch parameter is >=0, an additional line is displayed

+            line containing a caret that points to the mismatch point.

+            </summary>

+            <param name="expected">The expected string value</param>

+            <param name="actual">The actual string value</param>

+            <param name="mismatch">The point at which the strings don't match or -1</param>

+            <param name="ignoreCase">If true, case is ignored in locating the point where the strings differ</param>

+            <param name="clipping">If true, the strings should be clipped to fit the line</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.WriteConnector(System.String)">

+            <summary>

+            Writes the text for a connector.

+            </summary>

+            <param name="connector">The connector.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.WritePredicate(System.String)">

+            <summary>

+            Writes the text for a predicate.

+            </summary>

+            <param name="predicate">The predicate.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.WriteExpectedValue(System.Object)">

+            <summary>

+            Writes the text for an expected value.

+            </summary>

+            <param name="expected">The expected value.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.WriteModifier(System.String)">

+            <summary>

+            Writes the text for a modifier

+            </summary>

+            <param name="modifier">The modifier.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.WriteActualValue(System.Object)">

+            <summary>

+            Writes the text for an actual value.

+            </summary>

+            <param name="actual">The actual value.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.WriteValue(System.Object)">

+            <summary>

+            Writes the text for a generalized value.

+            </summary>

+            <param name="val">The value.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MessageWriter.WriteCollectionElements(System.Collections.ICollection,System.Int32,System.Int32)">

+            <summary>

+            Writes the text for a collection value,

+            starting at a particular point, to a max length

+            </summary>

+            <param name="collection">The collection containing elements to write.</param>

+            <param name="start">The starting point of the elements to write</param>

+            <param name="max">The maximum number of elements to write</param>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.MessageWriter.MaxLineLength">

+            <summary>

+            Abstract method to get the max line length

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.MsgUtils">

+            <summary>

+            Static methods used in creating messages

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.MsgUtils.ELLIPSIS">

+            <summary>

+            Static string used when strings are clipped

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MsgUtils.GetTypeRepresentation(System.Object)">

+            <summary>

+            Returns the representation of a type as used in NUnitLite.

+            This is the same as Type.ToString() except for arrays,

+            which are displayed with their declared sizes.

+            </summary>

+            <param name="obj"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MsgUtils.EscapeControlChars(System.String)">

+            <summary>

+            Converts any control characters in a string 

+            to their escaped representation.

+            </summary>

+            <param name="s">The string to be converted</param>

+            <returns>The converted string</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MsgUtils.GetArrayIndicesAsString(System.Int32[])">

+            <summary>

+            Return the a string representation for a set of indices into an array

+            </summary>

+            <param name="indices">Array of indices for which a string is needed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MsgUtils.GetArrayIndicesFromCollectionIndex(System.Collections.ICollection,System.Int32)">

+            <summary>

+            Get an array of indices representing the point in a collection or

+            array corresponding to a single int index into the collection.

+            </summary>

+            <param name="collection">The collection to which the indices apply</param>

+            <param name="index">Index in the collection</param>

+            <returns>Array of indices</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MsgUtils.ClipString(System.String,System.Int32,System.Int32)">

+            <summary>

+            Clip a string to a given length, starting at a particular offset, returning the clipped

+            string with ellipses representing the removed parts

+            </summary>

+            <param name="s">The string to be clipped</param>

+            <param name="maxStringLength">The maximum permitted length of the result string</param>

+            <param name="clipStart">The point at which to start clipping</param>

+            <returns>The clipped string</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MsgUtils.ClipExpectedAndActual(System.String@,System.String@,System.Int32,System.Int32)">

+            <summary>

+            Clip the expected and actual strings in a coordinated fashion, 

+            so that they may be displayed together.

+            </summary>

+            <param name="expected"></param>

+            <param name="actual"></param>

+            <param name="maxDisplayLength"></param>

+            <param name="mismatch"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.MsgUtils.FindMismatchPosition(System.String,System.String,System.Int32,System.Boolean)">

+            <summary>

+            Shows the position two strings start to differ.  Comparison 

+            starts at the start index.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The actual string</param>

+            <param name="istart">The index in the strings at which comparison should start</param>

+            <param name="ignoreCase">Boolean indicating whether case should be ignored</param>

+            <returns>-1 if no mismatch found, or the index where mismatch found</returns>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.Numerics">

+            <summary>

+            The Numerics class contains common operations on numeric values.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Numerics.IsNumericType(System.Object)">

+            <summary>

+            Checks the type of the object, returning true if

+            the object is a numeric type.

+            </summary>

+            <param name="obj">The object to check</param>

+            <returns>true if the object is a numeric type</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Numerics.IsFloatingPointNumeric(System.Object)">

+            <summary>

+            Checks the type of the object, returning true if

+            the object is a floating point numeric type.

+            </summary>

+            <param name="obj">The object to check</param>

+            <returns>true if the object is a floating point numeric type</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Numerics.IsFixedPointNumeric(System.Object)">

+            <summary>

+            Checks the type of the object, returning true if

+            the object is a fixed point numeric type.

+            </summary>

+            <param name="obj">The object to check</param>

+            <returns>true if the object is a fixed point numeric type</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Numerics.AreEqual(System.Object,System.Object,NUnit.Framework.Constraints.Tolerance@)">

+            <summary>

+            Test two numeric values for equality, performing the usual numeric 

+            conversions and using a provided or default tolerance. If the tolerance 

+            provided is Empty, this method may set it to a default tolerance.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="tolerance">A reference to the tolerance in effect</param>

+            <returns>True if the values are equal</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Numerics.Compare(System.Object,System.Object)">

+            <summary>

+            Compare two numeric values, performing the usual numeric conversions.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <returns>The relationship of the values to each other</returns>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.NUnitComparer">

+            <summary>

+            NUnitComparer encapsulates NUnit's default behavior

+            in comparing two objects.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NUnitComparer.Compare(System.Object,System.Object)">

+            <summary>

+            Compares two objects

+            </summary>

+            <param name="x"></param>

+            <param name="y"></param>

+            <returns></returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.NUnitComparer.Default">

+            <summary>

+            Returns the default NUnitComparer.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.NUnitEqualityComparer">

+            <summary>

+            NUnitEqualityComparer encapsulates NUnit's handling of

+            equality tests between objects.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.NUnitEqualityComparer.caseInsensitive">

+            <summary>

+            If true, all string comparisons will ignore case

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.NUnitEqualityComparer.compareAsCollection">

+            <summary>

+            If true, arrays will be treated as collections, allowing

+            those of different dimensions to be compared

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.NUnitEqualityComparer.tolerance">

+            <summary>

+            If non-zero, equality comparisons within the specified 

+            tolerance will succeed.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.NUnitEqualityComparer.externalComparer">

+            <summary>

+            Comparison object used in comparisons for some constraints.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NUnitEqualityComparer.ObjectsEqual(System.Object,System.Object)">

+            <summary>

+            Compares two objects for equality.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NUnitEqualityComparer.ArraysEqual(System.Array,System.Array)">

+            <summary>

+            Helper method to compare two arrays

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NUnitEqualityComparer.DirectoriesEqual(System.IO.DirectoryInfo,System.IO.DirectoryInfo)">

+            <summary>

+            Method to compare two DirectoryInfo objects

+            </summary>

+            <param name="x">first directory to compare</param>

+            <param name="y">second directory to compare</param>

+            <returns>true if equivalent, false if not</returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.NUnitEqualityComparer.Default">

+            <summary>

+            Returns the default NUnitEqualityComparer

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.NUnitEqualityComparer.IgnoreCase">

+            <summary>

+            Gets and sets a flag indicating whether case should

+            be ignored in determining equality.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.NUnitEqualityComparer.CompareAsCollection">

+            <summary>

+            Gets and sets a flag indicating that arrays should be

+            compared as collections, without regard to their shape.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.NUnitEqualityComparer.ExternalComparer">

+            <summary>

+            Gets and sets an external comparer to be used to

+            test for equality. It is applied to members of

+            collections, in place of NUnit's own logic.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.NUnitEqualityComparer.Tolerance">

+            <summary>

+            Gets and sets a tolerance used to compare objects of 

+            certin types.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.NUnitEqualityComparer.FailurePoints">

+            <summary>

+            Gets the list of failure points for the last Match performed.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.PathConstraint">

+            <summary>

+            PathConstraint serves as the abstract base of constraints

+            that operate on paths and provides several helper methods.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.PathConstraint.expectedPath">

+            <summary>

+            The expected path used in the constraint

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.PathConstraint.actualPath">

+            <summary>

+            The actual path being tested

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.PathConstraint.caseInsensitive">

+            <summary>

+            Flag indicating whether a caseInsensitive comparison should be made

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PathConstraint.#ctor(System.String)">

+            <summary>

+            Construct a PathConstraint for a give expected path

+            </summary>

+            <param name="expected">The expected path</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PathConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PathConstraint.IsMatch(System.String,System.String)">

+            <summary>

+            Returns true if the expected path and actual path match

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PathConstraint.GetStringRepresentation">

+            <summary>

+            Returns the string representation of this constraint

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PathConstraint.Canonicalize(System.String)">

+            <summary>

+            Canonicalize the provided path

+            </summary>

+            <param name="path"></param>

+            <returns>The path in standardized form</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PathConstraint.IsSamePath(System.String,System.String,System.Boolean)">

+            <summary>

+            Test whether two paths are the same

+            </summary>

+            <param name="path1">The first path</param>

+            <param name="path2">The second path</param>

+            <param name="ignoreCase">Indicates whether case should be ignored</param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PathConstraint.IsSubPath(System.String,System.String,System.Boolean)">

+            <summary>

+            Test whether one path is under another path

+            </summary>

+            <param name="path1">The first path - supposed to be the parent path</param>

+            <param name="path2">The second path - supposed to be the child path</param>

+            <param name="ignoreCase">Indicates whether case should be ignored</param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PathConstraint.IsSamePathOrUnder(System.String,System.String)">

+            <summary>

+            Test whether one path is the same as or under another path

+            </summary>

+            <param name="path1">The first path - supposed to be the parent path</param>

+            <param name="path2">The second path - supposed to be the child path</param>

+            <returns></returns>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.PathConstraint.IgnoreCase">

+            <summary>

+            Modifies the current instance to be case-insensitve

+            and returns it.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.PathConstraint.RespectCase">

+            <summary>

+            Modifies the current instance to be case-sensitve

+            and returns it.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.SamePathConstraint">

+            <summary>

+            Summary description for SamePathConstraint.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SamePathConstraint.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the <see cref="T:SamePathConstraint"/> class.

+            </summary>

+            <param name="expected">The expected path</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SamePathConstraint.IsMatch(System.String,System.String)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="expectedPath">The expected path</param>

+            <param name="actualPath">The actual path</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SamePathConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.SubPathConstraint">

+            <summary>

+            SubPathConstraint tests that the actual path is under the expected path

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SubPathConstraint.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the <see cref="T:SubPathConstraint"/> class.

+            </summary>

+            <param name="expected">The expected path</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SubPathConstraint.IsMatch(System.String,System.String)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="expectedPath">The expected path</param>

+            <param name="actualPath">The actual path</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SubPathConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.SamePathOrUnderConstraint">

+            <summary>

+            SamePathOrUnderConstraint tests that one path is under another

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SamePathOrUnderConstraint.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the <see cref="T:SamePathOrUnderConstraint"/> class.

+            </summary>

+            <param name="expected">The expected path</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SamePathOrUnderConstraint.IsMatch(System.String,System.String)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="expectedPath">The expected path</param>

+            <param name="actualPath">The actual path</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SamePathOrUnderConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.PredicateConstraint`1">

+            <summary>

+            Predicate constraint wraps a Predicate in a constraint,

+            returning success if the predicate is true.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PredicateConstraint`1.#ctor(System.Predicate{`0})">

+            <summary>

+            Construct a PredicateConstraint from a predicate

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PredicateConstraint`1.Matches(System.Object)">

+            <summary>

+            Determines whether the predicate succeeds when applied

+            to the actual value.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PredicateConstraint`1.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Writes the description to a MessageWriter

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.NotConstraint">

+            <summary>

+            NotConstraint negates the effect of some other constraint

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NotConstraint.#ctor(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Initializes a new instance of the <see cref="T:NotConstraint"/> class.

+            </summary>

+            <param name="baseConstraint">The base constraint to be negated.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NotConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for if the base constraint fails, false if it succeeds</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NotConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NotConstraint.WriteActualValueTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the actual value for a failing constraint test to a MessageWriter.

+            </summary>

+            <param name="writer">The writer on which the actual value is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.AllItemsConstraint">

+            <summary>

+            AllItemsConstraint applies another constraint to each

+            item in a collection, succeeding if they all succeed.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AllItemsConstraint.#ctor(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Construct an AllItemsConstraint on top of an existing constraint

+            </summary>

+            <param name="itemConstraint"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AllItemsConstraint.Matches(System.Object)">

+            <summary>

+            Apply the item constraint to each item in the collection,

+            failing if any item fails.

+            </summary>

+            <param name="actual"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AllItemsConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a description of this constraint to a MessageWriter

+            </summary>

+            <param name="writer"></param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.SomeItemsConstraint">

+            <summary>

+            SomeItemsConstraint applies another constraint to each

+            item in a collection, succeeding if any of them succeeds.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SomeItemsConstraint.#ctor(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Construct a SomeItemsConstraint on top of an existing constraint

+            </summary>

+            <param name="itemConstraint"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SomeItemsConstraint.Matches(System.Object)">

+            <summary>

+            Apply the item constraint to each item in the collection,

+            succeeding if any item succeeds.

+            </summary>

+            <param name="actual"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SomeItemsConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a description of this constraint to a MessageWriter

+            </summary>

+            <param name="writer"></param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.NoItemConstraint">

+            <summary>

+            NoItemConstraint applies another constraint to each

+            item in a collection, failing if any of them succeeds.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NoItemConstraint.#ctor(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Construct a SomeItemsConstraint on top of an existing constraint

+            </summary>

+            <param name="itemConstraint"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NoItemConstraint.Matches(System.Object)">

+            <summary>

+            Apply the item constraint to each item in the collection,

+            failing if any item fails.

+            </summary>

+            <param name="actual"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NoItemConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a description of this constraint to a MessageWriter

+            </summary>

+            <param name="writer"></param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.PropertyExistsConstraint">

+            <summary>

+            PropertyExistsConstraint tests that a named property

+            exists on the object provided through Match.

+            

+            Originally, PropertyConstraint provided this feature

+            in addition to making optional tests on the vaue

+            of the property. The two constraints are now separate.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PropertyExistsConstraint.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the <see cref="T:PropertyExistConstraint"/> class.

+            </summary>

+            <param name="name">The name of the property.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PropertyExistsConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the property exists for a given object

+            </summary>

+            <param name="actual">The object to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PropertyExistsConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PropertyExistsConstraint.WriteActualValueTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the actual value for a failing constraint test to a

+            MessageWriter.

+            </summary>

+            <param name="writer">The writer on which the actual value is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PropertyExistsConstraint.GetStringRepresentation">

+            <summary>

+            Returns the string representation of the constraint.

+            </summary>

+            <returns></returns>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.PropertyConstraint">

+            <summary>

+            PropertyConstraint extracts a named property and uses

+            its value as the actual value for a chained constraint.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PropertyConstraint.#ctor(System.String,NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Initializes a new instance of the <see cref="T:PropertyConstraint"/> class.

+            </summary>

+            <param name="name">The name.</param>

+            <param name="baseConstraint">The constraint to apply to the property.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PropertyConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PropertyConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PropertyConstraint.WriteActualValueTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the actual value for a failing constraint test to a

+            MessageWriter. The default implementation simply writes

+            the raw value of actual, leaving it to the writer to

+            perform any formatting.

+            </summary>

+            <param name="writer">The writer on which the actual value is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.PropertyConstraint.GetStringRepresentation">

+            <summary>

+            Returns the string representation of the constraint.

+            </summary>

+            <returns></returns>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.RangeConstraint">

+            <summary>

+            RangeConstraint tests whethe two values are within a 

+            specified range.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.RangeConstraint.#ctor(System.IComparable,System.IComparable)">

+            <summary>

+            Initializes a new instance of the <see cref="T:RangeConstraint"/> class.

+            </summary>

+            <param name="from">From.</param>

+            <param name="to">To.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.RangeConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.RangeConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.RangeConstraint.Using(System.Collections.IComparer)">

+            <summary>

+            Modifies the constraint to use an IComparer and returns self.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.RangeConstraint.Using``1(System.Collections.Generic.IComparer{``0})">

+            <summary>

+            Modifies the constraint to use an IComparer&lt;T&gt; and returns self.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.RangeConstraint.Using``1(System.Comparison{``0})">

+            <summary>

+            Modifies the constraint to use a Comparison&lt;T&gt; and returns self.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ResolvableConstraintExpression">

+            <summary>

+            ResolvableConstraintExpression is used to represent a compound

+            constraint being constructed at a point where the last operator

+            may either terminate the expression or may have additional 

+            qualifying constraints added to it. 

+            

+            It is used, for example, for a Property element or for

+            an Exception element, either of which may be optionally

+            followed by constraints that apply to the property or 

+            exception.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ResolvableConstraintExpression.#ctor">

+            <summary>

+            Create a new instance of ResolvableConstraintExpression

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ResolvableConstraintExpression.#ctor(NUnit.Framework.Constraints.ConstraintBuilder)">

+            <summary>

+            Create a new instance of ResolvableConstraintExpression,

+            passing in a pre-populated ConstraintBuilder.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ResolvableConstraintExpression.NUnit#Framework#Constraints#IResolveConstraint#Resolve">

+            <summary>

+            Resolve the current expression to a Constraint

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ResolvableConstraintExpression.And">

+            <summary>

+            Appends an And Operator to the expression

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ResolvableConstraintExpression.Or">

+            <summary>

+            Appends an Or operator to the expression.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ReusableConstraint">

+            <summary>

+            ReusableConstraint wraps a resolved constraint so that it

+            may be saved and reused as needed.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ReusableConstraint.#ctor(NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Construct a ReusableConstraint

+            </summary>

+            <param name="c">The constraint or expression to be reused</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ReusableConstraint.op_Implicit(NUnit.Framework.Constraints.Constraint)~NUnit.Framework.Constraints.ReusableConstraint">

+            <summary>

+            Conversion operator from a normal constraint to a ReusableConstraint.

+            </summary>

+            <param name="c">The original constraint to be wrapped as a ReusableConstraint</param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ReusableConstraint.ToString">

+            <summary>

+            Returns the string representation of the constraint.

+            </summary>

+            <returns>A string representing the constraint</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ReusableConstraint.Resolve">

+            <summary>

+            Resolves the ReusableConstraint by returning the constraint

+            that it originally wrapped.

+            </summary>

+            <returns>A resolved constraint</returns>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.SameAsConstraint">

+            <summary>

+            SameAsConstraint tests whether an object is identical to

+            the object passed to its constructor

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SameAsConstraint.#ctor(System.Object)">

+            <summary>

+            Initializes a new instance of the <see cref="T:SameAsConstraint"/> class.

+            </summary>

+            <param name="expected">The expected object.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SameAsConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SameAsConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.BinarySerializableConstraint">

+            <summary>

+            BinarySerializableConstraint tests whether 

+            an object is serializable in binary format.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.BinarySerializableConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.BinarySerializableConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.BinarySerializableConstraint.WriteActualValueTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the actual value for a failing constraint test to a

+            MessageWriter. The default implementation simply writes

+            the raw value of actual, leaving it to the writer to

+            perform any formatting.

+            </summary>

+            <param name="writer">The writer on which the actual value is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.BinarySerializableConstraint.GetStringRepresentation">

+            <summary>

+            Returns the string representation

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.XmlSerializableConstraint">

+            <summary>

+            BinarySerializableConstraint tests whether 

+            an object is serializable in binary format.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.XmlSerializableConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.XmlSerializableConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.XmlSerializableConstraint.WriteActualValueTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the actual value for a failing constraint test to a

+            MessageWriter. The default implementation simply writes

+            the raw value of actual, leaving it to the writer to

+            perform any formatting.

+            </summary>

+            <param name="writer">The writer on which the actual value is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.XmlSerializableConstraint.GetStringRepresentation">

+            <summary>

+            Returns the string representation of this constraint

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.StringConstraint">

+            <summary>

+            StringConstraint is the abstract base for constraints

+            that operate on strings. It supports the IgnoreCase

+            modifier for string operations.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.StringConstraint.expected">

+            <summary>

+            The expected value

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.StringConstraint.caseInsensitive">

+            <summary>

+            Indicates whether tests should be case-insensitive

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.StringConstraint.#ctor(System.String)">

+            <summary>

+            Constructs a StringConstraint given an expected value

+            </summary>

+            <param name="expected">The expected value</param>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.StringConstraint.IgnoreCase">

+            <summary>

+            Modify the constraint to ignore case in matching.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.EmptyStringConstraint">

+            <summary>

+            EmptyStringConstraint tests whether a string is empty.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EmptyStringConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EmptyStringConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.NullOrEmptyStringConstraint">

+            <summary>

+            NullEmptyStringConstraint tests whether a string is either null or empty.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NullOrEmptyStringConstraint.#ctor">

+            <summary>

+            Constructs a new NullOrEmptyStringConstraint

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NullOrEmptyStringConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.NullOrEmptyStringConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.SubstringConstraint">

+            <summary>

+            SubstringConstraint can test whether a string contains

+            the expected substring.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SubstringConstraint.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the <see cref="T:SubstringConstraint"/> class.

+            </summary>

+            <param name="expected">The expected.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SubstringConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.SubstringConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.StartsWithConstraint">

+            <summary>

+            StartsWithConstraint can test whether a string starts

+            with an expected substring.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.StartsWithConstraint.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the <see cref="T:StartsWithConstraint"/> class.

+            </summary>

+            <param name="expected">The expected string</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.StartsWithConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is matched by the actual value.

+            This is a template method, which calls the IsMatch method

+            of the derived class.

+            </summary>

+            <param name="actual"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.StartsWithConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.EndsWithConstraint">

+            <summary>

+            EndsWithConstraint can test whether a string ends

+            with an expected substring.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EndsWithConstraint.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the <see cref="T:EndsWithConstraint"/> class.

+            </summary>

+            <param name="expected">The expected string</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EndsWithConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is matched by the actual value.

+            This is a template method, which calls the IsMatch method

+            of the derived class.

+            </summary>

+            <param name="actual"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.EndsWithConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.RegexConstraint">

+            <summary>

+            RegexConstraint can test whether a string matches

+            the pattern provided.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.RegexConstraint.#ctor(System.String)">

+            <summary>

+            Initializes a new instance of the <see cref="T:RegexConstraint"/> class.

+            </summary>

+            <param name="pattern">The pattern.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.RegexConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True for success, false for failure</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.RegexConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ThrowsConstraint">

+            <summary>

+            ThrowsConstraint is used to test the exception thrown by 

+            a delegate by applying a constraint to it.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ThrowsConstraint.#ctor(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Initializes a new instance of the <see cref="T:ThrowsConstraint"/> class,

+            using a constraint to be applied to the exception.

+            </summary>

+            <param name="baseConstraint">A constraint to apply to the caught exception.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ThrowsConstraint.Matches(System.Object)">

+            <summary>

+            Executes the code of the delegate and captures any exception.

+            If a non-null base constraint was provided, it applies that

+            constraint to the exception.

+            </summary>

+            <param name="actual">A delegate representing the code to be tested</param>

+            <returns>True if an exception is thrown and the constraint succeeds, otherwise false</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ThrowsConstraint.Matches(NUnit.Framework.Constraints.ActualValueDelegate)">

+            <summary>

+            Converts an ActualValueDelegate to a TestDelegate

+            before calling the primary overload.

+            </summary>

+            <param name="del"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ThrowsConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ThrowsConstraint.WriteActualValueTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the actual value for a failing constraint test to a

+            MessageWriter. The default implementation simply writes

+            the raw value of actual, leaving it to the writer to

+            perform any formatting.

+            </summary>

+            <param name="writer">The writer on which the actual value is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ThrowsConstraint.GetStringRepresentation">

+            <summary>

+            Returns the string representation of this constraint

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.ThrowsConstraint.ActualException">

+            <summary>

+            Get the actual exception thrown - used by Assert.Throws.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ThrowsNothingConstraint">

+            <summary>

+            ThrowsNothingConstraint tests that a delegate does not

+            throw an exception.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ThrowsNothingConstraint.Matches(System.Object)">

+            <summary>

+            Test whether the constraint is satisfied by a given value

+            </summary>

+            <param name="actual">The value to be tested</param>

+            <returns>True if no exception is thrown, otherwise false</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ThrowsNothingConstraint.Matches(NUnit.Framework.Constraints.ActualValueDelegate)">

+            <summary>

+            Converts an ActualValueDelegate to a TestDelegate

+            before calling the primary overload.

+            </summary>

+            <param name="del"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ThrowsNothingConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the constraint description to a MessageWriter

+            </summary>

+            <param name="writer">The writer on which the description is displayed</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ThrowsNothingConstraint.WriteActualValueTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the actual value for a failing constraint test to a

+            MessageWriter. The default implementation simply writes

+            the raw value of actual, leaving it to the writer to

+            perform any formatting.

+            </summary>

+            <param name="writer">The writer on which the actual value is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ToleranceMode">

+            <summary>

+            Modes in which the tolerance value for a comparison can

+            be interpreted.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.ToleranceMode.None">

+            <summary>

+            The tolerance was created with a value, without specifying 

+            how the value would be used. This is used to prevent setting

+            the mode more than once and is generally changed to Linear

+            upon execution of the test.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.ToleranceMode.Linear">

+            <summary>

+            The tolerance is used as a numeric range within which

+            two compared values are considered to be equal.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.ToleranceMode.Percent">

+            <summary>

+            Interprets the tolerance as the percentage by which

+            the two compared values my deviate from each other.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.ToleranceMode.Ulps">

+            <summary>

+            Compares two values based in their distance in

+            representable numbers.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.Tolerance">

+            <summary>

+            The Tolerance class generalizes the notion of a tolerance

+            within which an equality test succeeds. Normally, it is

+            used with numeric types, but it can be used with any

+            type that supports taking a difference between two 

+            objects and comparing that difference to a value.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Tolerance.#ctor(System.Object)">

+            <summary>

+            Constructs a linear tolerance of a specdified amount

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Tolerance.#ctor(System.Object,NUnit.Framework.Constraints.ToleranceMode)">

+            <summary>

+            Constructs a tolerance given an amount and ToleranceMode

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.Tolerance.CheckLinearAndNumeric">

+            <summary>

+            Tests that the current Tolerance is linear with a 

+            numeric value, throwing an exception if it is not.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Tolerance.Empty">

+            <summary>

+            Returns an empty Tolerance object, equivalent to 

+            specifying an exact match.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Tolerance.Mode">

+            <summary>

+            Gets the ToleranceMode for the current Tolerance

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Tolerance.Value">

+            <summary>

+            Gets the value of the current Tolerance instance.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Tolerance.Percent">

+            <summary>

+            Returns a new tolerance, using the current amount as a percentage.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Tolerance.Ulps">

+            <summary>

+            Returns a new tolerance, using the current amount in Ulps.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Tolerance.Days">

+            <summary>

+            Returns a new tolerance with a TimeSpan as the amount, using 

+            the current amount as a number of days.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Tolerance.Hours">

+            <summary>

+            Returns a new tolerance with a TimeSpan as the amount, using 

+            the current amount as a number of hours.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Tolerance.Minutes">

+            <summary>

+            Returns a new tolerance with a TimeSpan as the amount, using 

+            the current amount as a number of minutes.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Tolerance.Seconds">

+            <summary>

+            Returns a new tolerance with a TimeSpan as the amount, using 

+            the current amount as a number of seconds.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Tolerance.Milliseconds">

+            <summary>

+            Returns a new tolerance with a TimeSpan as the amount, using 

+            the current amount as a number of milliseconds.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Tolerance.Ticks">

+            <summary>

+            Returns a new tolerance with a TimeSpan as the amount, using 

+            the current amount as a number of clock ticks.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Constraints.Tolerance.IsEmpty">

+            <summary>

+            Returns true if the current tolerance is empty.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.TypeConstraint">

+            <summary>

+            TypeConstraint is the abstract base for constraints

+            that take a Type as their expected value.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.Constraints.TypeConstraint.expectedType">

+            <summary>

+            The expected Type used by the constraint

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.TypeConstraint.#ctor(System.Type)">

+            <summary>

+            Construct a TypeConstraint for a given Type

+            </summary>

+            <param name="type"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.TypeConstraint.WriteActualValueTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the actual value for a failing constraint test to a

+            MessageWriter. TypeConstraints override this method to write

+            the name of the type.

+            </summary>

+            <param name="writer">The writer on which the actual value is displayed</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.ExactTypeConstraint">

+            <summary>

+            ExactTypeConstraint is used to test that an object

+            is of the exact type provided in the constructor

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ExactTypeConstraint.#ctor(System.Type)">

+            <summary>

+            Construct an ExactTypeConstraint for a given Type

+            </summary>

+            <param name="type">The expected Type.</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ExactTypeConstraint.Matches(System.Object)">

+            <summary>

+            Test that an object is of the exact type specified

+            </summary>

+            <param name="actual">The actual value.</param>

+            <returns>True if the tested object is of the exact type provided, otherwise false.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.ExactTypeConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write the description of this constraint to a MessageWriter

+            </summary>

+            <param name="writer">The MessageWriter to use</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.InstanceOfTypeConstraint">

+            <summary>

+            InstanceOfTypeConstraint is used to test that an object

+            is of the same type provided or derived from it.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.InstanceOfTypeConstraint.#ctor(System.Type)">

+            <summary>

+            Construct an InstanceOfTypeConstraint for the type provided

+            </summary>

+            <param name="type">The expected Type</param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.InstanceOfTypeConstraint.Matches(System.Object)">

+            <summary>

+            Test whether an object is of the specified type or a derived type

+            </summary>

+            <param name="actual">The object to be tested</param>

+            <returns>True if the object is of the provided type or derives from it, otherwise false.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.InstanceOfTypeConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a description of this constraint to a MessageWriter

+            </summary>

+            <param name="writer">The MessageWriter to use</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.AssignableFromConstraint">

+            <summary>

+            AssignableFromConstraint is used to test that an object

+            can be assigned from a given Type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AssignableFromConstraint.#ctor(System.Type)">

+            <summary>

+            Construct an AssignableFromConstraint for the type provided

+            </summary>

+            <param name="type"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AssignableFromConstraint.Matches(System.Object)">

+            <summary>

+            Test whether an object can be assigned from the specified type

+            </summary>

+            <param name="actual">The object to be tested</param>

+            <returns>True if the object can be assigned a value of the expected Type, otherwise false.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AssignableFromConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a description of this constraint to a MessageWriter

+            </summary>

+            <param name="writer">The MessageWriter to use</param>

+        </member>

+        <member name="T:NUnit.Framework.Constraints.AssignableToConstraint">

+            <summary>

+            AssignableToConstraint is used to test that an object

+            can be assigned to a given Type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AssignableToConstraint.#ctor(System.Type)">

+            <summary>

+            Construct an AssignableToConstraint for the type provided

+            </summary>

+            <param name="type"></param>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AssignableToConstraint.Matches(System.Object)">

+            <summary>

+            Test whether an object can be assigned to the specified type

+            </summary>

+            <param name="actual">The object to be tested</param>

+            <returns>True if the object can be assigned a value of the expected Type, otherwise false.</returns>

+        </member>

+        <member name="M:NUnit.Framework.Constraints.AssignableToConstraint.WriteDescriptionTo(NUnit.Framework.Constraints.MessageWriter)">

+            <summary>

+            Write a description of this constraint to a MessageWriter

+            </summary>

+            <param name="writer">The MessageWriter to use</param>

+        </member>

+        <member name="T:NUnit.Framework.AssertionException">

+            <summary>

+            Thrown when an assertion failed.

+            </summary>

+            

+        </member>

+        <member name="M:NUnit.Framework.AssertionException.#ctor(System.String)">

+            <param name="message">The error message that explains 

+            the reason for the exception</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionException.#ctor(System.String,System.Exception)">

+            <param name="message">The error message that explains 

+            the reason for the exception</param>

+            <param name="inner">The exception that caused the 

+            current exception</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">

+            <summary>

+            Serialization Constructor

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.IgnoreException">

+            <summary>

+            Thrown when an assertion failed.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.IgnoreException.#ctor(System.String)">

+            <param name="message"></param>

+        </member>

+        <member name="M:NUnit.Framework.IgnoreException.#ctor(System.String,System.Exception)">

+            <param name="message">The error message that explains 

+            the reason for the exception</param>

+            <param name="inner">The exception that caused the 

+            current exception</param>

+        </member>

+        <member name="M:NUnit.Framework.IgnoreException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">

+            <summary>

+            Serialization Constructor

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.InconclusiveException">

+            <summary>

+            Thrown when a test executes inconclusively.

+            </summary>

+            

+        </member>

+        <member name="M:NUnit.Framework.InconclusiveException.#ctor(System.String)">

+            <param name="message">The error message that explains 

+            the reason for the exception</param>

+        </member>

+        <member name="M:NUnit.Framework.InconclusiveException.#ctor(System.String,System.Exception)">

+            <param name="message">The error message that explains 

+            the reason for the exception</param>

+            <param name="inner">The exception that caused the 

+            current exception</param>

+        </member>

+        <member name="M:NUnit.Framework.InconclusiveException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">

+            <summary>

+            Serialization Constructor

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.SuccessException">

+            <summary>

+            Thrown when an assertion failed.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.SuccessException.#ctor(System.String)">

+            <param name="message"></param>

+        </member>

+        <member name="M:NUnit.Framework.SuccessException.#ctor(System.String,System.Exception)">

+            <param name="message">The error message that explains 

+            the reason for the exception</param>

+            <param name="inner">The exception that caused the 

+            current exception</param>

+        </member>

+        <member name="M:NUnit.Framework.SuccessException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">

+            <summary>

+            Serialization Constructor

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TestDelegate">

+            <summary>

+            Delegate used by tests that execute code and

+            capture any thrown exception.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Assert">

+            <summary>

+            The Assert class contains a collection of static methods that

+            implement the most common assertions used in NUnit.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Assert.#ctor">

+            <summary>

+            We don't actually want any instances of this object, but some people

+            like to inherit from it to add other static methods. Hence, the

+            protected constructor disallows any instances of this object. 

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Equals(System.Object,System.Object)">

+            <summary>

+            The Equals method throws an AssertionException. This is done 

+            to make sure there is no mistake by calling this function.

+            </summary>

+            <param name="a"></param>

+            <param name="b"></param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.ReferenceEquals(System.Object,System.Object)">

+            <summary>

+            override the default ReferenceEquals to throw an AssertionException. This 

+            implementation makes sure there is no mistake in calling this function 

+            as part of Assert. 

+            </summary>

+            <param name="a"></param>

+            <param name="b"></param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AssertDoublesAreEqual(System.Double,System.Double,System.Double,System.String,System.Object[])">

+            <summary>

+            Helper for Assert.AreEqual(double expected, double actual, ...)

+            allowing code generation to work consistently.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="delta">The maximum acceptable difference between the

+            the expected and the actual</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Pass(System.String,System.Object[])">

+            <summary>

+            Throws a <see cref="T:NUnit.Framework.SuccessException"/> with the message and arguments 

+            that are passed in. This allows a test to be cut short, with a result

+            of success returned to NUnit.

+            </summary>

+            <param name="message">The message to initialize the <see cref="T:NUnit.Framework.AssertionException"/> with.</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Pass(System.String)">

+            <summary>

+            Throws a <see cref="T:NUnit.Framework.SuccessException"/> with the message and arguments 

+            that are passed in. This allows a test to be cut short, with a result

+            of success returned to NUnit.

+            </summary>

+            <param name="message">The message to initialize the <see cref="T:NUnit.Framework.AssertionException"/> with.</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Pass">

+            <summary>

+            Throws a <see cref="T:NUnit.Framework.SuccessException"/> with the message and arguments 

+            that are passed in. This allows a test to be cut short, with a result

+            of success returned to NUnit.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Fail(System.String,System.Object[])">

+            <summary>

+            Throws an <see cref="T:NUnit.Framework.AssertionException"/> with the message and arguments 

+            that are passed in. This is used by the other Assert functions. 

+            </summary>

+            <param name="message">The message to initialize the <see cref="T:NUnit.Framework.AssertionException"/> with.</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Fail(System.String)">

+            <summary>

+            Throws an <see cref="T:NUnit.Framework.AssertionException"/> with the message that is 

+            passed in. This is used by the other Assert functions. 

+            </summary>

+            <param name="message">The message to initialize the <see cref="T:NUnit.Framework.AssertionException"/> with.</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Fail">

+            <summary>

+            Throws an <see cref="T:NUnit.Framework.AssertionException"/>. 

+            This is used by the other Assert functions. 

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Ignore(System.String,System.Object[])">

+            <summary>

+            Throws an <see cref="T:NUnit.Framework.IgnoreException"/> with the message and arguments 

+            that are passed in.  This causes the test to be reported as ignored.

+            </summary>

+            <param name="message">The message to initialize the <see cref="T:NUnit.Framework.AssertionException"/> with.</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Ignore(System.String)">

+            <summary>

+            Throws an <see cref="T:NUnit.Framework.IgnoreException"/> with the message that is 

+            passed in. This causes the test to be reported as ignored. 

+            </summary>

+            <param name="message">The message to initialize the <see cref="T:NUnit.Framework.AssertionException"/> with.</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Ignore">

+            <summary>

+            Throws an <see cref="T:NUnit.Framework.IgnoreException"/>. 

+            This causes the test to be reported as ignored. 

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Inconclusive(System.String,System.Object[])">

+            <summary>

+            Throws an <see cref="T:NUnit.Framework.InconclusiveException"/> with the message and arguments 

+            that are passed in.  This causes the test to be reported as inconclusive.

+            </summary>

+            <param name="message">The message to initialize the <see cref="T:NUnit.Framework.InconclusiveException"/> with.</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Inconclusive(System.String)">

+            <summary>

+            Throws an <see cref="T:NUnit.Framework.InconclusiveException"/> with the message that is 

+            passed in. This causes the test to be reported as inconclusive. 

+            </summary>

+            <param name="message">The message to initialize the <see cref="T:NUnit.Framework.InconclusiveException"/> with.</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Inconclusive">

+            <summary>

+            Throws an <see cref="T:NUnit.Framework.InconclusiveException"/>. 

+            This causes the test to be reported as Inconclusive. 

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Assert.That(System.Object,NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="expression">A Constraint to be applied</param>

+            <param name="actual">The actual value to test</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.That(System.Object,NUnit.Framework.Constraints.IResolveConstraint,System.String)">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="expression">A Constraint to be applied</param>

+            <param name="actual">The actual value to test</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.That(System.Object,NUnit.Framework.Constraints.IResolveConstraint,System.String,System.Object[])">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="expression">A Constraint expression to be applied</param>

+            <param name="actual">The actual value to test</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.That(NUnit.Framework.Constraints.ActualValueDelegate,NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="expr">A Constraint expression to be applied</param>

+            <param name="del">An ActualValueDelegate returning the value to be tested</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.That(NUnit.Framework.Constraints.ActualValueDelegate,NUnit.Framework.Constraints.IResolveConstraint,System.String)">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="expr">A Constraint expression to be applied</param>

+            <param name="del">An ActualValueDelegate returning the value to be tested</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.That(NUnit.Framework.Constraints.ActualValueDelegate,NUnit.Framework.Constraints.IResolveConstraint,System.String,System.Object[])">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="del">An ActualValueDelegate returning the value to be tested</param>

+            <param name="expr">A Constraint expression to be applied</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.That``1(``0@,NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Apply a constraint to a referenced value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="expression">A Constraint to be applied</param>

+            <param name="actual">The actual value to test</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.That``1(``0@,NUnit.Framework.Constraints.IResolveConstraint,System.String)">

+            <summary>

+            Apply a constraint to a referenced value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="expression">A Constraint to be applied</param>

+            <param name="actual">The actual value to test</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.That``1(``0@,NUnit.Framework.Constraints.IResolveConstraint,System.String,System.Object[])">

+            <summary>

+            Apply a constraint to a referenced value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="expression">A Constraint to be applied</param>

+            <param name="actual">The actual value to test</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.That(System.Boolean,System.String,System.Object[])">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary> 

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display if the condition is false</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.That(System.Boolean,System.String)">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary>

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display if the condition is false</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.That(System.Boolean)">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary>

+            <param name="condition">The evaluated condition</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.That(NUnit.Framework.TestDelegate,NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Asserts that the code represented by a delegate throws an exception

+            that satisfies the constraint provided.

+            </summary>

+            <param name="code">A TestDelegate to be executed</param>

+            <param name="constraint">A ThrowsConstraint used in the test</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Throws(NUnit.Framework.Constraints.IResolveConstraint,NUnit.Framework.TestDelegate,System.String,System.Object[])">

+            <summary>

+            Verifies that a delegate throws a particular exception when called.

+            </summary>

+            <param name="expression">A constraint to be satisfied by the exception</param>

+            <param name="code">A TestSnippet delegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Throws(NUnit.Framework.Constraints.IResolveConstraint,NUnit.Framework.TestDelegate,System.String)">

+            <summary>

+            Verifies that a delegate throws a particular exception when called.

+            </summary>

+            <param name="expression">A constraint to be satisfied by the exception</param>

+            <param name="code">A TestSnippet delegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Throws(NUnit.Framework.Constraints.IResolveConstraint,NUnit.Framework.TestDelegate)">

+            <summary>

+            Verifies that a delegate throws a particular exception when called.

+            </summary>

+            <param name="expression">A constraint to be satisfied by the exception</param>

+            <param name="code">A TestSnippet delegate</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Throws(System.Type,NUnit.Framework.TestDelegate,System.String,System.Object[])">

+            <summary>

+            Verifies that a delegate throws a particular exception when called.

+            </summary>

+            <param name="expectedExceptionType">The exception Type expected</param>

+            <param name="code">A TestSnippet delegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Throws(System.Type,NUnit.Framework.TestDelegate,System.String)">

+            <summary>

+            Verifies that a delegate throws a particular exception when called.

+            </summary>

+            <param name="expectedExceptionType">The exception Type expected</param>

+            <param name="code">A TestSnippet delegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Throws(System.Type,NUnit.Framework.TestDelegate)">

+            <summary>

+            Verifies that a delegate throws a particular exception when called.

+            </summary>

+            <param name="expectedExceptionType">The exception Type expected</param>

+            <param name="code">A TestSnippet delegate</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Throws``1(NUnit.Framework.TestDelegate,System.String,System.Object[])">

+            <summary>

+            Verifies that a delegate throws a particular exception when called.

+            </summary>

+            <typeparam name="T">Type of the expected exception</typeparam>

+            <param name="code">A TestSnippet delegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Throws``1(NUnit.Framework.TestDelegate,System.String)">

+            <summary>

+            Verifies that a delegate throws a particular exception when called.

+            </summary>

+            <typeparam name="T">Type of the expected exception</typeparam>

+            <param name="code">A TestSnippet delegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Throws``1(NUnit.Framework.TestDelegate)">

+            <summary>

+            Verifies that a delegate throws a particular exception when called.

+            </summary>

+            <typeparam name="T">Type of the expected exception</typeparam>

+            <param name="code">A TestSnippet delegate</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Catch(NUnit.Framework.TestDelegate,System.String,System.Object[])">

+            <summary>

+            Verifies that a delegate throws an exception when called

+            and returns it.

+            </summary>

+            <param name="code">A TestDelegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Catch(NUnit.Framework.TestDelegate,System.String)">

+            <summary>

+            Verifies that a delegate throws an exception when called

+            and returns it.

+            </summary>

+            <param name="code">A TestDelegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Catch(NUnit.Framework.TestDelegate)">

+            <summary>

+            Verifies that a delegate throws an exception when called

+            and returns it.

+            </summary>

+            <param name="code">A TestDelegate</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Catch(System.Type,NUnit.Framework.TestDelegate,System.String,System.Object[])">

+            <summary>

+            Verifies that a delegate throws an exception of a certain Type

+            or one derived from it when called and returns it.

+            </summary>

+            <param name="expectedExceptionType">The expected Exception Type</param>

+            <param name="code">A TestDelegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Catch(System.Type,NUnit.Framework.TestDelegate,System.String)">

+            <summary>

+            Verifies that a delegate throws an exception of a certain Type

+            or one derived from it when called and returns it.

+            </summary>

+            <param name="expectedExceptionType">The expected Exception Type</param>

+            <param name="code">A TestDelegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Catch(System.Type,NUnit.Framework.TestDelegate)">

+            <summary>

+            Verifies that a delegate throws an exception of a certain Type

+            or one derived from it when called and returns it.

+            </summary>

+            <param name="expectedExceptionType">The expected Exception Type</param>

+            <param name="code">A TestDelegate</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Catch``1(NUnit.Framework.TestDelegate,System.String,System.Object[])">

+            <summary>

+            Verifies that a delegate throws an exception of a certain Type

+            or one derived from it when called and returns it.

+            </summary>

+            <typeparam name="T">The expected Exception Type</typeparam>

+            <param name="code">A TestDelegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Catch``1(NUnit.Framework.TestDelegate,System.String)">

+            <summary>

+            Verifies that a delegate throws an exception of a certain Type

+            or one derived from it when called and returns it.

+            </summary>

+            <typeparam name="T">The expected Exception Type</typeparam>

+            <param name="code">A TestDelegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Catch``1(NUnit.Framework.TestDelegate)">

+            <summary>

+            Verifies that a delegate throws an exception of a certain Type

+            or one derived from it when called and returns it.

+            </summary>

+            <typeparam name="T">The expected Exception Type</typeparam>

+            <param name="code">A TestDelegate</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.DoesNotThrow(NUnit.Framework.TestDelegate,System.String,System.Object[])">

+            <summary>

+            Verifies that a delegate does not throw an exception

+            </summary>

+            <param name="code">A TestSnippet delegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.DoesNotThrow(NUnit.Framework.TestDelegate,System.String)">

+            <summary>

+            Verifies that a delegate does not throw an exception.

+            </summary>

+            <param name="code">A TestSnippet delegate</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.DoesNotThrow(NUnit.Framework.TestDelegate)">

+            <summary>

+            Verifies that a delegate does not throw an exception.

+            </summary>

+            <param name="code">A TestSnippet delegate</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.True(System.Boolean,System.String,System.Object[])">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary>

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.True(System.Boolean,System.String)">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary>

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.True(System.Boolean)">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary>

+            <param name="condition">The evaluated condition</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsTrue(System.Boolean,System.String,System.Object[])">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary>

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsTrue(System.Boolean,System.String)">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary>

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsTrue(System.Boolean)">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary>

+            <param name="condition">The evaluated condition</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.False(System.Boolean,System.String,System.Object[])">

+            <summary>

+            Asserts that a condition is false. If the condition is true the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary> 

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.False(System.Boolean,System.String)">

+            <summary>

+            Asserts that a condition is false. If the condition is true the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary> 

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.False(System.Boolean)">

+            <summary>

+            Asserts that a condition is false. If the condition is true the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary> 

+            <param name="condition">The evaluated condition</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsFalse(System.Boolean,System.String,System.Object[])">

+            <summary>

+            Asserts that a condition is false. If the condition is true the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary> 

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsFalse(System.Boolean,System.String)">

+            <summary>

+            Asserts that a condition is false. If the condition is true the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary> 

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsFalse(System.Boolean)">

+            <summary>

+            Asserts that a condition is false. If the condition is true the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>.

+            </summary> 

+            <param name="condition">The evaluated condition</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.NotNull(System.Object,System.String,System.Object[])">

+            <summary>

+            Verifies that the object that is passed in is not equal to <code>null</code>

+            If the object is <code>null</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="anObject">The object that is to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.NotNull(System.Object,System.String)">

+            <summary>

+            Verifies that the object that is passed in is not equal to <code>null</code>

+            If the object is <code>null</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="anObject">The object that is to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.NotNull(System.Object)">

+            <summary>

+            Verifies that the object that is passed in is not equal to <code>null</code>

+            If the object is <code>null</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="anObject">The object that is to be tested</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotNull(System.Object,System.String,System.Object[])">

+            <summary>

+            Verifies that the object that is passed in is not equal to <code>null</code>

+            If the object is <code>null</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="anObject">The object that is to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotNull(System.Object,System.String)">

+            <summary>

+            Verifies that the object that is passed in is not equal to <code>null</code>

+            If the object is <code>null</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="anObject">The object that is to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotNull(System.Object)">

+            <summary>

+            Verifies that the object that is passed in is not equal to <code>null</code>

+            If the object is <code>null</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="anObject">The object that is to be tested</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Null(System.Object,System.String,System.Object[])">

+            <summary>

+            Verifies that the object that is passed in is equal to <code>null</code>

+            If the object is not <code>null</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="anObject">The object that is to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Null(System.Object,System.String)">

+            <summary>

+            Verifies that the object that is passed in is equal to <code>null</code>

+            If the object is not <code>null</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="anObject">The object that is to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Null(System.Object)">

+            <summary>

+            Verifies that the object that is passed in is equal to <code>null</code>

+            If the object is not <code>null</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="anObject">The object that is to be tested</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNull(System.Object,System.String,System.Object[])">

+            <summary>

+            Verifies that the object that is passed in is equal to <code>null</code>

+            If the object is not <code>null</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="anObject">The object that is to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNull(System.Object,System.String)">

+            <summary>

+            Verifies that the object that is passed in is equal to <code>null</code>

+            If the object is not <code>null</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="anObject">The object that is to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNull(System.Object)">

+            <summary>

+            Verifies that the object that is passed in is equal to <code>null</code>

+            If the object is not <code>null</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="anObject">The object that is to be tested</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNaN(System.Double,System.String,System.Object[])">

+            <summary>

+            Verifies that the double that is passed in is an <code>NaN</code> value.

+            If the object is not <code>NaN</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="aDouble">The value that is to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNaN(System.Double,System.String)">

+            <summary>

+            Verifies that the double that is passed in is an <code>NaN</code> value.

+            If the object is not <code>NaN</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="aDouble">The value that is to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNaN(System.Double)">

+            <summary>

+            Verifies that the double that is passed in is an <code>NaN</code> value.

+            If the object is not <code>NaN</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="aDouble">The value that is to be tested</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNaN(System.Nullable{System.Double},System.String,System.Object[])">

+            <summary>

+            Verifies that the double that is passed in is an <code>NaN</code> value.

+            If the object is not <code>NaN</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="aDouble">The value that is to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNaN(System.Nullable{System.Double},System.String)">

+            <summary>

+            Verifies that the double that is passed in is an <code>NaN</code> value.

+            If the object is not <code>NaN</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="aDouble">The value that is to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNaN(System.Nullable{System.Double})">

+            <summary>

+            Verifies that the double that is passed in is an <code>NaN</code> value.

+            If the object is not <code>NaN</code> then an <see cref="T:NUnit.Framework.AssertionException"/>

+            is thrown.

+            </summary>

+            <param name="aDouble">The value that is to be tested</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsEmpty(System.String,System.String,System.Object[])">

+            <summary>

+            Assert that a string is empty - that is equal to string.Empty

+            </summary>

+            <param name="aString">The string to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsEmpty(System.String,System.String)">

+            <summary>

+            Assert that a string is empty - that is equal to string.Empty

+            </summary>

+            <param name="aString">The string to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsEmpty(System.String)">

+            <summary>

+            Assert that a string is empty - that is equal to string.Empty

+            </summary>

+            <param name="aString">The string to be tested</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsEmpty(System.Collections.ICollection,System.String,System.Object[])">

+            <summary>

+            Assert that an array, list or other collection is empty

+            </summary>

+            <param name="collection">An array, list or other collection implementing ICollection</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsEmpty(System.Collections.ICollection,System.String)">

+            <summary>

+            Assert that an array, list or other collection is empty

+            </summary>

+            <param name="collection">An array, list or other collection implementing ICollection</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsEmpty(System.Collections.ICollection)">

+            <summary>

+            Assert that an array, list or other collection is empty

+            </summary>

+            <param name="collection">An array, list or other collection implementing ICollection</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotEmpty(System.String,System.String,System.Object[])">

+            <summary>

+            Assert that a string is not empty - that is not equal to string.Empty

+            </summary>

+            <param name="aString">The string to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotEmpty(System.String,System.String)">

+            <summary>

+            Assert that a string is not empty - that is not equal to string.Empty

+            </summary>

+            <param name="aString">The string to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotEmpty(System.String)">

+            <summary>

+            Assert that a string is not empty - that is not equal to string.Empty

+            </summary>

+            <param name="aString">The string to be tested</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotEmpty(System.Collections.ICollection,System.String,System.Object[])">

+            <summary>

+            Assert that an array, list or other collection is not empty

+            </summary>

+            <param name="collection">An array, list or other collection implementing ICollection</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotEmpty(System.Collections.ICollection,System.String)">

+            <summary>

+            Assert that an array, list or other collection is not empty

+            </summary>

+            <param name="collection">An array, list or other collection implementing ICollection</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotEmpty(System.Collections.ICollection)">

+            <summary>

+            Assert that an array, list or other collection is not empty

+            </summary>

+            <param name="collection">An array, list or other collection implementing ICollection</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNullOrEmpty(System.String,System.String,System.Object[])">

+            <summary>

+            Assert that a string is either null or equal to string.Empty

+            </summary>

+            <param name="aString">The string to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNullOrEmpty(System.String,System.String)">

+            <summary>

+            Assert that a string is either null or equal to string.Empty

+            </summary>

+            <param name="aString">The string to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNullOrEmpty(System.String)">

+            <summary>

+            Assert that a string is either null or equal to string.Empty

+            </summary>

+            <param name="aString">The string to be tested</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotNullOrEmpty(System.String,System.String,System.Object[])">

+            <summary>

+            Assert that a string is not null or empty

+            </summary>

+            <param name="aString">The string to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotNullOrEmpty(System.String,System.String)">

+            <summary>

+            Assert that a string is not null or empty

+            </summary>

+            <param name="aString">The string to be tested</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotNullOrEmpty(System.String)">

+            <summary>

+            Assert that a string is not null or empty

+            </summary>

+            <param name="aString">The string to be tested</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsAssignableFrom(System.Type,System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that an object may be assigned a  value of a given Type.

+            </summary>

+            <param name="expected">The expected Type.</param>

+            <param name="actual">The object under examination</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsAssignableFrom(System.Type,System.Object,System.String)">

+            <summary>

+            Asserts that an object may be assigned a  value of a given Type.

+            </summary>

+            <param name="expected">The expected Type.</param>

+            <param name="actual">The object under examination</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsAssignableFrom(System.Type,System.Object)">

+            <summary>

+            Asserts that an object may be assigned a  value of a given Type.

+            </summary>

+            <param name="expected">The expected Type.</param>

+            <param name="actual">The object under examination</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsAssignableFrom``1(System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that an object may be assigned a  value of a given Type.

+            </summary>

+            <typeparam name="T">The expected Type.</typeparam>

+            <param name="actual">The object under examination</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsAssignableFrom``1(System.Object,System.String)">

+            <summary>

+            Asserts that an object may be assigned a  value of a given Type.

+            </summary>

+            <typeparam name="T">The expected Type.</typeparam>

+            <param name="actual">The object under examination</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsAssignableFrom``1(System.Object)">

+            <summary>

+            Asserts that an object may be assigned a  value of a given Type.

+            </summary>

+            <typeparam name="T">The expected Type.</typeparam>

+            <param name="actual">The object under examination</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotAssignableFrom(System.Type,System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that an object may not be assigned a  value of a given Type.

+            </summary>

+            <param name="expected">The expected Type.</param>

+            <param name="actual">The object under examination</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotAssignableFrom(System.Type,System.Object,System.String)">

+            <summary>

+            Asserts that an object may not be assigned a  value of a given Type.

+            </summary>

+            <param name="expected">The expected Type.</param>

+            <param name="actual">The object under examination</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotAssignableFrom(System.Type,System.Object)">

+            <summary>

+            Asserts that an object may not be assigned a  value of a given Type.

+            </summary>

+            <param name="expected">The expected Type.</param>

+            <param name="actual">The object under examination</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotAssignableFrom``1(System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that an object may not be assigned a  value of a given Type.

+            </summary>

+            <typeparam name="T">The expected Type.</typeparam>

+            <param name="actual">The object under examination</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotAssignableFrom``1(System.Object,System.String)">

+            <summary>

+            Asserts that an object may not be assigned a  value of a given Type.

+            </summary>

+            <typeparam name="T">The expected Type.</typeparam>

+            <param name="actual">The object under examination</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotAssignableFrom``1(System.Object)">

+            <summary>

+            Asserts that an object may not be assigned a  value of a given Type.

+            </summary>

+            <typeparam name="T">The expected Type.</typeparam>

+            <param name="actual">The object under examination</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsInstanceOf(System.Type,System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that an object is an instance of a given type.

+            </summary>

+            <param name="expected">The expected Type</param>

+            <param name="actual">The object being examined</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsInstanceOf(System.Type,System.Object,System.String)">

+            <summary>

+            Asserts that an object is an instance of a given type.

+            </summary>

+            <param name="expected">The expected Type</param>

+            <param name="actual">The object being examined</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsInstanceOf(System.Type,System.Object)">

+            <summary>

+            Asserts that an object is an instance of a given type.

+            </summary>

+            <param name="expected">The expected Type</param>

+            <param name="actual">The object being examined</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsInstanceOfType(System.Type,System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that an object is an instance of a given type.

+            </summary>

+            <param name="expected">The expected Type</param>

+            <param name="actual">The object being examined</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsInstanceOfType(System.Type,System.Object,System.String)">

+            <summary>

+            Asserts that an object is an instance of a given type.

+            </summary>

+            <param name="expected">The expected Type</param>

+            <param name="actual">The object being examined</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsInstanceOfType(System.Type,System.Object)">

+            <summary>

+            Asserts that an object is an instance of a given type.

+            </summary>

+            <param name="expected">The expected Type</param>

+            <param name="actual">The object being examined</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsInstanceOf``1(System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that an object is an instance of a given type.

+            </summary>

+            <typeparam name="T">The expected Type</typeparam>

+            <param name="actual">The object being examined</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsInstanceOf``1(System.Object,System.String)">

+            <summary>

+            Asserts that an object is an instance of a given type.

+            </summary>

+            <typeparam name="T">The expected Type</typeparam>

+            <param name="actual">The object being examined</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsInstanceOf``1(System.Object)">

+            <summary>

+            Asserts that an object is an instance of a given type.

+            </summary>

+            <typeparam name="T">The expected Type</typeparam>

+            <param name="actual">The object being examined</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotInstanceOf(System.Type,System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that an object is not an instance of a given type.

+            </summary>

+            <param name="expected">The expected Type</param>

+            <param name="actual">The object being examined</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotInstanceOf(System.Type,System.Object,System.String)">

+            <summary>

+            Asserts that an object is not an instance of a given type.

+            </summary>

+            <param name="expected">The expected Type</param>

+            <param name="actual">The object being examined</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotInstanceOf(System.Type,System.Object)">

+            <summary>

+            Asserts that an object is not an instance of a given type.

+            </summary>

+            <param name="expected">The expected Type</param>

+            <param name="actual">The object being examined</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotInstanceOfType(System.Type,System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that an object is not an instance of a given type.

+            </summary>

+            <param name="expected">The expected Type</param>

+            <param name="actual">The object being examined</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotInstanceOfType(System.Type,System.Object,System.String)">

+            <summary>

+            Asserts that an object is not an instance of a given type.

+            </summary>

+            <param name="expected">The expected Type</param>

+            <param name="actual">The object being examined</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotInstanceOfType(System.Type,System.Object)">

+            <summary>

+            Asserts that an object is not an instance of a given type.

+            </summary>

+            <param name="expected">The expected Type</param>

+            <param name="actual">The object being examined</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotInstanceOf``1(System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that an object is not an instance of a given type.

+            </summary>

+            <typeparam name="T">The expected Type</typeparam>

+            <param name="actual">The object being examined</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotInstanceOf``1(System.Object,System.String)">

+            <summary>

+            Asserts that an object is not an instance of a given type.

+            </summary>

+            <typeparam name="T">The expected Type</typeparam>

+            <param name="actual">The object being examined</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.IsNotInstanceOf``1(System.Object)">

+            <summary>

+            Asserts that an object is not an instance of a given type.

+            </summary>

+            <typeparam name="T">The expected Type</typeparam>

+            <param name="actual">The object being examined</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Int32,System.Int32,System.String,System.Object[])">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Int32,System.Int32,System.String)">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Int32,System.Int32)">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Int64,System.Int64,System.String,System.Object[])">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Int64,System.Int64,System.String)">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Int64,System.Int64)">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.UInt32,System.UInt32,System.String,System.Object[])">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.UInt32,System.UInt32,System.String)">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.UInt32,System.UInt32)">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.UInt64,System.UInt64,System.String,System.Object[])">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.UInt64,System.UInt64,System.String)">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.UInt64,System.UInt64)">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Decimal,System.Decimal,System.String,System.Object[])">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Decimal,System.Decimal,System.String)">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Decimal,System.Decimal)">

+            <summary>

+            Verifies that two values are equal. If they are not, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Double,System.Double,System.Double,System.String,System.Object[])">

+            <summary>

+            Verifies that two doubles are equal considering a delta. If the

+            expected value is infinity then the delta value is ignored. If 

+            they are not equal then an <see cref="T:NUnit.Framework.AssertionException"/> is

+            thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="delta">The maximum acceptable difference between the

+            the expected and the actual</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Double,System.Double,System.Double,System.String)">

+            <summary>

+            Verifies that two doubles are equal considering a delta. If the

+            expected value is infinity then the delta value is ignored. If 

+            they are not equal then an <see cref="T:NUnit.Framework.AssertionException"/> is

+            thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="delta">The maximum acceptable difference between the

+            the expected and the actual</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Double,System.Double,System.Double)">

+            <summary>

+            Verifies that two doubles are equal considering a delta. If the

+            expected value is infinity then the delta value is ignored. If 

+            they are not equal then an <see cref="T:NUnit.Framework.AssertionException"/> is

+            thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="delta">The maximum acceptable difference between the

+            the expected and the actual</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Double,System.Nullable{System.Double},System.Double,System.String,System.Object[])">

+            <summary>

+            Verifies that two doubles are equal considering a delta. If the

+            expected value is infinity then the delta value is ignored. If 

+            they are not equal then an <see cref="T:NUnit.Framework.AssertionException"/> is

+            thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="delta">The maximum acceptable difference between the

+            the expected and the actual</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Double,System.Nullable{System.Double},System.Double,System.String)">

+            <summary>

+            Verifies that two doubles are equal considering a delta. If the

+            expected value is infinity then the delta value is ignored. If 

+            they are not equal then an <see cref="T:NUnit.Framework.AssertionException"/> is

+            thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="delta">The maximum acceptable difference between the

+            the expected and the actual</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Double,System.Nullable{System.Double},System.Double)">

+            <summary>

+            Verifies that two doubles are equal considering a delta. If the

+            expected value is infinity then the delta value is ignored. If 

+            they are not equal then an <see cref="T:NUnit.Framework.AssertionException"/> is

+            thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="delta">The maximum acceptable difference between the

+            the expected and the actual</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Object,System.Object,System.String,System.Object[])">

+            <summary>

+            Verifies that two objects are equal.  Two objects are considered

+            equal if both are null, or if both have the same value. NUnit

+            has special semantics for some object types.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The value that is expected</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Object,System.Object,System.String)">

+            <summary>

+            Verifies that two objects are equal.  Two objects are considered

+            equal if both are null, or if both have the same value. NUnit

+            has special semantics for some object types.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The value that is expected</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreEqual(System.Object,System.Object)">

+            <summary>

+            Verifies that two objects are equal.  Two objects are considered

+            equal if both are null, or if both have the same value. NUnit

+            has special semantics for some object types.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The value that is expected</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Int32,System.Int32,System.String,System.Object[])">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Int32,System.Int32,System.String)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Int32,System.Int32)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Int64,System.Int64,System.String,System.Object[])">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Int64,System.Int64,System.String)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Int64,System.Int64)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.UInt32,System.UInt32,System.String,System.Object[])">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.UInt32,System.UInt32,System.String)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.UInt32,System.UInt32)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.UInt64,System.UInt64,System.String,System.Object[])">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.UInt64,System.UInt64,System.String)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.UInt64,System.UInt64)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Decimal,System.Decimal,System.String,System.Object[])">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Decimal,System.Decimal,System.String)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Decimal,System.Decimal)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Single,System.Single,System.String,System.Object[])">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Single,System.Single,System.String)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Single,System.Single)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Double,System.Double,System.String,System.Object[])">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Double,System.Double,System.String)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Double,System.Double)">

+            <summary>

+            Verifies that two values are not equal. If they are equal, then an 

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Object,System.Object,System.String,System.Object[])">

+            <summary>

+            Verifies that two objects are not equal.  Two objects are considered

+            equal if both are null, or if both have the same value. NUnit

+            has special semantics for some object types.

+            If they are equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The value that is expected</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Object,System.Object,System.String)">

+            <summary>

+            Verifies that two objects are not equal.  Two objects are considered

+            equal if both are null, or if both have the same value. NUnit

+            has special semantics for some object types.

+            If they are equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The value that is expected</param>

+            <param name="actual">The actual value</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotEqual(System.Object,System.Object)">

+            <summary>

+            Verifies that two objects are not equal.  Two objects are considered

+            equal if both are null, or if both have the same value. NUnit

+            has special semantics for some object types.

+            If they are equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The value that is expected</param>

+            <param name="actual">The actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreSame(System.Object,System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that two objects refer to the same object. If they

+            are not the same an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected object</param>

+            <param name="actual">The actual object</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreSame(System.Object,System.Object,System.String)">

+            <summary>

+            Asserts that two objects refer to the same object. If they

+            are not the same an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected object</param>

+            <param name="actual">The actual object</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreSame(System.Object,System.Object)">

+            <summary>

+            Asserts that two objects refer to the same object. If they

+            are not the same an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected object</param>

+            <param name="actual">The actual object</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotSame(System.Object,System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that two objects do not refer to the same object. If they

+            are the same an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected object</param>

+            <param name="actual">The actual object</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotSame(System.Object,System.Object,System.String)">

+            <summary>

+            Asserts that two objects do not refer to the same object. If they

+            are the same an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected object</param>

+            <param name="actual">The actual object</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.AreNotSame(System.Object,System.Object)">

+            <summary>

+            Asserts that two objects do not refer to the same object. If they

+            are the same an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected object</param>

+            <param name="actual">The actual object</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Int32,System.Int32,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Int32,System.Int32,System.String)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Int32,System.Int32)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.UInt32,System.UInt32,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.UInt32,System.UInt32,System.String)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.UInt32,System.UInt32)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Int64,System.Int64,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Int64,System.Int64,System.String)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Int64,System.Int64)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.UInt64,System.UInt64,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.UInt64,System.UInt64,System.String)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.UInt64,System.UInt64)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Decimal,System.Decimal,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Decimal,System.Decimal,System.String)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Decimal,System.Decimal)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Double,System.Double,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Double,System.Double,System.String)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Double,System.Double)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Single,System.Single,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Single,System.Single,System.String)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.Single,System.Single)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.IComparable,System.IComparable,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.IComparable,System.IComparable,System.String)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Greater(System.IComparable,System.IComparable)">

+            <summary>

+            Verifies that the first value is greater than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Int32,System.Int32,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Int32,System.Int32,System.String)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Int32,System.Int32)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.UInt32,System.UInt32,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.UInt32,System.UInt32,System.String)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.UInt32,System.UInt32)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Int64,System.Int64,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Int64,System.Int64,System.String)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Int64,System.Int64)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.UInt64,System.UInt64,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.UInt64,System.UInt64,System.String)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.UInt64,System.UInt64)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Decimal,System.Decimal,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Decimal,System.Decimal,System.String)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Decimal,System.Decimal)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Double,System.Double,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Double,System.Double,System.String)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Double,System.Double)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Single,System.Single,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Single,System.Single,System.String)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.Single,System.Single)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.IComparable,System.IComparable,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.IComparable,System.IComparable,System.String)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Less(System.IComparable,System.IComparable)">

+            <summary>

+            Verifies that the first value is less than the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Int32,System.Int32,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Int32,System.Int32,System.String)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Int32,System.Int32)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.UInt32,System.UInt32,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.UInt32,System.UInt32,System.String)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.UInt32,System.UInt32)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Int64,System.Int64,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Int64,System.Int64,System.String)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Int64,System.Int64)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.UInt64,System.UInt64,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.UInt64,System.UInt64,System.String)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.UInt64,System.UInt64)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Decimal,System.Decimal,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Decimal,System.Decimal,System.String)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Decimal,System.Decimal)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Double,System.Double,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Double,System.Double,System.String)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Double,System.Double)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Single,System.Single,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Single,System.Single,System.String)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.Single,System.Single)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.IComparable,System.IComparable,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.IComparable,System.IComparable,System.String)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.GreaterOrEqual(System.IComparable,System.IComparable)">

+            <summary>

+            Verifies that the first value is greater than or equal tothe second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be greater</param>

+            <param name="arg2">The second value, expected to be less</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Int32,System.Int32,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Int32,System.Int32,System.String)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Int32,System.Int32)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.UInt32,System.UInt32,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.UInt32,System.UInt32,System.String)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.UInt32,System.UInt32)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Int64,System.Int64,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Int64,System.Int64,System.String)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Int64,System.Int64)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.UInt64,System.UInt64,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.UInt64,System.UInt64,System.String)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.UInt64,System.UInt64)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Decimal,System.Decimal,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Decimal,System.Decimal,System.String)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Decimal,System.Decimal)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Double,System.Double,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Double,System.Double,System.String)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Double,System.Double)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Single,System.Single,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Single,System.Single,System.String)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.Single,System.Single)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.IComparable,System.IComparable,System.String,System.Object[])">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.IComparable,System.IComparable,System.String)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.LessOrEqual(System.IComparable,System.IComparable)">

+            <summary>

+            Verifies that the first value is less than or equal to the second

+            value. If it is not, then an

+            <see cref="T:NUnit.Framework.AssertionException"/> is thrown. 

+            </summary>

+            <param name="arg1">The first value, expected to be less</param>

+            <param name="arg2">The second value, expected to be greater</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Contains(System.Object,System.Collections.ICollection,System.String,System.Object[])">

+            <summary>

+            Asserts that an object is contained in a list.

+            </summary>

+            <param name="expected">The expected object</param>

+            <param name="actual">The list to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Array of objects to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Contains(System.Object,System.Collections.ICollection,System.String)">

+            <summary>

+            Asserts that an object is contained in a list.

+            </summary>

+            <param name="expected">The expected object</param>

+            <param name="actual">The list to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assert.Contains(System.Object,System.Collections.ICollection)">

+            <summary>

+            Asserts that an object is contained in a list.

+            </summary>

+            <param name="expected">The expected object</param>

+            <param name="actual">The list to be examined</param>

+        </member>

+        <member name="P:NUnit.Framework.Assert.Counter">

+            <summary>

+            Gets the number of assertions executed so far and 

+            resets the counter to zero.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.AssertionHelper">

+            <summary>

+            AssertionHelper is an optional base class for user tests,

+            allowing the use of shorter names for constraints and

+            asserts and avoiding conflict with the definition of 

+            <see cref="T:NUnit.Framework.Is"/>, from which it inherits much of its

+            behavior, in certain mock object frameworks.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Expect(System.Object,NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure. Works

+            identically to <see cref="M:NUnit.Framework.Assert.That(System.Object,NUnit.Framework.Constraints.IResolveConstraint)"/>

+            </summary>

+            <param name="constraint">A Constraint to be applied</param>

+            <param name="actual">The actual value to test</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Expect(System.Object,NUnit.Framework.Constraints.IResolveConstraint,System.String)">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure. Works

+            identically to <see cref="M:NUnit.Framework.Assert.That(System.Object,NUnit.Framework.Constraints.IResolveConstraint,System.String)"/>

+            </summary>

+            <param name="constraint">A Constraint to be applied</param>

+            <param name="actual">The actual value to test</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Expect(System.Object,NUnit.Framework.Constraints.IResolveConstraint,System.String,System.Object[])">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure. Works

+            identically to <see cref="M:NUnit.Framework.Assert.That(System.Object,NUnit.Framework.Constraints.IResolveConstraint,System.String,System.Object[])"/>

+            </summary>

+            <param name="constraint">A Constraint to be applied</param>

+            <param name="actual">The actual value to test</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Expect(NUnit.Framework.Constraints.ActualValueDelegate,NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="expr">A Constraint expression to be applied</param>

+            <param name="del">An ActualValueDelegate returning the value to be tested</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Expect(NUnit.Framework.Constraints.ActualValueDelegate,NUnit.Framework.Constraints.IResolveConstraint,System.String)">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="expr">A Constraint expression to be applied</param>

+            <param name="del">An ActualValueDelegate returning the value to be tested</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Expect(NUnit.Framework.Constraints.ActualValueDelegate,NUnit.Framework.Constraints.IResolveConstraint,System.String,System.Object[])">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="del">An ActualValueDelegate returning the value to be tested</param>

+            <param name="expr">A Constraint expression to be applied</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Expect``1(``0@,NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Apply a constraint to a referenced value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="constraint">A Constraint to be applied</param>

+            <param name="actual">The actual value to test</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Expect``1(``0@,NUnit.Framework.Constraints.IResolveConstraint,System.String)">

+            <summary>

+            Apply a constraint to a referenced value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="constraint">A Constraint to be applied</param>

+            <param name="actual">The actual value to test</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Expect``1(``0@,NUnit.Framework.Constraints.IResolveConstraint,System.String,System.Object[])">

+            <summary>

+            Apply a constraint to a referenced value, succeeding if the constraint

+            is satisfied and throwing an assertion exception on failure.

+            </summary>

+            <param name="expression">A Constraint to be applied</param>

+            <param name="actual">The actual value to test</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Expect(System.Boolean,System.String,System.Object[])">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>. Works Identically to 

+            <see cref="M:NUnit.Framework.Assert.That(System.Boolean,System.String,System.Object[])"/>.

+            </summary> 

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display if the condition is false</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Expect(System.Boolean,System.String)">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>. Works Identically to 

+            <see cref="M:NUnit.Framework.Assert.That(System.Boolean,System.String)"/>.

+            </summary>

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display if the condition is false</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Expect(System.Boolean)">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.AssertionException"/>. Works Identically to <see cref="M:NUnit.Framework.Assert.That(System.Boolean)"/>.

+            </summary>

+            <param name="condition">The evaluated condition</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Expect(NUnit.Framework.TestDelegate,NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Asserts that the code represented by a delegate throws an exception

+            that satisfies the constraint provided.

+            </summary>

+            <param name="code">A TestDelegate to be executed</param>

+            <param name="constraint">A ThrowsConstraint used in the test</param>

+        </member>

+        <member name="M:NUnit.Framework.AssertionHelper.Map(System.Collections.ICollection)">

+            <summary>

+            Returns a ListMapper based on a collection.

+            </summary>

+            <param name="original">The original collection</param>

+            <returns></returns>

+        </member>

+        <member name="T:NUnit.Framework.Assume">

+            <summary>

+            Provides static methods to express the assumptions

+            that must be met for a test to give a meaningful

+            result. If an assumption is not met, the test

+            should produce an inconclusive result.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Assume.Equals(System.Object,System.Object)">

+            <summary>

+            The Equals method throws an AssertionException. This is done 

+            to make sure there is no mistake by calling this function.

+            </summary>

+            <param name="a"></param>

+            <param name="b"></param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.ReferenceEquals(System.Object,System.Object)">

+            <summary>

+            override the default ReferenceEquals to throw an AssertionException. This 

+            implementation makes sure there is no mistake in calling this function 

+            as part of Assert. 

+            </summary>

+            <param name="a"></param>

+            <param name="b"></param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.That(System.Object,NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an InconclusiveException on failure.

+            </summary>

+            <param name="expression">A Constraint expression to be applied</param>

+            <param name="actual">The actual value to test</param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.That(System.Object,NUnit.Framework.Constraints.IResolveConstraint,System.String)">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an InconclusiveException on failure.

+            </summary>

+            <param name="expression">A Constraint expression to be applied</param>

+            <param name="actual">The actual value to test</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.That(System.Object,NUnit.Framework.Constraints.IResolveConstraint,System.String,System.Object[])">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an InconclusiveException on failure.

+            </summary>

+            <param name="expression">A Constraint expression to be applied</param>

+            <param name="actual">The actual value to test</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.That(NUnit.Framework.Constraints.ActualValueDelegate,NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an InconclusiveException on failure.

+            </summary>

+            <param name="expr">A Constraint expression to be applied</param>

+            <param name="del">An ActualValueDelegate returning the value to be tested</param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.That(NUnit.Framework.Constraints.ActualValueDelegate,NUnit.Framework.Constraints.IResolveConstraint,System.String)">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an InconclusiveException on failure.

+            </summary>

+            <param name="expr">A Constraint expression to be applied</param>

+            <param name="del">An ActualValueDelegate returning the value to be tested</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.That(NUnit.Framework.Constraints.ActualValueDelegate,NUnit.Framework.Constraints.IResolveConstraint,System.String,System.Object[])">

+            <summary>

+            Apply a constraint to an actual value, succeeding if the constraint

+            is satisfied and throwing an InconclusiveException on failure.

+            </summary>

+            <param name="del">An ActualValueDelegate returning the value to be tested</param>

+            <param name="expr">A Constraint expression to be applied</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.That``1(``0@,NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Apply a constraint to a referenced value, succeeding if the constraint

+            is satisfied and throwing an InconclusiveException on failure.

+            </summary>

+            <param name="expression">A Constraint expression to be applied</param>

+            <param name="actual">The actual value to test</param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.That``1(``0@,NUnit.Framework.Constraints.IResolveConstraint,System.String)">

+            <summary>

+            Apply a constraint to a referenced value, succeeding if the constraint

+            is satisfied and throwing an InconclusiveException on failure.

+            </summary>

+            <param name="expression">A Constraint expression to be applied</param>

+            <param name="actual">The actual value to test</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.That``1(``0@,NUnit.Framework.Constraints.IResolveConstraint,System.String,System.Object[])">

+            <summary>

+            Apply a constraint to a referenced value, succeeding if the constraint

+            is satisfied and throwing an InconclusiveException on failure.

+            </summary>

+            <param name="expression">A Constraint expression to be applied</param>

+            <param name="actual">The actual value to test</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.That(System.Boolean,System.String,System.Object[])">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.InconclusiveException"/>.

+            </summary> 

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display if the condition is false</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.That(System.Boolean,System.String)">

+            <summary>

+            Asserts that a condition is true. If the condition is false the method throws

+            an <see cref="T:NUnit.Framework.InconclusiveException"/>.

+            </summary>

+            <param name="condition">The evaluated condition</param>

+            <param name="message">The message to display if the condition is false</param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.That(System.Boolean)">

+            <summary>

+            Asserts that a condition is true. If the condition is false the 

+            method throws an <see cref="T:NUnit.Framework.InconclusiveException"/>.

+            </summary>

+            <param name="condition">The evaluated condition</param>

+        </member>

+        <member name="M:NUnit.Framework.Assume.That(NUnit.Framework.TestDelegate,NUnit.Framework.Constraints.IResolveConstraint)">

+            <summary>

+            Asserts that the code represented by a delegate throws an exception

+            that satisfies the constraint provided.

+            </summary>

+            <param name="code">A TestDelegate to be executed</param>

+            <param name="constraint">A ThrowsConstraint used in the test</param>

+        </member>

+        <member name="T:NUnit.Framework.CollectionAssert">

+            <summary>

+            A set of Assert methods operationg on one or more collections

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.Equals(System.Object,System.Object)">

+            <summary>

+            The Equals method throws an AssertionException. This is done 

+            to make sure there is no mistake by calling this function.

+            </summary>

+            <param name="a"></param>

+            <param name="b"></param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.ReferenceEquals(System.Object,System.Object)">

+            <summary>

+            override the default ReferenceEquals to throw an AssertionException. This 

+            implementation makes sure there is no mistake in calling this function 

+            as part of Assert. 

+            </summary>

+            <param name="a"></param>

+            <param name="b"></param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AllItemsAreInstancesOfType(System.Collections.IEnumerable,System.Type)">

+            <summary>

+            Asserts that all items contained in collection are of the type specified by expectedType.

+            </summary>

+            <param name="collection">IEnumerable containing objects to be considered</param>

+            <param name="expectedType">System.Type that all objects in collection must be instances of</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AllItemsAreInstancesOfType(System.Collections.IEnumerable,System.Type,System.String)">

+            <summary>

+            Asserts that all items contained in collection are of the type specified by expectedType.

+            </summary>

+            <param name="collection">IEnumerable containing objects to be considered</param>

+            <param name="expectedType">System.Type that all objects in collection must be instances of</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AllItemsAreInstancesOfType(System.Collections.IEnumerable,System.Type,System.String,System.Object[])">

+            <summary>

+            Asserts that all items contained in collection are of the type specified by expectedType.

+            </summary>

+            <param name="collection">IEnumerable containing objects to be considered</param>

+            <param name="expectedType">System.Type that all objects in collection must be instances of</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AllItemsAreNotNull(System.Collections.IEnumerable)">

+            <summary>

+            Asserts that all items contained in collection are not equal to null.

+            </summary>

+            <param name="collection">IEnumerable containing objects to be considered</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AllItemsAreNotNull(System.Collections.IEnumerable,System.String)">

+            <summary>

+            Asserts that all items contained in collection are not equal to null.

+            </summary>

+            <param name="collection">IEnumerable containing objects to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AllItemsAreNotNull(System.Collections.IEnumerable,System.String,System.Object[])">

+            <summary>

+            Asserts that all items contained in collection are not equal to null.

+            </summary>

+            <param name="collection">IEnumerable of objects to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AllItemsAreUnique(System.Collections.IEnumerable)">

+            <summary>

+            Ensures that every object contained in collection exists within the collection

+            once and only once.

+            </summary>

+            <param name="collection">IEnumerable of objects to be considered</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AllItemsAreUnique(System.Collections.IEnumerable,System.String)">

+            <summary>

+            Ensures that every object contained in collection exists within the collection

+            once and only once.

+            </summary>

+            <param name="collection">IEnumerable of objects to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AllItemsAreUnique(System.Collections.IEnumerable,System.String,System.Object[])">

+            <summary>

+            Ensures that every object contained in collection exists within the collection

+            once and only once.

+            </summary>

+            <param name="collection">IEnumerable of objects to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreEqual(System.Collections.IEnumerable,System.Collections.IEnumerable)">

+            <summary>

+            Asserts that expected and actual are exactly equal.  The collections must have the same count, 

+            and contain the exact same objects in the same order.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreEqual(System.Collections.IEnumerable,System.Collections.IEnumerable,System.Collections.IComparer)">

+            <summary>

+            Asserts that expected and actual are exactly equal.  The collections must have the same count, 

+            and contain the exact same objects in the same order.

+            If comparer is not null then it will be used to compare the objects.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="comparer">The IComparer to use in comparing objects from each IEnumerable</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreEqual(System.Collections.IEnumerable,System.Collections.IEnumerable,System.String)">

+            <summary>

+            Asserts that expected and actual are exactly equal.  The collections must have the same count, 

+            and contain the exact same objects in the same order.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreEqual(System.Collections.IEnumerable,System.Collections.IEnumerable,System.Collections.IComparer,System.String)">

+            <summary>

+            Asserts that expected and actual are exactly equal.  The collections must have the same count, 

+            and contain the exact same objects in the same order.

+            If comparer is not null then it will be used to compare the objects.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="comparer">The IComparer to use in comparing objects from each IEnumerable</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreEqual(System.Collections.IEnumerable,System.Collections.IEnumerable,System.String,System.Object[])">

+            <summary>

+            Asserts that expected and actual are exactly equal.  The collections must have the same count, 

+            and contain the exact same objects in the same order.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreEqual(System.Collections.IEnumerable,System.Collections.IEnumerable,System.Collections.IComparer,System.String,System.Object[])">

+            <summary>

+            Asserts that expected and actual are exactly equal.  The collections must have the same count, 

+            and contain the exact same objects in the same order.

+            If comparer is not null then it will be used to compare the objects.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="comparer">The IComparer to use in comparing objects from each IEnumerable</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreEquivalent(System.Collections.IEnumerable,System.Collections.IEnumerable)">

+            <summary>

+            Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreEquivalent(System.Collections.IEnumerable,System.Collections.IEnumerable,System.String)">

+            <summary>

+            Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreEquivalent(System.Collections.IEnumerable,System.Collections.IEnumerable,System.String,System.Object[])">

+            <summary>

+            Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreNotEqual(System.Collections.IEnumerable,System.Collections.IEnumerable)">

+            <summary>

+            Asserts that expected and actual are not exactly equal.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreNotEqual(System.Collections.IEnumerable,System.Collections.IEnumerable,System.Collections.IComparer)">

+            <summary>

+            Asserts that expected and actual are not exactly equal.

+            If comparer is not null then it will be used to compare the objects.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="comparer">The IComparer to use in comparing objects from each IEnumerable</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreNotEqual(System.Collections.IEnumerable,System.Collections.IEnumerable,System.String)">

+            <summary>

+            Asserts that expected and actual are not exactly equal.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreNotEqual(System.Collections.IEnumerable,System.Collections.IEnumerable,System.Collections.IComparer,System.String)">

+            <summary>

+            Asserts that expected and actual are not exactly equal.

+            If comparer is not null then it will be used to compare the objects.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="comparer">The IComparer to use in comparing objects from each IEnumerable</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreNotEqual(System.Collections.IEnumerable,System.Collections.IEnumerable,System.String,System.Object[])">

+            <summary>

+            Asserts that expected and actual are not exactly equal.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreNotEqual(System.Collections.IEnumerable,System.Collections.IEnumerable,System.Collections.IComparer,System.String,System.Object[])">

+            <summary>

+            Asserts that expected and actual are not exactly equal.

+            If comparer is not null then it will be used to compare the objects.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="comparer">The IComparer to use in comparing objects from each IEnumerable</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreNotEquivalent(System.Collections.IEnumerable,System.Collections.IEnumerable)">

+            <summary>

+            Asserts that expected and actual are not equivalent.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreNotEquivalent(System.Collections.IEnumerable,System.Collections.IEnumerable,System.String)">

+            <summary>

+            Asserts that expected and actual are not equivalent.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.AreNotEquivalent(System.Collections.IEnumerable,System.Collections.IEnumerable,System.String,System.Object[])">

+            <summary>

+            Asserts that expected and actual are not equivalent.

+            </summary>

+            <param name="expected">The first IEnumerable of objects to be considered</param>

+            <param name="actual">The second IEnumerable of objects to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.Contains(System.Collections.IEnumerable,System.Object)">

+            <summary>

+            Asserts that collection contains actual as an item.

+            </summary>

+            <param name="collection">IEnumerable of objects to be considered</param>

+            <param name="actual">Object to be found within collection</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.Contains(System.Collections.IEnumerable,System.Object,System.String)">

+            <summary>

+            Asserts that collection contains actual as an item.

+            </summary>

+            <param name="collection">IEnumerable of objects to be considered</param>

+            <param name="actual">Object to be found within collection</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.Contains(System.Collections.IEnumerable,System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that collection contains actual as an item.

+            </summary>

+            <param name="collection">IEnumerable of objects to be considered</param>

+            <param name="actual">Object to be found within collection</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.DoesNotContain(System.Collections.IEnumerable,System.Object)">

+            <summary>

+            Asserts that collection does not contain actual as an item.

+            </summary>

+            <param name="collection">IEnumerable of objects to be considered</param>

+            <param name="actual">Object that cannot exist within collection</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.DoesNotContain(System.Collections.IEnumerable,System.Object,System.String)">

+            <summary>

+            Asserts that collection does not contain actual as an item.

+            </summary>

+            <param name="collection">IEnumerable of objects to be considered</param>

+            <param name="actual">Object that cannot exist within collection</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.DoesNotContain(System.Collections.IEnumerable,System.Object,System.String,System.Object[])">

+            <summary>

+            Asserts that collection does not contain actual as an item.

+            </summary>

+            <param name="collection">IEnumerable of objects to be considered</param>

+            <param name="actual">Object that cannot exist within collection</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsNotSubsetOf(System.Collections.IEnumerable,System.Collections.IEnumerable)">

+            <summary>

+            Asserts that superset is not a subject of subset.

+            </summary>

+            <param name="subset">The IEnumerable superset to be considered</param>

+            <param name="superset">The IEnumerable subset to be considered</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsNotSubsetOf(System.Collections.IEnumerable,System.Collections.IEnumerable,System.String)">

+            <summary>

+            Asserts that superset is not a subject of subset.

+            </summary>

+            <param name="subset">The IEnumerable superset to be considered</param>

+            <param name="superset">The IEnumerable subset to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsNotSubsetOf(System.Collections.IEnumerable,System.Collections.IEnumerable,System.String,System.Object[])">

+            <summary>

+            Asserts that superset is not a subject of subset.

+            </summary>

+            <param name="subset">The IEnumerable superset to be considered</param>

+            <param name="superset">The IEnumerable subset to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsSubsetOf(System.Collections.IEnumerable,System.Collections.IEnumerable)">

+            <summary>

+            Asserts that superset is a subset of subset.

+            </summary>

+            <param name="subset">The IEnumerable superset to be considered</param>

+            <param name="superset">The IEnumerable subset to be considered</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsSubsetOf(System.Collections.IEnumerable,System.Collections.IEnumerable,System.String)">

+            <summary>

+            Asserts that superset is a subset of subset.

+            </summary>

+            <param name="subset">The IEnumerable superset to be considered</param>

+            <param name="superset">The IEnumerable subset to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsSubsetOf(System.Collections.IEnumerable,System.Collections.IEnumerable,System.String,System.Object[])">

+            <summary>

+            Asserts that superset is a subset of subset.

+            </summary>

+            <param name="subset">The IEnumerable superset to be considered</param>

+            <param name="superset">The IEnumerable subset to be considered</param>

+            <param name="message">The message that will be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsEmpty(System.Collections.IEnumerable,System.String,System.Object[])">

+            <summary>

+            Assert that an array, list or other collection is empty

+            </summary>

+            <param name="collection">An array, list or other collection implementing IEnumerable</param>

+            <param name="message">The message to be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsEmpty(System.Collections.IEnumerable,System.String)">

+            <summary>

+            Assert that an array, list or other collection is empty

+            </summary>

+            <param name="collection">An array, list or other collection implementing IEnumerable</param>

+            <param name="message">The message to be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsEmpty(System.Collections.IEnumerable)">

+            <summary>

+            Assert that an array,list or other collection is empty

+            </summary>

+            <param name="collection">An array, list or other collection implementing IEnumerable</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsNotEmpty(System.Collections.IEnumerable,System.String,System.Object[])">

+            <summary>

+            Assert that an array, list or other collection is empty

+            </summary>

+            <param name="collection">An array, list or other collection implementing IEnumerable</param>

+            <param name="message">The message to be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsNotEmpty(System.Collections.IEnumerable,System.String)">

+            <summary>

+            Assert that an array, list or other collection is empty

+            </summary>

+            <param name="collection">An array, list or other collection implementing IEnumerable</param>

+            <param name="message">The message to be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsNotEmpty(System.Collections.IEnumerable)">

+            <summary>

+            Assert that an array,list or other collection is empty

+            </summary>

+            <param name="collection">An array, list or other collection implementing IEnumerable</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsOrdered(System.Collections.IEnumerable,System.String,System.Object[])">

+            <summary>

+            Assert that an array, list or other collection is ordered

+            </summary>

+            <param name="collection">An array, list or other collection implementing IEnumerable</param>

+            <param name="message">The message to be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsOrdered(System.Collections.IEnumerable,System.String)">

+            <summary>

+            Assert that an array, list or other collection is ordered

+            </summary>

+            <param name="collection">An array, list or other collection implementing IEnumerable</param>

+            <param name="message">The message to be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsOrdered(System.Collections.IEnumerable)">

+            <summary>

+            Assert that an array, list or other collection is ordered

+            </summary>

+            <param name="collection">An array, list or other collection implementing IEnumerable</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsOrdered(System.Collections.IEnumerable,System.Collections.IComparer,System.String,System.Object[])">

+            <summary>

+            Assert that an array, list or other collection is ordered

+            </summary>

+            <param name="collection">An array, list or other collection implementing IEnumerable</param>

+            <param name="comparer">A custom comparer to perform the comparisons</param>

+            <param name="message">The message to be displayed on failure</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsOrdered(System.Collections.IEnumerable,System.Collections.IComparer,System.String)">

+            <summary>

+            Assert that an array, list or other collection is ordered

+            </summary>

+            <param name="collection">An array, list or other collection implementing IEnumerable</param>

+            <param name="comparer">A custom comparer to perform the comparisons</param>

+            <param name="message">The message to be displayed on failure</param>

+        </member>

+        <member name="M:NUnit.Framework.CollectionAssert.IsOrdered(System.Collections.IEnumerable,System.Collections.IComparer)">

+            <summary>

+            Assert that an array, list or other collection is ordered

+            </summary>

+            <param name="collection">An array, list or other collection implementing IEnumerable</param>

+            <param name="comparer">A custom comparer to perform the comparisons</param>

+        </member>

+        <member name="T:NUnit.Framework.Contains">

+            <summary>

+            Static helper class used in the constraint-based syntax

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Contains.Substring(System.String)">

+            <summary>

+            Creates a new SubstringConstraint

+            </summary>

+            <param name="substring">The value of the substring</param>

+            <returns>A SubstringConstraint</returns>

+        </member>

+        <member name="M:NUnit.Framework.Contains.Item(System.Object)">

+            <summary>

+            Creates a new CollectionContainsConstraint.

+            </summary>

+            <param name="item">The item that should be found.</param>

+            <returns>A new CollectionContainsConstraint</returns>

+        </member>

+        <member name="T:NUnit.Framework.DirectoryAssert">

+            <summary>

+            Summary description for DirectoryAssert

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.Equals(System.Object,System.Object)">

+            <summary>

+            The Equals method throws an AssertionException. This is done 

+            to make sure there is no mistake by calling this function.

+            </summary>

+            <param name="a"></param>

+            <param name="b"></param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.ReferenceEquals(System.Object,System.Object)">

+            <summary>

+            override the default ReferenceEquals to throw an AssertionException. This 

+            implementation makes sure there is no mistake in calling this function 

+            as part of Assert. 

+            </summary>

+            <param name="a"></param>

+            <param name="b"></param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.#ctor">

+            <summary>

+            We don't actually want any instances of this object, but some people

+            like to inherit from it to add other static methods. Hence, the

+            protected constructor disallows any instances of this object. 

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.AreEqual(System.IO.DirectoryInfo,System.IO.DirectoryInfo,System.String,System.Object[])">

+            <summary>

+            Verifies that two directories are equal.  Two directories are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A directory containing the value that is expected</param>

+            <param name="actual">A directory containing the actual value</param>

+            <param name="message">The message to display if directories are not equal</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.AreEqual(System.IO.DirectoryInfo,System.IO.DirectoryInfo,System.String)">

+            <summary>

+            Verifies that two directories are equal.  Two directories are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A directory containing the value that is expected</param>

+            <param name="actual">A directory containing the actual value</param>

+            <param name="message">The message to display if directories are not equal</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.AreEqual(System.IO.DirectoryInfo,System.IO.DirectoryInfo)">

+            <summary>

+            Verifies that two directories are equal.  Two directories are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A directory containing the value that is expected</param>

+            <param name="actual">A directory containing the actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.AreEqual(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Verifies that two directories are equal.  Two directories are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A directory path string containing the value that is expected</param>

+            <param name="actual">A directory path string containing the actual value</param>

+            <param name="message">The message to display if directories are not equal</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.AreEqual(System.String,System.String,System.String)">

+            <summary>

+            Verifies that two directories are equal.  Two directories are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A directory path string containing the value that is expected</param>

+            <param name="actual">A directory path string containing the actual value</param>

+            <param name="message">The message to display if directories are not equal</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.AreEqual(System.String,System.String)">

+            <summary>

+            Verifies that two directories are equal.  Two directories are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A directory path string containing the value that is expected</param>

+            <param name="actual">A directory path string containing the actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.AreNotEqual(System.IO.DirectoryInfo,System.IO.DirectoryInfo,System.String,System.Object[])">

+            <summary>

+            Asserts that two directories are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A directory containing the value that is expected</param>

+            <param name="actual">A directory containing the actual value</param>

+            <param name="message">The message to display if directories are not equal</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.AreNotEqual(System.IO.DirectoryInfo,System.IO.DirectoryInfo,System.String)">

+            <summary>

+            Asserts that two directories are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A directory containing the value that is expected</param>

+            <param name="actual">A directory containing the actual value</param>

+            <param name="message">The message to display if directories are not equal</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.AreNotEqual(System.IO.DirectoryInfo,System.IO.DirectoryInfo)">

+            <summary>

+            Asserts that two directories are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A directory containing the value that is expected</param>

+            <param name="actual">A directory containing the actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.AreNotEqual(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that two directories are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A directory path string containing the value that is expected</param>

+            <param name="actual">A directory path string containing the actual value</param>

+            <param name="message">The message to display if directories are equal</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.AreNotEqual(System.String,System.String,System.String)">

+            <summary>

+            Asserts that two directories are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A directory path string containing the value that is expected</param>

+            <param name="actual">A directory path string containing the actual value</param>

+            <param name="message">The message to display if directories are equal</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.AreNotEqual(System.String,System.String)">

+            <summary>

+            Asserts that two directories are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A directory path string containing the value that is expected</param>

+            <param name="actual">A directory path string containing the actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsEmpty(System.IO.DirectoryInfo,System.String,System.Object[])">

+            <summary>

+            Asserts that the directory is empty. If it is not empty

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="message">The message to display if directories are not equal</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsEmpty(System.IO.DirectoryInfo,System.String)">

+            <summary>

+            Asserts that the directory is empty. If it is not empty

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="message">The message to display if directories are not equal</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsEmpty(System.IO.DirectoryInfo)">

+            <summary>

+            Asserts that the directory is empty. If it is not empty

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsEmpty(System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that the directory is empty. If it is not empty

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="message">The message to display if directories are not equal</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsEmpty(System.String,System.String)">

+            <summary>

+            Asserts that the directory is empty. If it is not empty

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="message">The message to display if directories are not equal</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsEmpty(System.String)">

+            <summary>

+            Asserts that the directory is empty. If it is not empty

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsNotEmpty(System.IO.DirectoryInfo,System.String,System.Object[])">

+            <summary>

+            Asserts that the directory is not empty. If it is empty

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="message">The message to display if directories are not equal</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsNotEmpty(System.IO.DirectoryInfo,System.String)">

+            <summary>

+            Asserts that the directory is not empty. If it is empty

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="message">The message to display if directories are not equal</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsNotEmpty(System.IO.DirectoryInfo)">

+            <summary>

+            Asserts that the directory is not empty. If it is empty

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsNotEmpty(System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that the directory is not empty. If it is empty

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="message">The message to display if directories are not equal</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsNotEmpty(System.String,System.String)">

+            <summary>

+            Asserts that the directory is not empty. If it is empty

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="message">The message to display if directories are not equal</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsNotEmpty(System.String)">

+            <summary>

+            Asserts that the directory is not empty. If it is empty

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsWithin(System.IO.DirectoryInfo,System.IO.DirectoryInfo,System.String,System.Object[])">

+            <summary>

+            Asserts that path contains actual as a subdirectory or

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="actual">sub-directory asserted to exist under directory</param>

+            <param name="message">The message to display if directory is not within the path</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsWithin(System.IO.DirectoryInfo,System.IO.DirectoryInfo,System.String)">

+            <summary>

+            Asserts that path contains actual as a subdirectory or

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="actual">sub-directory asserted to exist under directory</param>

+            <param name="message">The message to display if directory is not within the path</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsWithin(System.IO.DirectoryInfo,System.IO.DirectoryInfo)">

+            <summary>

+            Asserts that path contains actual as a subdirectory or

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="actual">sub-directory asserted to exist under directory</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsWithin(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that path contains actual as a subdirectory or

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="actual">sub-directory asserted to exist under directory</param>

+            <param name="message">The message to display if directory is not within the path</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsWithin(System.String,System.String,System.String)">

+            <summary>

+            Asserts that path contains actual as a subdirectory or

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="actual">sub-directory asserted to exist under directory</param>

+            <param name="message">The message to display if directory is not within the path</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsWithin(System.String,System.String)">

+            <summary>

+            Asserts that path contains actual as a subdirectory or

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="actual">sub-directory asserted to exist under directory</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsNotWithin(System.IO.DirectoryInfo,System.IO.DirectoryInfo,System.String,System.Object[])">

+            <summary>

+            Asserts that path does not contain actual as a subdirectory or

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="actual">sub-directory asserted to exist under directory</param>

+            <param name="message">The message to display if directory is not within the path</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsNotWithin(System.IO.DirectoryInfo,System.IO.DirectoryInfo,System.String)">

+            <summary>

+            Asserts that path does not contain actual as a subdirectory or

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="actual">sub-directory asserted to exist under directory</param>

+            <param name="message">The message to display if directory is not within the path</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsNotWithin(System.IO.DirectoryInfo,System.IO.DirectoryInfo)">

+            <summary>

+            Asserts that path does not contain actual as a subdirectory or

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="actual">sub-directory asserted to exist under directory</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsNotWithin(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that path does not contain actual as a subdirectory or

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="actual">sub-directory asserted to exist under directory</param>

+            <param name="message">The message to display if directory is not within the path</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsNotWithin(System.String,System.String,System.String)">

+            <summary>

+            Asserts that path does not contain actual as a subdirectory or

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="actual">sub-directory asserted to exist under directory</param>

+            <param name="message">The message to display if directory is not within the path</param>

+        </member>

+        <member name="M:NUnit.Framework.DirectoryAssert.IsNotWithin(System.String,System.String)">

+            <summary>

+            Asserts that path does not contain actual as a subdirectory or

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="directory">A directory to search</param>

+            <param name="actual">sub-directory asserted to exist under directory</param>

+        </member>

+        <member name="T:NUnit.Framework.FileAssert">

+            <summary>

+            Summary description for FileAssert.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.Equals(System.Object,System.Object)">

+            <summary>

+            The Equals method throws an AssertionException. This is done 

+            to make sure there is no mistake by calling this function.

+            </summary>

+            <param name="a"></param>

+            <param name="b"></param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.ReferenceEquals(System.Object,System.Object)">

+            <summary>

+            override the default ReferenceEquals to throw an AssertionException. This 

+            implementation makes sure there is no mistake in calling this function 

+            as part of Assert. 

+            </summary>

+            <param name="a"></param>

+            <param name="b"></param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.#ctor">

+            <summary>

+            We don't actually want any instances of this object, but some people

+            like to inherit from it to add other static methods. Hence, the

+            protected constructor disallows any instances of this object. 

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreEqual(System.IO.Stream,System.IO.Stream,System.String,System.Object[])">

+            <summary>

+            Verifies that two Streams are equal.  Two Streams are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected Stream</param>

+            <param name="actual">The actual Stream</param>

+            <param name="message">The message to display if Streams are not equal</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreEqual(System.IO.Stream,System.IO.Stream,System.String)">

+            <summary>

+            Verifies that two Streams are equal.  Two Streams are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected Stream</param>

+            <param name="actual">The actual Stream</param>

+            <param name="message">The message to display if objects are not equal</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreEqual(System.IO.Stream,System.IO.Stream)">

+            <summary>

+            Verifies that two Streams are equal.  Two Streams are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected Stream</param>

+            <param name="actual">The actual Stream</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreEqual(System.IO.FileInfo,System.IO.FileInfo,System.String,System.Object[])">

+            <summary>

+            Verifies that two files are equal.  Two files are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A file containing the value that is expected</param>

+            <param name="actual">A file containing the actual value</param>

+            <param name="message">The message to display if Streams are not equal</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreEqual(System.IO.FileInfo,System.IO.FileInfo,System.String)">

+            <summary>

+            Verifies that two files are equal.  Two files are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A file containing the value that is expected</param>

+            <param name="actual">A file containing the actual value</param>

+            <param name="message">The message to display if objects are not equal</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreEqual(System.IO.FileInfo,System.IO.FileInfo)">

+            <summary>

+            Verifies that two files are equal.  Two files are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A file containing the value that is expected</param>

+            <param name="actual">A file containing the actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreEqual(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Verifies that two files are equal.  Two files are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The path to a file containing the value that is expected</param>

+            <param name="actual">The path to a file containing the actual value</param>

+            <param name="message">The message to display if Streams are not equal</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreEqual(System.String,System.String,System.String)">

+            <summary>

+            Verifies that two files are equal.  Two files are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The path to a file containing the value that is expected</param>

+            <param name="actual">The path to a file containing the actual value</param>

+            <param name="message">The message to display if objects are not equal</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreEqual(System.String,System.String)">

+            <summary>

+            Verifies that two files are equal.  Two files are considered

+            equal if both are null, or if both have the same value byte for byte.

+            If they are not equal an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The path to a file containing the value that is expected</param>

+            <param name="actual">The path to a file containing the actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreNotEqual(System.IO.Stream,System.IO.Stream,System.String,System.Object[])">

+            <summary>

+            Asserts that two Streams are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected Stream</param>

+            <param name="actual">The actual Stream</param>

+            <param name="message">The message to be displayed when the two Stream are the same.</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreNotEqual(System.IO.Stream,System.IO.Stream,System.String)">

+            <summary>

+            Asserts that two Streams are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected Stream</param>

+            <param name="actual">The actual Stream</param>

+            <param name="message">The message to be displayed when the Streams are the same.</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreNotEqual(System.IO.Stream,System.IO.Stream)">

+            <summary>

+            Asserts that two Streams are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The expected Stream</param>

+            <param name="actual">The actual Stream</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreNotEqual(System.IO.FileInfo,System.IO.FileInfo,System.String,System.Object[])">

+            <summary>

+            Asserts that two files are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A file containing the value that is expected</param>

+            <param name="actual">A file containing the actual value</param>

+            <param name="message">The message to display if Streams are not equal</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreNotEqual(System.IO.FileInfo,System.IO.FileInfo,System.String)">

+            <summary>

+            Asserts that two files are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A file containing the value that is expected</param>

+            <param name="actual">A file containing the actual value</param>

+            <param name="message">The message to display if objects are not equal</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreNotEqual(System.IO.FileInfo,System.IO.FileInfo)">

+            <summary>

+            Asserts that two files are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">A file containing the value that is expected</param>

+            <param name="actual">A file containing the actual value</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreNotEqual(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that two files are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The path to a file containing the value that is expected</param>

+            <param name="actual">The path to a file containing the actual value</param>

+            <param name="message">The message to display if Streams are not equal</param>

+            <param name="args">Arguments to be used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreNotEqual(System.String,System.String,System.String)">

+            <summary>

+            Asserts that two files are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The path to a file containing the value that is expected</param>

+            <param name="actual">The path to a file containing the actual value</param>

+            <param name="message">The message to display if objects are not equal</param>

+        </member>

+        <member name="M:NUnit.Framework.FileAssert.AreNotEqual(System.String,System.String)">

+            <summary>

+            Asserts that two files are not equal. If they are equal

+            an <see cref="T:NUnit.Framework.AssertionException"/> is thrown.

+            </summary>

+            <param name="expected">The path to a file containing the value that is expected</param>

+            <param name="actual">The path to a file containing the actual value</param>

+        </member>

+        <member name="T:NUnit.Framework.GlobalSettings">

+            <summary>

+            GlobalSettings is a place for setting default values used

+            by the framework in performing asserts.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.GlobalSettings.DefaultFloatingPointTolerance">

+            <summary>

+            Default tolerance for floating point equality

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Has">

+            <summary>

+            Helper class with properties and methods that supply

+            a number of constraints used in Asserts.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Has.Property(System.String)">

+            <summary>

+            Returns a new PropertyConstraintExpression, which will either

+            test for the existence of the named property on the object

+            being tested or apply any following constraint to that property.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Has.Attribute(System.Type)">

+            <summary>

+            Returns a new AttributeConstraint checking for the

+            presence of a particular attribute on an object.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Has.Attribute``1">

+            <summary>

+            Returns a new AttributeConstraint checking for the

+            presence of a particular attribute on an object.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Has.Member(System.Object)">

+            <summary>

+            Returns a new CollectionContainsConstraint checking for the

+            presence of a particular object in the collection.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Has.No">

+            <summary>

+            Returns a ConstraintExpression that negates any

+            following constraint.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Has.All">

+            <summary>

+            Returns a ConstraintExpression, which will apply

+            the following constraint to all members of a collection,

+            succeeding if all of them succeed.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Has.Some">

+            <summary>

+            Returns a ConstraintExpression, which will apply

+            the following constraint to all members of a collection,

+            succeeding if at least one of them succeeds.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Has.None">

+            <summary>

+            Returns a ConstraintExpression, which will apply

+            the following constraint to all members of a collection,

+            succeeding if all of them fail.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Has.Length">

+            <summary>

+            Returns a new ConstraintExpression, which will apply the following

+            constraint to the Length property of the object being tested.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Has.Count">

+            <summary>

+            Returns a new ConstraintExpression, which will apply the following

+            constraint to the Count property of the object being tested.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Has.Message">

+            <summary>

+            Returns a new ConstraintExpression, which will apply the following

+            constraint to the Message property of the object being tested.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Has.InnerException">

+            <summary>

+            Returns a new ConstraintExpression, which will apply the following

+            constraint to the InnerException property of the object being tested.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.IExpectException">

+            <summary>

+            Interface implemented by a user fixture in order to

+            validate any expected exceptions. It is only called

+            for test methods marked with the ExpectedException

+            attribute.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.IExpectException.HandleException(System.Exception)">

+            <summary>

+            Method to handle an expected exception

+            </summary>

+            <param name="ex">The exception to be handled</param>

+        </member>

+        <member name="T:NUnit.Framework.Is">

+            <summary>

+            Helper class with properties and methods that supply

+            a number of constraints used in Asserts.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.EqualTo(System.Object)">

+            <summary>

+            Returns a constraint that tests two items for equality

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.SameAs(System.Object)">

+            <summary>

+            Returns a constraint that tests that two references are the same object

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.GreaterThan(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is greater than the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.GreaterThanOrEqualTo(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is greater than or equal to the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.AtLeast(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is greater than or equal to the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.LessThan(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is less than the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.LessThanOrEqualTo(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is less than or equal to the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.AtMost(System.Object)">

+            <summary>

+            Returns a constraint that tests whether the

+            actual value is less than or equal to the suppled argument

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.TypeOf(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual

+            value is of the exact type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.TypeOf``1">

+            <summary>

+            Returns a constraint that tests whether the actual

+            value is of the exact type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.InstanceOf(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is of the type supplied as an argument or a derived type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.InstanceOf``1">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is of the type supplied as an argument or a derived type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.InstanceOfType(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is of the type supplied as an argument or a derived type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.InstanceOfType``1">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is of the type supplied as an argument or a derived type.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.AssignableFrom(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is assignable from the type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.AssignableFrom``1">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is assignable from the type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.AssignableTo(System.Type)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is assignable from the type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.AssignableTo``1">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is assignable from the type supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.EquivalentTo(System.Collections.IEnumerable)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is a collection containing the same elements as the 

+            collection supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.SubsetOf(System.Collections.IEnumerable)">

+            <summary>

+            Returns a constraint that tests whether the actual value

+            is a subset of the collection supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.StringContaining(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value contains the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.StringStarting(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value starts with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.StringEnding(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value ends with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.StringMatching(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value matches the Regex pattern supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.SamePath(System.String)">

+            <summary>

+            Returns a constraint that tests whether the path provided 

+            is the same as an expected path after canonicalization.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.SubPath(System.String)">

+            <summary>

+            Returns a constraint that tests whether the path provided 

+            is the same path or under an expected path after canonicalization.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.SamePathOrUnder(System.String)">

+            <summary>

+            Returns a constraint that tests whether the path provided 

+            is the same path or under an expected path after canonicalization.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Is.InRange(System.IComparable,System.IComparable)">

+            <summary>

+            Returns a constraint that tests whether the actual value falls 

+            within a specified range.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Is.Not">

+            <summary>

+            Returns a ConstraintExpression that negates any

+            following constraint.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Is.All">

+            <summary>

+            Returns a ConstraintExpression, which will apply

+            the following constraint to all members of a collection,

+            succeeding if all of them succeed.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Is.Null">

+            <summary>

+            Returns a constraint that tests for null

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Is.True">

+            <summary>

+            Returns a constraint that tests for True

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Is.False">

+            <summary>

+            Returns a constraint that tests for False

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Is.NaN">

+            <summary>

+            Returns a constraint that tests for NaN

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Is.Empty">

+            <summary>

+            Returns a constraint that tests for empty

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Is.Unique">

+            <summary>

+            Returns a constraint that tests whether a collection 

+            contains all unique items.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Is.BinarySerializable">

+            <summary>

+            Returns a constraint that tests whether an object graph is serializable in binary format.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Is.XmlSerializable">

+            <summary>

+            Returns a constraint that tests whether an object graph is serializable in xml format.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Is.Ordered">

+            <summary>

+            Returns a constraint that tests whether a collection is ordered

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Iz">

+            <summary>

+            The Iz class is a synonym for Is intended for use in VB,

+            which regards Is as a keyword.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.List">

+            <summary>

+            The List class is a helper class with properties and methods

+            that supply a number of constraints used with lists and collections.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.List.Map(System.Collections.ICollection)">

+            <summary>

+            List.Map returns a ListMapper, which can be used to map

+            the original collection to another collection.

+            </summary>

+            <param name="actual"></param>

+            <returns></returns>

+        </member>

+        <member name="T:NUnit.Framework.ListMapper">

+            <summary>

+            ListMapper is used to transform a collection used as an actual argument

+            producing another collection to be used in the assertion.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.ListMapper.#ctor(System.Collections.ICollection)">

+            <summary>

+            Construct a ListMapper based on a collection

+            </summary>

+            <param name="original">The collection to be transformed</param>

+        </member>

+        <member name="M:NUnit.Framework.ListMapper.Property(System.String)">

+            <summary>

+            Produces a collection containing all the values of a property

+            </summary>

+            <param name="name">The collection of property values</param>

+            <returns></returns>

+        </member>

+        <member name="T:NUnit.Framework.Randomizer">

+            <summary>

+            Randomizer returns a set of random values in a repeatable

+            way, to allow re-running of tests if necessary.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Randomizer.GetRandomizer(System.Reflection.MemberInfo)">

+            <summary>

+            Get a randomizer for a particular member, returning

+            one that has already been created if it exists.

+            This ensures that the same values are generated

+            each time the tests are reloaded.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Randomizer.GetRandomizer(System.Reflection.ParameterInfo)">

+            <summary>

+            Get a randomizer for a particular parameter, returning

+            one that has already been created if it exists.

+            This ensures that the same values are generated

+            each time the tests are reloaded.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Randomizer.#ctor">

+            <summary>

+            Construct a randomizer using a random seed

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Randomizer.#ctor(System.Int32)">

+            <summary>

+            Construct a randomizer using a specified seed

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Randomizer.GetDoubles(System.Int32)">

+            <summary>

+            Return an array of random doubles between 0.0 and 1.0.

+            </summary>

+            <param name="count"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.Randomizer.GetDoubles(System.Double,System.Double,System.Int32)">

+            <summary>

+            Return an array of random doubles with values in a specified range.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Randomizer.GetInts(System.Int32,System.Int32,System.Int32)">

+            <summary>

+            Return an array of random ints with values in a specified range.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Randomizer.RandomSeed">

+            <summary>

+            Get a random seed for use in creating a randomizer.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.SpecialValue">

+            <summary>

+            The SpecialValue enum is used to represent TestCase arguments

+            that cannot be used as arguments to an Attribute.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.SpecialValue.Null">

+            <summary>

+            Null represents a null value, which cannot be used as an 

+            argument to an attriute under .NET 1.x

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.StringAssert">

+            <summary>

+            Basic Asserts on strings.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.Equals(System.Object,System.Object)">

+            <summary>

+            The Equals method throws an AssertionException. This is done 

+            to make sure there is no mistake by calling this function.

+            </summary>

+            <param name="a"></param>

+            <param name="b"></param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.ReferenceEquals(System.Object,System.Object)">

+            <summary>

+            override the default ReferenceEquals to throw an AssertionException. This 

+            implementation makes sure there is no mistake in calling this function 

+            as part of Assert. 

+            </summary>

+            <param name="a"></param>

+            <param name="b"></param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.Contains(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that a string is found within another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Arguments used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.Contains(System.String,System.String,System.String)">

+            <summary>

+            Asserts that a string is found within another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.Contains(System.String,System.String)">

+            <summary>

+            Asserts that a string is found within another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.DoesNotContain(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that a string is not found within another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Arguments used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.DoesNotContain(System.String,System.String,System.String)">

+            <summary>

+            Asserts that a string is found within another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.DoesNotContain(System.String,System.String)">

+            <summary>

+            Asserts that a string is found within another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.StartsWith(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that a string starts with another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Arguments used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.StartsWith(System.String,System.String,System.String)">

+            <summary>

+            Asserts that a string starts with another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.StartsWith(System.String,System.String)">

+            <summary>

+            Asserts that a string starts with another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.DoesNotStartWith(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that a string does not start with another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Arguments used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.DoesNotStartWith(System.String,System.String,System.String)">

+            <summary>

+            Asserts that a string does not start with another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.DoesNotStartWith(System.String,System.String)">

+            <summary>

+            Asserts that a string does not start with another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.EndsWith(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that a string ends with another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Arguments used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.EndsWith(System.String,System.String,System.String)">

+            <summary>

+            Asserts that a string ends with another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.EndsWith(System.String,System.String)">

+            <summary>

+            Asserts that a string ends with another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.DoesNotEndWith(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that a string does not end with another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Arguments used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.DoesNotEndWith(System.String,System.String,System.String)">

+            <summary>

+            Asserts that a string does not end with another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.DoesNotEndWith(System.String,System.String)">

+            <summary>

+            Asserts that a string does not end with another string.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The string to be examined</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.AreEqualIgnoringCase(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that two strings are equal, without regard to case.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The actual string</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Arguments used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.AreEqualIgnoringCase(System.String,System.String,System.String)">

+            <summary>

+            Asserts that two strings are equal, without regard to case.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The actual string</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.AreEqualIgnoringCase(System.String,System.String)">

+            <summary>

+            Asserts that two strings are equal, without regard to case.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The actual string</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.AreNotEqualIgnoringCase(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that two strings are not equal, without regard to case.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The actual string</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Arguments used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.AreNotEqualIgnoringCase(System.String,System.String,System.String)">

+            <summary>

+            Asserts that two strings are Notequal, without regard to case.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The actual string</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.AreNotEqualIgnoringCase(System.String,System.String)">

+            <summary>

+            Asserts that two strings are not equal, without regard to case.

+            </summary>

+            <param name="expected">The expected string</param>

+            <param name="actual">The actual string</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.IsMatch(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that a string matches an expected regular expression pattern.

+            </summary>

+            <param name="pattern">The regex pattern to be matched</param>

+            <param name="actual">The actual string</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Arguments used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.IsMatch(System.String,System.String,System.String)">

+            <summary>

+            Asserts that a string matches an expected regular expression pattern.

+            </summary>

+            <param name="pattern">The regex pattern to be matched</param>

+            <param name="actual">The actual string</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.IsMatch(System.String,System.String)">

+            <summary>

+            Asserts that a string matches an expected regular expression pattern.

+            </summary>

+            <param name="pattern">The regex pattern to be matched</param>

+            <param name="actual">The actual string</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.DoesNotMatch(System.String,System.String,System.String,System.Object[])">

+            <summary>

+            Asserts that a string does not match an expected regular expression pattern.

+            </summary>

+            <param name="pattern">The regex pattern to be used</param>

+            <param name="actual">The actual string</param>

+            <param name="message">The message to display in case of failure</param>

+            <param name="args">Arguments used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.DoesNotMatch(System.String,System.String,System.String)">

+            <summary>

+            Asserts that a string does not match an expected regular expression pattern.

+            </summary>

+            <param name="pattern">The regex pattern to be used</param>

+            <param name="actual">The actual string</param>

+            <param name="message">The message to display in case of failure</param>

+        </member>

+        <member name="M:NUnit.Framework.StringAssert.DoesNotMatch(System.String,System.String)">

+            <summary>

+            Asserts that a string does not match an expected regular expression pattern.

+            </summary>

+            <param name="pattern">The regex pattern to be used</param>

+            <param name="actual">The actual string</param>

+        </member>

+        <member name="T:NUnit.Framework.TestCaseData">

+            <summary>

+            The TestCaseData class represents a set of arguments

+            and other parameter info to be used for a parameterized

+            test case. It provides a number of instance modifiers

+            for use in initializing the test case.

+            

+            Note: Instance modifiers are getters that return

+            the same instance after modifying it's state.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestCaseData.arguments">

+            <summary>

+            The argument list to be provided to the test

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestCaseData.result">

+            <summary>

+            The expected result to be returned

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestCaseData.expectedExceptionType">

+            <summary>

+             The expected exception Type

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestCaseData.expectedExceptionName">

+            <summary>

+            The FullName of the expected exception

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestCaseData.testName">

+            <summary>

+            The name to be used for the test

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestCaseData.description">

+            <summary>

+            The description of the test

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestCaseData.properties">

+            <summary>

+            A dictionary of properties, used to add information

+            to tests without requiring the class to change.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestCaseData.isIgnored">

+            <summary>

+            If true, indicates that the test case is to be ignored

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestCaseData.ignoreReason">

+            <summary>

+            The reason for ignoring a test case

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.#ctor(System.Object[])">

+            <summary>

+            Initializes a new instance of the <see cref="T:TestCaseData"/> class.

+            </summary>

+            <param name="args">The arguments.</param>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.#ctor(System.Object)">

+            <summary>

+            Initializes a new instance of the <see cref="T:TestCaseData"/> class.

+            </summary>

+            <param name="arg">The argument.</param>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.#ctor(System.Object,System.Object)">

+            <summary>

+            Initializes a new instance of the <see cref="T:TestCaseData"/> class.

+            </summary>

+            <param name="arg1">The first argument.</param>

+            <param name="arg2">The second argument.</param>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.#ctor(System.Object,System.Object,System.Object)">

+            <summary>

+            Initializes a new instance of the <see cref="T:TestCaseData"/> class.

+            </summary>

+            <param name="arg1">The first argument.</param>

+            <param name="arg2">The second argument.</param>

+            <param name="arg3">The third argument.</param>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.Returns(System.Object)">

+            <summary>

+            Sets the expected result for the test

+            </summary>

+            <param name="result">The expected result</param>

+            <returns>A modified TestCaseData</returns>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.Throws(System.Type)">

+            <summary>

+            Sets the expected exception type for the test

+            </summary>

+            <param name="exceptionType">Type of the expected exception.</param>

+            <returns>The modified TestCaseData instance</returns>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.Throws(System.String)">

+            <summary>

+            Sets the expected exception type for the test

+            </summary>

+            <param name="exceptionName">FullName of the expected exception.</param>

+            <returns>The modified TestCaseData instance</returns>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.SetName(System.String)">

+            <summary>

+            Sets the name of the test case

+            </summary>

+            <returns>The modified TestCaseData instance</returns>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.SetDescription(System.String)">

+            <summary>

+            Sets the description for the test case

+            being constructed.

+            </summary>

+            <param name="description">The description.</param>

+            <returns>The modified TestCaseData instance.</returns>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.SetCategory(System.String)">

+            <summary>

+            Applies a category to the test

+            </summary>

+            <param name="category"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.SetProperty(System.String,System.String)">

+            <summary>

+            Applies a named property to the test

+            </summary>

+            <param name="propName"></param>

+            <param name="propValue"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.SetProperty(System.String,System.Int32)">

+            <summary>

+            Applies a named property to the test

+            </summary>

+            <param name="propName"></param>

+            <param name="propValue"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.SetProperty(System.String,System.Double)">

+            <summary>

+            Applies a named property to the test

+            </summary>

+            <param name="propName"></param>

+            <param name="propValue"></param>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.Ignore">

+            <summary>

+            Ignores this TestCase.

+            </summary>

+            <returns></returns>

+        </member>

+        <member name="M:NUnit.Framework.TestCaseData.Ignore(System.String)">

+            <summary>

+            Ignores this TestCase, specifying the reason.

+            </summary>

+            <param name="reason">The reason.</param>

+            <returns></returns>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseData.Arguments">

+            <summary>

+            Gets the argument list to be provided to the test

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseData.Result">

+            <summary>

+            Gets the expected result

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseData.ExpectedException">

+            <summary>

+             Gets the expected exception Type

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseData.ExpectedExceptionName">

+            <summary>

+            Gets the FullName of the expected exception

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseData.TestName">

+            <summary>

+            Gets the name to be used for the test

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseData.Description">

+            <summary>

+            Gets the description of the test

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseData.Ignored">

+            <summary>

+            Gets a value indicating whether this <see cref="T:NUnit.Framework.ITestCaseData"/> is ignored.

+            </summary>

+            <value><c>true</c> if ignored; otherwise, <c>false</c>.</value>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseData.IgnoreReason">

+            <summary>

+            Gets the ignore reason.

+            </summary>

+            <value>The ignore reason.</value>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseData.Categories">

+            <summary>

+            Gets a list of categories associated with this test.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestCaseData.Properties">

+            <summary>

+            Gets the property dictionary for this test

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TestContext">

+            <summary>

+            Provide the context information of the current test

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.TestContext.#ctor(System.Collections.IDictionary)">

+            <summary>

+            Constructs a TestContext using the provided context dictionary

+            </summary>

+            <param name="context">A context dictionary</param>

+        </member>

+        <member name="P:NUnit.Framework.TestContext.CurrentContext">

+            <summary>

+            Get the current test context. This is created

+            as needed. The user may save the context for

+            use within a test, but it should not be used

+            outside the test for which it is created.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestContext.Test">

+            <summary>

+            Gets a TestAdapter representing the currently executing test in this context.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestContext.Result">

+            <summary>

+            Gets a ResultAdapter representing the current result for the test 

+            executing in this context.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestContext.TestDirectory">

+            <summary>

+            Gets the current directory for this TestContext

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TestContext.TestAdapter">

+            <summary>

+            TestAdapter adapts a Test for consumption by

+            the user test code.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.TestContext.TestAdapter.#ctor(System.Collections.IDictionary)">

+            <summary>

+            Constructs a TestAdapter for this context

+            </summary>

+            <param name="context">The context dictionary</param>

+        </member>

+        <member name="P:NUnit.Framework.TestContext.TestAdapter.Name">

+            <summary>

+            The name of the test.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestContext.TestAdapter.FullName">

+            <summary>

+            The FullName of the test

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestContext.TestAdapter.Properties">

+            <summary>

+            The properties of the test.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TestContext.ResultAdapter">

+            <summary>

+            ResultAdapter adapts a TestResult for consumption by

+            the user test code.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.TestContext.ResultAdapter.#ctor(System.Collections.IDictionary)">

+            <summary>

+            Construct a ResultAdapter for a context

+            </summary>

+            <param name="context">The context holding the result</param>

+        </member>

+        <member name="P:NUnit.Framework.TestContext.ResultAdapter.State">

+            <summary>

+            The TestState of current test. This maps to the ResultState

+            used in nunit.core and is subject to change in the future.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.TestContext.ResultAdapter.Status">

+            <summary>

+            The TestStatus of current test. This enum will be used

+            in future versions of NUnit and so is to be preferred

+            to the TestState value.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TestState">

+            <summary>

+            The ResultState enum indicates the result of running a test

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestState.Inconclusive">

+            <summary>

+            The result is inconclusive

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestState.NotRunnable">

+            <summary>

+            The test was not runnable.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestState.Skipped">

+            <summary>

+            The test has been skipped. 

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestState.Ignored">

+            <summary>

+            The test has been ignored.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestState.Success">

+            <summary>

+            The test succeeded

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestState.Failure">

+            <summary>

+            The test failed

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestState.Error">

+            <summary>

+            The test encountered an unexpected exception

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestState.Cancelled">

+            <summary>

+            The test was cancelled by the user

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TestStatus">

+            <summary>

+            The TestStatus enum indicates the result of running a test

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestStatus.Inconclusive">

+            <summary>

+            The test was inconclusive

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestStatus.Skipped">

+            <summary>

+            The test has skipped 

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestStatus.Passed">

+            <summary>

+            The test succeeded

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TestStatus.Failed">

+            <summary>

+            The test failed

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Text">

+            <summary>

+            Helper class with static methods used to supply constraints

+            that operate on strings.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Text.Contains(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value contains the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Text.DoesNotContain(System.String)">

+            <summary>

+            Returns a constraint that fails if the actual

+            value contains the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Text.StartsWith(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value starts with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Text.DoesNotStartWith(System.String)">

+            <summary>

+            Returns a constraint that fails if the actual

+            value starts with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Text.EndsWith(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value ends with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Text.DoesNotEndWith(System.String)">

+            <summary>

+            Returns a constraint that fails if the actual

+            value ends with the substring supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Text.Matches(System.String)">

+            <summary>

+            Returns a constraint that succeeds if the actual

+            value matches the Regex pattern supplied as an argument.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Text.DoesNotMatch(System.String)">

+            <summary>

+            Returns a constraint that fails if the actual

+            value matches the pattern supplied as an argument.

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Text.All">

+            <summary>

+            Returns a ConstraintExpression, which will apply

+            the following constraint to all members of a collection,

+            succeeding if all of them succeed.

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.TextMessageWriter">

+            <summary>

+            TextMessageWriter writes constraint descriptions and messages

+            in displayable form as a text stream. It tailors the display

+            of individual message components to form the standard message

+            format of NUnit assertion failure messages.

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TextMessageWriter.Pfx_Expected">

+            <summary>

+            Prefix used for the expected value line of a message

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TextMessageWriter.Pfx_Actual">

+            <summary>

+            Prefix used for the actual value line of a message

+            </summary>

+        </member>

+        <member name="F:NUnit.Framework.TextMessageWriter.PrefixLength">

+            <summary>

+            Length of a message prefix

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.#ctor">

+            <summary>

+            Construct a TextMessageWriter

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.#ctor(System.String,System.Object[])">

+            <summary>

+            Construct a TextMessageWriter, specifying a user message

+            and optional formatting arguments.

+            </summary>

+            <param name="userMessage"></param>

+            <param name="args"></param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.WriteMessageLine(System.Int32,System.String,System.Object[])">

+            <summary>

+            Method to write single line  message with optional args, usually

+            written to precede the general failure message, at a givel 

+            indentation level.

+            </summary>

+            <param name="level">The indentation level of the message</param>

+            <param name="message">The message to be written</param>

+            <param name="args">Any arguments used in formatting the message</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.DisplayDifferences(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Display Expected and Actual lines for a constraint. This

+            is called by MessageWriter's default implementation of 

+            WriteMessageTo and provides the generic two-line display. 

+            </summary>

+            <param name="constraint">The constraint that failed</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.DisplayDifferences(System.Object,System.Object)">

+            <summary>

+            Display Expected and Actual lines for given values. This

+            method may be called by constraints that need more control over

+            the display of actual and expected values than is provided

+            by the default implementation.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value causing the failure</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.DisplayDifferences(System.Object,System.Object,NUnit.Framework.Constraints.Tolerance)">

+            <summary>

+            Display Expected and Actual lines for given values, including

+            a tolerance value on the expected line.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="actual">The actual value causing the failure</param>

+            <param name="tolerance">The tolerance within which the test was made</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.DisplayStringDifferences(System.String,System.String,System.Int32,System.Boolean,System.Boolean)">

+            <summary>

+            Display the expected and actual string values on separate lines.

+            If the mismatch parameter is >=0, an additional line is displayed

+            line containing a caret that points to the mismatch point.

+            </summary>

+            <param name="expected">The expected string value</param>

+            <param name="actual">The actual string value</param>

+            <param name="mismatch">The point at which the strings don't match or -1</param>

+            <param name="ignoreCase">If true, case is ignored in string comparisons</param>

+            <param name="clipping">If true, clip the strings to fit the max line length</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.WriteConnector(System.String)">

+            <summary>

+            Writes the text for a connector.

+            </summary>

+            <param name="connector">The connector.</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.WritePredicate(System.String)">

+            <summary>

+            Writes the text for a predicate.

+            </summary>

+            <param name="predicate">The predicate.</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.WriteModifier(System.String)">

+            <summary>

+            Write the text for a modifier.

+            </summary>

+            <param name="modifier">The modifier.</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.WriteExpectedValue(System.Object)">

+            <summary>

+            Writes the text for an expected value.

+            </summary>

+            <param name="expected">The expected value.</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.WriteActualValue(System.Object)">

+            <summary>

+            Writes the text for an actual value.

+            </summary>

+            <param name="actual">The actual value.</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.WriteValue(System.Object)">

+            <summary>

+            Writes the text for a generalized value.

+            </summary>

+            <param name="val">The value.</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.WriteCollectionElements(System.Collections.ICollection,System.Int32,System.Int32)">

+            <summary>

+            Writes the text for a collection value,

+            starting at a particular point, to a max length

+            </summary>

+            <param name="collection">The collection containing elements to write.</param>

+            <param name="start">The starting point of the elements to write</param>

+            <param name="max">The maximum number of elements to write</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.WriteExpectedLine(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Write the generic 'Expected' line for a constraint

+            </summary>

+            <param name="constraint">The constraint that failed</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.WriteExpectedLine(System.Object)">

+            <summary>

+            Write the generic 'Expected' line for a given value

+            </summary>

+            <param name="expected">The expected value</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.WriteExpectedLine(System.Object,NUnit.Framework.Constraints.Tolerance)">

+            <summary>

+            Write the generic 'Expected' line for a given value

+            and tolerance.

+            </summary>

+            <param name="expected">The expected value</param>

+            <param name="tolerance">The tolerance within which the test was made</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.WriteActualLine(NUnit.Framework.Constraints.Constraint)">

+            <summary>

+            Write the generic 'Actual' line for a constraint

+            </summary>

+            <param name="constraint">The constraint for which the actual value is to be written</param>

+        </member>

+        <member name="M:NUnit.Framework.TextMessageWriter.WriteActualLine(System.Object)">

+            <summary>

+            Write the generic 'Actual' line for a given value

+            </summary>

+            <param name="actual">The actual value causing a failure</param>

+        </member>

+        <member name="P:NUnit.Framework.TextMessageWriter.MaxLineLength">

+            <summary>

+            Gets or sets the maximum line length for this writer

+            </summary>

+        </member>

+        <member name="T:NUnit.Framework.Throws">

+            <summary>

+            Helper class with properties and methods that supply

+            constraints that operate on exceptions.

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Throws.TypeOf(System.Type)">

+            <summary>

+            Creates a constraint specifying the exact type of exception expected

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Throws.TypeOf``1">

+            <summary>

+            Creates a constraint specifying the exact type of exception expected

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Throws.InstanceOf(System.Type)">

+            <summary>

+            Creates a constraint specifying the type of exception expected

+            </summary>

+        </member>

+        <member name="M:NUnit.Framework.Throws.InstanceOf``1">

+            <summary>

+            Creates a constraint specifying the type of exception expected

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Throws.Exception">

+            <summary>

+            Creates a constraint specifying an expected exception

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Throws.InnerException">

+            <summary>

+            Creates a constraint specifying an exception with a given InnerException

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Throws.TargetInvocationException">

+            <summary>

+            Creates a constraint specifying an expected TargetInvocationException

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Throws.ArgumentException">

+            <summary>

+            Creates a constraint specifying an expected TargetInvocationException

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Throws.InvalidOperationException">

+            <summary>

+            Creates a constraint specifying an expected TargetInvocationException

+            </summary>

+        </member>

+        <member name="P:NUnit.Framework.Throws.Nothing">

+            <summary>

+            Creates a constraint specifying that no exception is thrown

+            </summary>

+        </member>

+    </members>

+</doc>

diff --git a/csharp/lib/NUnit/lib/nunit.mocks.dll b/csharp/lib/NUnit/lib/nunit.mocks.dll
new file mode 100644
index 0000000..6ee2c1c
--- /dev/null
+++ b/csharp/lib/NUnit/lib/nunit.mocks.dll
Binary files differ
diff --git a/csharp/lib/NUnit/lib/pnunit.framework.dll b/csharp/lib/NUnit/lib/pnunit.framework.dll
new file mode 100644
index 0000000..6c105d7
--- /dev/null
+++ b/csharp/lib/NUnit/lib/pnunit.framework.dll
Binary files differ
diff --git a/csharp/lib/NUnit/license.txt b/csharp/lib/NUnit/license.txt
new file mode 100644
index 0000000..ab91df4
--- /dev/null
+++ b/csharp/lib/NUnit/license.txt
@@ -0,0 +1,15 @@
+Copyright © 2002-2008 Charlie Poole

+Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov

+Copyright © 2000-2002 Philip A. Craig

+

+This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.

+

+Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:

+

+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required.

+

+Portions Copyright © 2002-2008 Charlie Poole or Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright © 2000-2002 Philip A. Craig

+

+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.

+

+3. This notice may not be removed or altered from any source distribution.

diff --git a/csharp/lib/NUnit/tools/NUnitTests.VisualState.xml b/csharp/lib/NUnit/tools/NUnitTests.VisualState.xml
new file mode 100644
index 0000000..603cda7
--- /dev/null
+++ b/csharp/lib/NUnit/tools/NUnitTests.VisualState.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="utf-8"?>

+<VisualState xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ShowCheckBoxes="false">

+  <TopNode>[0-1000]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\NUnitTests.nunit</TopNode>

+  <SelectedNode>[0-1000]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\NUnitTests.nunit</SelectedNode>

+  <ExcludeCategories>false</ExcludeCategories>

+  <Nodes>

+    <Node UniqueName="[0-1000]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\NUnitTests.nunit" Expanded="true" />

+    <Node UniqueName="[0-2832]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.framework.tests.dll" Expanded="true" />

+    <Node UniqueName="[0-2833]NUnit" Expanded="true" />

+    <Node UniqueName="[0-2834]NUnit.Framework" Expanded="true" />

+    <Node UniqueName="[0-2835]NUnit.Framework.Constraints" Expanded="true" />

+    <Node UniqueName="[0-1001]NUnit.Framework.Constraints.AfterConstraintTest" Expanded="true" />

+    <Node UniqueName="[0-1023]NUnit.Framework.Constraints.AndTest" Expanded="true" />

+    <Node UniqueName="[0-1914]NUnit.Framework.Constraints.AssignableFromTest" Expanded="true" />

+    <Node UniqueName="[0-1924]NUnit.Framework.Constraints.AssignableToTest" Expanded="true" />

+    <Node UniqueName="[0-1934]NUnit.Framework.Constraints.AttributeExistsConstraintTest" Expanded="true" />

+    <Node UniqueName="[0-1697]NUnit.Framework.Constraints.BinarySerializableTest" Expanded="true" />

+    <Node UniqueName="[0-1144]NUnit.Framework.Constraints.ComparerTests" Expanded="true" />

+    <Node UniqueName="[0-1271]NUnit.Framework.Constraints.EmptyConstraintTest" Expanded="true" />

+    <Node UniqueName="[0-1806]NUnit.Framework.Constraints.EndsWithTest" Expanded="true" />

+    <Node UniqueName="[0-1826]NUnit.Framework.Constraints.EndsWithTestIgnoringCase" Expanded="true" />

+    <Node UniqueName="[0-1300]NUnit.Framework.Constraints.EqualConstraintTest" Expanded="true" />

+    <Node UniqueName="[0-1893]NUnit.Framework.Constraints.ExactTypeTest" Expanded="true" />

+    <Node UniqueName="[0-1060]NUnit.Framework.Constraints.FalseConstraintTest" Expanded="true" />

+    <Node UniqueName="[0-1196]NUnit.Framework.Constraints.GreaterThanOrEqualTest" Expanded="true" />

+    <Node UniqueName="[0-1176]NUnit.Framework.Constraints.GreaterThanTest" Expanded="true" />

+    <Node UniqueName="[0-1904]NUnit.Framework.Constraints.InstanceOfTypeTest" Expanded="true" />

+    <Node UniqueName="[0-1234]NUnit.Framework.Constraints.LessThanOrEqualTest" Expanded="true" />

+    <Node UniqueName="[0-1214]NUnit.Framework.Constraints.LessThanTest" Expanded="true" />

+    <Node UniqueName="[0-1398]NUnit.Framework.Constraints.MsgUtilTests" Expanded="true" />

+    <Node UniqueName="[0-1076]NUnit.Framework.Constraints.NaNConstraintTest" Expanded="true" />

+    <Node UniqueName="[0-1429]NUnit.Framework.Constraints.NotTest" Expanded="true" />

+    <Node UniqueName="[0-1035]NUnit.Framework.Constraints.NullConstraintTest" Expanded="true" />

+    <Node UniqueName="[0-1288]NUnit.Framework.Constraints.NullOrEmptyStringConstraintTest" Expanded="true" />

+    <Node UniqueName="[0-1443]NUnit.Framework.Constraints.NumericsTest" Expanded="true" />

+    <Node UniqueName="[0-1477]NUnit.Framework.Constraints.OrTest" Expanded="true" />

+    <Node UniqueName="[0-1643]NUnit.Framework.Constraints.PropertyExistsTest" Expanded="true" />

+    <Node UniqueName="[0-1660]NUnit.Framework.Constraints.PropertyTest" Expanded="true" />

+    <Node UniqueName="[0-1252]NUnit.Framework.Constraints.RangeConstraintTest" Expanded="true" />

+    <Node UniqueName="[0-1677]NUnit.Framework.Constraints.ReusableConstraintTests" Expanded="true" />

+    <Node UniqueName="[0-1684]NUnit.Framework.Constraints.SameAsTest" Expanded="true" />

+    <Node UniqueName="[0-1615]NUnit.Framework.Constraints.SamePathOrUnderTest_Linux" Expanded="true" />

+    <Node UniqueName="[0-1592]NUnit.Framework.Constraints.SamePathOrUnderTest_Windows" Expanded="true" />

+    <Node UniqueName="[0-1507]NUnit.Framework.Constraints.SamePathTest_Linux" Expanded="true" />

+    <Node UniqueName="[0-1488]NUnit.Framework.Constraints.SamePathTest_Windows" Expanded="true" />

+    <Node UniqueName="[0-1766]NUnit.Framework.Constraints.StartsWithTest" Expanded="true" />

+    <Node UniqueName="[0-1786]NUnit.Framework.Constraints.StartsWithTestIgnoringCase" Expanded="true" />

+    <Node UniqueName="[0-1559]NUnit.Framework.Constraints.SubPathTest_Linux" Expanded="true" />

+    <Node UniqueName="[0-1529]NUnit.Framework.Constraints.SubPathTest_Windows" Expanded="true" />

+    <Node UniqueName="[0-1728]NUnit.Framework.Constraints.SubstringTest" Expanded="true" />

+    <Node UniqueName="[0-1748]NUnit.Framework.Constraints.SubstringTestIgnoringCase" Expanded="true" />

+    <Node UniqueName="[0-1846]NUnit.Framework.Constraints.ThrowsConstraintTest_ExactType" Expanded="true" />

+    <Node UniqueName="[0-1859]NUnit.Framework.Constraints.ThrowsConstraintTest_InstanceOfType" Expanded="true" />

+    <Node UniqueName="[0-1873]NUnit.Framework.Constraints.ThrowsConstraintTest_WithConstraint" Expanded="true" />

+    <Node UniqueName="[0-1044]NUnit.Framework.Constraints.TrueConstraintTest" Expanded="true" />

+    <Node UniqueName="[0-1711]NUnit.Framework.Constraints.XmlSerializableTest" Expanded="true" />

+    <Node UniqueName="[0-2836]NUnit.Framework.Syntax" Expanded="true" />

+    <Node UniqueName="[0-2093]NUnit.Framework.Syntax.InvalidCodeTests" Expanded="true" />

+    <Node UniqueName="[0-2837]NUnit.Framework.Tests" Expanded="true" />

+    <Node UniqueName="[0-2772]NUnit.Framework.Tests.ValuesAttributeTests" Expanded="true" />

+    <Node UniqueName="[0-3878]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.core.tests.dll" Expanded="true" />

+    <Node UniqueName="[0-3879]NUnit" Expanded="true" />

+    <Node UniqueName="[0-3880]NUnit.Core" Expanded="true" />

+    <Node UniqueName="[0-3881]NUnit.Core.Tests" Expanded="true" />

+    <Node UniqueName="[0-2919]NUnit.Core.Tests.CategoryAttributeTests" Expanded="true" />

+    <Node UniqueName="[0-2929]NUnit.Core.Tests.CombinatorialTests" Expanded="true" />

+    <Node UniqueName="[0-2998]NUnit.Core.Tests.CultureSettingAndDetectionTests" Expanded="true" />

+    <Node UniqueName="[0-3021]NUnit.Core.Tests.EventQueueTests" Expanded="true" />

+    <Node UniqueName="[0-3882]NUnit.Core.Tests.Generic" Expanded="true" />

+    <Node UniqueName="[0-2838]NUnit.Core.Tests.Generic.DeduceTypeArgsFromArgs&lt;T1,T2&gt;" Expanded="true" />

+    <Node UniqueName="[0-2839]NUnit.Core.Tests.Generic.DeduceTypeArgsFromArgs&lt;Double,Int32&gt;(100.0d,42)" Expanded="true" />

+    <Node UniqueName="[0-2842]NUnit.Core.Tests.Generic.DeduceTypeArgsFromArgs&lt;Int32,Double&gt;(42,100.0d)" Expanded="true" />

+    <Node UniqueName="[0-2845]NUnit.Core.Tests.Generic.SimpleGenericFixture&lt;TList&gt;" Expanded="true" />

+    <Node UniqueName="[0-2850]NUnit.Core.Tests.Generic.SimpleGenericMethods" Expanded="true" />

+    <Node UniqueName="[0-2866]NUnit.Core.Tests.Generic.TypeParameterUsedWithTestMethod&lt;T&gt;" Expanded="true" />

+    <Node UniqueName="[0-2867]NUnit.Core.Tests.Generic.TypeParameterUsedWithTestMethod&lt;Double&gt;" Expanded="true" />

+    <Node UniqueName="[0-3158]NUnit.Core.Tests.PairwiseTest" Expanded="true" />

+    <Node UniqueName="[0-3169]NUnit.Core.Tests.PairwiseTest+LiveTest" Expanded="true" />

+    <Node UniqueName="[0-3178]NUnit.Core.Tests.ParameterizedTestFixture" Expanded="true" />

+    <Node UniqueName="[0-3195]NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources" Expanded="true" />

+    <Node UniqueName="[0-3196]NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42)" Expanded="true" />

+    <Node UniqueName="[0-3188]NUnit.Core.Tests.ParameterizedTestFixtureWithNullArguments" Expanded="true" />

+    <Node UniqueName="[0-3297]NUnit.Core.Tests.RuntimeFrameworkTests" Expanded="true" />

+    <Node UniqueName="[0-3466]NUnit.Core.Tests.TestCaseAttributeTests" Expanded="true" />

+    <Node UniqueName="[0-3536]NUnit.Core.Tests.TestCaseSourceTests" Expanded="true" />

+    <Node UniqueName="[0-3753]NUnit.Core.Tests.TheoryTests" Expanded="true" />

+    <Node UniqueName="[0-3775]NUnit.Core.Tests.TheoryTests+SqrtTests_DisplayResults" Expanded="true" />

+    <Node UniqueName="[0-3817]NUnit.Core.Tests.TypeHelperTests" Expanded="true" />

+    <Node UniqueName="[0-3844]NUnit.Core.Tests.ValueSourceTests" Expanded="true" />

+    <Node UniqueName="[0-4250]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.util.tests.dll" Expanded="true" />

+    <Node UniqueName="[0-4251]NUnit" Expanded="true" />

+    <Node UniqueName="[0-4252]NUnit.Util" Expanded="true" />

+    <Node UniqueName="[0-4134]NUnit.Util.Tests.ServiceManagerSetUpFixture" Expanded="true" />

+    <Node UniqueName="[0-4110]NUnit.Util.Tests.RuntimeFrameworkSelectorTests" Expanded="true" />

+    <Node UniqueName="[0-4302]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.mocks.tests.dll" Expanded="true" />

+    <Node UniqueName="[0-4303]NUnit" Expanded="true" />

+    <Node UniqueName="[0-4304]NUnit.Mocks" Expanded="true" />

+    <Node UniqueName="[0-4305]NUnit.Mocks.Tests" Expanded="true" />

+    <Node UniqueName="[0-4361]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit-console.tests.dll" Expanded="true" />

+    <Node UniqueName="[0-4362]NUnit" Expanded="true" />

+    <Node UniqueName="[0-4363]NUnit.ConsoleRunner" Expanded="true" />

+    <Node UniqueName="[0-4364]NUnit.ConsoleRunner.Tests" Expanded="true" />

+    <Node UniqueName="[0-4345]NUnit.ConsoleRunner.Tests.TestNameParserTests" Expanded="true" />

+    <Node UniqueName="[0-4604]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.uiexception.tests.dll" Expanded="true" />

+    <Node UniqueName="[0-4605]NUnit" Expanded="true" />

+    <Node UniqueName="[0-4606]NUnit.UiException" Expanded="true" />

+    <Node UniqueName="[0-4607]NUnit.UiException.Tests" Expanded="true" />

+    <Node UniqueName="[0-4608]NUnit.UiException.Tests.CodeFormatters" Expanded="true" />

+    <Node UniqueName="[0-4609]NUnit.UiException.Tests.Controls" Expanded="true" />

+    <Node UniqueName="[0-4610]NUnit.UiException.Tests.StackTraceAnalyzers" Expanded="true" />

+    <Node UniqueName="[0-4665]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.uikit.tests.dll" Expanded="true" />

+    <Node UniqueName="[0-4666]NUnit" Expanded="true" />

+    <Node UniqueName="[0-4667]NUnit.UiKit" Expanded="true" />

+    <Node UniqueName="[0-4668]NUnit.UiKit.Tests" Expanded="true" />

+    <Node UniqueName="[0-4687]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit-gui.tests.dll" Expanded="true" />

+    <Node UniqueName="[0-4688]NUnit" Expanded="true" />

+    <Node UniqueName="[0-4689]NUnit.Gui" Expanded="true" />

+    <Node UniqueName="[0-4690]NUnit.Gui.Tests" Expanded="true" />

+    <Node UniqueName="[0-4699]D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.fixtures.tests.dll" Expanded="true" />

+    <Node UniqueName="[0-4700]NUnit" Expanded="true" />

+    <Node UniqueName="[0-4701]NUnit.Fixtures" Expanded="true" />

+    <Node UniqueName="[0-4702]NUnit.Fixtures.Tests" Expanded="true" />

+  </Nodes>

+</VisualState>
\ No newline at end of file
diff --git a/csharp/lib/NUnit/tools/NUnitTests.config b/csharp/lib/NUnit/tools/NUnitTests.config
new file mode 100644
index 0000000..9487c07
--- /dev/null
+++ b/csharp/lib/NUnit/tools/NUnitTests.config
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8" ?>

+<configuration>

+<!--

+	 This is the configuration file for the NUnitTests.nunit test project. You may

+	 need to create a similar configuration file for your own test project. 

+ -->	 

+

+<!--

+	 The <NUnit> section is only needed if you want to use a non-default value

+	 for any of the settings. It is commented out below. If you are going to use

+   it, you must deifne the NUnit section group and the sections you need.

+ 

+   The syntax shown here works for most runtimes. If NUnit fails at startup, you

+   can try specifying the name of the assembly containing the NameValueSectionHandler:

+   

+      <section name="TestCaseBuilder" type="System.Configuration.NameValueSectionHandler, System" />

+      

+   If that fails, try the fully qualified name of the assembly:

+   

+      <section name="TestCaseBuilder" type="System.Configuration.NameValueSectionHandler, System, 

+             Version=2.0.50727.832, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

+             

+   Unfortunately, this last approach makes your config file non-portable across runtimes.

+   -->

+

+<!--

+  <configSections>

+		<sectionGroup name="NUnit">

+			<section name="TestCaseBuilder" type="System.Configuration.NameValueSectionHandler"/>

+			<section name="TestRunner" type="System.Configuration.NameValueSectionHandler"/>

+		</sectionGroup>

+	</configSections>

+ -->

+

+  <appSettings>

+		<!--   User application and configured property settings go here.-->

+		<!--   Example: <add key="settingName" value="settingValue"/> -->

+		<add key="test.setting" value="54321" />

+	</appSettings>

+

+<!-- Sample NUnit section group showing all default values -->

+<!--

+	<NUnit>

+		<TestCaseBuilder>

+			<add key="OldStyleTestCases" value="false" />

+		</TestCaseBuilder>

+		<TestRunner>

+			<add key="ApartmentState" value="MTA" />

+			<add key="ThreadPriority" value="Normal" />

+      <add key="DefaultLogThreshold" value="Info" />

+		</TestRunner>

+	</NUnit>

+-->

+  

+   <!--

+    The following <runtime> section allows running nunit tests under 

+    .NET 1.0 by redirecting assemblies. The appliesTo attribute

+    causes the section to be ignored except under .NET 1.0.

+   --> 

+	<runtime>

+		<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"

+				appliesTo="v1.0.3705">

+			<dependentAssembly>

+				<assemblyIdentity name="System" publicKeyToken="b77a5c561934e089" culture="" />

+				<bindingRedirect oldVersion="1.0.5000.0" newVersion="1.0.3300.0" />

+			</dependentAssembly>

+			<dependentAssembly>

+				<assemblyIdentity name="System.Data" publicKeyToken="b77a5c561934e089" culture="" />

+				<bindingRedirect oldVersion="1.0.5000.0" newVersion="1.0.3300.0" />

+			</dependentAssembly>

+			<dependentAssembly>

+				<assemblyIdentity name="System.Drawing" publicKeyToken="b03f5f7f11d50a3a" culture="" />

+				<bindingRedirect oldVersion="1.0.5000.0" newVersion="1.0.3300.0" />

+			</dependentAssembly>

+			<dependentAssembly>

+				<assemblyIdentity name="System.Windows.Forms" publicKeyToken="b77a5c561934e089" culture="" />

+				<bindingRedirect oldVersion="1.0.5000.0" newVersion="1.0.3300.0" />

+			</dependentAssembly>

+			<dependentAssembly>

+				<assemblyIdentity name="System.Xml" publicKeyToken="b77a5c561934e089" culture="" />

+				<bindingRedirect oldVersion="1.0.5000.0" newVersion="1.0.3300.0" />

+			</dependentAssembly>

+		</assemblyBinding>

+	</runtime>

+</configuration> 

diff --git a/csharp/lib/NUnit/tools/NUnitTests.nunit b/csharp/lib/NUnit/tools/NUnitTests.nunit
new file mode 100644
index 0000000..bb80dd6
--- /dev/null
+++ b/csharp/lib/NUnit/tools/NUnitTests.nunit
@@ -0,0 +1,14 @@
+<NUnitProject>

+  <Settings appbase="."/>

+  <Config name="Default" binpath="lib;tests;framework" runtimeFramework="v2.0">

+    <assembly path="tests/nunit.framework.tests.dll" />

+    <assembly path="tests/nunit.core.tests.dll" />

+    <assembly path="tests/nunit.util.tests.dll" />

+    <assembly path="tests/nunit.mocks.tests.dll" />

+    <assembly path="tests/nunit-console.tests.dll" />

+    <assembly path="tests/nunit.uiexception.tests.dll" />

+    <assembly path="tests/nunit.uikit.tests.dll" />

+    <assembly path="tests/nunit-gui.tests.dll" />

+    <assembly path="tests/nunit.fixtures.tests.dll" />

+  </Config>

+</NUnitProject>

diff --git a/csharp/lib/NUnit/tools/TestResult.xml b/csharp/lib/NUnit/tools/TestResult.xml
new file mode 100644
index 0000000..058d42b
--- /dev/null
+++ b/csharp/lib/NUnit/tools/TestResult.xml
@@ -0,0 +1,5971 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>

+<!--This file represents the results of running a test suite-->

+<test-results name="D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\NUnitTests.nunit" total="3001" errors="0" failures="0" not-run="2" inconclusive="13" ignored="0" skipped="2" invalid="0" date="2011-04-02" time="20:08:59">

+  <environment nunit-version="2.5.10.11092" clr-version="2.0.50727.4952" os-version="Microsoft Windows NT 6.1.7600.0" platform="Win32NT" cwd="D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release" machine-name="CHARLIE-LAPTOP" user="charlie" user-domain="charlie-laptop" />

+  <culture-info current-culture="en-US" current-uiculture="en-US" />

+  <test-suite type="Project" name="D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\NUnitTests.nunit" executed="True" result="Success" success="True" time="88.847" asserts="0">

+    <results>

+      <test-suite type="Assembly" name="D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.framework.tests.dll" executed="True" result="Success" success="True" time="17.475" asserts="0">

+        <results>

+          <test-suite type="Namespace" name="NUnit" executed="True" result="Success" success="True" time="17.474" asserts="0">

+            <results>

+              <test-suite type="Namespace" name="Framework" executed="True" result="Success" success="True" time="17.474" asserts="0">

+                <results>

+                  <test-suite type="Namespace" name="Constraints" executed="True" result="Success" success="True" time="10.349" asserts="0">

+                    <results>

+                      <test-suite type="TestFixture" name="AfterConstraintTest" executed="True" result="Success" success="True" time="6.316" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.018" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadDelegates" executed="True" result="Success" success="True" time="1.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.FailsWithBadDelegates(NUnit.Framework.Constraints.ActualValueDelegate)" executed="True" result="Success" success="True" time="0.502" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.FailsWithBadDelegates(NUnit.Framework.Constraints.ActualValueDelegate)" executed="True" result="Success" success="True" time="0.500" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="1.507" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.FailsWithBadValues(False)" executed="True" result="Success" success="True" time="0.500" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.FailsWithBadValues(0)" executed="True" result="Success" success="True" time="0.500" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.FailsWithBadValues(null)" executed="True" result="Success" success="True" time="0.500" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="1.509" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.ProvidesProperFailureMessage(False,&quot;False&quot;)" executed="True" result="Success" success="True" time="0.501" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.ProvidesProperFailureMessage(0,&quot;0&quot;)" executed="True" result="Success" success="True" time="0.500" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.ProvidesProperFailureMessage(null,&quot;null&quot;)" executed="True" result="Success" success="True" time="0.500" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.SimpleTest" executed="True" result="Success" success="True" time="0.602" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.SimpleTestUsingReference" executed="True" result="Success" success="True" time="0.603" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodDelegates" executed="True" result="Success" success="True" time="0.502" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.SucceedsWithGoodDelegates(NUnit.Framework.Constraints.ActualValueDelegate)" executed="True" result="Success" success="True" time="0.501" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.502" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.SucceedsWithGoodValues(True)" executed="True" result="Success" success="True" time="0.500" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.ThatOverload_DoesNotAcceptNegativeDelayValues" executed="True" result="Success" success="True" time="0.003" asserts="0" />

+                          <test-case name="NUnit.Framework.Constraints.AfterConstraintTest.ThatOverload_ZeroDelayIsAllowed" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AllItemsTests" executed="True" result="Success" success="True" time="0.039" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.AllItemsTests.AllItemsAreInRange" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AllItemsTests.AllItemsAreInRange_UsingComparisonOfT" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AllItemsTests.AllItemsAreInRange_UsingIComparer" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AllItemsTests.AllItemsAreInRange_UsingIComparerOfT" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AllItemsTests.AllItemsAreInRangeFailureMessage" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.AllItemsTests.AllItemsAreInstancesOfType" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AllItemsTests.AllItemsAreInstancesOfTypeFailureMessage" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.AllItemsTests.AllItemsAreNotNull" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AllItemsTests.AllItemsAreNotNullFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AndTest" executed="True" result="Success" success="True" time="0.035" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.AndTest.CanCombineTestsWithAndOperator" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AndTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AndTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AndTest.FailsWithBadValues(37)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.AndTest.FailsWithBadValues(53)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AndTest.ProvidesProperFailureMessage(37,&quot;37&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.AndTest.ProvidesProperFailureMessage(53,&quot;53&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AndTest.SucceedsWithGoodValues(42)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssignableFromTest" executed="True" result="Success" success="True" time="0.018" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.AssignableFromTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AssignableFromTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AssignableFromTest.FailsWithBadValues(NUnit.Framework.Constraints.D2)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AssignableFromTest.ProvidesProperFailureMessage(NUnit.Framework.Constraints.D2,&quot;&lt;NUnit.Framework.Constraints.D2&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AssignableFromTest.SucceedsWithGoodValues(NUnit.Framework.Constraints.D1)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.AssignableFromTest.SucceedsWithGoodValues(NUnit.Framework.Constraints.B)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssignableToTest" executed="True" result="Success" success="True" time="0.018" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.AssignableToTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AssignableToTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AssignableToTest.FailsWithBadValues(NUnit.Framework.Constraints.B)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AssignableToTest.ProvidesProperFailureMessage(NUnit.Framework.Constraints.B,&quot;&lt;NUnit.Framework.Constraints.B&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AssignableToTest.SucceedsWithGoodValues(NUnit.Framework.Constraints.D1)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.AssignableToTest.SucceedsWithGoodValues(NUnit.Framework.Constraints.D2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AttributeExistsConstraintTest" executed="True" result="Success" success="True" time="0.034" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.AttributeExistsConstraintTest.AttributeExistsOnMethodInfo" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AttributeExistsConstraintTest.AttributeTestPropertyValueOnMethodInfo" description="my description" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AttributeExistsConstraintTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.AttributeExistsConstraintTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AttributeExistsConstraintTest.FailsWithBadValues(NUnit.Framework.Constraints.D2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.AttributeExistsConstraintTest.NonAttributeThrowsException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AttributeExistsConstraintTest.ProvidesProperFailureMessage(NUnit.Framework.Constraints.D2,&quot;&lt;NUnit.Framework.Constraints.D2&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.AttributeExistsConstraintTest.SucceedsWithGoodValues(NUnit.Framework.Constraints.AttributeExistsConstraintTest)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="BinarySerializableTest" executed="True" result="Success" success="True" time="0.029" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.BinarySerializableTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.BinarySerializableTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.BinarySerializableTest.FailsWithBadValues(NUnit.Framework.Constraints.InternalClass)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="InvalidDataThrowsArgumentException" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.BinarySerializableTest.InvalidDataThrowsArgumentException(null)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.BinarySerializableTest.ProvidesProperFailureMessage(NUnit.Framework.Constraints.InternalClass,&quot;&lt;InternalClass&gt;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.BinarySerializableTest.SucceedsWithGoodValues(1)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.BinarySerializableTest.SucceedsWithGoodValues(&quot;a&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.BinarySerializableTest.SucceedsWithGoodValues(System.Collections.ArrayList)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.BinarySerializableTest.SucceedsWithGoodValues(NUnit.Framework.Constraints.InternalWithSerializableAttributeClass)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionContainsTests" executed="True" result="Success" success="True" time="0.041" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.CollectionContainsTests.CanTestContentsOfArray" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionContainsTests.CanTestContentsOfArrayList" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionContainsTests.CanTestContentsOfCollectionNotImplementingIList" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionContainsTests.CanTestContentsOfSortedList" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionContainsTests.IgnoreCaseIsHonored" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionContainsTests.UsesProvidedComparerOfT" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionContainsTests.UsesProvidedComparisonOfT" executed="True" result="Success" success="True" time="0.006" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionContainsTests.UsesProvidedEqualityComparer" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionContainsTests.UsesProvidedEqualityComparerOfT" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionContainsTests.UsesProvidedIComparer" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionEquivalentTests" executed="True" result="Success" success="True" time="0.022" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.CollectionEquivalentTests.EqualCollectionsAreEquivalent" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionEquivalentTests.EquivalentFailsWithDuplicateElementInActual" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionEquivalentTests.EquivalentFailsWithDuplicateElementInExpected" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionEquivalentTests.EquivalentHandlesNull" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionEquivalentTests.EquivalentHonorsIgnoreCase" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionEquivalentTests.EquivalentIgnoresOrder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionEquivalentTests.WorksWithCollectionsOfArrays" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionOrderedTests" executed="True" result="Success" success="True" time="0.049" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrdered" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrdered_2" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrdered_Allows_adjacent_equal_values" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrdered_AtLeastOneArgMustImplementIComparable" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrdered_Fails" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrdered_Handles_custom_comparison" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrdered_Handles_custom_comparison2" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrdered_Handles_null" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrdered_TypesMustBeComparable" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrderedBy" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrderedBy_Comparer" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrderedBy_Handles_heterogeneous_classes_as_long_as_the_property_is_of_same_type" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrderedDescending" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.IsOrderedDescending_2" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.UsesProvidedComparerOfT" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.CollectionOrderedTests.UsesProvidedComparisonOfT" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ComparerTests" executed="True" result="Success" success="True" time="0.071" asserts="0">

+                        <results>

+                          <test-suite type="ParameterizedTest" name="EqualItems" executed="True" result="Success" success="True" time="0.030" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.EqualItems(4.0d,4)" executed="True" result="Success" success="True" time="0.004" asserts="3" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.EqualItems(4.0d,4.0f)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.EqualItems(null,null)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.EqualItems(4,4)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.EqualItems(4.0d,4.0d)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.EqualItems(4.0f,4.0f)" executed="True" result="Success" success="True" time="0.003" asserts="3" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.EqualItems(4,4.0d)" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.EqualItems(4,4.0f)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.EqualItems(4.0f,4)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.EqualItems(4.0f,4.0d)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.EqualItems(null,null)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SpecialFloatingPointValues" executed="True" result="Success" success="True" time="0.011" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.SpecialFloatingPointValues(double.NaN)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.SpecialFloatingPointValues(float.NegativeInfinity)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.SpecialFloatingPointValues(float.NaN)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.SpecialFloatingPointValues(double.PositiveInfinity)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.SpecialFloatingPointValues(double.NegativeInfinity)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.SpecialFloatingPointValues(float.PositiveInfinity)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="UnequalItems" executed="True" result="Success" success="True" time="0.022" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.UnequalItems(4,null)" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.UnequalItems(4,2)" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.UnequalItems(4,null)" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.UnequalItems(4.0d,2.0d)" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.UnequalItems(4.0f,2.0f)" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.UnequalItems(4.0f,2.0d)" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.UnequalItems(4,2.0d)" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.UnequalItems(4,2.0f)" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.UnequalItems(4.0d,2)" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.UnequalItems(4.0d,2.0f)" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.Framework.Constraints.ComparerTests.UnequalItems(4.0f,2)" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EmptyConstraintTest" executed="True" result="Success" success="True" time="0.031" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.EmptyConstraintTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.EmptyConstraintTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EmptyConstraintTest.FailsWithBadValues(&quot;Hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EmptyConstraintTest.FailsWithBadValues(System.Object[])" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="InvalidDataThrowsArgumentException" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EmptyConstraintTest.InvalidDataThrowsArgumentException(null)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Constraints.EmptyConstraintTest.InvalidDataThrowsArgumentException(5)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EmptyConstraintTest.ProvidesProperFailureMessage(&quot;Hello&quot;,&quot;\&quot;Hello\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EmptyConstraintTest.ProvidesProperFailureMessage(System.Object[],&quot;&lt; 1, 2, 3 &gt;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EmptyConstraintTest.SucceedsWithGoodValues(&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EmptyConstraintTest.SucceedsWithGoodValues(System.Object[])" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EmptyConstraintTest.SucceedsWithGoodValues(System.Collections.ArrayList)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EmptyConstraintTest.SucceedsWithGoodValues(System.Collections.Generic.List`1[System.Int32])" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EndsWithTest" executed="True" result="Success" success="True" time="0.039" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.EndsWithTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.EndsWithTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.014" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.FailsWithBadValues(&quot;goodbye&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.FailsWithBadValues(&quot;What the hell?&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.FailsWithBadValues(&quot;hello there&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.FailsWithBadValues(&quot;say hello to fred&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.FailsWithBadValues(&quot;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.FailsWithBadValues(null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.011" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.ProvidesProperFailureMessage(&quot;goodbye&quot;,&quot;\&quot;goodbye\&quot;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.ProvidesProperFailureMessage(&quot;What the hell?&quot;,&quot;\&quot;What the hell?\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.ProvidesProperFailureMessage(&quot;hello there&quot;,&quot;\&quot;hello there\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.ProvidesProperFailureMessage(&quot;say hello to fred&quot;,&quot;\&quot;say hello to fred\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.ProvidesProperFailureMessage(&quot;&quot;,&quot;&lt;string.Empty&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.ProvidesProperFailureMessage(null,&quot;null&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.SucceedsWithGoodValues(&quot;hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTest.SucceedsWithGoodValues(&quot;I said hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EndsWithTestIgnoringCase" executed="True" result="Success" success="True" time="0.040" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.FailsWithBadValues(&quot;goodbye&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.FailsWithBadValues(&quot;What the hell?&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.FailsWithBadValues(&quot;hello there&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.FailsWithBadValues(&quot;say hello to fred&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.FailsWithBadValues(&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.FailsWithBadValues(null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.014" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.ProvidesProperFailureMessage(&quot;goodbye&quot;,&quot;\&quot;goodbye\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.ProvidesProperFailureMessage(&quot;What the hell?&quot;,&quot;\&quot;What the hell?\&quot;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.ProvidesProperFailureMessage(&quot;hello there&quot;,&quot;\&quot;hello there\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.ProvidesProperFailureMessage(&quot;say hello to fred&quot;,&quot;\&quot;say hello to fred\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.ProvidesProperFailureMessage(&quot;&quot;,&quot;&lt;string.Empty&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.ProvidesProperFailureMessage(null,&quot;null&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.SucceedsWithGoodValues(&quot;HELLO&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EndsWithTestIgnoringCase.SucceedsWithGoodValues(&quot;I said Hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EqualConstraintTest" executed="True" result="Success" success="True" time="0.206" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchDates" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchDatesWithinDays" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchDatesWithinHours" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchDatesWithinMilliseconds" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchDatesWithinMinutes" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchDatesWithinSeconds" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchDatesWithinTicks" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchDatesWithinTimeSpan" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="CanMatchDoublesWithRelativeTolerance" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchDoublesWithRelativeTolerance(10000.0d)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchDoublesWithRelativeTolerance(9500.0d)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchDoublesWithRelativeTolerance(10500.0d)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanMatchDoublesWithUlpTolerance" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchDoublesWithUlpTolerance(2E+16.0d)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchDoublesWithUlpTolerance(2E+16.0d)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanMatchSinglesWithRelativeTolerance" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchSinglesWithRelativeTolerance(10000.0f)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchSinglesWithRelativeTolerance(10500.0f)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchSinglesWithRelativeTolerance(9500.0f)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanMatchSinglesWithUlpTolerance" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchSinglesWithUlpTolerance(2E+07.0f)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchSinglesWithUlpTolerance(2E+07.0f)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanMatchSpecialFloatingPointValues" executed="True" result="Success" success="True" time="0.011" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchSpecialFloatingPointValues(double.PositiveInfinity)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchSpecialFloatingPointValues(float.NegativeInfinity)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchSpecialFloatingPointValues(float.PositiveInfinity)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchSpecialFloatingPointValues(double.NaN)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchSpecialFloatingPointValues(double.NegativeInfinity)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchSpecialFloatingPointValues(float.NaN)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.CanMatchTimeSpanWithinMinutes" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorIfDaysPrecedesWithin" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorIfHoursPrecedesWithin" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorIfMillisecondsPrecedesWithin" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorIfMinutesPrecedesWithin" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorIfPercentPrecedesWithin" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorIfSecondsPrecedesWithin" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorIfTicksPrecedesWithin" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorIfUlpsIsUsedOnDecimal" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="ErrorIfUlpsIsUsedOnIntegralType" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorIfUlpsIsUsedOnIntegralType(1000,1010)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorIfUlpsIsUsedOnIntegralType(1000UL,1010UL)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorIfUlpsIsUsedOnIntegralType(1000,1010)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorIfUlpsIsUsedOnIntegralType(1000L,1010L)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorIfUlpsPrecedesWithin" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorWithPercentAndUlpsToleranceModes" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ErrorWithUlpsAndPercentToleranceModes" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-suite type="ParameterizedTest" name="FailsOnDoublesOutsideOfRelativeTolerance" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.FailsOnDoublesOutsideOfRelativeTolerance(11500.0d)" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.FailsOnDoublesOutsideOfRelativeTolerance(8500.0d)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="FailsOnDoublesOutsideOfUlpTolerance" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.FailsOnDoublesOutsideOfUlpTolerance(2E+16.0d)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.FailsOnDoublesOutsideOfUlpTolerance(2E+16.0d)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="FailsOnSinglesOutsideOfRelativeTolerance" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.FailsOnSinglesOutsideOfRelativeTolerance(8500.0f)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.FailsOnSinglesOutsideOfRelativeTolerance(11500.0f)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="FailsOnSinglesOutsideOfUlpTolerance" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.FailsOnSinglesOutsideOfUlpTolerance(2E+07.0f)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.FailsOnSinglesOutsideOfUlpTolerance(2E+07.0f)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.FailsWithBadValues(5)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.FailsWithBadValues(null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.FailsWithBadValues(&quot;Hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.FailsWithBadValues(double.NaN)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.FailsWithBadValues(double.PositiveInfinity)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ProvidesProperFailureMessage(5,&quot;5&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ProvidesProperFailureMessage(null,&quot;null&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ProvidesProperFailureMessage(&quot;Hello&quot;,&quot;\&quot;Hello\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ProvidesProperFailureMessage(double.NaN,&quot;NaN&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.ProvidesProperFailureMessage(double.PositiveInfinity,&quot;Infinity&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.SucceedsWithGoodValues(4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.SucceedsWithGoodValues(4.0f)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.SucceedsWithGoodValues(4.0d)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.SucceedsWithGoodValues(4.0000m)" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.UsesProvidedComparerOfT" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.UsesProvidedComparisonOfT" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.UsesProvidedEqualityComparer" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.UsesProvidedEqualityComparerOfT" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.EqualConstraintTest.UsesProvidedIComparer" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EqualityComparerTests" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.EqualityComparerTests.CanCompareArrayContainingSelfToSelf" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EqualTest" executed="True" result="Success" success="True" time="0.019" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.EqualTest.FailedStringMatchShowsFailurePosition" executed="True" result="Success" success="True" time="0.007" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.EqualTest.LongStringsAreTruncated" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.EqualTest.LongStringsAreTruncatedAtBothEndsIfNecessary" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.EqualTest.LongStringsAreTruncatedAtFrontEndIfNecessary" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.EqualTest.TestPropertyWithPrivateSetter" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ExactTypeTest" executed="True" result="Success" success="True" time="0.017" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.ExactTypeTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.ExactTypeTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ExactTypeTest.FailsWithBadValues(NUnit.Framework.Constraints.B)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ExactTypeTest.FailsWithBadValues(NUnit.Framework.Constraints.D2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ExactTypeTest.ProvidesProperFailureMessage(NUnit.Framework.Constraints.B,&quot;&lt;NUnit.Framework.Constraints.B&gt;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ExactTypeTest.ProvidesProperFailureMessage(NUnit.Framework.Constraints.D2,&quot;&lt;NUnit.Framework.Constraints.D2&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ExactTypeTest.SucceedsWithGoodValues(NUnit.Framework.Constraints.D1)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="FalseConstraintTest" executed="True" result="Success" success="True" time="0.027" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.FalseConstraintTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.FalseConstraintTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.FalseConstraintTest.FailsWithBadValues(null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.FalseConstraintTest.FailsWithBadValues(&quot;hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.FalseConstraintTest.FailsWithBadValues(True)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.FalseConstraintTest.FailsWithBadValues(True)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.FalseConstraintTest.ProvidesProperFailureMessage(null,&quot;null&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.FalseConstraintTest.ProvidesProperFailureMessage(&quot;hello&quot;,&quot;\&quot;hello\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.FalseConstraintTest.ProvidesProperFailureMessage(True,&quot;True&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.FalseConstraintTest.ProvidesProperFailureMessage(True,&quot;True&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.FalseConstraintTest.SucceedsWithGoodValues(False)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.FalseConstraintTest.SucceedsWithGoodValues(False)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="FloatingPointNumericsTest" executed="True" result="Success" success="True" time="0.015" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.FloatingPointNumericsTest.DoubleEqualityWithUlps" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Framework.Constraints.FloatingPointNumericsTest.FloatEqualityWithUlps" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Framework.Constraints.FloatingPointNumericsTest.MirroredDoubleReinterpretation" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.FloatingPointNumericsTest.MirroredFloatReinterpretation" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.FloatingPointNumericsTest.MirroredIntegerReinterpretation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.FloatingPointNumericsTest.MirroredLongReinterpretation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="GreaterThanOrEqualTest" executed="True" result="Success" success="True" time="0.036" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanOrEqualTest.CanCompareIComparables" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanOrEqualTest.CanCompareIComparablesOfT" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanOrEqualTest.ComparisonConstraintTest.UsesProvidedComparerOfT" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanOrEqualTest.ComparisonConstraintTest.UsesProvidedComparisonOfT" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanOrEqualTest.ComparisonConstraintTest.UsesProvidedIComparer" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanOrEqualTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanOrEqualTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.000" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanOrEqualTest.FailsWithBadValues(4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="InvalidDataThrowsArgumentException" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanOrEqualTest.InvalidDataThrowsArgumentException(null)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanOrEqualTest.InvalidDataThrowsArgumentException(&quot;xxx&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanOrEqualTest.ProvidesProperFailureMessage(4,&quot;4&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanOrEqualTest.SucceedsWithGoodValues(6)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanOrEqualTest.SucceedsWithGoodValues(5)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="GreaterThanTest" executed="True" result="Success" success="True" time="0.036" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanTest.CanCompareIComparables" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanTest.CanCompareIComparablesOfT" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanTest.ComparisonConstraintTest.UsesProvidedComparerOfT" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanTest.ComparisonConstraintTest.UsesProvidedComparisonOfT" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanTest.ComparisonConstraintTest.UsesProvidedIComparer" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.GreaterThanTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanTest.FailsWithBadValues(4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanTest.FailsWithBadValues(5)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="InvalidDataThrowsArgumentException" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanTest.InvalidDataThrowsArgumentException(null)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanTest.InvalidDataThrowsArgumentException(&quot;xxx&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanTest.ProvidesProperFailureMessage(4,&quot;4&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanTest.ProvidesProperFailureMessage(5,&quot;5&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanTest.SucceedsWithGoodValues(6)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.GreaterThanTest.SucceedsWithGoodValues(5.001d)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="InstanceOfTypeTest" executed="True" result="Success" success="True" time="0.017" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.InstanceOfTypeTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.InstanceOfTypeTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.InstanceOfTypeTest.FailsWithBadValues(NUnit.Framework.Constraints.B)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.InstanceOfTypeTest.ProvidesProperFailureMessage(NUnit.Framework.Constraints.B,&quot;&lt;NUnit.Framework.Constraints.B&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.InstanceOfTypeTest.SucceedsWithGoodValues(NUnit.Framework.Constraints.D1)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.InstanceOfTypeTest.SucceedsWithGoodValues(NUnit.Framework.Constraints.D2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="LessThanOrEqualTest" executed="True" result="Success" success="True" time="0.031" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.LessThanOrEqualTest.CanCompareIComparables" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.LessThanOrEqualTest.CanCompareIComparablesOfT" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.LessThanOrEqualTest.ComparisonConstraintTest.UsesProvidedComparerOfT" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.LessThanOrEqualTest.ComparisonConstraintTest.UsesProvidedComparisonOfT" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.LessThanOrEqualTest.ComparisonConstraintTest.UsesProvidedIComparer" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.LessThanOrEqualTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.LessThanOrEqualTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.LessThanOrEqualTest.FailsWithBadValues(6)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="InvalidDataThrowsArgumentException" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.LessThanOrEqualTest.InvalidDataThrowsArgumentException(null)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.Framework.Constraints.LessThanOrEqualTest.InvalidDataThrowsArgumentException(&quot;xxx&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.LessThanOrEqualTest.ProvidesProperFailureMessage(6,&quot;6&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.LessThanOrEqualTest.SucceedsWithGoodValues(4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.LessThanOrEqualTest.SucceedsWithGoodValues(5)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="LessThanTest" executed="True" result="Success" success="True" time="0.038" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.LessThanTest.CanCompareIComparables" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.LessThanTest.CanCompareIComparablesOfT" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.LessThanTest.ComparisonConstraintTest.UsesProvidedComparerOfT" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.LessThanTest.ComparisonConstraintTest.UsesProvidedComparisonOfT" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.LessThanTest.ComparisonConstraintTest.UsesProvidedIComparer" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.LessThanTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.LessThanTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.LessThanTest.FailsWithBadValues(6)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.LessThanTest.FailsWithBadValues(5)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="InvalidDataThrowsArgumentException" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.LessThanTest.InvalidDataThrowsArgumentException(null)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Constraints.LessThanTest.InvalidDataThrowsArgumentException(&quot;xxx&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.LessThanTest.ProvidesProperFailureMessage(6,&quot;6&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.LessThanTest.ProvidesProperFailureMessage(5,&quot;5&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.LessThanTest.SucceedsWithGoodValues(4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.LessThanTest.SucceedsWithGoodValues(4.999d)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="MsgUtilTests" executed="True" result="Success" success="True" time="0.065" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.MsgUtilTests.ClipExpectedAndActual_StringsDoNotFitInLine" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Framework.Constraints.MsgUtilTests.ClipExpectedAndActual_StringsFitInLine" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Framework.Constraints.MsgUtilTests.ClipExpectedAndActual_StringTailsFitInLine" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="EscapeControlCharsTest" executed="True" result="Success" success="True" time="0.046" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\a&quot;,&quot;\\a&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\r\r\r&quot;,&quot;\\r\\r\\r&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\r\n&quot;,&quot;\\r\\n&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\n\r&quot;,&quot;\\n\\r&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;This is a\rtest message&quot;,&quot;This is a\\rtest message&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;&quot;,&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(null,null)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\t&quot;,&quot;\\t&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\t\n&quot;,&quot;\\t\\n&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\\r\\n&quot;,&quot;\\\\r\\\\n&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\n&quot;,&quot;\\n&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\b&quot;,&quot;\\b&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\f&quot;,&quot;\\f&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\v&quot;,&quot;\\v&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\x0085&quot;,&quot;\\x0085&quot;)" description="Next line character" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\x2028&quot;,&quot;\\x2028&quot;)" description="Line separator character" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\x2029&quot;,&quot;\\x2029&quot;)" description="Paragraph separator character" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\n\n&quot;,&quot;\\n\\n&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\n\n\n&quot;,&quot;\\n\\n\\n&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\r&quot;,&quot;\\r&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.EscapeControlCharsTest(&quot;\r\r&quot;,&quot;\\r\\r&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="TestClipString" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.ClipAtEnd" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.NoClippingNeeded" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.ClipAtStart" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.MsgUtilTests.ClipAtStartAndEnd" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NaNConstraintTest" executed="True" result="Success" success="True" time="0.042" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.014" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.FailsWithBadValues(null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.FailsWithBadValues(&quot;hello&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.FailsWithBadValues(42)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.FailsWithBadValues(double.PositiveInfinity)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.FailsWithBadValues(double.NegativeInfinity)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.FailsWithBadValues(float.PositiveInfinity)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.FailsWithBadValues(float.NegativeInfinity)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.013" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.ProvidesProperFailureMessage(null,&quot;null&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.ProvidesProperFailureMessage(&quot;hello&quot;,&quot;\&quot;hello\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.ProvidesProperFailureMessage(42,&quot;42&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.ProvidesProperFailureMessage(double.PositiveInfinity,&quot;Infinity&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.ProvidesProperFailureMessage(double.NegativeInfinity,&quot;-Infinity&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.ProvidesProperFailureMessage(float.PositiveInfinity,&quot;Infinity&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.ProvidesProperFailureMessage(float.NegativeInfinity,&quot;-Infinity&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.SucceedsWithGoodValues(double.NaN)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NaNConstraintTest.SucceedsWithGoodValues(float.NaN)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NotTest" executed="True" result="Success" success="True" time="0.028" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.NotTest.CanUseNotOperator" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.NotTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.NotTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NotTest.FailsWithBadValues(null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.NotTest.NotHonorsIgnoreCaseUsingConstructors" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.NotTest.NotHonorsIgnoreCaseUsingPrefixNotation" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.NotTest.NotHonorsTolerance" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NotTest.ProvidesProperFailureMessage(null,&quot;null&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NotTest.SucceedsWithGoodValues(42)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NotTest.SucceedsWithGoodValues(&quot;Hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NullConstraintTest" executed="True" result="Success" success="True" time="0.013" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.NullConstraintTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.NullConstraintTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NullConstraintTest.FailsWithBadValues(&quot;hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NullConstraintTest.ProvidesProperFailureMessage(&quot;hello&quot;,&quot;\&quot;hello\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.000" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NullConstraintTest.SucceedsWithGoodValues(null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NullOrEmptyStringConstraintTest" executed="True" result="Success" success="True" time="0.018" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.NullOrEmptyStringConstraintTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.NullOrEmptyStringConstraintTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NullOrEmptyStringConstraintTest.FailsWithBadValues(&quot;Hello&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="InvalidDataThrowsArgumentException" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NullOrEmptyStringConstraintTest.InvalidDataThrowsArgumentException(5)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NullOrEmptyStringConstraintTest.ProvidesProperFailureMessage(&quot;Hello&quot;,&quot;\&quot;Hello\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NullOrEmptyStringConstraintTest.SucceedsWithGoodValues(&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NullOrEmptyStringConstraintTest.SucceedsWithGoodValues(null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NumericsTest" executed="True" result="Success" success="True" time="0.079" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchDecimalWithoutToleranceMode" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchDecimalWithPercentage" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-suite type="ParameterizedTest" name="CanMatchIntegralsWithPercentage" executed="True" result="Success" success="True" time="0.029" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchIntegralsWithPercentage(10500)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchIntegralsWithPercentage(9500L)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchIntegralsWithPercentage(10500UL)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchIntegralsWithPercentage(9500UL)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchIntegralsWithPercentage(10000L)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchIntegralsWithPercentage(10000UL)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchIntegralsWithPercentage(10500L)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchIntegralsWithPercentage(10000)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchIntegralsWithPercentage(9500)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchIntegralsWithPercentage(10500)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchIntegralsWithPercentage(9500)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchIntegralsWithPercentage(10000)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanMatchWithoutToleranceMode" executed="True" result="Success" success="True" time="0.011" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchWithoutToleranceMode(123456789)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchWithoutToleranceMode(123456789UL)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchWithoutToleranceMode(123456789L)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchWithoutToleranceMode(123456789)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchWithoutToleranceMode(1234.568f)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.CanMatchWithoutToleranceMode(1234.5678d)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.NumericsTest.FailsOnDecimalAbovePercentage" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.NumericsTest.FailsOnDecimalBelowPercentage" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsOnIntegralsOutsideOfPercentage" executed="True" result="Success" success="True" time="0.019" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.FailsOnIntegralsOutsideOfPercentage(8500)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.FailsOnIntegralsOutsideOfPercentage(8500UL)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.FailsOnIntegralsOutsideOfPercentage(11500)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.FailsOnIntegralsOutsideOfPercentage(11500UL)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.FailsOnIntegralsOutsideOfPercentage(8500L)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.FailsOnIntegralsOutsideOfPercentage(11500)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.FailsOnIntegralsOutsideOfPercentage(11500L)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.NumericsTest.FailsOnIntegralsOutsideOfPercentage(8500)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="OrTest" executed="True" result="Success" success="True" time="0.021" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.OrTest.CanCombineTestsWithOrOperator" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.OrTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.OrTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.000" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.OrTest.FailsWithBadValues(37)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.OrTest.ProvidesProperFailureMessage(37,&quot;37&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.OrTest.SucceedsWithGoodValues(99)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.OrTest.SucceedsWithGoodValues(42)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PropertyExistsTest" executed="True" result="Success" success="True" time="0.032" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.PropertyExistsTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.PropertyExistsTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.PropertyExistsTest.FailsWithBadValues(42)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.PropertyExistsTest.FailsWithBadValues(System.Collections.ArrayList)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.PropertyExistsTest.FailsWithBadValues(System.Int32)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="InvalidDataThrowsException" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.PropertyExistsTest.InvalidDataThrowsException(null)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.PropertyExistsTest.ProvidesProperFailureMessage(42,&quot;&lt;System.Int32&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.PropertyExistsTest.ProvidesProperFailureMessage(System.Collections.ArrayList,&quot;&lt;System.Collections.ArrayList&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.PropertyExistsTest.ProvidesProperFailureMessage(System.Int32,&quot;&lt;System.Int32&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.PropertyExistsTest.SucceedsWithGoodValues(System.Int32[])" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.PropertyExistsTest.SucceedsWithGoodValues(&quot;hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.PropertyExistsTest.SucceedsWithGoodValues(System.Array)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PropertyTest" executed="True" result="Success" success="True" time="0.035" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.PropertyTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.PropertyTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.PropertyTest.FailsWithBadValues(System.Int32[])" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.PropertyTest.FailsWithBadValues(&quot;goodbye&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="InvalidDataThrowsException" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.PropertyTest.InvalidDataThrowsException(null)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.Framework.Constraints.PropertyTest.InvalidDataThrowsException(42)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.Framework.Constraints.PropertyTest.InvalidDataThrowsException(System.Collections.ArrayList)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.PropertyTest.PropertyEqualToValueWithTolerance" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.PropertyTest.ProvidesProperFailureMessage(System.Int32[],&quot;3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.PropertyTest.ProvidesProperFailureMessage(&quot;goodbye&quot;,&quot;7&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.PropertyTest.SucceedsWithGoodValues(System.Int32[])" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.PropertyTest.SucceedsWithGoodValues(&quot;hello&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RangeConstraintTest" executed="True" result="Success" success="True" time="0.039" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.FailsWithBadValues(4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.FailsWithBadValues(43)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="InvalidDataThrowsArgumentException" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.InvalidDataThrowsArgumentException(null)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.InvalidDataThrowsArgumentException(&quot;xxx&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.ProvidesProperFailureMessage(4,&quot;4&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.ProvidesProperFailureMessage(43,&quot;43&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.SucceedsWithGoodValues(5)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.SucceedsWithGoodValues(23)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.SucceedsWithGoodValues(42)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.UsesProvidedComparerOfT" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.UsesProvidedComparisonOfT" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Framework.Constraints.RangeConstraintTest.UsesProvidedIComparer" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ReusableConstraintTests" executed="True" result="Success" success="True" time="0.012" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.ReusableConstraintTests.CanCreateReusableConstraintByImplicitConversion" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-suite type="Theory" name="CanReuseReusableConstraintMultipleTimes" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ReusableConstraintTests.CanReuseReusableConstraintMultipleTimes(&lt;not &lt;empty&gt;&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.Framework.Constraints.ReusableConstraintTests.CanReuseReusableConstraintMultipleTimes(&lt;not &lt;null&gt;&gt;)" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                              <test-case name="NUnit.Framework.Constraints.ReusableConstraintTests.CanReuseReusableConstraintMultipleTimes(&lt;property Length &lt;greaterthan 3&gt;&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.Framework.Constraints.ReusableConstraintTests.CanReuseReusableConstraintMultipleTimes(&lt;and &lt;property Length &lt;equal 4&gt;&gt; &lt;startswith &quot;te&quot;&gt;&gt;)" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SameAsTest" executed="True" result="Success" success="True" time="0.022" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.SameAsTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.SameAsTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SameAsTest.FailsWithBadValues(System.Object)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SameAsTest.FailsWithBadValues(3)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SameAsTest.FailsWithBadValues(&quot;Hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SameAsTest.ProvidesProperFailureMessage(System.Object,&quot;&lt;System.Object&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SameAsTest.ProvidesProperFailureMessage(3,&quot;3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SameAsTest.ProvidesProperFailureMessage(&quot;Hello&quot;,&quot;\&quot;Hello\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SameAsTest.SucceedsWithGoodValues(System.Object)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SamePathOrUnderTest_Linux" executed="True" result="Success" success="True" time="0.062" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.019" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.FailsWithBadValues(123)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.FailsWithBadValues(&quot;/Folder1/Folder2&quot;)" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.FailsWithBadValues(&quot;/FOLDER1/./junk/../Folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.FailsWithBadValues(&quot;/FOLDER1/./junk/../Folder2/temp/../Folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.FailsWithBadValues(&quot;/folder1/folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.FailsWithBadValues(&quot;/folder1/./folder2/../folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.FailsWithBadValues(&quot;/folder1&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.014" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.ProvidesProperFailureMessage(123,&quot;123&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.ProvidesProperFailureMessage(&quot;/Folder1/Folder2&quot;,&quot;\&quot;/Folder1/Folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.ProvidesProperFailureMessage(&quot;/FOLDER1/./junk/../Folder2&quot;,&quot;\&quot;/FOLDER1/./junk/../Folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.ProvidesProperFailureMessage(&quot;/FOLDER1/./junk/../Folder2/temp/../Folder3&quot;,&quot;\&quot;/FOLDER1/./junk/../Folder2/temp/../Folder3\&quot;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.ProvidesProperFailureMessage(&quot;/folder1/folder3&quot;,&quot;\&quot;/folder1/folder3\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.ProvidesProperFailureMessage(&quot;/folder1/./folder2/../folder3&quot;,&quot;\&quot;/folder1/./folder2/../folder3\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.ProvidesProperFailureMessage(&quot;/folder1&quot;,&quot;\&quot;/folder1\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.016" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.SucceedsWithGoodValues(&quot;/folder1/folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.SucceedsWithGoodValues(&quot;/folder1/./folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.SucceedsWithGoodValues(&quot;/folder1/junk/../folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.SucceedsWithGoodValues(&quot;\\folder1\\folder2&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.SucceedsWithGoodValues(&quot;/folder1/folder2/folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.SucceedsWithGoodValues(&quot;/folder1/./folder2/folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.SucceedsWithGoodValues(&quot;/folder1/junk/../folder2/folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Linux.SucceedsWithGoodValues(&quot;\\folder1\\folder2\\folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SamePathOrUnderTest_Windows" executed="True" result="Success" success="True" time="0.046" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.FailsWithBadValues(123)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.FailsWithBadValues(&quot;C:\\folder1\\folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.FailsWithBadValues(&quot;C:\\folder1\\.\\folder2\\..\\file.temp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.ProvidesProperFailureMessage(123,&quot;123&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.ProvidesProperFailureMessage(&quot;C:\\folder1\\folder3&quot;,&quot;\&quot;C:\\folder1\\folder3\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.ProvidesProperFailureMessage(&quot;C:\\folder1\\.\\folder2\\..\\file.temp&quot;,&quot;\&quot;C:\\folder1\\.\\folder2\\..\\file.temp\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.022" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.SucceedsWithGoodValues(&quot;C:\\folder1\\folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.SucceedsWithGoodValues(&quot;C:\\Folder1\\Folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.SucceedsWithGoodValues(&quot;C:\\folder1\\.\\folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.SucceedsWithGoodValues(&quot;C:\\folder1\\junk\\..\\folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.SucceedsWithGoodValues(&quot;C:\\FOLDER1\\.\\junk\\..\\Folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.SucceedsWithGoodValues(&quot;C:/folder1/folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.SucceedsWithGoodValues(&quot;C:\\folder1\\folder2\\folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.SucceedsWithGoodValues(&quot;C:\\folder1\\.\\folder2\\folder3&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.SucceedsWithGoodValues(&quot;C:\\folder1\\junk\\..\\folder2\\folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.SucceedsWithGoodValues(&quot;C:\\FOLDER1\\.\\junk\\..\\Folder2\\temp\\..\\Folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathOrUnderTest_Windows.SucceedsWithGoodValues(&quot;C:/folder1/folder2/folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SamePathTest_Linux" executed="True" result="Success" success="True" time="0.045" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.FailsWithBadValues(123)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.FailsWithBadValues(&quot;/folder2/file.tmp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.FailsWithBadValues(&quot;/folder1/./folder2/../file.temp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.FailsWithBadValues(&quot;/Folder1/File.TMP&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.FailsWithBadValues(&quot;/FOLDER1/./folder2/../File.TMP&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.013" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.ProvidesProperFailureMessage(123,&quot;123&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.ProvidesProperFailureMessage(&quot;/folder2/file.tmp&quot;,&quot;\&quot;/folder2/file.tmp\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.ProvidesProperFailureMessage(&quot;/folder1/./folder2/../file.temp&quot;,&quot;\&quot;/folder1/./folder2/../file.temp\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.ProvidesProperFailureMessage(&quot;/Folder1/File.TMP&quot;,&quot;\&quot;/Folder1/File.TMP\&quot;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.ProvidesProperFailureMessage(&quot;/FOLDER1/./folder2/../File.TMP&quot;,&quot;\&quot;/FOLDER1/./folder2/../File.TMP\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.RootPathEquality" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.SucceedsWithGoodValues(&quot;/folder1/file.tmp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.SucceedsWithGoodValues(&quot;/folder1/./file.tmp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.SucceedsWithGoodValues(&quot;/folder1/folder2/../file.tmp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.SucceedsWithGoodValues(&quot;/folder1/./folder2/../file.tmp&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Linux.SucceedsWithGoodValues(&quot;\\folder1\\file.tmp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SamePathTest_Windows" executed="True" result="Success" success="True" time="0.038" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.FailsWithBadValues(123)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.FailsWithBadValues(&quot;C:\\folder2\\file.tmp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.FailsWithBadValues(&quot;C:\\folder1\\.\\folder2\\..\\file.temp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.ProvidesProperFailureMessage(123,&quot;123&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.ProvidesProperFailureMessage(&quot;C:\\folder2\\file.tmp&quot;,&quot;\&quot;C:\\folder2\\file.tmp\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.ProvidesProperFailureMessage(&quot;C:\\folder1\\.\\folder2\\..\\file.temp&quot;,&quot;\&quot;C:\\folder1\\.\\folder2\\..\\file.temp\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.RootPathEquality" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.015" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.SucceedsWithGoodValues(&quot;C:\\folder1\\file.tmp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.SucceedsWithGoodValues(&quot;C:\\Folder1\\File.TMP&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.SucceedsWithGoodValues(&quot;C:\\folder1\\.\\file.tmp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.SucceedsWithGoodValues(&quot;C:\\folder1\\folder2\\..\\file.tmp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.SucceedsWithGoodValues(&quot;C:\\FOLDER1\\.\\folder2\\..\\File.TMP&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SamePathTest_Windows.SucceedsWithGoodValues(&quot;C:/folder1/file.tmp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="StartsWithTest" executed="True" result="Success" success="True" time="0.037" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.StartsWithTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.StartsWithTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.011" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.FailsWithBadValues(&quot;goodbye&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.FailsWithBadValues(&quot;HELLO THERE&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.FailsWithBadValues(&quot;I said hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.FailsWithBadValues(&quot;say hello to fred&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.FailsWithBadValues(&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.FailsWithBadValues(null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.012" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.ProvidesProperFailureMessage(&quot;goodbye&quot;,&quot;\&quot;goodbye\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.ProvidesProperFailureMessage(&quot;HELLO THERE&quot;,&quot;\&quot;HELLO THERE\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.ProvidesProperFailureMessage(&quot;I said hello&quot;,&quot;\&quot;I said hello\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.ProvidesProperFailureMessage(&quot;say hello to fred&quot;,&quot;\&quot;say hello to fred\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.ProvidesProperFailureMessage(&quot;&quot;,&quot;&lt;string.Empty&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.ProvidesProperFailureMessage(null,&quot;null&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.SucceedsWithGoodValues(&quot;hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTest.SucceedsWithGoodValues(&quot;hello there&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="StartsWithTestIgnoringCase" executed="True" result="Success" success="True" time="0.040" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.012" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.FailsWithBadValues(&quot;goodbye&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.FailsWithBadValues(&quot;What the hell?&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.FailsWithBadValues(&quot;I said hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.FailsWithBadValues(&quot;say Hello to fred&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.FailsWithBadValues(&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.FailsWithBadValues(null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.012" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.ProvidesProperFailureMessage(&quot;goodbye&quot;,&quot;\&quot;goodbye\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.ProvidesProperFailureMessage(&quot;What the hell?&quot;,&quot;\&quot;What the hell?\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.ProvidesProperFailureMessage(&quot;I said hello&quot;,&quot;\&quot;I said hello\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.ProvidesProperFailureMessage(&quot;say Hello to fred&quot;,&quot;\&quot;say Hello to fred\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.ProvidesProperFailureMessage(&quot;&quot;,&quot;&lt;string.Empty&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.ProvidesProperFailureMessage(null,&quot;null&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.SucceedsWithGoodValues(&quot;Hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.StartsWithTestIgnoringCase.SucceedsWithGoodValues(&quot;HELLO there&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SubPathTest_Linux" executed="True" result="Success" success="True" time="0.070" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.025" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.FailsWithBadValues(123)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.FailsWithBadValues(&quot;/Folder1/Folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.FailsWithBadValues(&quot;/FOLDER1/./junk/../Folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.FailsWithBadValues(&quot;/FOLDER1/./junk/../Folder2/temp/../Folder3&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.FailsWithBadValues(&quot;/folder1/folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.FailsWithBadValues(&quot;/folder1/./folder2/../folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.FailsWithBadValues(&quot;/folder1&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.FailsWithBadValues(&quot;/folder1/folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.FailsWithBadValues(&quot;/folder1/./folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.FailsWithBadValues(&quot;/folder1/junk/../folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.FailsWithBadValues(&quot;\\folder1\\folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.023" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.ProvidesProperFailureMessage(123,&quot;123&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.ProvidesProperFailureMessage(&quot;/Folder1/Folder2&quot;,&quot;\&quot;/Folder1/Folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.ProvidesProperFailureMessage(&quot;/FOLDER1/./junk/../Folder2&quot;,&quot;\&quot;/FOLDER1/./junk/../Folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.ProvidesProperFailureMessage(&quot;/FOLDER1/./junk/../Folder2/temp/../Folder3&quot;,&quot;\&quot;/FOLDER1/./junk/../Folder2/temp/../Folder3\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.ProvidesProperFailureMessage(&quot;/folder1/folder3&quot;,&quot;\&quot;/folder1/folder3\&quot;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.ProvidesProperFailureMessage(&quot;/folder1/./folder2/../folder3&quot;,&quot;\&quot;/folder1/./folder2/../folder3\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.ProvidesProperFailureMessage(&quot;/folder1&quot;,&quot;\&quot;/folder1\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.ProvidesProperFailureMessage(&quot;/folder1/folder2&quot;,&quot;\&quot;/folder1/folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.ProvidesProperFailureMessage(&quot;/folder1/./folder2&quot;,&quot;\&quot;/folder1/./folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.ProvidesProperFailureMessage(&quot;/folder1/junk/../folder2&quot;,&quot;\&quot;/folder1/junk/../folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.ProvidesProperFailureMessage(&quot;\\folder1\\folder2&quot;,&quot;\&quot;\\folder1\\folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.SubPathOfRoot" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.SucceedsWithGoodValues(&quot;/folder1/folder2/folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.SucceedsWithGoodValues(&quot;/folder1/./folder2/folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.SucceedsWithGoodValues(&quot;/folder1/junk/../folder2/folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Linux.SucceedsWithGoodValues(&quot;\\folder1\\folder2\\folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SubPathTest_Windows" executed="True" result="Success" success="True" time="0.063" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.020" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.FailsWithBadValues(123)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.FailsWithBadValues(&quot;C:\\folder1\\folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.FailsWithBadValues(&quot;C:\\folder1\\.\\folder2\\..\\file.temp&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.FailsWithBadValues(&quot;C:\\folder1\\folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.FailsWithBadValues(&quot;C:\\Folder1\\Folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.FailsWithBadValues(&quot;C:\\folder1\\.\\folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.FailsWithBadValues(&quot;C:\\folder1\\junk\\..\\folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.FailsWithBadValues(&quot;C:\\FOLDER1\\.\\junk\\..\\Folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.FailsWithBadValues(&quot;C:/folder1/folder2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.019" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.ProvidesProperFailureMessage(123,&quot;123&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.ProvidesProperFailureMessage(&quot;C:\\folder1\\folder3&quot;,&quot;\&quot;C:\\folder1\\folder3\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.ProvidesProperFailureMessage(&quot;C:\\folder1\\.\\folder2\\..\\file.temp&quot;,&quot;\&quot;C:\\folder1\\.\\folder2\\..\\file.temp\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.ProvidesProperFailureMessage(&quot;C:\\folder1\\folder2&quot;,&quot;\&quot;C:\\folder1\\folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.ProvidesProperFailureMessage(&quot;C:\\Folder1\\Folder2&quot;,&quot;\&quot;C:\\Folder1\\Folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.ProvidesProperFailureMessage(&quot;C:\\folder1\\.\\folder2&quot;,&quot;\&quot;C:\\folder1\\.\\folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.ProvidesProperFailureMessage(&quot;C:\\folder1\\junk\\..\\folder2&quot;,&quot;\&quot;C:\\folder1\\junk\\..\\folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.ProvidesProperFailureMessage(&quot;C:\\FOLDER1\\.\\junk\\..\\Folder2&quot;,&quot;\&quot;C:\\FOLDER1\\.\\junk\\..\\Folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.ProvidesProperFailureMessage(&quot;C:/folder1/folder2&quot;,&quot;\&quot;C:/folder1/folder2\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.SubPathOfRoot" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.SucceedsWithGoodValues(&quot;C:\\folder1\\folder2\\folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.SucceedsWithGoodValues(&quot;C:\\folder1\\.\\folder2\\folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.SucceedsWithGoodValues(&quot;C:\\folder1\\junk\\..\\folder2\\folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.SucceedsWithGoodValues(&quot;C:\\FOLDER1\\.\\junk\\..\\Folder2\\temp\\..\\Folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubPathTest_Windows.SucceedsWithGoodValues(&quot;C:/folder1/folder2/folder3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SubstringTest" executed="True" result="Success" success="True" time="0.039" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.SubstringTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.SubstringTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.FailsWithBadValues(&quot;goodbye&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.FailsWithBadValues(&quot;HELLO&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.FailsWithBadValues(&quot;What the hell?&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.FailsWithBadValues(&quot;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.FailsWithBadValues(null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.ProvidesProperFailureMessage(&quot;goodbye&quot;,&quot;\&quot;goodbye\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.ProvidesProperFailureMessage(&quot;HELLO&quot;,&quot;\&quot;HELLO\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.ProvidesProperFailureMessage(&quot;What the hell?&quot;,&quot;\&quot;What the hell?\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.ProvidesProperFailureMessage(&quot;&quot;,&quot;&lt;string.Empty&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.ProvidesProperFailureMessage(null,&quot;null&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.SucceedsWithGoodValues(&quot;hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.SucceedsWithGoodValues(&quot;hello there&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.SucceedsWithGoodValues(&quot;I said hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTest.SucceedsWithGoodValues(&quot;say hello to fred&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SubstringTestIgnoringCase" executed="True" result="Success" success="True" time="0.035" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.FailsWithBadValues(&quot;goodbye&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.FailsWithBadValues(&quot;What the hell?&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.FailsWithBadValues(&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.FailsWithBadValues(null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.ProvidesProperFailureMessage(&quot;goodbye&quot;,&quot;\&quot;goodbye\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.ProvidesProperFailureMessage(&quot;What the hell?&quot;,&quot;\&quot;What the hell?\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.ProvidesProperFailureMessage(&quot;&quot;,&quot;&lt;string.Empty&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.ProvidesProperFailureMessage(null,&quot;null&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.SucceedsWithGoodValues(&quot;Hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.SucceedsWithGoodValues(&quot;HellO there&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.SucceedsWithGoodValues(&quot;I said HELLO&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.SubstringTestIgnoringCase.SucceedsWithGoodValues(&quot;say hello to fred&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ThrowsConstraintTest_ExactType" executed="True" result="Success" success="True" time="0.024" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_ExactType.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_ExactType.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_ExactType.FailsWithBadValues(NUnit.Framework.TestDelegate)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_ExactType.FailsWithBadValues(NUnit.Framework.TestDelegate)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_ExactType.FailsWithBadValues(NUnit.Framework.TestDelegate)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_ExactType.ProvidesProperFailureMessage(NUnit.Framework.TestDelegate,&quot;&lt;System.ApplicationException&gt;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_ExactType.ProvidesProperFailureMessage(NUnit.Framework.TestDelegate,&quot;no exception thrown&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_ExactType.ProvidesProperFailureMessage(NUnit.Framework.TestDelegate,&quot;&lt;System.Exception&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_ExactType.SucceedsWithGoodValues(NUnit.Framework.TestDelegate)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ThrowsConstraintTest_InstanceOfType" executed="True" result="Success" success="True" time="0.027" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_InstanceOfType.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_InstanceOfType.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_InstanceOfType.FailsWithBadValues(NUnit.Framework.TestDelegate)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_InstanceOfType.FailsWithBadValues(NUnit.Framework.TestDelegate)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_InstanceOfType.FailsWithBadValues(NUnit.Framework.TestDelegate)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_InstanceOfType.ProvidesProperFailureMessage(NUnit.Framework.TestDelegate,&quot;&lt;System.ArgumentException&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_InstanceOfType.ProvidesProperFailureMessage(NUnit.Framework.TestDelegate,&quot;no exception thrown&quot;)" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_InstanceOfType.ProvidesProperFailureMessage(NUnit.Framework.TestDelegate,&quot;&lt;System.Exception&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_InstanceOfType.SucceedsWithGoodValues(NUnit.Framework.TestDelegate)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_InstanceOfType.SucceedsWithGoodValues(NUnit.Framework.TestDelegate)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ThrowsConstraintTest_WithConstraint" executed="True" result="Success" success="True" time="0.023" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_WithConstraint.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_WithConstraint.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_WithConstraint.FailsWithBadValues(NUnit.Framework.TestDelegate)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_WithConstraint.FailsWithBadValues(NUnit.Framework.TestDelegate)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_WithConstraint.FailsWithBadValues(NUnit.Framework.TestDelegate)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_WithConstraint.ProvidesProperFailureMessage(NUnit.Framework.TestDelegate,&quot;&lt;System.ApplicationException&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_WithConstraint.ProvidesProperFailureMessage(NUnit.Framework.TestDelegate,&quot;no exception thrown&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_WithConstraint.ProvidesProperFailureMessage(NUnit.Framework.TestDelegate,&quot;&lt;System.Exception&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.ThrowsConstraintTest_WithConstraint.SucceedsWithGoodValues(NUnit.Framework.TestDelegate)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ToStringTests" executed="True" result="Success" success="True" time="0.016" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.ToStringTests.CanDisplayPrefixConstraints_Resolved" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Framework.Constraints.ToStringTests.CanDisplaySimpleConstraints_Resolved" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Framework.Constraints.ToStringTests.CanDisplaySimpleConstraints_Unresolved" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Framework.Constraints.ToStringTests.DisplayBinaryConstraints_Resolved" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.ToStringTests.DisplayBinaryConstraints_UnResolved" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.ToStringTests.DisplayPrefixConstraints_Unresolved" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TrueConstraintTest" executed="True" result="Success" success="True" time="0.030" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.TrueConstraintTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.TrueConstraintTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.TrueConstraintTest.FailsWithBadValues(null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.TrueConstraintTest.FailsWithBadValues(&quot;hello&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.TrueConstraintTest.FailsWithBadValues(False)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.TrueConstraintTest.FailsWithBadValues(False)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.TrueConstraintTest.ProvidesProperFailureMessage(null,&quot;null&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.TrueConstraintTest.ProvidesProperFailureMessage(&quot;hello&quot;,&quot;\&quot;hello\&quot;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.TrueConstraintTest.ProvidesProperFailureMessage(False,&quot;False&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.TrueConstraintTest.ProvidesProperFailureMessage(False,&quot;False&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.TrueConstraintTest.SucceedsWithGoodValues(True)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.TrueConstraintTest.SucceedsWithGoodValues(True)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="XmlSerializableTest" executed="True" result="Success" success="True" time="1.824" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Constraints.XmlSerializableTest.ConstraintTestBaseNoData.ProvidesProperDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Constraints.XmlSerializableTest.ConstraintTestBaseNoData.ProvidesProperStringRepresentation" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="FailsWithBadValues" executed="True" result="Success" success="True" time="0.703" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.XmlSerializableTest.FailsWithBadValues(System.Collections.Generic.Dictionary`2[System.String,System.String])" executed="True" result="Success" success="True" time="0.339" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.XmlSerializableTest.FailsWithBadValues(NUnit.Framework.Constraints.InternalClass)" executed="True" result="Success" success="True" time="0.206" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.XmlSerializableTest.FailsWithBadValues(NUnit.Framework.Constraints.InternalWithSerializableAttributeClass)" executed="True" result="Success" success="True" time="0.152" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="InvalidDataThrowsArgumentException" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.XmlSerializableTest.InvalidDataThrowsArgumentException(null)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ProvidesProperFailureMessage" executed="True" result="Success" success="True" time="0.471" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.XmlSerializableTest.ProvidesProperFailureMessage(System.Collections.Generic.Dictionary`2[System.String,System.String],&quot;&lt;Dictionary`2&gt;&quot;)" executed="True" result="Success" success="True" time="0.156" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.XmlSerializableTest.ProvidesProperFailureMessage(NUnit.Framework.Constraints.InternalClass,&quot;&lt;InternalClass&gt;&quot;)" executed="True" result="Success" success="True" time="0.157" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.XmlSerializableTest.ProvidesProperFailureMessage(NUnit.Framework.Constraints.InternalWithSerializableAttributeClass,&quot;&lt;InternalWithSerializableAttributeClass&gt;&quot;)" executed="True" result="Success" success="True" time="0.152" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SucceedsWithGoodValues" executed="True" result="Success" success="True" time="0.633" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Constraints.XmlSerializableTest.SucceedsWithGoodValues(1)" executed="True" result="Success" success="True" time="0.030" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.XmlSerializableTest.SucceedsWithGoodValues(&quot;a&quot;)" executed="True" result="Success" success="True" time="0.005" asserts="1" />

+                              <test-case name="NUnit.Framework.Constraints.XmlSerializableTest.SucceedsWithGoodValues(System.Collections.ArrayList)" executed="True" result="Success" success="True" time="0.589" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                    </results>

+                  </test-suite>

+                  <test-suite type="Namespace" name="Syntax" executed="True" result="Success" success="True" time="5.267" asserts="0">

+                    <results>

+                      <test-suite type="TestFixture" name="AfterSyntaxUsingActualPassedByRef" executed="True" result="Success" success="True" time="1.439" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingActualPassedByRef.EqualToTest" executed="True" result="Success" success="True" time="0.203" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingActualPassedByRef.GreaterTest" executed="True" result="Success" success="True" time="0.201" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingActualPassedByRef.HasMemberTest" executed="True" result="Success" success="True" time="0.203" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingActualPassedByRef.NullTest" executed="True" result="Success" success="True" time="0.201" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingActualPassedByRef.SameAsTest" executed="True" result="Success" success="True" time="0.200" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingActualPassedByRef.TextTest" executed="True" result="Success" success="True" time="0.201" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingActualPassedByRef.TrueTest" executed="True" result="Success" success="True" time="0.200" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AfterSyntaxUsingAnonymousDelegates" executed="True" result="Success" success="True" time="1.426" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingAnonymousDelegates.EqualToTest" executed="True" result="Success" success="True" time="0.201" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingAnonymousDelegates.GreaterTest" executed="True" result="Success" success="True" time="0.200" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingAnonymousDelegates.HasMemberTest" executed="True" result="Success" success="True" time="0.201" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingAnonymousDelegates.NullTest" executed="True" result="Success" success="True" time="0.200" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingAnonymousDelegates.SameAsTest" executed="True" result="Success" success="True" time="0.200" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingAnonymousDelegates.TextTest" executed="True" result="Success" success="True" time="0.200" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterSyntaxUsingAnonymousDelegates.TrueTest" executed="True" result="Success" success="True" time="0.200" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AfterTest_AndOperator" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AfterTest_AndOperator.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterTest_AndOperator.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterTest_AndOperator.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AfterTest_ProperyTest" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AfterTest_ProperyTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterTest_ProperyTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterTest_ProperyTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AfterTest_SimpleConstraint" executed="True" result="Success" success="True" time="0.012" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AfterTest_SimpleConstraint.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterTest_SimpleConstraint.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AfterTest_SimpleConstraint.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AllTest" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AllTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AllTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AllTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AndIsEvaluatedBeforeFollowingOr" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AndIsEvaluatedBeforeFollowingOr.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AndIsEvaluatedBeforeFollowingOr.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AndIsEvaluatedBeforeFollowingOr.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AndIsEvaluatedBeforePrecedingOr" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AndIsEvaluatedBeforePrecedingOr.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AndIsEvaluatedBeforePrecedingOr.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AndIsEvaluatedBeforePrecedingOr.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AndOperatorOverride" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AndOperatorOverride.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AndOperatorOverride.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AndOperatorOverride.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AndTest" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AndTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AndTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AndTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AndTest_ThreeAndsWithNot" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AndTest_ThreeAndsWithNot.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AndTest_ThreeAndsWithNot.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AndTest_ThreeAndsWithNot.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ArbitraryConstraintMatching" executed="True" result="Success" success="True" time="0.013" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.ArbitraryConstraintMatching.CanMatchCustomConstraint" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ArbitraryConstraintMatching.CanMatchCustomConstraintAfterPrefix" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ArbitraryConstraintMatching.CanMatchCustomConstraintsUnderAndOperator" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ArbitraryConstraintMatching.CanMatchPredicate" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssignableFromTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AssignableFromTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AssignableFromTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AssignableFromTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssignableFromTest_Generic" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AssignableFromTest_Generic.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AssignableFromTest_Generic.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AssignableFromTest_Generic.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssignableToTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AssignableToTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AssignableToTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AssignableToTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssignableToTest_Generic" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AssignableToTest_Generic.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AssignableToTest_Generic.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AssignableToTest_Generic.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AtLeastTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AtLeastTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AtLeastTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AtLeastTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AtMostTest" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AtMostTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AtMostTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AtMostTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AttributeTest" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AttributeTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AttributeTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AttributeTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AttributeTest_Generic" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AttributeTest_Generic.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AttributeTest_Generic.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AttributeTest_Generic.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AttributeTestWithFollowingConstraint" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.AttributeTestWithFollowingConstraint.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AttributeTestWithFollowingConstraint.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.AttributeTestWithFollowingConstraint.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="BinarySerializableTest" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.BinarySerializableTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.BinarySerializableTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.BinarySerializableTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionContainsTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionContainsTest_Comparer" executed="True" result="Success" success="True" time="0.014" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest_Comparer.ComparerIsCalled" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest_Comparer.ComparerIsCalledInExpression" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest_Comparer.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest_Comparer.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest_Comparer.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionContainsTest_Comparer_String" executed="True" result="Success" success="True" time="0.013" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest_Comparer_String.ComparerIsCalled" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest_Comparer_String.ComparerIsCalledInExpression" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest_Comparer_String.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest_Comparer_String.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest_Comparer_String.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionContainsTest_String" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest_String.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest_String.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionContainsTest_String.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionEquivalentTest" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionEquivalentTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionEquivalentTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionEquivalentTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionMemberTest" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionMemberTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionMemberTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionMemberTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionMemberTest_Comparer" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionMemberTest_Comparer.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionMemberTest_Comparer.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionMemberTest_Comparer.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionOrderedByTest" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedByTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedByTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedByTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionOrderedByTest_Comparer" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedByTest_Comparer.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedByTest_Comparer.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedByTest_Comparer.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionOrderedByTest_Comparer_Descending" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedByTest_Comparer_Descending.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedByTest_Comparer_Descending.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedByTest_Comparer_Descending.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionOrderedByTest_Descending" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedByTest_Descending.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedByTest_Descending.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedByTest_Descending.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionOrderedTest" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionOrderedTest_Comparer" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedTest_Comparer.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedTest_Comparer.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedTest_Comparer.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionOrderedTest_Comparer_Descending" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedTest_Comparer_Descending.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedTest_Comparer_Descending.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedTest_Comparer_Descending.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionOrderedTest_Descending" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedTest_Descending.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedTest_Descending.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionOrderedTest_Descending.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionSubsetTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CollectionSubsetTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionSubsetTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CollectionSubsetTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CountTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.CountTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CountTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.CountTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EmptyTest" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.EmptyTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.EmptyTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.EmptyTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EndsWithTest" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.EndsWithTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.EndsWithTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.EndsWithTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EndsWithTest_IgnoreCase" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.EndsWithTest_IgnoreCase.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.EndsWithTest_IgnoreCase.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.EndsWithTest_IgnoreCase.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EqualityTests" executed="True" result="Success" success="True" time="0.019" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.EqualityTests.EqualityTestsUsingDefaultFloatingPointTolerance" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Framework.Syntax.EqualityTests.EqualityTestsWithTolerance" executed="True" result="Success" success="True" time="0.002" asserts="8" />

+                          <test-case name="NUnit.Framework.Syntax.EqualityTests.EqualityTestsWithTolerance_MixedFloatAndDouble" executed="True" result="Success" success="True" time="0.001" asserts="6" />

+                          <test-case name="NUnit.Framework.Syntax.EqualityTests.EqualityTestsWithTolerance_MixingTypesGenerally" executed="True" result="Success" success="True" time="0.002" asserts="7" />

+                          <test-case name="NUnit.Framework.Syntax.EqualityTests.SimpleEqualityTests" executed="True" result="Success" success="True" time="0.001" asserts="6" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EqualToTest" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.EqualToTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.EqualToTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.EqualToTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EqualToTest_IgnoreCase" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.EqualToTest_IgnoreCase.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.EqualToTest_IgnoreCase.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.EqualToTest_IgnoreCase.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EqualToTest_WithinTolerance" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.EqualToTest_WithinTolerance.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.EqualToTest_WithinTolerance.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.EqualToTest_WithinTolerance.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ExactTypeTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.ExactTypeTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ExactTypeTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ExactTypeTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ExactTypeTest_Generic" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.ExactTypeTest_Generic.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ExactTypeTest_Generic.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ExactTypeTest_Generic.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="FalseTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.FalseTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.FalseTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.FalseTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="GreaterThanOrEqualTest" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.GreaterThanOrEqualTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.GreaterThanOrEqualTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.GreaterThanOrEqualTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="GreaterThanTest" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.GreaterThanTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.GreaterThanTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.GreaterThanTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="InstanceOfTest" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.InstanceOfTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.InstanceOfTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.InstanceOfTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="InstanceOfTest_Generic" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.InstanceOfTest_Generic.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.InstanceOfTest_Generic.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.InstanceOfTest_Generic.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="InstanceOfTypeTest" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.InstanceOfTypeTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.InstanceOfTypeTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.InstanceOfTypeTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="InstanceOfTypeTest_Generic" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.InstanceOfTypeTest_Generic.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.InstanceOfTypeTest_Generic.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.InstanceOfTypeTest_Generic.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="InvalidCodeTests" executed="True" result="Success" success="True" time="1.283" asserts="0">

+                        <results>

+                          <test-suite type="ParameterizedTest" name="CodeShouldNotCompile" executed="True" result="Success" success="True" time="0.790" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Syntax.InvalidCodeTests.CodeShouldNotCompile(&quot;Is.Null.Not&quot;)" executed="True" result="Success" success="True" time="0.228" asserts="1" />

+                              <test-case name="NUnit.Framework.Syntax.InvalidCodeTests.CodeShouldNotCompile(&quot;Is.Null.And.Throws&quot;)" executed="True" result="Success" success="True" time="0.110" asserts="1" />

+                              <test-case name="NUnit.Framework.Syntax.InvalidCodeTests.CodeShouldNotCompile(&quot;Is.All.And.And&quot;)" executed="True" result="Success" success="True" time="0.109" asserts="1" />

+                              <test-case name="NUnit.Framework.Syntax.InvalidCodeTests.CodeShouldNotCompile(&quot;Is.Not.Null.GreaterThan(10))&quot;)" executed="True" result="Success" success="True" time="0.107" asserts="1" />

+                              <test-case name="NUnit.Framework.Syntax.InvalidCodeTests.CodeShouldNotCompile(&quot;Is.Null.All&quot;)" executed="True" result="Success" success="True" time="0.111" asserts="1" />

+                              <test-case name="NUnit.Framework.Syntax.InvalidCodeTests.CodeShouldNotCompile(&quot;Is.And&quot;)" executed="True" result="Success" success="True" time="0.109" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CodeShouldNotCompileAsFinishedConstraint" executed="True" result="Success" success="True" time="0.488" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Syntax.InvalidCodeTests.CodeShouldNotCompileAsFinishedConstraint(&quot;Is.All&quot;)" executed="True" result="Success" success="True" time="0.115" asserts="1" />

+                              <test-case name="NUnit.Framework.Syntax.InvalidCodeTests.CodeShouldNotCompileAsFinishedConstraint(&quot;Is.All.Not&quot;)" executed="True" result="Success" success="True" time="0.117" asserts="1" />

+                              <test-case name="NUnit.Framework.Syntax.InvalidCodeTests.CodeShouldNotCompileAsFinishedConstraint(&quot;Is.Not&quot;)" executed="True" result="Success" success="True" time="0.128" asserts="1" />

+                              <test-case name="NUnit.Framework.Syntax.InvalidCodeTests.CodeShouldNotCompileAsFinishedConstraint(&quot;Is.Not.All&quot;)" executed="True" result="Success" success="True" time="0.120" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="LengthTest" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.LengthTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.LengthTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.LengthTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="LessThanOrEqualTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.LessThanOrEqualTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.LessThanOrEqualTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.LessThanOrEqualTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="LessThanTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.LessThanTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.LessThanTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.LessThanTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="MessageTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.MessageTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.MessageTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.MessageTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="MixedOperatorOverrides" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.MixedOperatorOverrides.ComplexTests" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NaNTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.NaNTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NaNTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NaNTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NoneTest" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.NoneTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NoneTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NoneTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NotOperatorOverride" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.NotOperatorOverride.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotOperatorOverride.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotOperatorOverride.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NotSamePathOrUnderTest_IgnoreCase" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.NotSamePathOrUnderTest_IgnoreCase.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotSamePathOrUnderTest_IgnoreCase.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotSamePathOrUnderTest_IgnoreCase.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NotSamePathOrUnderTest_RespectCase" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.NotSamePathOrUnderTest_RespectCase.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotSamePathOrUnderTest_RespectCase.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotSamePathOrUnderTest_RespectCase.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NotSamePathTest_IgnoreCase" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.NotSamePathTest_IgnoreCase.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotSamePathTest_IgnoreCase.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotSamePathTest_IgnoreCase.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NotSamePathTest_RespectCase" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.NotSamePathTest_RespectCase.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotSamePathTest_RespectCase.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotSamePathTest_RespectCase.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NotTest" executed="True" result="Success" success="True" time="0.011" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.NotTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NotTest_Cascaded" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.NotTest_Cascaded.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotTest_Cascaded.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NotTest_Cascaded.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NullTest" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.NullTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NullTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.NullTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="OperatorPrecedenceTests" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.OperatorPrecedenceTests.SomeTests" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Framework.Syntax.OperatorPrecedenceTests.WithTests" executed="True" result="Success" success="True" time="0.002" asserts="6" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="OrOperatorOverride" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.OrOperatorOverride.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.OrOperatorOverride.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.OrOperatorOverride.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="OrTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.OrTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.OrTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.OrTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="OrTest_ThreeOrs" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.OrTest_ThreeOrs.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.OrTest_ThreeOrs.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.OrTest_ThreeOrs.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PropertyExistsTest" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.PropertyExistsTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.PropertyExistsTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.PropertyExistsTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PropertyExistsTest_AndFollows" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.PropertyExistsTest_AndFollows.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.PropertyExistsTest_AndFollows.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.PropertyExistsTest_AndFollows.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PropertySyntaxVariations" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.PropertySyntaxVariations.ExistenceTest" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Syntax.PropertySyntaxVariations.SeparateConstraintTest" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PropertyTest_ConstraintFollows" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.PropertyTest_ConstraintFollows.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.PropertyTest_ConstraintFollows.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.PropertyTest_ConstraintFollows.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PropertyTest_NotFollows" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.PropertyTest_NotFollows.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.PropertyTest_NotFollows.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.PropertyTest_NotFollows.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RegexTest" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.RegexTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.RegexTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.RegexTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RegexTest_IgnoreCase" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.RegexTest_IgnoreCase.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.RegexTest_IgnoreCase.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.RegexTest_IgnoreCase.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SamePathOrUnderTest" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.SamePathOrUnderTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SamePathOrUnderTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SamePathOrUnderTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SamePathOrUnderTest_IgnoreCase" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.SamePathOrUnderTest_IgnoreCase.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SamePathOrUnderTest_IgnoreCase.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SamePathOrUnderTest_IgnoreCase.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SamePathOrUnderTest_RespectCase" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.SamePathOrUnderTest_RespectCase.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SamePathOrUnderTest_RespectCase.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SamePathOrUnderTest_RespectCase.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SamePathTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.SamePathTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SamePathTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SamePathTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SamePathTest_IgnoreCase" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.SamePathTest_IgnoreCase.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SamePathTest_IgnoreCase.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SamePathTest_IgnoreCase.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SamePathTest_RespectCase" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.SamePathTest_RespectCase.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SamePathTest_RespectCase.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SamePathTest_RespectCase.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SomeTest" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.SomeTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SomeTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SomeTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SomeTest_BeforeBinaryOperators" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.SomeTest_BeforeBinaryOperators.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SomeTest_BeforeBinaryOperators.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SomeTest_BeforeBinaryOperators.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SomeTest_NestedSome" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.SomeTest_NestedSome.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SomeTest_NestedSome.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SomeTest_NestedSome.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SomeTest_UseOfAndSome" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.SomeTest_UseOfAndSome.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SomeTest_UseOfAndSome.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SomeTest_UseOfAndSome.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="StartsWithTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.StartsWithTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.StartsWithTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.StartsWithTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="StartsWithTest_IgnoreCase" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.StartsWithTest_IgnoreCase.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.StartsWithTest_IgnoreCase.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.StartsWithTest_IgnoreCase.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SubstringTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.SubstringTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SubstringTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SubstringTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SubstringTest_IgnoreCase" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.SubstringTest_IgnoreCase.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SubstringTest_IgnoreCase.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.SubstringTest_IgnoreCase.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TextContains" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.TextContains.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.TextContains.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.TextContains.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TextEndsWithTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.TextEndsWithTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.TextEndsWithTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.TextEndsWithTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TextMatchesTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.TextMatchesTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.TextMatchesTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.TextMatchesTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TextStartsWithTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.TextStartsWithTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.TextStartsWithTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.TextStartsWithTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ThrowsTests" executed="True" result="Success" success="True" time="0.052" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.DelegateThrowsException" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsArgumentException" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsException" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsExceptionInstanceOf" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsExceptionTypeOf" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsExceptionTypeOfAndConstraint" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsExceptionWithConstraint" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsExceptionWithInnerException" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsInnerException" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsInstanceOf" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsInvalidOperationException" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsTargetInvocationExceptionWithInnerException" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsTypeOf" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsTypeOfAndConstraint" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsTypeOfWithConstraint" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsTypeOfWithInnerException" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.ThrowsTests.ThrowsTypeofWithMessage" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TrueTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.TrueTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.TrueTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.TrueTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="UniqueTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.UniqueTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.UniqueTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.UniqueTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="XmlSerializableTest" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Syntax.XmlSerializableTest.SyntaxTest.SupportedByConstraintBuilder" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.XmlSerializableTest.SyntaxTest.SupportedByInheritedSyntax" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Syntax.XmlSerializableTest.SyntaxTest.SupportedByStaticSyntax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                    </results>

+                  </test-suite>

+                  <test-suite type="Namespace" name="Tests" executed="True" result="Success" success="True" time="1.625" asserts="0">

+                    <results>

+                      <test-suite type="TestFixture" name="ArrayEqualsFailureMessageFixture" executed="True" result="Success" success="True" time="0.058" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.ActualArrayIsLonger" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.ArrayAndCollection_Failure" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.ArraysDeclaredAsDifferentTypes" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.ArraysHaveDifferentRanks" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.ArraysWithDifferentDimensionsAsCollection" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.ArraysWithDifferentRanksAsCollection" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.DifferentArrayTypesEqualFails" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.DoubleDimensionedArrays" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.ExpectedArrayIsLonger" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.FailureOnSingleDimensionedArrays" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.FiveDimensionedArrays" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.JaggedArrayComparedToSimpleArray" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.JaggedArrays" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.SameLengthDifferentContent" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFailureMessageFixture.TripleDimensionedArrays" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ArrayEqualsFixture" executed="True" result="Success" success="True" time="0.053" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArrayAndCollection" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArrayIsEqualToItself" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArrayOfIntAndArrayOfDouble" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysDeclaredAsDifferentTypes" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysOfArrays" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysOfDecimal" executed="True" result="Success" success="True" time="0.002" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysOfDouble" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysOfInt" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysOfMixedTypes" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysOfString" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysPassedAsObjects" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysWithDifferentDimensionsMatchedAsCollection" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.ArraysWithDifferentRanksComparedAsCollection" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.DoubleDimensionedArrays" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.FiveDimensionedArrays" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.JaggedArrays" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ArrayEqualsFixture.TripleDimensionedArrays" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ArrayNotEqualFixture" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.ArrayNotEqualFixture.ArraysDeclaredAsDifferentTypes" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.ArrayNotEqualFixture.DifferentLengthArrays" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.ArrayNotEqualFixture.SameLengthDifferentContent" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssertThrowsTests" executed="True" result="Success" success="True" time="0.041" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.AssertThrowsTests.BaseExceptionThrown" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.AssertThrowsTests.CanCatchExceptionOfDerivedType" executed="True" result="Success" success="True" time="0.002" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.AssertThrowsTests.CanCatchExceptionOfExactType" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.AssertThrowsTests.CanCatchUnspecifiedException" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.AssertThrowsTests.CorrectExceptionIsReturnedToMethod" executed="True" result="Success" success="True" time="0.003" asserts="16" />

+                          <test-case name="NUnit.Framework.Tests.AssertThrowsTests.CorrectExceptionThrown" executed="True" result="Success" success="True" time="0.002" asserts="5" />

+                          <test-case name="NUnit.Framework.Tests.AssertThrowsTests.DerivedExceptionThrown" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.AssertThrowsTests.DoesNotThrowFails" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssertThrowsTests.DoesNotThrowSuceeds" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssertThrowsTests.NoExceptionThrown" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.AssertThrowsTests.UnrelatedExceptionThrown" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssumeThatTests" executed="True" result="Success" success="True" time="0.079" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.AssumptionPasses_ActualAndConstraint" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.AssumptionPasses_ActualAndConstraintWithMessage" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.AssumptionPasses_ActualAndConstraintWithMessageAndArgs" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.AssumptionPasses_Boolean" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.AssumptionPasses_BooleanWithMessage" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.AssumptionPasses_BooleanWithMessageAndArgs" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.AssumptionPasses_DelegateAndConstraint" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.AssumptionPasses_DelegateAndConstraintWithMessage" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.AssumptionPasses_DelegateAndConstraintWithMessageAndArgs" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.AssumptionPasses_ReferenceAndConstraint" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.AssumptionPasses_ReferenceAndConstraintWithMessage" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.AssumptionPasses_ReferenceAndConstraintWithMessageAndArgs" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.FailureThrowsInconclusiveException_ActualAndConstraint" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.FailureThrowsInconclusiveException_ActualAndConstraintWithMessage" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.FailureThrowsInconclusiveException_ActualAndConstraintWithMessageAndArgs" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.FailureThrowsInconclusiveException_Boolean" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.FailureThrowsInconclusiveException_BooleanWithMessage" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.FailureThrowsInconclusiveException_BooleanWithMessageAndArgs" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.FailureThrowsInconclusiveException_DelegateAndConstraint" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.FailureThrowsInconclusiveException_DelegateAndConstraintWithMessage" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.FailureThrowsInconclusiveException_DelegateAndConstraintWithMessageAndArgs" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.FailureThrowsInconclusiveException_ReferenceAndConstraint" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.FailureThrowsInconclusiveException_ReferenceAndConstraintWithMessage" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.AssumeThatTests.FailureThrowsInconclusiveException_ReferenceAndConstraintWithMessageAndArgs" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CollectionAssertTest" executed="True" result="Success" success="True" time="0.164" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.AreEqual" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.AreEqual_HandlesNull" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.AreEqual_UsingIterator" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.AreEqualFail" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.AreEqualFailCount" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.AreEquivalentHandlesNull" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.AreNotEqual" executed="True" result="Success" success="True" time="0.002" asserts="6" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.AreNotEqual_Fails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.AreNotEqual_HandlesNull" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.Contains_ICollection" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.Contains_IList" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.ContainsFails_EmptyICollection" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.ContainsFails_EmptyIList" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.ContainsFails_ICollection" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.ContainsFails_ILIst" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.ContainsNull_ICollection" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.ContainsNull_IList" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.DoesNotContain" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.DoesNotContain_Empty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.DoesNotContain_Fails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.EnsureComparerIsUsed" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.Equivalent" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.EquivalentFailOne" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.EquivalentFailTwo" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsNotSubsetOf" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsNotSubsetOf_Fails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsNotSubsetOfHandlesNull" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsOrdered" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsOrdered_Allows_adjacent_equal_values" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsOrdered_ContainedTypesMustBeCompatible" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsOrdered_Fails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsOrdered_Handles_custom_comparison" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsOrdered_Handles_custom_comparison2" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsOrdered_Handles_null" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsOrdered_TypesMustImplementIComparable" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsSubsetOf" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsSubsetOf_Fails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.IsSubsetOfHandlesNull" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.ItemsNotNull" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.ItemsNotNullFailure" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.ItemsOfType" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.ItemsOfTypeFailure" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.NotEquivalent" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.NotEquivalent_Fails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.NotEquivalentHandlesNull" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.Unique_WithNull" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.Unique_WithObjects" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.Unique_WithStrings" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.UniqueFailure" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.CollectionAssertTest.UniqueFailure_WithTwoNulls" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ConditionAssertTests" executed="True" result="Success" success="True" time="0.057" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsEmpty" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsEmptyFailsOnNonEmptyArray" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsEmptyFailsOnNullString" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsEmptyFailsOnString" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsFalse" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsFalseFails" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNaN" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNaNFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotEmpty" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotEmptyFailsOnEmptyArray" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotEmptyFailsOnEmptyArrayList" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotEmptyFailsOnEmptyHashTable" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotEmptyFailsOnEmptyString" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotNull" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNotNullFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNull" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsNullFails" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsTrue" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.ConditionAssertTests.IsTrueFails" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="DirectoryAssertTests" executed="True" result="Success" success="True" time="0.212" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.AreEqualFailsWhenOneDoesNotExist" executed="True" result="Success" success="True" time="0.006" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.AreEqualFailsWhenOneIsNull" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.AreEqualFailsWithDirectoryInfos" executed="True" result="Success" success="True" time="0.006" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.AreEqualFailsWithStringPath" executed="True" result="Success" success="True" time="0.006" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.AreEqualPassesWhenBothAreNull" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.AreEqualPassesWithDirectoryInfos" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.AreEqualPassesWithStringPath" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.AreNotEqualFailsWhenBothAreNull" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.AreNotEqualFailsWithDirectoryInfos" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.AreNotEqualFailsWithStringPath" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.AreNotEqualPassesIfOneIsNull" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.AreNotEqualPassesWhenOneDoesNotExist" executed="True" result="Success" success="True" time="0.005" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.AreNotEqualPassesWithStringPath" executed="True" result="Success" success="True" time="0.006" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsEmptyFailsWithInvalidDirectory" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsEmptyFailsWithNonEmptyDirectoryUsingDirectoryInfo" executed="True" result="Success" success="True" time="0.005" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsEmptyFailsWithNonEmptyDirectoryUsingStringPath" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsEmptyPassesWithEmptyDirectoryUsingDirectoryInfo" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsEmptyPassesWithEmptyDirectoryUsingStringPath" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsEmptyThrowsUsingNull" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsNotEmptyFailsWithEmptyDirectoryUsingDirectoryInfo" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsNotEmptyFailsWithEmptyDirectoryUsingStringPath" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsNotEmptyFailsWithInvalidDirectory" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsNotEmptyPassesWithNonEmptyDirectoryUsingDirectoryInfo" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsNotEmptyPassesWithNonEmptyDirectoryUsingStringPath" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsNotEmptyThrowsUsingNull" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsNotWithinFailsWithDirectoryInfo" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsNotWithinFailsWithStringPath" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsNotWithinPassesWhenOutsidePathUsingDirectoryInfo" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsNotWithinPassesWhenOutsidePathUsingStringPath" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsNotWithinThrowsWhenBothAreNull" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsWithinFailsWhenOutsidePathUsingDirectoryInfo" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsWithinFailsWhenOutsidePathUsingStringPath" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsWithinPassesWithDirectoryInfo" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsWithinPassesWithStringPath" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsWithinPassesWithTempPath" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.DirectoryAssertTests.IsWithinThrowsWhenBothAreNull" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EqualsFixture" executed="True" result="Success" success="True" time="0.117" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.Bug575936Int32Int64Comparison" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.Byte" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.DateTimeEqual" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.DateTimeNotEqual" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.Decimal" executed="True" result="Success" success="True" time="0.002" asserts="6" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.DirectoryInfoEquality" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.DirectoryInfoEqualityIgnoresTrailingDirectorySeparator" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.DoubleNotEqualMessageDisplaysAllDigits" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.DoubleNotEqualMessageDisplaysDefaultTolerance" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.DoubleNotEqualMessageDisplaysTolerance" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.DoubleNotEqualWithNanDoesNotDisplayDefaultTolerance" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.EnumsEqual" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.EnumsNotEqual" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.Equals" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.EqualsFail" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.EqualsNaNFails" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.EqualsNull" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.EqualsSameTypes" executed="True" result="Success" success="True" time="0.004" asserts="31" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.EqualsThrowsException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.Float" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.FloatNotEqualMessageDisplaysAllDigits" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.FloatNotEqualMessageDisplaysTolerance" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.Int" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.IntegerEquals" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.IntegerLongComparison" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.NanEqualsFails" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.NanEqualsNaNSucceeds" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.NegInfinityEqualsInfinity" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.PosInfinityEqualsInfinity" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.PosInfinityNotEquals" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.PosInfinityNotEqualsNegInfinity" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.ReferenceEqualsThrowsException" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.Short" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.SinglePosInfinityNotEqualsNegInfinity" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.String" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.EqualsFixture.UInt" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="FileAssertTests" executed="True" result="Success" success="True" time="0.143" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreEqualFailsWhenOneIsNull" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreEqualFailsWithFileInfos" executed="True" result="Success" success="True" time="0.006" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreEqualFailsWithFiles" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreEqualFailsWithStreams" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreEqualFailsWithTextFilesAfterReadingBothFiles" executed="True" result="Success" success="True" time="0.005" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreEqualPassesUsingSameFileTwice" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreEqualPassesWhenBothAreNull" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreEqualPassesWithEqualStreams" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreEqualPassesWithFileInfos" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreEqualPassesWithFiles" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreEqualPassesWithSameStream" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreEqualPassesWithTextFiles" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreNotEqualFailsWhenBothAreNull" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreNotEqualFailsWithFileInfos" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreNotEqualFailsWithFiles" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreNotEqualFailsWithStreams" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreNotEqualIteratesOverTheEntireFile" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreNotEqualIteratesOverTheEntireFileAndFails" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreNotEqualPassesIfOneIsNull" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreNotEqualPassesWithFileInfos" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreNotEqualPassesWithFiles" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.AreNotEqualPassesWithStreams" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.NonReadableStreamGivesException" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.FileAssertTests.NonSeekableStreamGivesException" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="GreaterEqualFixture" executed="True" result="Success" success="True" time="0.053" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.GreaterEqualFixture.FailureMessage" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.GreaterEqualFixture.GreaterOrEqual_Decimal" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.GreaterEqualFixture.GreaterOrEqual_Double" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.GreaterEqualFixture.GreaterOrEqual_Float" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.GreaterEqualFixture.GreaterOrEqual_Int32" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.GreaterEqualFixture.GreaterOrEqual_Long" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.GreaterEqualFixture.GreaterOrEqual_UInt32" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.GreaterEqualFixture.GreaterOrEqual_ULong" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.GreaterEqualFixture.MixedTypes" executed="True" result="Success" success="True" time="0.004" asserts="42" />

+                          <test-case name="NUnit.Framework.Tests.GreaterEqualFixture.NotGreaterEqualIComparable" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.GreaterEqualFixture.NotGreaterOrEqual" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="GreaterFixture" executed="True" result="Success" success="True" time="0.022" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.GreaterFixture.FailureMessage" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.GreaterFixture.Greater" executed="True" result="Success" success="True" time="0.002" asserts="7" />

+                          <test-case name="NUnit.Framework.Tests.GreaterFixture.MixedTypes" executed="True" result="Success" success="True" time="0.005" asserts="42" />

+                          <test-case name="NUnit.Framework.Tests.GreaterFixture.NotGreater" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.GreaterFixture.NotGreaterIComparable" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.GreaterFixture.NotGreaterWhenEqual" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="LessEqualFixture" executed="True" result="Success" success="True" time="0.024" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.LessEqualFixture.FailureMessage" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.LessEqualFixture.LessOrEqual" executed="True" result="Success" success="True" time="0.008" asserts="42" />

+                          <test-case name="NUnit.Framework.Tests.LessEqualFixture.MixedTypes" executed="True" result="Success" success="True" time="0.004" asserts="42" />

+                          <test-case name="NUnit.Framework.Tests.LessEqualFixture.NotLessEqualIComparable" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.LessEqualFixture.NotLessOrEqual" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="LessFixture" executed="True" result="Success" success="True" time="0.028" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.LessFixture.FailureMessage" executed="True" result="Success" success="True" time="0.003" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.LessFixture.Less" executed="True" result="Success" success="True" time="0.006" asserts="18" />

+                          <test-case name="NUnit.Framework.Tests.LessFixture.MixedTypes" executed="True" result="Success" success="True" time="0.003" asserts="42" />

+                          <test-case name="NUnit.Framework.Tests.LessFixture.NotLess" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.LessFixture.NotLessIComparable" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.LessFixture.NotLessWhenEqual" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ListContentsTests" executed="True" result="Success" success="True" time="0.020" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.ListContentsTests.ArrayFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ListContentsTests.ArrayListFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ListContentsTests.ArrayListSucceeds" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.ListContentsTests.ArraySucceeds" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.ListContentsTests.DifferentTypesMayBeEqual" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.ListContentsTests.EmptyArrayFails" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.ListContentsTests.NullArrayIsError" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NotEqualFixture" executed="True" result="Success" success="True" time="0.026" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.NotEqualFixture.ArraysNotEqual" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.NotEqualFixture.ArraysNotEqualFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.NotEqualFixture.NotEqual" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.NotEqualFixture.NotEqualFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.NotEqualFixture.NotEqualSameTypes" executed="True" result="Success" success="True" time="0.003" asserts="21" />

+                          <test-case name="NUnit.Framework.Tests.NotEqualFixture.NullEqualsNull" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.NotEqualFixture.NullNotEqualToNonNull" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.NotEqualFixture.UInt" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NotSameFixture" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.NotSameFixture.NotSame" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.NotSameFixture.NotSameFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NullableTypesTests" executed="True" result="Success" success="True" time="0.039" asserts="0">

+                        <categories>

+                          <category name="Generics" />

+                        </categories>

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.NullableTypesTests.CanCompareNullableDecimals" executed="True" result="Success" success="True" time="0.003" asserts="12" />

+                          <test-case name="NUnit.Framework.Tests.NullableTypesTests.CanCompareNullableDoubles" executed="True" result="Success" success="True" time="0.001" asserts="12" />

+                          <test-case name="NUnit.Framework.Tests.NullableTypesTests.CanCompareNullableEnums" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.NullableTypesTests.CanCompareNullableInts" executed="True" result="Success" success="True" time="0.001" asserts="12" />

+                          <test-case name="NUnit.Framework.Tests.NullableTypesTests.CanCompareNullableMixedNumerics" executed="True" result="Success" success="True" time="0.006" asserts="54" />

+                          <test-case name="NUnit.Framework.Tests.NullableTypesTests.CanCompareNullableStructs" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.NullableTypesTests.CanCompareWithTolerance" executed="True" result="Success" success="True" time="0.002" asserts="4" />

+                          <test-case name="NUnit.Framework.Tests.NullableTypesTests.CanTestForNaN" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.NullableTypesTests.CanTestForNull" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RandomizerTests" executed="True" result="Success" success="True" time="0.026" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.RandomizerTests.RandomDoublesAreUnique" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.RandomizerTests.RandomIntsAreUnique" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.RandomizerTests.RandomizersWithDifferentSeedsReturnDifferentValues" executed="True" result="Success" success="True" time="0.000" asserts="10" />

+                          <test-case name="NUnit.Framework.Tests.RandomizerTests.RandomizersWithSameSeedsReturnSameValues" executed="True" result="Success" success="True" time="0.000" asserts="10" />

+                          <test-case name="NUnit.Framework.Tests.RandomizerTests.RandomSeedsAreUnique" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.RandomizerTests.ReturnsDifferentRandomizersForDifferentMethods" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.RandomizerTests.ReturnsSameRandomizerForDifferentParametersOfSameMethod" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.RandomizerTests.ReturnsSameRandomizerForSameMethod" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.RandomizerTests.ReturnsSameRandomizerForSameParameter" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RangeTests" executed="True" result="Success" success="True" time="0.012" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.RangeTests.InRangeFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.RangeTests.InRangeSucceeds" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.RangeTests.NotInRangeFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.RangeTests.NotInRangeSucceeds" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SameFixture" executed="True" result="Success" success="True" time="0.011" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.SameFixture.Same" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.SameFixture.SameFails" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.SameFixture.SameValueTypes" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="StringAssertTests" executed="True" result="Success" success="True" time="0.058" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.CaseInsensitiveCompare" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.CaseInsensitiveCompareFails" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.Contains" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.ContainsFails" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.DifferentEncodingsOfSameStringAreNotEqual" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.DoesNotContain" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.DoesNotContainFails" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.DoesNotEndWith" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.DoesNotEndWithFails" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.DoesNotStartWith" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.DoesNotStartWithFails" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.EndsWith" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.EndsWithFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.IsMatch" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.IsMatchFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.StartsWith" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.StringAssertTests.StartsWithFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestFixtureAttributeTests" executed="True" result="Success" success="True" time="0.017" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.TestFixtureAttributeTests.ConstructWithCombinedArgs" executed="True" result="Success" success="True" time="0.001" asserts="2">

+                            <categories>

+                              <category name="Generics" />

+                            </categories>

+                          </test-case>

+                          <test-case name="NUnit.Framework.Tests.TestFixtureAttributeTests.ConstructWithFixtureArgs" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.TestFixtureAttributeTests.ConstructWithFixtureArgsAndSetTypeArgs" executed="True" result="Success" success="True" time="0.000" asserts="2">

+                            <categories>

+                              <category name="Generics" />

+                            </categories>

+                          </test-case>

+                          <test-case name="NUnit.Framework.Tests.TestFixtureAttributeTests.ConstructWithJustTypeArgs" executed="True" result="Success" success="True" time="0.000" asserts="2">

+                            <categories>

+                              <category name="Generics" />

+                            </categories>

+                          </test-case>

+                          <test-case name="NUnit.Framework.Tests.TestFixtureAttributeTests.ConstructWithNoArgumentsAndSetTypeArgs" executed="True" result="Success" success="True" time="0.000" asserts="2">

+                            <categories>

+                              <category name="Generics" />

+                            </categories>

+                          </test-case>

+                          <test-case name="NUnit.Framework.Tests.TestFixtureAttributeTests.ConstructWithoutArguments" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TextMessageWriterTests" executed="True" result="Success" success="True" time="0.039" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.TextMessageWriterTests.ConnectorIsWrittenWithSurroundingSpaces" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.TextMessageWriterTests.DateTimeTest" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.TextMessageWriterTests.DecimalIsWrittenToTwentyNineDigits" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.TextMessageWriterTests.DecimalIsWrittenWithTrailingM" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.TextMessageWriterTests.DisplayStringDifferences" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.TextMessageWriterTests.DisplayStringDifferences_NoClipping" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.TextMessageWriterTests.DoubleIsWrittenToSeventeenDigits" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.TextMessageWriterTests.DoubleIsWrittenWithTrailingD" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.TextMessageWriterTests.FloatIsWrittenToNineDigits" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.TextMessageWriterTests.FloatIsWrittenWithTrailingF" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.TextMessageWriterTests.IntegerIsWrittenAsIs" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.TextMessageWriterTests.PredicateIsWrittenWithTrailingSpace" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.TextMessageWriterTests.StringIsWrittenWithQuotes" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TypeAssertTests" executed="True" result="Success" success="True" time="0.034" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Framework.Tests.TypeAssertTests.ExactType" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.TypeAssertTests.ExactTypeFails" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.TypeAssertTests.IsAssignableFrom" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.TypeAssertTests.IsAssignableFromFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.TypeAssertTests.IsInstanceOf" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.TypeAssertTests.IsInstanceOfFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.TypeAssertTests.IsNotAssignableFrom" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.TypeAssertTests.IsNotAssignableFromFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Framework.Tests.TypeAssertTests.IsNotInstanceOf" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Framework.Tests.TypeAssertTests.IsNotInstanceOfFails" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ValuesAttributeTests" executed="True" result="Success" success="True" time="0.145" asserts="0">

+                        <results>

+                          <test-suite type="ParameterizedTest" name="CanConverDoubleToDecimal" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConverDoubleToDecimal(12.5m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertDoubleRangeToDecimal" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertDoubleRangeToDecimal(1m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertDoubleRangeToDecimal(1.1m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertDoubleRangeToDecimal(1.2m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertDoubleRangeToDecimal(1.3m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertIntRangeToByte" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertIntRangeToByte(1)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertIntRangeToByte(2)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertIntRangeToByte(3)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertIntRangeToDecimal" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertIntRangeToDecimal(1m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertIntRangeToDecimal(2m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertIntRangeToDecimal(3m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertIntRangeToSByte" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertIntRangeToSByte(1)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertIntRangeToSByte(2)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertIntRangeToSByte(3)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertIntRangeToShort" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertIntRangeToShort(1)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertIntRangeToShort(2)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertIntRangeToShort(3)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertIntToDecimal" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertIntToDecimal(12m)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertRandomDoubleToDecimal" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomDoubleToDecimal(6.11135305329755m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomDoubleToDecimal(6.88476982521115m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomDoubleToDecimal(7.08979185162568m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertRandomIntToByte" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomIntToByte(1)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomIntToByte(1)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomIntToByte(7)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertRandomIntToDecimal" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomIntToDecimal(9m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomIntToDecimal(5m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomIntToDecimal(2m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertRandomIntToSByte" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomIntToSByte(7)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomIntToSByte(3)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomIntToSByte(3)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertRandomIntToShort" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomIntToShort(9)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomIntToShort(3)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertRandomIntToShort(2)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertSmallIntsToByte" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertSmallIntsToByte(5)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertSmallIntsToSByte" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertSmallIntsToSByte(5)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertSmallIntsToShort" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertSmallIntsToShort(5)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertStringToDecimal" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.CanConvertStringToDecimal(12.5m)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.RangeAttributeWithDoubleRangeAndStep" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.RangeAttributeWithFloatRangeAndStep" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.RangeAttributeWithIntRange" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.RangeAttributeWithIntRangeAndStep" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.RangeAttributeWithLongRangeAndStep" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Framework.Tests.ValuesAttributeTests.ValuesAttributeProvidesSpecifiedValues" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                    </results>

+                  </test-suite>

+                </results>

+              </test-suite>

+            </results>

+          </test-suite>

+        </results>

+      </test-suite>

+      <test-suite type="Assembly" name="D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.core.tests.dll" executed="True" result="Success" success="True" time="11.084" asserts="0">

+        <results>

+          <test-suite type="Namespace" name="NUnit" executed="True" result="Success" success="True" time="11.083" asserts="0">

+            <results>

+              <test-suite type="Namespace" name="Core" executed="True" result="Success" success="True" time="11.083" asserts="0">

+                <results>

+                  <test-suite type="Namespace" name="Tests" executed="True" result="Success" success="True" time="11.083" asserts="0">

+                    <results>

+                      <test-suite type="TestFixture" name="AssemblyHelperTests" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.AssemblyHelperTests.GetPathForAssembly" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.AssemblyHelperTests.GetPathForType" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssemblyReaderTests" executed="True" result="Success" success="True" time="0.021" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.AssemblyReaderTests.CreateFromAssembly" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.AssemblyReaderTests.CreateFromPath" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.AssemblyReaderTests.ImageRuntimeVersion" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.AssemblyReaderTests.IsDotNetFile" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.AssemblyReaderTests.IsValidPeFile" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.AssemblyReaderTests.IsValidPeFile_Fails" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssemblyResolverTests" executed="True" result="Success" success="True" time="0.085" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.AssemblyResolverTests.AddFile" executed="True" result="Success" success="True" time="0.080" asserts="0" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssemblyTests" executed="True" result="Success" success="True" time="0.556" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.AssemblyTests.AppSettingsLoaded" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.AssemblyTests.LoadAssembly" executed="True" result="Success" success="True" time="0.490" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.AssemblyTests.LoadAssemblyNotFound" executed="True" result="Success" success="True" time="0.002" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.AssemblyTests.LoadAssemblyWithoutTestFixtures" executed="True" result="Success" success="True" time="0.025" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.AssemblyTests.LoadTestFixtureFromAssembly" executed="True" result="Success" success="True" time="0.019" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.AssemblyTests.NUnitTraceIsEnabled" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.AssemblyTests.RunSetsCurrentDirectory" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssemblyVersionFixture" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.AssemblyVersionFixture.Version" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssertInconclusiveFixture" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.AssertInconclusiveFixture.AssertInconclusiveThrowsException" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AssertPassFixture" executed="True" result="Success" success="True" time="0.012" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.AssertPassFixture.AssertPassReturnsSuccess" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                            <reason>

+                              <message><![CDATA[This test is OK!]]></message>

+                            </reason>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.AssertPassFixture.SubsequentFailureIsIrrelevant" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <reason>

+                              <message><![CDATA[This test is OK!]]></message>

+                            </reason>

+                          </test-case>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="AttributeInheritance" executed="True" result="Success" success="True" time="0.019" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.AttributeInheritance.InheritedExplicitAttributeIsRecognized" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.AttributeInheritance.InheritedFixtureAttributeIsRecognized" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.AttributeInheritance.InheritedIgnoreAttributeIsRecognized" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.AttributeInheritance.InheritedTestAttributeIsRecognized" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CallContextTests" executed="True" result="Success" success="True" time="0.017" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.CallContextTests.GenericPrincipalTest" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.CallContextTests.ILogicalThreadAffinativeTest" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.CallContextTests.ILogicalThreadAffinativeTestConsole" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.CallContextTests.SetCustomPrincipalOnThread" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.CallContextTests.SetGenericPrincipalOnThread" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.CallContextTests.UseCustomIdentity" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CategoryAttributeTests" executed="True" result="Success" success="True" time="0.046" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.CategoryAttributeTests.CanDeriveFromCategoryAttribute" executed="True" result="Success" success="True" time="0.005" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.CategoryAttributeTests.CategoryOnFixture" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.CategoryAttributeTests.CategoryOnTestCase" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="CountTestsUsingCategoryFilter" executed="True" result="Success" success="True" time="0.015" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.CategoryAttributeTests.CountTestsUsingCategoryFilter(&quot;Database&quot;)" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.CategoryAttributeTests.CountTestsUsingCategoryFilter(&quot;Critical&quot;)" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.CategoryAttributeTests.CountTestsUsingCategoryFilter(&quot;Long&quot;)" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Core.Tests.CategoryAttributeTests.CountTestsWithoutCategoryFilter" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.CategoryAttributeTests.DerivedCategoryMayBeInherited" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CombinatorialTests" executed="True" result="Success" success="True" time="0.129" asserts="0">

+                        <results>

+                          <test-suite type="ParameterizedTest" name="RandomArgsAreIndependent" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RandomArgsAreIndependent(0.97558036352302d,0.149350758245844d)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="RandomTest" executed="True" result="Success" success="True" time="0.011" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RandomTest(87,0.678519468604829d)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RandomTest(203,0.255695442788161d)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RandomTest(99,0.085432846138921d)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RandomTest(92,0.232372152261609d)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RandomTest(74,0.284822722098242d)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="RangeTest" executed="True" result="Success" success="True" time="0.021" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RangeTest(0.2d,10)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RangeTest(0.2d,15)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RangeTest(0.2d,20)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RangeTest(0.4d,10)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RangeTest(0.4d,15)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RangeTest(0.4d,20)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RangeTest(0.6d,10)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RangeTest(0.6d,15)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.RangeTest(0.6d,20)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SingleArgument" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.SingleArgument(1.3d)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.SingleArgument(1.7d)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.SingleArgument(1.5d)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ThreeArguments_Combinatorial" executed="True" result="Success" success="True" time="0.042" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(1,10,&quot;Charlie&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(1,10,&quot;Joe&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(1,10,&quot;Frank&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(1,20,&quot;Charlie&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(1,20,&quot;Joe&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(1,20,&quot;Frank&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(2,10,&quot;Charlie&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(2,10,&quot;Joe&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(2,10,&quot;Frank&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(2,20,&quot;Charlie&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(2,20,&quot;Joe&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(2,20,&quot;Frank&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(3,10,&quot;Charlie&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(3,10,&quot;Joe&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(3,10,&quot;Frank&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(3,20,&quot;Charlie&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(3,20,&quot;Joe&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Combinatorial(3,20,&quot;Frank&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ThreeArguments_Sequential" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Sequential(1,10,&quot;Charlie&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Sequential(2,20,&quot;Joe&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.ThreeArguments_Sequential(3,null,&quot;Frank&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="TwoArguments_Combinatorial" executed="True" result="Success" success="True" time="0.012" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.TwoArguments_Combinatorial(1,10)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.TwoArguments_Combinatorial(1,20)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.TwoArguments_Combinatorial(2,10)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.TwoArguments_Combinatorial(2,20)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.TwoArguments_Combinatorial(3,10)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.TwoArguments_Combinatorial(3,20)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="TwoArguments_Sequential" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.TwoArguments_Sequential(1,10)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.TwoArguments_Sequential(2,20)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.CombinatorialTests.TwoArguments_Sequential(3,null)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CoreExtensionsTests" executed="True" result="Success" success="True" time="0.039" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.CoreExtensionsTests.CanAddDecorator" executed="True" result="Success" success="True" time="0.007" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.CoreExtensionsTests.CanAddEventListener" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.CoreExtensionsTests.CanAddSuiteBuilder" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.CoreExtensionsTests.CanAddTestCaseBuilder" executed="True" result="Success" success="True" time="0.002" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.CoreExtensionsTests.CanAddTestCaseBuilder2" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.CoreExtensionsTests.DecoratorsRunInOrderOfPriorities" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.CoreExtensionsTests.HasEventListenerExtensionPoint" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.CoreExtensionsTests.HasSuiteBuildersExtensionPoint" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.CoreExtensionsTests.HasTestCaseBuildersExtensionPoint" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.CoreExtensionsTests.HasTestDecoratorsExtensionPoint" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.CoreExtensionsTests.HasTestFrameworkRegistry" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CultureSettingAndDetectionTests" executed="True" result="Success" success="True" time="0.065" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.CultureSettingAndDetectionTests.CanMatchAttributeWithExclude" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.CultureSettingAndDetectionTests.CanMatchAttributeWithInclude" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.CultureSettingAndDetectionTests.CanMatchAttributeWithIncludeAndExclude" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.CultureSettingAndDetectionTests.CanMatchStrings" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Core.Tests.CultureSettingAndDetectionTests.LoadWithFrenchCanadianCulture" executed="True" result="Success" success="True" time="0.006" asserts="5" />

+                          <test-case name="NUnit.Core.Tests.CultureSettingAndDetectionTests.LoadWithFrenchCulture" executed="True" result="Success" success="True" time="0.004" asserts="5" />

+                          <test-case name="NUnit.Core.Tests.CultureSettingAndDetectionTests.LoadWithRussianCulture" executed="True" result="Success" success="True" time="0.004" asserts="5" />

+                          <test-case name="NUnit.Core.Tests.CultureSettingAndDetectionTests.SettingInvalidCultureGivesError" executed="True" result="Success" success="True" time="0.026" asserts="3" />

+                          <test-suite type="ParameterizedTest" name="UseWithParameterizedTest" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.CultureSettingAndDetectionTests.UseWithParameterizedTest()" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CultureSettingAndDetectionTests+NestedFixture" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.CultureSettingAndDetectionTests+NestedFixture.CanSetCultureOnFixture" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="DatapointTests" executed="True" result="Success" success="True" time="0.038" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.DatapointTests.WorksOnArray" executed="True" result="Success" success="True" time="0.011" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.DatapointTests.WorksOnField" executed="True" result="Success" success="True" time="0.006" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.DatapointTests.WorksOnMethodReturningArray" executed="True" result="Success" success="True" time="0.006" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.DatapointTests.WorksOnPropertyReturningArray" executed="True" result="Success" success="True" time="0.006" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="DirectoryChangeTests" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.DirectoryChangeTests.ChangingCurrentDirectoryGivesWarning" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="DirectorySwapperTests" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.DirectorySwapperTests.ChangeAndRestore" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.DirectorySwapperTests.SwapAndRestore" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EventQueueTests" executed="True" result="Success" success="True" time="0.289" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.EventQueueTests.DequeueEmpty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.EventQueueTests.PumpAutoStopsOnRunFinished" executed="True" result="Success" success="True" time="0.102" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.EventQueueTests.PumpEvents" executed="True" result="Success" success="True" time="0.006" asserts="12">

+                            <properties>

+                              <property name="Timeout" value="3000" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.EventQueueTests.PumpEventsWithAutoStop" executed="True" result="Success" success="True" time="0.002" asserts="1">

+                            <properties>

+                              <property name="Timeout" value="2000" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.EventQueueTests.PumpPendingEventsAfterAutoStop" executed="True" result="Success" success="True" time="0.102" asserts="2">

+                            <properties>

+                              <property name="Timeout" value="2000" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.EventQueueTests.PumpSynchronousAndAsynchronousEvents" executed="True" result="Success" success="True" time="0.003" asserts="6">

+                            <properties>

+                              <property name="Timeout" value="1000" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.EventQueueTests.QueueEvents" executed="True" result="Success" success="True" time="0.000" asserts="9" />

+                          <test-case name="NUnit.Core.Tests.EventQueueTests.SendEvents" executed="True" result="Success" success="True" time="0.001" asserts="9" />

+                          <test-case name="NUnit.Core.Tests.EventQueueTests.StartAndStopPumpOnEmptyQueue" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.EventQueueTests.TracingEventListenerDoesNotDeadlock" executed="True" result="Success" success="True" time="0.035" asserts="0">

+                            <properties>

+                              <property name="Timeout" value="1000" />

+                            </properties>

+                          </test-case>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EventQueueTests+DequeueBlocking_StopTest" executed="True" result="Success" success="True" time="0.033" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.EventQueueTests+DequeueBlocking_StopTest.DequeueBlocking_Stop" executed="True" result="Success" success="True" time="0.032" asserts="3">

+                            <properties>

+                              <property name="Timeout" value="1000" />

+                            </properties>

+                          </test-case>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EventQueueTests+SetWaitHandle_Enqueue_AsynchronousTest" executed="True" result="Success" success="True" time="0.032" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.EventQueueTests+SetWaitHandle_Enqueue_AsynchronousTest.SetWaitHandle_Enqueue_Asynchronous" executed="True" result="Success" success="True" time="0.031" asserts="4">

+                            <properties>

+                              <property name="Timeout" value="1000" />

+                            </properties>

+                          </test-case>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EventQueueTests+SetWaitHandle_Enqueue_SynchronousTest" executed="True" result="Success" success="True" time="0.063" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.EventQueueTests+SetWaitHandle_Enqueue_SynchronousTest.SetWaitHandle_Enqueue_Synchronous" executed="True" result="Success" success="True" time="0.061" asserts="5">

+                            <properties>

+                              <property name="Timeout" value="1000" />

+                            </properties>

+                          </test-case>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EventTestFixture" description="Tests that proper events are generated when running  test" executed="True" result="Success" success="True" time="0.082" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.EventTestFixture.CheckEventListening" executed="True" result="Success" success="True" time="0.054" asserts="4" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ExpectExceptionTest" executed="True" result="Success" success="True" time="0.200" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.AssertFailBeforeException" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.CanExpectUnspecifiedException" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.ExceptionHandlerIsCalledWhenExceptionMatches" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.ExceptionHandlerIsCalledWhenExceptionMatches_AlternateHandler" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.ExceptionHandlerIsNotCalledWhenExceptionDoesNotMatch" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.ExceptionHandlerIsNotCalledWhenExceptionDoesNotMatch_AlternateHandler" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.MethodThrowsArgumentOutOfRange" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.MethodThrowsException" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.MethodThrowsRightExceptionMessage" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.MethodThrowsWrongExceptionMessage" executed="True" result="Success" success="True" time="0.006" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.SetUpThrowsSameException" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TearDownThrowsSameException" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestExceptionNameNotThrown" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestExceptionNameNotThrownWithUserMessage" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestExceptionTypeNotThrown" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestExceptionTypeNotThrownWithUserMessage" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestFailsWhenBaseExceptionIsThrown" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestFailsWhenDerivedExceptionIsThrown" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestIsNotRunnableWhenAlternateHandlerIsNotFound" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestMismatchedExceptionMessage" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestMismatchedExceptionMessageWithUserMessage" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestMismatchedExceptionName" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestMismatchedExceptionNameWithUserMessage" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestMismatchedExceptionType" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestMismatchedExceptionTypeAsNamedParameter" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestMismatchedExceptionTypeWithUserMessage" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestSucceedsWhenSpecifiedExceptionNameAndContainsMatch" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestSucceedsWhenSpecifiedExceptionNameAndRegexMatch" executed="True" result="Success" success="True" time="0.005" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestSucceedsWithSpecifiedExceptionName" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestSucceedsWithSpecifiedExceptionNameAndExactMatch" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestSucceedsWithSpecifiedExceptionNameAndMessage_NewFormat" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestSucceedsWithSpecifiedExceptionNameAsNamedParameter" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestSucceedsWithSpecifiedExceptionType" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestSucceedsWithSpecifiedExceptionTypeAndContainsMatch" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestSucceedsWithSpecifiedExceptionTypeAndExactMatch" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestSucceedsWithSpecifiedExceptionTypeAndMessage" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestSucceedsWithSpecifiedExceptionTypeAndRegexMatch" executed="True" result="Success" success="True" time="0.003" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestSucceedsWithSpecifiedExceptionTypeAndStartsWithMatch" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestSucceedsWithSpecifiedExceptionTypeAsNamedParameter" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestUnspecifiedExceptionNotThrown" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.TestUnspecifiedExceptionNotThrownWithUserMessage" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.ThrowingMyAppException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.ThrowingMyAppExceptionWithMessage" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.ExpectExceptionTest.ThrowNUnitException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="FailFixture" executed="True" result="Success" success="True" time="0.025" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.FailFixture.BadStackTraceIsHandled" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.FailFixture.CustomExceptionIsHandled" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.FailFixture.FailInheritsFromSystemException" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.FailFixture.FailRecordsInnerException" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.FailFixture.FailThrowsAssertionException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.FailFixture.VerifyFailWorks" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="FixtureSetupTearDownTest" executed="True" result="Success" success="True" time="0.135" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.BaseSetUpCalledFirstAndTearDownCalledLast" executed="True" result="Success" success="True" time="0.006" asserts="6" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.CheckInheritedSetUpAndTearDownAreCalled" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.DisposeCalledWhenFixtureImplementsIDisposable" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.FixtureWithNoTestsCallsFixtureSetUpAndTearDown" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.HandleErrorInFixtureSetup" executed="True" result="Success" success="True" time="0.006" asserts="11" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.HandleErrorInFixtureTearDown" executed="True" result="Success" success="True" time="0.004" asserts="9" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.HandleExceptionInFixtureConstructor" executed="True" result="Success" success="True" time="0.003" asserts="9" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.HandleIgnoreInFixtureSetup" executed="True" result="Success" success="True" time="0.005" asserts="7" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.HandleSetUpAndTearDownWithTestInName" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.IgnoredFixtureShouldNotCallFixtureSetUpOrTearDown" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.MakeSureSetUpAndTearDownAreCalled" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.MakeSureSetUpAndTearDownAreCalledOnExplicitFixture" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.OverriddenSetUpAndTearDownAreNotCalled" executed="True" result="Success" success="True" time="0.005" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.RerunFixtureAfterSetUpFixed" executed="True" result="Success" success="True" time="0.007" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.RerunFixtureAfterTearDownFixed" executed="True" result="Success" success="True" time="0.007" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.RunningSingleMethodCallsSetUpAndTearDown" executed="True" result="Success" success="True" time="0.006" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.StaticBaseSetUpCalledFirstAndTearDownCalledLast" executed="True" result="Success" success="True" time="0.004" asserts="6" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.StaticClassSetUpAndTearDownAreCalled" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest.StaticSetUpAndTearDownAreCalled" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="FixtureSetupTearDownTest+ChangesMadeInFixtureSetUp" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest+ChangesMadeInFixtureSetUp.TestThatChangesPersistUsingSameThread" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.FixtureSetupTearDownTest+ChangesMadeInFixtureSetUp.TestThatChangesPersistUsingSeparateThread" executed="True" result="Success" success="True" time="0.001" asserts="3">

+                            <properties>

+                              <property name="RequiresThread" value="True" />

+                            </properties>

+                          </test-case>

+                        </results>

+                      </test-suite>

+                      <test-suite type="Namespace" name="Generic" executed="True" result="Success" success="True" time="0.083" asserts="0">

+                        <results>

+                          <test-suite type="GenericFixture" name="DeduceTypeArgsFromArgs&lt;T1,T2&gt;" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                            <results>

+                              <test-suite type="TestFixture" name="DeduceTypeArgsFromArgs&lt;Double,Int32&gt;(100.0d,42)" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                                <categories>

+                                  <category name="Generics" />

+                                </categories>

+                                <results>

+                                  <test-suite type="ParameterizedTest" name="TestMyArgTypes" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                                    <results>

+                                      <test-case name="NUnit.Core.Tests.Generic.DeduceTypeArgsFromArgs&lt;Double,Int32&gt;(100.0d,42).TestMyArgTypes(5,7)" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                                    </results>

+                                  </test-suite>

+                                </results>

+                              </test-suite>

+                              <test-suite type="TestFixture" name="DeduceTypeArgsFromArgs&lt;Int32,Double&gt;(42,100.0d)" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                                <categories>

+                                  <category name="Generics" />

+                                </categories>

+                                <results>

+                                  <test-suite type="ParameterizedTest" name="TestMyArgTypes" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                                    <results>

+                                      <test-case name="NUnit.Core.Tests.Generic.DeduceTypeArgsFromArgs&lt;Int32,Double&gt;(42,100.0d).TestMyArgTypes(5,7)" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                                    </results>

+                                  </test-suite>

+                                </results>

+                              </test-suite>

+                            </results>

+                          </test-suite>

+                          <test-suite type="GenericFixture" name="SimpleGenericFixture&lt;TList&gt;" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                            <results>

+                              <test-suite type="TestFixture" name="SimpleGenericFixture&lt;ArrayList&gt;" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                                <categories>

+                                  <category name="Generics" />

+                                </categories>

+                                <results>

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericFixture&lt;ArrayList&gt;.TestCollectionCount" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                                </results>

+                              </test-suite>

+                              <test-suite type="TestFixture" name="SimpleGenericFixture&lt;List&lt;Int32&gt;&gt;" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                                <categories>

+                                  <category name="Generics" />

+                                </categories>

+                                <results>

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericFixture&lt;List&lt;Int32&gt;&gt;.TestCollectionCount" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                                </results>

+                              </test-suite>

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="SimpleGenericMethods" executed="True" result="Success" success="True" time="0.038" asserts="0">

+                            <categories>

+                              <category name="Generics" />

+                            </categories>

+                            <results>

+                              <test-suite type="ParameterizedTest" name="GenericTestMethodWithOneTypeParameter" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                                <results>

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericMethods.GenericTestMethodWithOneTypeParameter&lt;Double&gt;(5.0d,2.0d,&quot;ABC&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericMethods.GenericTestMethodWithOneTypeParameter&lt;Double&gt;(5.0d,2.0d,&quot;ABC&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericMethods.GenericTestMethodWithOneTypeParameter&lt;Int32&gt;(5,2,&quot;ABC&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericMethods.GenericTestMethodWithOneTypeParameter&lt;Double&gt;(5.0d,2.0d,&quot;ABC&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                                </results>

+                              </test-suite>

+                              <test-suite type="ParameterizedTest" name="GenericTestMethodWithTwoTypeParameters" executed="True" result="Success" success="True" time="0.011" asserts="0">

+                                <results>

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericMethods.GenericTestMethodWithTwoTypeParameters&lt;Int32,Double&gt;(5,2.0d,&quot;ABC&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericMethods.GenericTestMethodWithTwoTypeParameters&lt;Double,Int64&gt;(5.0d,2L,&quot;ABC&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericMethods.GenericTestMethodWithTwoTypeParameters&lt;Int32,Int32&gt;(5,2,&quot;ABC&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericMethods.GenericTestMethodWithTwoTypeParameters&lt;Double,Double&gt;(5.0d,2.0d,&quot;ABC&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                                </results>

+                              </test-suite>

+                              <test-suite type="ParameterizedTest" name="GenericTestMethodWithTwoTypeParameters_Reversed" executed="True" result="Success" success="True" time="0.011" asserts="0">

+                                <results>

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericMethods.GenericTestMethodWithTwoTypeParameters_Reversed&lt;Int32,Int32&gt;(5,2,&quot;ABC&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericMethods.GenericTestMethodWithTwoTypeParameters_Reversed&lt;Double,Double&gt;(5.0d,2.0d,&quot;ABC&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericMethods.GenericTestMethodWithTwoTypeParameters_Reversed&lt;Double,Int32&gt;(5,2.0d,&quot;ABC&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                                  <test-case name="NUnit.Core.Tests.Generic.SimpleGenericMethods.GenericTestMethodWithTwoTypeParameters_Reversed&lt;Int64,Double&gt;(5.0d,2L,&quot;ABC&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                                </results>

+                              </test-suite>

+                            </results>

+                          </test-suite>

+                          <test-suite type="GenericFixture" name="TypeParameterUsedWithTestMethod&lt;T&gt;" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-suite type="TestFixture" name="TypeParameterUsedWithTestMethod&lt;Double&gt;" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                                <categories>

+                                  <category name="Generics" />

+                                </categories>

+                                <results>

+                                  <test-suite type="ParameterizedTest" name="TestMyArgType" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                                    <results>

+                                      <test-case name="NUnit.Core.Tests.Generic.TypeParameterUsedWithTestMethod&lt;Double&gt;.TestMyArgType(5)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                                      <test-case name="NUnit.Core.Tests.Generic.TypeParameterUsedWithTestMethod&lt;Double&gt;.TestMyArgType(1.23d)" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                                    </results>

+                                  </test-suite>

+                                </results>

+                              </test-suite>

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="IgnoreFixture" executed="True" result="Success" success="True" time="0.033" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.IgnoreFixture.IgnoreTakesPrecedenceOverExpectedException" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.IgnoreFixture.IgnoreThrowsIgnoreException" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.IgnoreFixture.IgnoreWithUserMessage" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.IgnoreFixture.IgnoreWithUserMessage_ArrayOfArgs" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.IgnoreFixture.IgnoreWithUserMessage_OneArg" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.IgnoreFixture.IgnoreWithUserMessage_ThreeArgs" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.IgnoreFixture.IgnoreWorksForTestCase" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.IgnoreFixture.IgnoreWorksForTestSuite" executed="True" result="Success" success="True" time="0.004" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.IgnoreFixture.IgnoreWorksFromSetUp" executed="True" result="Success" success="True" time="0.005" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="LegacySuiteTests" executed="True" result="Success" success="True" time="0.080" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.LegacySuiteTests.SetUpAndTearDownAreCalled" executed="True" result="Success" success="True" time="0.005" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.LegacySuiteTests.SuitePropertyWithInvalidType" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.LegacySuiteTests.SuiteReturningFixtures" executed="True" result="Success" success="True" time="0.035" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.LegacySuiteTests.SuiteReturningFixtureWithArguments" executed="True" result="Success" success="True" time="0.005" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.LegacySuiteTests.SuiteReturningTestSuite" executed="True" result="Success" success="True" time="0.011" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.LegacySuiteTests.SuiteReturningTypes" executed="True" result="Success" success="True" time="0.010" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="MaxTimeTests" executed="True" result="Success" success="True" time="0.088" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.MaxTimeTests.ErrorReport" executed="True" result="Success" success="True" time="0.000" asserts="0">

+                            <properties>

+                              <property name="MaxTime" value="1000" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.MaxTimeTests.ErrorReportHasPriorityOverMaxTime" executed="True" result="Success" success="True" time="0.023" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.MaxTimeTests.FailureReport" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <properties>

+                              <property name="MaxTime" value="1000" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.MaxTimeTests.FailureReportHasPriorityOverMaxTime" executed="True" result="Success" success="True" time="0.024" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.MaxTimeTests.MaxTimeExceeded" executed="True" result="Success" success="True" time="0.023" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.MaxTimeTests.MaxTimeNotExceeded" executed="True" result="Success" success="True" time="0.000" asserts="0">

+                            <properties>

+                              <property name="MaxTime" value="1000" />

+                            </properties>

+                          </test-case>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NameFilterTest" executed="True" result="Success" success="True" time="0.084" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.NameFilterTest.ExplicitTestCaseDoesNotMatchWhenNotSelectedDirectly" executed="True" result="Success" success="True" time="0.007" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.NameFilterTest.ExplicitTestCaseMatchesWhenSelectedDirectly" executed="True" result="Success" success="True" time="0.006" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.NameFilterTest.ExplicitTestSuiteDoesNotMatchWhenNotSelectedDirectly" executed="True" result="Success" success="True" time="0.006" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.NameFilterTest.ExplicitTestSuiteMatchesWhenSelectedDirectly" executed="True" result="Success" success="True" time="0.009" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.NameFilterTest.HighLevelSuite" executed="True" result="Success" success="True" time="0.006" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.NameFilterTest.MultipleNameMatch" executed="True" result="Success" success="True" time="0.006" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.NameFilterTest.SingleNameMatch" executed="True" result="Success" success="True" time="0.006" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.NameFilterTest.SuiteNameMatch" executed="True" result="Success" success="True" time="0.006" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.NameFilterTest.TestDoesNotMatch" executed="True" result="Success" success="True" time="0.006" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NamespaceAssemblyTests" executed="True" result="Success" success="True" time="0.134" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.NamespaceAssemblyTests.Hierarchy" executed="True" result="Success" success="True" time="0.044" asserts="17" />

+                          <test-case name="NUnit.Core.Tests.NamespaceAssemblyTests.LoadTestFixtureFromAssembly" executed="True" result="Success" success="True" time="0.019" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.NamespaceAssemblyTests.NoNamespaceInAssembly" executed="True" result="Success" success="True" time="0.016" asserts="5" />

+                          <test-case name="NUnit.Core.Tests.NamespaceAssemblyTests.TestRoot" executed="True" result="Success" success="True" time="0.044" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PairwiseTest" executed="True" result="Success" success="True" time="0.033" asserts="0">

+                        <results>

+                          <test-suite type="ParameterizedTest" name="Test" executed="True" result="Success" success="True" time="0.032" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.PairwiseTest.Test 2x4" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest.Test 2x2x2" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest.Test 3x2x2" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest.Test 3x2x2x2" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest.Test 3x2x2x2x2" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest.Test 3x2x2x2x2x2" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest.Test 3x3x3" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest.Test 4x4x4" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest.Test 5x5x5" executed="True" result="Success" success="True" time="0.003" asserts="3" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PairwiseTest+LiveTest" executed="True" result="Success" success="True" time="0.023" asserts="1">

+                        <results>

+                          <test-suite type="ParameterizedTest" name="Test" executed="True" result="Success" success="True" time="0.022" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.PairwiseTest+LiveTest.Test(&quot;a&quot;,&quot;-&quot;,&quot;x&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest+LiveTest.Test(&quot;b&quot;,&quot;+&quot;,&quot;y&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest+LiveTest.Test(&quot;c&quot;,&quot;+&quot;,&quot;x&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest+LiveTest.Test(&quot;b&quot;,&quot;-&quot;,&quot;x&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest+LiveTest.Test(&quot;a&quot;,&quot;-&quot;,&quot;y&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest+LiveTest.Test(&quot;c&quot;,&quot;-&quot;,&quot;y&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.PairwiseTest+LiveTest.Test(&quot;a&quot;,&quot;+&quot;,&quot;x&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="ParameterizedFixture" name="ParameterizedTestFixture" executed="True" result="Success" success="True" time="0.019" asserts="0">

+                        <results>

+                          <test-suite type="TestFixture" name="ParameterizedTestFixture(&quot;hello&quot;,&quot;hello&quot;,&quot;goodbye&quot;)" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ParameterizedTestFixture(&quot;hello&quot;,&quot;hello&quot;,&quot;goodbye&quot;).TestEquality" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.ParameterizedTestFixture(&quot;hello&quot;,&quot;hello&quot;,&quot;goodbye&quot;).TestInequality" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="ParameterizedTestFixture(&quot;zip&quot;,&quot;zip&quot;)" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ParameterizedTestFixture(&quot;zip&quot;,&quot;zip&quot;).TestEquality" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.ParameterizedTestFixture(&quot;zip&quot;,&quot;zip&quot;).TestInequality" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="ParameterizedTestFixture(42,42,99)" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ParameterizedTestFixture(42,42,99).TestEquality" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.ParameterizedTestFixture(42,42,99).TestInequality" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ParameterizedTestFixtureNamingTests" executed="True" result="Success" success="True" time="0.039" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureNamingTests.FixtureInstancesAreNamedCorrectly" executed="True" result="Success" success="True" time="0.008" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureNamingTests.MethodWithoutParamsIsNamedCorrectly" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureNamingTests.MethodWithParamsIsNamedCorrectly" executed="True" result="Success" success="True" time="0.005" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureNamingTests.SuiteHasCorrectNumberOfInstances" executed="True" result="Success" success="True" time="0.005" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureNamingTests.TopLevelSuiteIsNamedCorrectly" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ParameterizedTestFixtureTests" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureTests.CanSpecifyCategory" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureTests.CanSpecifyMultipleCategories" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="ParameterizedFixture" name="ParameterizedTestFixtureWithDataSources" executed="True" result="Success" success="True" time="0.035" asserts="0">

+                        <results>

+                          <test-suite type="TestFixture" name="ParameterizedTestFixtureWithDataSources(42)" executed="True" result="Success" success="True" time="0.034" asserts="0">

+                            <results>

+                              <test-suite type="ParameterizedTest" name="CanAccessTestCaseSource" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                                <results>

+                                  <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42).CanAccessTestCaseSource(6,7)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                                  <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42).CanAccessTestCaseSource(3,14)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                                </results>

+                              </test-suite>

+                              <test-suite type="ParameterizedTest" name="CanAccessValueSource" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                                <results>

+                                  <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42).CanAccessValueSource(1)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                                  <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42).CanAccessValueSource(2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                                  <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42).CanAccessValueSource(3)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                                </results>

+                              </test-suite>

+                              <test-suite type="ParameterizedTest" name="CanGenerateDataFromParameter" executed="True" result="Success" success="True" time="0.020" asserts="0">

+                                <results>

+                                  <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42).CanGenerateDataFromParameter(1,42)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                                  <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42).CanGenerateDataFromParameter(2,21)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                                  <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42).CanGenerateDataFromParameter(3,14)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                                  <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42).CanGenerateDataFromParameter(6,7)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                                  <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42).CanGenerateDataFromParameter(7,6)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                                  <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42).CanGenerateDataFromParameter(14,3)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                                  <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42).CanGenerateDataFromParameter(21,2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                                  <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithDataSources(42).CanGenerateDataFromParameter(42,1)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                                </results>

+                              </test-suite>

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="ParameterizedFixture" name="ParameterizedTestFixtureWithNullArguments" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                        <results>

+                          <test-suite type="TestFixture" name="ParameterizedTestFixtureWithNullArguments(&quot;A&quot;,null)" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithNullArguments(&quot;A&quot;,null).TestMethod" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="ParameterizedTestFixtureWithNullArguments(null,&quot;A&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithNullArguments(null,&quot;A&quot;).TestMethod" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="ParameterizedTestFixtureWithNullArguments(null,null)" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ParameterizedTestFixtureWithNullArguments(null,null).TestMethod" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PlatformDetectionTests" executed="True" result="Success" success="True" time="0.086" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.ArrayOfPlatforms" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectExactVersion" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectMono10" executed="True" result="Success" success="True" time="0.002" asserts="8" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectMono20" executed="True" result="Success" success="True" time="0.000" asserts="8" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectNet10" executed="True" result="Success" success="True" time="0.001" asserts="8" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectNet11" executed="True" result="Success" success="True" time="0.000" asserts="8" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectNet20" executed="True" result="Success" success="True" time="0.001" asserts="8" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectNet40" executed="True" result="Success" success="True" time="0.000" asserts="9" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectNetCF" executed="True" result="Success" success="True" time="0.000" asserts="9" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectNT3" executed="True" result="Success" success="True" time="0.002" asserts="18" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectNT4" executed="True" result="Success" success="True" time="0.000" asserts="18" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectSSCLI" executed="True" result="Success" success="True" time="0.001" asserts="8" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectUnixUnderMicrosoftDotNet" executed="True" result="Success" success="True" time="0.000" asserts="20" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectUnixUnderMono" executed="False" result="Skipped">

+                            <reason>

+                              <message><![CDATA[Not supported on Net]]></message>

+                            </reason>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectVista" executed="True" result="Success" success="True" time="0.001" asserts="17" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectWin2003Server" executed="True" result="Success" success="True" time="0.000" asserts="17" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectWin2008ServerOriginal" executed="True" result="Success" success="True" time="0.000" asserts="17" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectWin2008ServerR2" executed="True" result="Success" success="True" time="0.001" asserts="16" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectWin2K" executed="True" result="Success" success="True" time="0.000" asserts="17" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectWin95" executed="True" result="Success" success="True" time="0.001" asserts="18" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectWin98" executed="True" result="Success" success="True" time="0.001" asserts="18" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectWinCE" executed="True" result="Success" success="True" time="0.000" asserts="19" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectWindows7" executed="True" result="Success" success="True" time="0.000" asserts="17" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectWinMe" executed="True" result="Success" success="True" time="0.001" asserts="18" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectWinXP" executed="True" result="Success" success="True" time="0.000" asserts="17" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.DetectWinXPProfessionalX64" executed="True" result="Success" success="True" time="0.001" asserts="17" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.PlatformAttribute_Exclude" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.PlatformAttribute_Include" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.PlatformAttribute_IncludeAndExclude" executed="True" result="Success" success="True" time="0.001" asserts="7" />

+                          <test-case name="NUnit.Core.Tests.PlatformDetectionTests.PlatformAttribute_InvalidPlatform" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PropertyAttributeTests" executed="True" result="Success" success="True" time="0.026" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.PropertyAttributeTests.CanDeriveFromPropertyAttribute" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.PropertyAttributeTests.PropertiesWithNumericValues" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.PropertyAttributeTests.PropertyWithStringValue" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.PropertyAttributeTests.PropertyWorksOnFixtures" executed="True" result="Success" success="True" time="0.006" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ReflectTests" executed="True" result="Success" success="True" time="0.050" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.ReflectTests.CanDetectAttributes" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.CanDetectInheritedAttributes" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.Construct" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.GetAttribute" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.GetAttributes" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.GetConstructor" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.GetInheritedAttribute" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.GetInheritedAttributes" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.GetMethodsWithAttribute" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.GetNamedMethod" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.GetNamedMethodWithArgs" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.GetNamedProperty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.GetPropertyValue" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.GetPropertyWithAttribute" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.HasInterface" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.InheritsFrom" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ReflectTests.InvokeMethod" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RemoteRunnerTests" executed="True" result="Success" success="True" time="0.651" asserts="1">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.CheckRunnerID" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.CountTestCases" executed="True" result="Success" success="True" time="0.046" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.CountTestCasesAcrossMultipleAssemblies" executed="True" result="Success" success="True" time="0.056" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.LoadAndReloadAssembly" executed="True" result="Success" success="True" time="0.087" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.LoadAssemblyWithFixture" executed="True" result="Success" success="True" time="0.019" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.LoadAssemblyWithoutNamespaces" executed="True" result="Success" success="True" time="0.043" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.LoadAssemblyWithSuite" executed="True" result="Success" success="True" time="0.014" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.LoadMultipleAssemblies" executed="True" result="Success" success="True" time="0.055" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.LoadMultipleAssembliesWithFixture" executed="True" result="Success" success="True" time="0.032" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.LoadMultipleAssembliesWithSuite" executed="True" result="Success" success="True" time="0.026" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.RunAssembly" executed="True" result="Success" success="True" time="0.052" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.RunAssemblyUsingBeginAndEndRun" executed="True" result="Success" success="True" time="0.049" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.RunMultipleAssemblies" executed="True" result="Success" success="True" time="0.064" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.RemoteRunnerTests.BasicRunnerTests.RunMultipleAssembliesUsingBeginAndEndRun" executed="True" result="Success" success="True" time="0.063" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RepeatedTestFixture" executed="True" result="Success" success="True" time="0.037" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.RepeatedTestFixture.CategoryWorksWithRepeatedTest" executed="True" result="Success" success="True" time="0.005" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.RepeatedTestFixture.IgnoreWorksWithRepeatedTest" executed="True" result="Success" success="True" time="0.005" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.RepeatedTestFixture.RepeatFailOnFirst" executed="True" result="Success" success="True" time="0.005" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.RepeatedTestFixture.RepeatFailOnThird" executed="True" result="Success" success="True" time="0.004" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.RepeatedTestFixture.RepeatSuccess" executed="True" result="Success" success="True" time="0.005" asserts="6" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RuntimeFrameworkTests" executed="True" result="Success" success="True" time="0.247" asserts="0">

+                        <results>

+                          <test-suite type="ParameterizedTest" name="CanCreateNewRuntimeFramework" executed="True" result="Success" success="True" time="0.057" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Net-1.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Net-1.0.3705&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Net-1.1&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Net-1.1.4322&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Net-2.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Net-2.0.40607&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Net-2.0.50727&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Net-3.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Net-3.5&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Net-4.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Net-0.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Mono-1.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Mono-2.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Mono-2.0.50727&gt;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Mono-3.5&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Mono-0.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Any-1.1&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Any-2.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Any-2.0.50727&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Any-3.5&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Any-4.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanCreateNewRuntimeFramework(&lt;Any-0.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanDisplayFrameworkAsString" executed="True" result="Success" success="True" time="0.055" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Net-1.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Net-1.0.3705&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Net-1.1&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Net-1.1.4322&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Net-2.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Net-2.0.40607&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Net-2.0.50727&gt;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Net-3.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Net-3.5&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Net-4.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Net-0.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Mono-1.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Mono-2.0&gt;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Mono-2.0.50727&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Mono-3.5&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Mono-0.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Any-1.1&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Any-2.0&gt;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Any-2.0.50727&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Any-3.5&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Any-4.0&gt;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanDisplayFrameworkAsString(&lt;Any-0.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanGetCurrentFramework" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanListAvailableFrameworks" executed="True" result="Success" success="True" time="0.008" asserts="2" />

+                          <test-suite type="ParameterizedTest" name="CanMatchRuntimes" executed="True" result="Success" success="True" time="0.040" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(net-2.0,net-2.0)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(net-2.0,net-2.0.50727)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(net-2.0.50727,net-2.0)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(net-2.0.50727,net-2.0)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(net-3.5,net-2.0)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(net-2.0,mono-2.0)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(net-2.0,net-1.1)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(net-2.0.50727,net-2.0.40607)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(mono-1.1,mono-1.0)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(mono-2.0,v2.0)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(v2.0,mono-2.0)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(v2.0,v2.0)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(v2.0,v4.0)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(net,net-2.0)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(net-2.0,net)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(any,net-2.0)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanMatchRuntimes(net-2.0,any)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanParseRuntimeFramework" executed="True" result="Success" success="True" time="0.052" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Net-1.0&gt;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Net-1.0.3705&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Net-1.1&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Net-1.1.4322&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Net-2.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Net-2.0.40607&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Net-2.0.50727&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Net-3.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Net-3.5&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Net-4.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Net-0.0&gt;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Mono-1.0&gt;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Mono-2.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Mono-2.0.50727&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Mono-3.5&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Mono-0.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Any-1.1&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Any-2.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Any-2.0.50727&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Any-3.5&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Any-4.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CanParseRuntimeFramework(&lt;Any-0.0&gt;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CurrentFrameworkHasBuildSpecified" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.RuntimeFrameworkTests.CurrentFrameworkMustBeAvailable" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SerializationBug" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.SerializationBug.SaveAndLoad" executed="True" result="Success" success="True" time="0.004" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SetCultureAttributeTests" executed="True" result="Success" success="True" time="0.020" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.SetCultureAttributeTests.SetBothCulturesToFrench" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SetCultureAttributeTests.SetBothCulturesToFrenchCanadian" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SetCultureAttributeTests.SetBothCulturesToRussian" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SetCultureAttributeTests.SetMixedCulturesToFrenchAndUIFrenchCanadian" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SetCultureAttributeTests.SetMixedCulturesToRussianAndUIEnglishUS" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SetCultureAttributeTests.SetUICultureOnlyToFrench" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SetCultureAttributeTests.SetUICultureOnlyToFrenchCanadian" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SetCultureAttributeTests.SetUICultureOnlyToRussian" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SetCultureAttributeTests+NestedBehavior" executed="True" result="Success" success="True" time="0.004" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.SetCultureAttributeTests+NestedBehavior.InheritedRussian" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SetCultureAttributeTests+NestedBehavior.InheritedRussianWithUIFrench" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SetUpFixtureTests" executed="True" result="Success" success="True" time="1.069" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.SetUpFixtureTests.AssemblySetUpFixtureReplacesAssemblyNodeInTree" executed="True" result="Success" success="True" time="0.465" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.SetUpFixtureTests.AssemblySetupFixtureWrapsExecutionOfTest" executed="True" result="Success" success="True" time="0.448" asserts="5" />

+                          <test-case name="NUnit.Core.Tests.SetUpFixtureTests.NamespaceSetUpFixtureReplacesNamespaceNodeInTree" executed="True" result="Success" success="True" time="0.020" asserts="14" />

+                          <test-case name="NUnit.Core.Tests.SetUpFixtureTests.NamespaceSetUpFixtureWrapsExecutionOfSingleTest" executed="True" result="Success" success="True" time="0.020" asserts="8" />

+                          <test-case name="NUnit.Core.Tests.SetUpFixtureTests.NamespaceSetUpFixtureWrapsExecutionOfTwoTests" executed="True" result="Success" success="True" time="0.024" asserts="13" />

+                          <test-case name="NUnit.Core.Tests.SetUpFixtureTests.NamespaceSetUpFixtureWrapsNestedNamespaceSetUpFixture" executed="True" result="Success" success="True" time="0.024" asserts="15" />

+                          <test-case name="NUnit.Core.Tests.SetUpFixtureTests.NamespaceSetUpMethodsMayBeStatic" executed="True" result="Success" success="True" time="0.024" asserts="8" />

+                          <test-case name="NUnit.Core.Tests.SetUpFixtureTests.WithTwoSetUpFixtuesOnlyOneIsUsed" executed="True" result="Success" success="True" time="0.021" asserts="8" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SetUpTest" executed="True" result="Success" success="True" time="0.052" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.SetUpTest.BaseSetUpIsCalledFirstTearDownLast" executed="True" result="Success" success="True" time="0.004" asserts="6" />

+                          <test-case name="NUnit.Core.Tests.SetUpTest.CheckInheritedSetUpAndTearDownAreCalled" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SetUpTest.CheckOverriddenSetUpAndTearDownAreNotCalled" executed="True" result="Success" success="True" time="0.004" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.SetUpTest.MakeSureSetUpAndTearDownAreCalled" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SetUpTest.MultipleSetUpAndTearDownMethodsAreCalled" executed="True" result="Success" success="True" time="0.004" asserts="5" />

+                          <test-case name="NUnit.Core.Tests.SetUpTest.SetUpAndTearDownCounter" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SetUpTest.SetupRecordsOriginalExceptionThownByTestCase" executed="True" result="Success" success="True" time="0.004" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.SetUpTest.TearDownRecordsOriginalExceptionThownByTestCase" executed="True" result="Success" success="True" time="0.004" asserts="4" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SetUpTest+SetupCallDerived" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.SetUpTest+SetupCallDerived.AssertCount" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SimpleNameFilterTests" executed="True" result="Success" success="True" time="0.082" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.SimpleNameFilterTests.ExplicitTestCaseDoesNotMatchWhenNotSelectedDirectly" executed="True" result="Success" success="True" time="0.007" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SimpleNameFilterTests.ExplicitTestCaseMatchesWhenSelectedDirectly" executed="True" result="Success" success="True" time="0.006" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SimpleNameFilterTests.ExplicitTestSuiteDoesNotMatchWhenNotSelectedDirectly" executed="True" result="Success" success="True" time="0.006" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SimpleNameFilterTests.ExplicitTestSuiteMatchesWhenSelectedDirectly" executed="True" result="Success" success="True" time="0.006" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.SimpleNameFilterTests.HighLevelSuite" executed="True" result="Success" success="True" time="0.006" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.SimpleNameFilterTests.MultipleNameMatch" executed="True" result="Success" success="True" time="0.007" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.SimpleNameFilterTests.SingleNameMatch" executed="True" result="Success" success="True" time="0.006" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.SimpleNameFilterTests.SuiteNameMatch" executed="True" result="Success" success="True" time="0.006" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.SimpleNameFilterTests.TestDoesNotMatch" executed="True" result="Success" success="True" time="0.006" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SimpleTestRunnerTests" executed="True" result="Success" success="True" time="0.625" asserts="1">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.CheckRunnerID" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.CountTestCases" executed="True" result="Success" success="True" time="0.043" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.CountTestCasesAcrossMultipleAssemblies" executed="True" result="Success" success="True" time="0.058" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.LoadAndReloadAssembly" executed="True" result="Success" success="True" time="0.082" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.LoadAssemblyWithFixture" executed="True" result="Success" success="True" time="0.018" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.LoadAssemblyWithoutNamespaces" executed="True" result="Success" success="True" time="0.043" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.LoadAssemblyWithSuite" executed="True" result="Success" success="True" time="0.013" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.LoadMultipleAssemblies" executed="True" result="Success" success="True" time="0.055" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.LoadMultipleAssembliesWithFixture" executed="True" result="Success" success="True" time="0.029" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.LoadMultipleAssembliesWithSuite" executed="True" result="Success" success="True" time="0.025" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.RunAssembly" executed="True" result="Success" success="True" time="0.047" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.RunAssemblyUsingBeginAndEndRun" executed="True" result="Success" success="True" time="0.046" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.RunMultipleAssemblies" executed="True" result="Success" success="True" time="0.061" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SimpleTestRunnerTests.BasicRunnerTests.RunMultipleAssembliesUsingBeginAndEndRun" executed="True" result="Success" success="True" time="0.062" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="StackOverflowTestFixture" executed="False" result="Skipped">

+                        <reason>

+                          <message><![CDATA[Cannot handle StackOverflowException in managed code]]></message>

+                        </reason>

+                        <results>

+                          <test-case name="NUnit.Core.Tests.StackOverflowTestFixture.SimpleOverflow" executed="False" result="Skipped">

+                            <reason>

+                              <message><![CDATA[Cannot handle StackOverflowException in managed code]]></message>

+                            </reason>

+                          </test-case>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SuiteBuilderTests" executed="True" result="Success" success="True" time="1.703" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests.DiscoverSuite" executed="True" result="Success" success="True" time="0.017" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests.FileNotFound" executed="True" result="Success" success="True" time="0.002" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests.FixtureNotFound" executed="True" result="Success" success="True" time="0.015" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests.InvalidAssembly" executed="True" result="Success" success="True" time="0.007" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests.LoadAssembly" executed="True" result="Success" success="True" time="0.529" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests.LoadAssemblyWithoutNamespaces" executed="True" result="Success" success="True" time="0.529" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests.LoadFixture" executed="True" result="Success" success="True" time="0.021" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests.LoadNamespaceAsSuite" executed="True" result="Success" success="True" time="0.512" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests.LoadSuite" executed="True" result="Success" success="True" time="0.024" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests.WrongReturnTypeSuite" executed="True" result="Success" success="True" time="0.015" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SuiteBuilderTests_Multiple" executed="True" result="Success" success="True" time="0.246" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests_Multiple.BuildSuite" executed="True" result="Success" success="True" time="0.055" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests_Multiple.LoadFixture" executed="True" result="Success" success="True" time="0.078" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests_Multiple.RootNode" executed="True" result="Success" success="True" time="0.051" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.SuiteBuilderTests_Multiple.TestCaseCount" executed="True" result="Success" success="True" time="0.051" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestAttributeFixture" executed="True" result="Success" success="True" time="0.036" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestAttributeFixture.Description" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestAttributeFixture.DescriptionInResult" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestAttributeFixture.FixtureDescription" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestAttributeFixture.FixtureDescriptionInResult" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestAttributeFixture.NoDescription" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestAttributeFixture.ReflectionTest" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestAttributeFixture.SeparateDescriptionAttribute" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestAttributeFixture.SeparateDescriptionInResult" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestCaseAttributeTests" executed="True" result="Success" success="True" time="0.151" asserts="0">

+                        <results>

+                          <test-suite type="ParameterizedTest" name="ArgumentsAreCoalescedInObjectArray" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.ArgumentsAreCoalescedInObjectArray(&quot;a&quot;,&quot;b&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ArgumentsOfDifferentTypeAreCoalescedInObjectArray" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.ArgumentsOfDifferentTypeAreCoalescedInObjectArray(1,&quot;b&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertDoubleToDecimal" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanConvertDoubleToDecimal(2.2m,3.3m)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertIntToDecimal" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanConvertIntToDecimal(5m,2m)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertIntToDouble" executed="True" result="Success" success="True" time="0.000" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanConvertIntToDouble(2,2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertSmallIntsToByte" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanConvertSmallIntsToByte(5,2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertSmallIntsToSByte" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanConvertSmallIntsToSByte(5,2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertSmallIntsToShort" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanConvertSmallIntsToShort(5,2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertStringToDateTime" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanConvertStringToDateTime(10/12/1942 00:00:00)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanConvertStringToDecimal" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanConvertStringToDecimal(2.2m,3.3m)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanIgnoreIndividualTestCase" executed="True" result="Success" success="True" time="0.003" asserts="3" />

+                          <test-suite type="ParameterizedTest" name="CanPassArrayAsArgument" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanPassArrayAsArgument(&quot;a&quot;,&quot;b&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanPassNullAsArgument" executed="True" result="Success" success="True" time="0.000" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanPassNullAsArgument(null,null)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanPassNullAsSoleArgument" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanPassNullAsSoleArgument(null)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanPassObjectArrayAsFirstArgument" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanPassObjectArrayAsFirstArgument(1,&quot;two&quot;,3.0d)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanPassObjectArrayAsFirstArgument(&quot;zip&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanSpecifyCategory" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanSpecifyDescription" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="CanSpecifyExceptionMessage" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanSpecifyExceptionMessage(42)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="CanSpecifyExceptionMessageAndMatchType" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanSpecifyExceptionMessageAndMatchType(42)" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanSpecifyExpectedException" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanSpecifyExpectedException_NoneThrown" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanSpecifyExpectedException_WrongException" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanSpecifyExpectedException_WrongMessage" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanSpecifyMultipleCategories" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.CanSpecifyTestName" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.ConversionOverflowMakesTestNonRunnable" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-suite type="ParameterizedTest" name="ExpectedResultCanBeNull" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.ExpectedResultCanBeNull()" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="HandlesParamsArrayAsLastArgument" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.HandlesParamsArrayAsLastArgument(&quot;a&quot;,&quot;b&quot;,&quot;c&quot;,&quot;d&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="HandlesParamsArrayAsSoleArgument" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.HandlesParamsArrayAsSoleArgument(&quot;a&quot;,&quot;b&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.IgnoreTakesPrecedenceOverExpectedException" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-suite type="ParameterizedTest" name="IntegerDivisionWithResultCheckedByNUnit" executed="True" result="Success" success="True" time="0.011" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.IntegerDivisionWithResultCheckedByNUnit(12,2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.IntegerDivisionWithResultCheckedByNUnit(12,3)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.IntegerDivisionWithResultCheckedByNUnit(12,4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.IntegerDivisionWithResultCheckedByNUnit(12,0)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.DivisionByZeroThrowsException" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="IntegerDivisionWithResultPassedToTest" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.IntegerDivisionWithResultPassedToTest(12,2,6)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.IntegerDivisionWithResultPassedToTest(12,0,0)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.IntegerDivisionWithResultPassedToTest(12,3,4)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.IntegerDivisionWithResultPassedToTest(12,4,3)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TestCaseAttributeTests.IntegerDivisionWithResultPassedToTest(12,0,0)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestCaseResultFixture" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestCaseResultFixture.TestCaseDefault" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestCaseResultFixture.TestCaseFailure" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.TestCaseResultFixture.TestCaseNotRun" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestCaseResultFixture.TestCaseSuccess" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestCaseSourceTests" executed="True" result="Success" success="True" time="0.145" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestCaseSourceTests.CanIgnoreIndividualTestCases" executed="True" result="Success" success="True" time="0.003" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.TestCaseSourceTests.CanSpecifyExpectedException" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestCaseSourceTests.CanSpecifyExpectedException_NoneThrown" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestCaseSourceTests.CanSpecifyExpectedException_WrongException" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-suite type="ParameterizedTest" name="ExpectedResultCanBeNull" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.ExpectedResultCanBeNull()" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Core.Tests.TestCaseSourceTests.HandlesExceptionInTestCaseSource" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.TestCaseSourceTests.IgnoreTakesPrecedenceOverExpectedException" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-suite type="ParameterizedTest" name="MethodTakingTwoStringArrays" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.MethodTakingTwoStringArrays(System.String[],System.String[])" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SourceCanBeInstanceField" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceCanBeInstanceField(&quot;InstanceField&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SourceCanBeInstanceMethod" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceCanBeInstanceMethod(&quot;InstanceMethod&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SourceCanBeInstanceProperty" executed="True" result="Success" success="True" time="0.000" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceCanBeInstanceProperty(&quot;InstanceProperty&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SourceCanBeStaticField" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceCanBeStaticField(&quot;StaticField&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SourceCanBeStaticMethod" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceCanBeStaticMethod(&quot;StaticMethod&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SourceCanBeStaticProperty" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceCanBeStaticProperty(&quot;StaticProperty&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SourceIsInvokedWithCorrectCurrentDirectory" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceIsInvokedWithCorrectCurrentDirectory(True)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SourceMayBeInAnotherClass" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                            <categories>

+                              <category name="Top" />

+                            </categories>

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.ThisOneShouldThrow" description="Demonstrates use of ExpectedException" executed="True" result="Success" success="True" time="0.000" asserts="0">

+                                <categories>

+                                  <category name="Junk" />

+                                </categories>

+                                <properties>

+                                  <property name="MyProp" value="zip" />

+                                </properties>

+                              </test-case>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayBeInAnotherClass(100,20,5)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayBeInAnotherClass(100,4,25)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SourceMayBeInAnotherClassWithReturn" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TC1" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TC2" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TC3" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SourceMayReturnArgumentsAsIntArray" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayReturnArgumentsAsIntArray(12,3,4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayReturnArgumentsAsIntArray(12,4,3)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayReturnArgumentsAsIntArray(12,6,2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SourceMayReturnArgumentsAsObjectArray" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayReturnArgumentsAsObjectArray(12,3,4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayReturnArgumentsAsObjectArray(12,4,3)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayReturnArgumentsAsObjectArray(12,6,2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SourceMayReturnArgumentsAsParamSet" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayReturnArgumentsAsParamSet(24,3)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayReturnArgumentsAsParamSet(24,2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="SourceMayReturnSinglePrimitiveArgumentAlone" executed="True" result="Success" success="True" time="0.012" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayReturnSinglePrimitiveArgumentAlone(2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayReturnSinglePrimitiveArgumentAlone(4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayReturnSinglePrimitiveArgumentAlone(6)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.SourceMayReturnSinglePrimitiveArgumentAlone(8)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="TestAttributeIsOptional" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TestAttributeIsOptional(12,3,4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TestAttributeIsOptional(12,4,3)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TestAttributeIsOptional(12,6,2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="TestMayUseMultipleSourceAttributes" executed="True" result="Success" success="True" time="0.013" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TestMayUseMultipleSourceAttributes(12,3,4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TestMayUseMultipleSourceAttributes(12,4,3)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TestMayUseMultipleSourceAttributes(12,6,2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TestMayUseMultipleSourceAttributes(12,1,12)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TestMayUseMultipleSourceAttributes(12,2,6)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TestMayUseMultipleSourceAttributes(12,0,0)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="TestWithFourArguments" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TestWithFourArguments(12,3,4,0)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TestWithFourArguments(12,4,3,0)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.Core.Tests.TestCaseSourceTests.TestWithFourArguments(12,5,2,2)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestCaseTest" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestCaseTest.CreateIgnoredTestCase" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.TestCaseTest.LoadMethodCategories" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.TestCaseTest.RunIgnoredTestCase" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestConsole" executed="True" result="Success" success="True" time="0.013" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestConsole.ConsoleWrite" executed="True" result="Success" success="True" time="0.002" asserts="0" />

+                          <test-case name="NUnit.Core.Tests.TestConsole.ConsoleWriteLine" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestContextTests" executed="True" result="Success" success="True" time="0.041" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestContextTests.CanAccessTestContextOnSeparateThread" executed="True" result="Success" success="True" time="0.003" asserts="1">

+                            <properties>

+                              <property name="RequiresThread" value="True" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.TestContextTests.TestCanAccessItsOwnFullName" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestContextTests.TestCanAccessItsOwnName" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestContextTests.TestCanAccessItsOwnProperties" executed="True" result="Success" success="True" time="0.000" asserts="1">

+                            <properties>

+                              <property name="Answer" value="42" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.TestContextTests.TestCanAccessTestDirectory" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.TestContextTests.TestCanAccessTestState_FailingTest" executed="True" result="Success" success="True" time="0.006" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestContextTests.TestCanAccessTestState_FailureInSetUp" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestContextTests.TestCanAccessTestState_IgnoredInSetUp" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestContextTests.TestCanAccessTestState_PassingTest" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestDelegateFixture" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestDelegateFixture.DelegateTest" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestExecutionContextTests" executed="True" result="Success" success="True" time="0.014" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestExecutionContextTests.SetAndRestoreCurrentCulture" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Core.Tests.TestExecutionContextTests.SetAndRestoreCurrentDirectory" executed="True" result="Success" success="True" time="0.002" asserts="5" />

+                          <test-case name="NUnit.Core.Tests.TestExecutionContextTests.SetAndRestoreCurrentPrincipal" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Core.Tests.TestExecutionContextTests.SetAndRestoreCurrentUICulture" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestFixtureBuilderTests" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestFixtureBuilderTests.GoodSignature" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureBuilderTests.LoadCategories" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestFixtureExtension" executed="True" result="Success" success="True" time="0.079" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestFixtureExtension.CheckMultipleSetUp" executed="True" result="Success" success="True" time="0.019" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureExtension.DerivedTest" executed="True" result="Success" success="True" time="0.016" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureExtension.InheritSetup" executed="True" result="Success" success="True" time="0.018" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureExtension.InheritTearDown" executed="True" result="Success" success="True" time="0.018" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestFixtureTests" executed="True" result="Success" success="True" time="0.240" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunBadConstructor" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunConstructorWithArgsNotSupplied" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunFixtureSetupWithParameters" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunFixtureSetupWithReturnValue" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunFixtureTearDownWithParameters" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunFixtureTearDownWithReturnValue" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunGenericFixtureDerivedFromAbstractFixtureWithNoArgsProvided" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunGenericFixtureWithNoArgsProvided" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunGenericFixtureWithNoTestFixtureAttribute" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunIgnoredFixture" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunPrivateFixtureSetUp" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunPrivateFixtureTearDown" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunPrivateSetUp" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunPrivateTearDown" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunSetupWithParameters" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunSetupWithReturnValue" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunTearDownWithParameters" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CannotRunTearDownWithReturnValue" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunConstructorWithArgsSupplied" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunFixtureDerivedFromAbstractDerivedTestFixture" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunFixtureDerivedFromAbstractFixture" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunGenericFixtureDerivedFromAbstractFixtureWithArgsProvided" executed="True" result="Success" success="True" time="0.005" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunGenericFixtureWithProperArgsProvided" executed="True" result="Success" success="True" time="0.005" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunMultipleSetUp" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunMultipleTearDown" executed="True" result="Success" success="True" time="0.008" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunMultipleTestFixtureSetUp" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunMultipleTestFixtureTearDown" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunProtectedFixtureSetUp" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunProtectedFixtureTearDown" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunProtectedSetUp" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunProtectedTearDown" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunStaticFixture" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunStaticFixtureSetUp" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunStaticFixtureTearDown" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunStaticSetUp" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.CanRunStaticTearDown" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.ConstructFromDoublyNestedType" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.ConstructFromNestedType" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.ConstructFromStaticTypeWithoutTestFixtureAttribute" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.ConstructFromType" executed="True" result="Success" success="True" time="0.006" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.ConstructFromTypeWithoutNamespace" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.ConstructFromTypeWithoutTestFixtureAttribute" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests.FixtureInheritingTwoTestFixtureAttributesIsLoadedOnlyOnce" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestFixtureTests+InternalTestFixture" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests+InternalTestFixture.CanRunTestInInternalTestFixture" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestFixtureTests+PrivateTestFixture" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests+PrivateTestFixture.CanRunTestInPrivateTestFixture" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestFixtureTests+ProtectedTestFixture" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestFixtureTests+ProtectedTestFixture.CanRunTestInProtectedTestFixture" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestFrameworkTests" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestFrameworkTests.NUnitFrameworkIsKnownAndReferenced" executed="True" result="Success" success="True" time="0.002" asserts="0" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestIDTests" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestIDTests.ClonedTestIDsAreEqual" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.TestIDTests.DifferentTestIDsAreNotEqual" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.TestIDTests.DifferentTestIDsDisplayDifferentStrings" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestInfoTests" executed="True" result="Success" success="True" time="0.026" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestInfoTests.ConstructFromFixture" executed="True" result="Success" success="True" time="0.008" asserts="8" />

+                          <test-case name="NUnit.Core.Tests.TestInfoTests.ConstructFromSuite" executed="True" result="Success" success="True" time="0.005" asserts="7" />

+                          <test-case name="NUnit.Core.Tests.TestInfoTests.ConstructFromTestCase" executed="True" result="Success" success="True" time="0.006" asserts="7" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestMethodSignatureTests" executed="True" result="Success" success="True" time="0.272" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.InstanceTestMethodIsRunnable" executed="True" result="Success" success="True" time="0.012" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.PrivateTestMethodIsNotRunnable" executed="True" result="Success" success="True" time="0.010" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.ProtectedTestMethodIsNotRunnable" executed="True" result="Success" success="True" time="0.010" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.RunningTestsThroughFixtureGivesCorrectResults" executed="True" result="Success" success="True" time="0.014" asserts="6" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.StaticTestMethodIsRunnable" executed="True" result="Success" success="True" time="0.010" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.StaticTestMethodWithArgumentsNotProvidedIsNotRunnable" executed="True" result="Success" success="True" time="0.010" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.StaticTestMethodWithArgumentsProvidedIsRunnable" executed="True" result="Success" success="True" time="0.012" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.StaticTestMethodWithWrongArgumentTypesProvidedGivesError" executed="True" result="Success" success="True" time="0.011" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.StaticTestMethodWithWrongNumberOfArgumentsProvidedIsNotRunnable" executed="True" result="Success" success="True" time="0.011" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.TestMethodWithArgumentsNotProvidedIsNotRunnable" executed="True" result="Success" success="True" time="0.010" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.TestMethodWithArgumentsProvidedIsRunnable" executed="True" result="Success" success="True" time="0.010" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.TestMethodWithConvertibleArgumentsIsRunnable" executed="True" result="Success" success="True" time="0.010" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.TestMethodWithMultipleTestCasesExecutesMultipleTimes" executed="True" result="Success" success="True" time="0.010" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.TestMethodWithMultipleTestCasesUsesCorrectNames" executed="True" result="Success" success="True" time="0.013" asserts="7" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.TestMethodWithNonConvertibleArgumentsGivesError" executed="True" result="Success" success="True" time="0.011" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.TestMethodWithoutParametersWithArgumentsProvidedIsNotRunnable" executed="True" result="Success" success="True" time="0.010" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.TestMethodWithParamsArgumentIsRunnable" executed="True" result="Success" success="True" time="0.010" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.TestMethodWithReturnTypeIsNotRunnable" executed="True" result="Success" success="True" time="0.010" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.TestMethodWithWrongArgumentTypesProvidedGivesError" executed="True" result="Success" success="True" time="0.010" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestMethodSignatureTests.TestMethodWithWrongNumberOfArgumentsProvidedIsNotRunnable" executed="True" result="Success" success="True" time="0.010" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestNameTests" executed="True" result="Success" success="True" time="0.030" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestNameTests.CanCompareStrongTestNames" executed="True" result="Success" success="True" time="0.001" asserts="9" />

+                          <test-case name="NUnit.Core.Tests.TestNameTests.CanCompareWeakAndStrongTestNames" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.TestNameTests.CanCompareWeakTestNames" executed="True" result="Success" success="True" time="0.001" asserts="6" />

+                          <test-case name="NUnit.Core.Tests.TestNameTests.CanDisplayUniqueNames" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestNameTests.CanParseSimpleTestNames" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestNameTests.CanParseStrongTestNames" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestNameTests.CanParseWeakTestNames" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestNameTests.ClonedTestNamesAreEqual" executed="True" result="Success" success="True" time="0.000" asserts="6" />

+                          <test-case name="NUnit.Core.Tests.TestNameTests.TestNamesWithDifferentRunnerIDsAreNotEqual" executed="True" result="Success" success="True" time="0.001" asserts="7" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestNodeTests" executed="True" result="Success" success="True" time="0.029" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestNodeTests.ConstructFromMultipleTests" executed="True" result="Success" success="True" time="0.009" asserts="8" />

+                          <test-case name="NUnit.Core.Tests.TestNodeTests.ConstructFromSuite" executed="True" result="Success" success="True" time="0.007" asserts="3" />

+                          <test-case name="NUnit.Core.Tests.TestNodeTests.ConstructFromTestCase" executed="True" result="Success" success="True" time="0.006" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestRunnerThreadTests" executed="True" result="Success" success="True" time="0.011" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestRunnerThreadTests.RunMultipleTests" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestRunnerThreadTests.RunNamedTest" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestRunnerThreadTests.RunTestSuite" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestSuiteTest" executed="True" result="Success" success="True" time="0.271" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.CanSortUsingExternalComparer" executed="True" result="Success" success="True" time="0.009" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.CountTestCasesFilteredByName" executed="True" result="Success" success="True" time="0.008" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.DefaultSortIsByName" executed="True" result="Success" success="True" time="0.008" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.ExcludingCategoryDoesNotRunExplicitTestCases" executed="True" result="Success" success="True" time="0.011" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.ExcludingCategoryDoesNotRunExplicitTestFixtures" executed="True" result="Success" success="True" time="0.053" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.InheritedTestCount" executed="True" result="Success" success="True" time="0.012" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.RunExplicitTestByCategory" executed="True" result="Success" success="True" time="0.008" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.RunExplicitTestByName" executed="True" result="Success" success="True" time="0.007" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.RunExplicitTestDirectly" executed="True" result="Success" success="True" time="0.008" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.RunNoTestSuite" executed="True" result="Success" success="True" time="0.007" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.RunSingleTest" executed="True" result="Success" success="True" time="0.014" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.RunSuiteByCategory" executed="True" result="Success" success="True" time="0.010" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.RunSuiteByName" executed="True" result="Success" success="True" time="0.010" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.RunTestByCategory" executed="True" result="Success" success="True" time="0.010" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.RunTestByName" executed="True" result="Success" success="True" time="0.009" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.RunTestExcludingCategory" executed="True" result="Success" success="True" time="0.009" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.RunTestsInFixture" executed="True" result="Success" success="True" time="0.009" asserts="6" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.SuiteRunInitialized" executed="True" result="Success" success="True" time="0.007" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TestSuiteTest.SuiteWithNoTests" executed="True" result="Success" success="True" time="0.008" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TheoryTests" executed="True" result="Success" success="True" time="0.070" asserts="0">

+                        <results>

+                          <test-suite type="Theory" name="ArrayWithDatapointsAttributeIsUsed" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TheoryTests.ArrayWithDatapointsAttributeIsUsed(&quot;xyz1&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TheoryTests.ArrayWithDatapointsAttributeIsUsed(&quot;xyz2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.TheoryTests.ArrayWithDatapointsAttributeIsUsed(&quot;xyz3&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Core.Tests.TheoryTests.BooleanArgumentsAreSuppliedAutomatically" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TheoryTests.EnumArgumentsAreSuppliedAutomatically" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-suite type="Theory" name="NullDatapointIsOK" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TheoryTests.NullDatapointIsOK(null)" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Core.Tests.TheoryTests.SimpleTestIgnoresDataPoints" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-suite type="Theory" name="SquareRootWithAllGoodValues" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TheoryTests.SquareRootWithAllGoodValues(12.0d)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TheoryTests.SquareRootWithAllGoodValues(4.0d)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TheoryTests.SquareRootWithAllGoodValues(9.0d)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="Theory" name="SquareRootWithOneBadValue" executed="True" result="Success" success="True" time="0.007" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TheoryTests.SquareRootWithOneBadValue(12.0d)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TheoryTests.SquareRootWithOneBadValue(-4.0d)" executed="True" result="Inconclusive" success="False" time="0.001" asserts="0">

+                                <reason>

+                                  <message><![CDATA[  Expected: True

+  But was:  False

+]]></message>

+                                </reason>

+                              </test-case>

+                              <test-case name="NUnit.Core.Tests.TheoryTests.SquareRootWithOneBadValue(9.0d)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-case name="NUnit.Core.Tests.TheoryTests.TheoryFailsIfAllTestsAreInconclusive" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TheoryTests.TheoryWithDatapointsIsRunnable" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.TheoryTests.TheoryWithNoArgumentsIsTreatedAsTest" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.TheoryTests.TheoryWithNoDatapointsIsNotRunnable" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TheoryTests+SqrtTests_DisplayResults" executed="True" result="Success" success="True" time="0.014" asserts="0">

+                        <results>

+                          <test-suite type="Theory" name="SqrtTimesItselfGivesOriginal" executed="True" result="Success" success="True" time="0.013" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TheoryTests+SqrtTests_DisplayResults.SqrtTimesItselfGivesOriginal(0.0d)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TheoryTests+SqrtTests_DisplayResults.SqrtTimesItselfGivesOriginal(1.0d)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TheoryTests+SqrtTests_DisplayResults.SqrtTimesItselfGivesOriginal(-1.0d)" executed="True" result="Inconclusive" success="False" time="0.001" asserts="0">

+                                <reason>

+                                  <message><![CDATA[  Expected: True

+  But was:  False

+]]></message>

+                                </reason>

+                              </test-case>

+                              <test-case name="NUnit.Core.Tests.TheoryTests+SqrtTests_DisplayResults.SqrtTimesItselfGivesOriginal(double.MaxValue)" executed="True" result="Inconclusive" success="False" time="0.001" asserts="0">

+                                <reason>

+                                  <message><![CDATA[  Expected: True

+  But was:  False

+]]></message>

+                                </reason>

+                              </test-case>

+                              <test-case name="NUnit.Core.Tests.TheoryTests+SqrtTests_DisplayResults.SqrtTimesItselfGivesOriginal(double.PositiveInfinity)" executed="True" result="Inconclusive" success="False" time="0.001" asserts="0">

+                                <reason>

+                                  <message><![CDATA[  Expected: True

+  But was:  False

+]]></message>

+                                </reason>

+                              </test-case>

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ThreadedTestRunnerTests" executed="True" result="Success" success="True" time="0.588" asserts="1">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.CheckRunnerID" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.CountTestCases" executed="True" result="Success" success="True" time="0.041" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.CountTestCasesAcrossMultipleAssemblies" executed="True" result="Success" success="True" time="0.051" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.LoadAndReloadAssembly" executed="True" result="Success" success="True" time="0.081" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.LoadAssemblyWithFixture" executed="True" result="Success" success="True" time="0.016" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.LoadAssemblyWithoutNamespaces" executed="True" result="Success" success="True" time="0.039" asserts="4" />

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.LoadAssemblyWithSuite" executed="True" result="Success" success="True" time="0.011" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.LoadMultipleAssemblies" executed="True" result="Success" success="True" time="0.053" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.LoadMultipleAssembliesWithFixture" executed="True" result="Success" success="True" time="0.026" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.LoadMultipleAssembliesWithSuite" executed="True" result="Success" success="True" time="0.021" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.RunAssembly" executed="True" result="Success" success="True" time="0.045" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.RunAssemblyUsingBeginAndEndRun" executed="True" result="Success" success="True" time="0.045" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.RunMultipleAssemblies" executed="True" result="Success" success="True" time="0.058" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ThreadedTestRunnerTests.BasicRunnerTests.RunMultipleAssembliesUsingBeginAndEndRun" executed="True" result="Success" success="True" time="0.058" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ThreadingTests" executed="True" result="Success" success="True" time="0.171" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests.TestOnSeparateThreadReportsAssertCountCorrectly" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.ThreadingTests.TestWithInfiniteLoopTimesOut" executed="True" result="Success" success="True" time="0.061" asserts="2" />

+                          <test-case name="NUnit.Core.Tests.ThreadingTests.TestWithMTAThreadRunsInMTA" executed="True" result="Success" success="True" time="0.000" asserts="2">

+                            <properties>

+                              <property name="APARTMENT_STATE" value="MTA" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests.TestWithRequiresMTARunsInMTA" executed="True" result="Success" success="True" time="0.000" asserts="2">

+                            <properties>

+                              <property name="APARTMENT_STATE" value="MTA" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests.TestWithRequiresSTARunsInSTA" executed="True" result="Success" success="True" time="0.001" asserts="1">

+                            <properties>

+                              <property name="APARTMENT_STATE" value="STA" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests.TestWithRequiresThreadRunsInSeparateThread" executed="True" result="Success" success="True" time="0.001" asserts="1">

+                            <properties>

+                              <property name="RequiresThread" value="True" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests.TestWithRequiresThreadRunsSetUpAndTestOnSameThread" executed="True" result="Success" success="True" time="0.000" asserts="1">

+                            <properties>

+                              <property name="RequiresThread" value="True" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests.TestWithRequiresThreadWithMTAArgRunsOnSeparateThreadInMTA" executed="True" result="Success" success="True" time="0.001" asserts="2">

+                            <properties>

+                              <property name="RequiresThread" value="True" />

+                              <property name="APARTMENT_STATE" value="MTA" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests.TestWithRequiresThreadWithSTAArgRunsOnSeparateThreadInSTA" executed="True" result="Success" success="True" time="0.001" asserts="2">

+                            <properties>

+                              <property name="RequiresThread" value="True" />

+                              <property name="APARTMENT_STATE" value="STA" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests.TestWithSTAThreadRunsInSTA" executed="True" result="Success" success="True" time="0.001" asserts="1">

+                            <properties>

+                              <property name="APARTMENT_STATE" value="STA" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests.TestWithTimeoutRunsOnSeparateThread" executed="True" result="Success" success="True" time="0.000" asserts="1">

+                            <properties>

+                              <property name="Timeout" value="50" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests.TestWithTimeoutRunsSetUpAndTestOnSameThread" executed="True" result="Success" success="True" time="0.001" asserts="1">

+                            <properties>

+                              <property name="Timeout" value="50" />

+                            </properties>

+                          </test-case>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests.TimeoutCanBeSetOnTestFixture" executed="True" result="Success" success="True" time="0.065" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ThreadingTests+FixtureRequiresMTA" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                        <properties>

+                          <property name="APARTMENT_STATE" value="MTA" />

+                        </properties>

+                        <results>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests+FixtureRequiresMTA.RequiresMTACanBeSetOnTestFixture" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ThreadingTests+FixtureRequiresSTA" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                        <properties>

+                          <property name="APARTMENT_STATE" value="STA" />

+                        </properties>

+                        <results>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests+FixtureRequiresSTA.RequiresSTACanBeSetOnTestFixture" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ThreadingTests+FixtureRequiresThread" executed="True" result="Success" success="True" time="0.003" asserts="0">

+                        <properties>

+                          <property name="RequiresThread" value="True" />

+                        </properties>

+                        <results>

+                          <test-case name="NUnit.Core.Tests.ThreadingTests+FixtureRequiresThread.RequiresThreadCanBeSetOnTestFixture" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TypeHelperTests" executed="True" result="Success" success="True" time="0.053" asserts="0">

+                        <results>

+                          <test-suite type="ParameterizedTest" name="GetDisplayName" executed="True" result="Success" success="True" time="0.053" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.GenericContainerClass`1+NestedClass[System.String],&quot;GenericContainerClass+NestedClass&lt;String&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.GenericContainerClass`1+NestedClass+DoublyNestedClass[System.String],&quot;GenericContainerClass+NestedClass+DoublyNestedClass&lt;String&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.ContainerClass+NestedGeneric`1+DoublyNestedGeneric`1[System.String,System.Int32],&quot;ContainerClass+NestedGeneric+DoublyNestedGeneric&lt;String,Int32&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.GenericContainerClass`1+NestedGeneric`1+DoublyNestedGeneric`1[System.String,System.Int32,System.Boolean],&quot;GenericContainerClass+NestedGeneric+DoublyNestedGeneric&lt;String,Int32,Boolean&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.ListTester`1[System.Collections.Generic.List`1[System.Int32]],&quot;ListTester&lt;List&lt;Int32&gt;&gt;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.ListTester`1[System.Collections.Generic.List`1[System.Collections.Generic.List`1[System.Int32]]],&quot;ListTester&lt;List&lt;List&lt;Int32&gt;&gt;&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.GenericContainerClass`1+NestedClass+DoublyNestedGeneric`1[System.String,System.Boolean],&quot;GenericContainerClass+NestedClass+DoublyNestedGeneric&lt;String,Boolean&gt;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.GenericContainerClass`1+NestedGeneric`1[System.String,System.Int32],&quot;GenericContainerClass+NestedGeneric&lt;String,Int32&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(System.Int32,&quot;Int32&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.GenericContainerClass`1+NestedGeneric`1+DoublyNestedClass[System.String,System.Int32],&quot;GenericContainerClass+NestedGeneric+DoublyNestedClass&lt;String,Int32&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.SimpleClass,&quot;SimpleClass&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(MyNoNamespaceClass,&quot;MyNoNamespaceClass&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.GenericClass`3[System.Int32,System.Decimal,System.String],&quot;GenericClass&lt;Int32,Decimal,String&gt;&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.GenericClass`3[System.Int32[],System.Decimal[],System.String[]],&quot;GenericClass&lt;Int32[],Decimal[],String[]&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.ContainerClass+NestedClass,&quot;ContainerClass+NestedClass&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.ContainerClass+NestedClass+DoublyNestedClass,&quot;ContainerClass+NestedClass+DoublyNestedClass&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.ContainerClass+NestedClass+DoublyNestedGeneric`1[System.Int32],&quot;ContainerClass+NestedClass+DoublyNestedGeneric&lt;Int32&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.ContainerClass+NestedGeneric`1[System.Int32],&quot;ContainerClass+NestedGeneric&lt;Int32&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Core.Tests.TypeHelperTests.GetDisplayName(NUnit.TestData.TypeHelperFixture.ContainerClass+NestedGeneric`1+DoublyNestedClass[System.Int32],&quot;ContainerClass+NestedGeneric+DoublyNestedClass&lt;Int32&gt;&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ValueSourceTests" executed="True" result="Success" success="True" time="0.055" asserts="0">

+                        <results>

+                          <test-suite type="ParameterizedTest" name="MultipleArguments" executed="True" result="Success" success="True" time="0.006" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.MultipleArguments(12,3,4)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.MultipleArguments(12,4,3)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.MultipleArguments(12,6,2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ValueSourceCanBeInstanceField" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceCanBeInstanceField(&quot;InstanceField&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ValueSourceCanBeInstanceMethod" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceCanBeInstanceMethod(&quot;InstanceMethod&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ValueSourceCanBeInstanceProperty" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceCanBeInstanceProperty(&quot;InstanceProperty&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ValueSourceCanBeStaticField" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceCanBeStaticField(&quot;StaticField&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ValueSourceCanBeStaticMethod" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceCanBeStaticMethod(&quot;StaticMethod&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ValueSourceCanBeStaticProperty" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceCanBeStaticProperty(&quot;StaticProperty&quot;)" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ValueSourceIsInvokedWithCorrectCurrentDirectory" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceIsInvokedWithCorrectCurrentDirectory(True)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ValueSourceMayBeGeneric" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceMayBeGeneric(1)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceMayBeGeneric(2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceMayBeGeneric(4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceMayBeGeneric(8)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="ValueSourceMayBeInAnotherClass" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceMayBeInAnotherClass(12,3,4)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceMayBeInAnotherClass(12,4,3)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.Core.Tests.ValueSourceTests.ValueSourceMayBeInAnotherClass(12,6,2)" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="XmlTest" executed="True" result="Success" success="True" time="0.638" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Core.Tests.XmlTest.removeTime" executed="True" result="Success" success="True" time="0.005" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.XmlTest.TestSchemaValidatorFrenchCulture" executed="True" result="Success" success="True" time="0.404" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.XmlTest.TestSchemaValidatorInvariantCulture" executed="True" result="Success" success="True" time="0.052" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.XmlTest.TestSchemaValidatorUnitedStatesCulture" executed="True" result="Success" success="True" time="0.048" asserts="1" />

+                          <test-case name="NUnit.Core.Tests.XmlTest.TestStream" executed="True" result="Success" success="True" time="0.116" asserts="1" />

+                        </results>

+                      </test-suite>

+                    </results>

+                  </test-suite>

+                </results>

+              </test-suite>

+            </results>

+          </test-suite>

+        </results>

+      </test-suite>

+      <test-suite type="Assembly" name="D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.util.tests.dll" executed="True" result="Success" success="True" time="41.066" asserts="0">

+        <results>

+          <test-suite type="Namespace" name="NUnit" executed="True" result="Success" success="True" time="41.066" asserts="0">

+            <results>

+              <test-suite type="Namespace" name="Util" executed="True" result="Success" success="True" time="41.066" asserts="0">

+                <results>

+                  <test-suite type="SetUpFixture" name="Tests" executed="True" result="Success" success="True" time="41.065" asserts="0">

+                    <results>

+                      <test-suite type="TestFixture" name="AssemblyListTests" executed="True" result="Success" success="True" time="0.046" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.AssemblyListTests.AddFiresChangedEvent" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.AssemblyListTests.CanAddAssemblies" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.AssemblyListTests.CanRemoveAssemblies" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.AssemblyListTests.EmptyList" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.AssemblyListTests.MustAddAbsolutePath" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Util.Tests.AssemblyListTests.RemoveAtFiresChangedEvent" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.AssemblyListTests.RemoveFiresChangedEvent" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.AssemblyListTests.SettingFullPathFiresChangedEvent" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CategoryManagerTest" executed="True" result="Success" success="True" time="0.097" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.CategoryManagerTest.CanAddAllAvailableCategoriesInTestTree" executed="True" result="Success" success="True" time="0.043" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.CategoryManagerTest.CanAddStrings" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.CategoryManagerTest.CanAddStringsWithoutDuplicating" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.CategoryManagerTest.CanAddTestCategories" executed="True" result="Success" success="True" time="0.040" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.CategoryManagerTest.CanClearEntries" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CategoryParseTests" executed="True" result="Success" success="True" time="0.039" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.CategoryParseTests.CanParseCompoundCategory" executed="True" result="Success" success="True" time="0.005" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.CategoryParseTests.CanParseExcludedCategories" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.CategoryParseTests.CanParseMultipleAlternatives" executed="True" result="Success" success="True" time="0.002" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.CategoryParseTests.CanParseMultipleCategoriesWithAnd" executed="True" result="Success" success="True" time="0.002" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.CategoryParseTests.CanParseSimpleCategory" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.CategoryParseTests.EmptyStringReturnsEmptyFilter" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.CategoryParseTests.OrAndMinusCombined" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.CategoryParseTests.PlusAndMinusCombined" executed="True" result="Success" success="True" time="0.001" asserts="6" />

+                          <test-case name="NUnit.Util.Tests.CategoryParseTests.PrecedenceTest" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.CategoryParseTests.PrecedenceTestWithParentheses" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="DomainManagerTests" executed="True" result="Success" success="True" time="0.029" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.DomainManagerTests.GetCommonAppBase_OneElement" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.DomainManagerTests.GetCommonAppBase_ThreeElements_DiferentDirectories" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.DomainManagerTests.GetCommonAppBase_TwoElements_DifferentDirectories" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.DomainManagerTests.GetCommonAppBase_TwoElements_SameDirectory" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.DomainManagerTests.GetPrivateBinPath" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.DomainManagerTests.UnloadUnloadedDomain" executed="True" result="Success" success="True" time="0.006" asserts="0" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="EventDispatcherTests" executed="True" result="Success" success="True" time="0.076" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.ProjectLoaded" executed="True" result="Success" success="True" time="0.009" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.ProjectLoadFailed" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.ProjectLoading" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.ProjectUnloaded" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.ProjectUnloadFailed" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.ProjectUnloading" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.RunFailed" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.RunFinished" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.RunStarting" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.SuiteFinished" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.SuiteStarting" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.TestFinished" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.TestLoaded" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.TestLoadFailed" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.TestLoading" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.TestReloaded" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.TestReloadFailed" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.TestReloading" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.TestStarting" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.TestUnloaded" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.TestUnloadFailed" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.EventDispatcherTests.TestUnloading" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="FileWatcherTest" executed="True" result="Success" success="True" time="0.901" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.FileWatcherTest.ChangingAttributesDoesNotTriggerWatcher" executed="True" result="Success" success="True" time="0.217" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.FileWatcherTest.ChangingFileTriggersWatcher" executed="True" result="Success" success="True" time="0.204" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.FileWatcherTest.CopyingFileDoesNotTriggerWatcher" executed="True" result="Success" success="True" time="0.205" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.FileWatcherTest.MultipleCloselySpacedChangesTriggerWatcherOnlyOnce" executed="True" result="Success" success="True" time="0.263" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="MemorySettingsStorageTests" executed="True" result="Success" success="True" time="0.025" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.MemorySettingsStorageTests.MakeStorage" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.MemorySettingsStorageTests.MakeSubStorages" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.MemorySettingsStorageTests.RemoveSettings" executed="True" result="Success" success="True" time="0.005" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.MemorySettingsStorageTests.SaveAndLoadSettings" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.MemorySettingsStorageTests.SubstorageSettings" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.MemorySettingsStorageTests.TypeSafeSettings" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NUnitProjectLoad" executed="True" result="Success" success="True" time="0.045" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.NUnitProjectLoad.FromAssembly" executed="True" result="Success" success="True" time="0.005" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectLoad.LoadEmptyConfigs" executed="True" result="Success" success="True" time="0.010" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectLoad.LoadEmptyProject" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectLoad.LoadNormalProject" executed="True" result="Success" success="True" time="0.004" asserts="7" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectLoad.LoadProjectWithManualBinPath" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectLoad.SaveClearsAssemblyWrapper" executed="True" result="Success" success="True" time="0.006" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NUnitProjectSave" executed="True" result="Success" success="True" time="0.013" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.NUnitProjectSave.SaveEmptyConfigs" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectSave.SaveEmptyProject" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectSave.SaveNormalProject" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NUnitProjectTests" executed="True" result="Success" success="True" time="0.113" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.AddConfigMakesProjectDirty" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.CanAddAssemblies" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.CanAddConfigs" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.CanSetActiveConfig" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.CanSetAppBase" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.ConfigurationFileFromAssemblies" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.ConfigurationFileFromAssembly" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.DefaultActiveConfig" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.DefaultApplicationBase" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.DefaultConfigurationFile" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.DefaultProjectName" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.IsProjectFile" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.LoadMakesProjectNotDirty" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.NewProjectDefaultPath" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.NewProjectIsEmpty" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.NewProjectIsNotDirty" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.NewProjectNotLoadable" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.RemoveActiveConfig" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.RemoveConfigMakesProjectDirty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.RenameActiveConfig" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.RenameConfigMakesProjectDirty" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.SaveAndLoadConfigsWithAssemblies" executed="True" result="Success" success="True" time="0.003" asserts="8" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.SaveAndLoadEmptyConfigs" executed="True" result="Success" success="True" time="0.002" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.SaveAndLoadEmptyProject" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.SaveMakesProjectNotDirty" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.SaveSetsProjectPath" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.NUnitProjectTests.SettingActiveConfigMakesProjectDirty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="NUnitRegistryTests" executed="True" result="Success" success="True" time="0.014" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.NUnitRegistryTests.CurrentUser" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.NUnitRegistryTests.CurrentUserTestMode" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.NUnitRegistryTests.TestClearRoutines" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PathUtilTests" executed="True" result="Success" success="True" time="0.001" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.PathUtilTests.CheckDefaults" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PathUtilTests_Unix" executed="True" result="Success" success="True" time="0.019" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.PathUtilTests_Unix.Canonicalize" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.PathUtilTests_Unix.IsAssemblyFileType" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.PathUtilTests_Unix.PathFromUri" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.PathUtilTests_Unix.RelativePath" executed="True" result="Success" success="True" time="0.001" asserts="10" />

+                          <test-case name="NUnit.Util.Tests.PathUtilTests_Unix.SamePath" executed="True" result="Success" success="True" time="0.002" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.PathUtilTests_Unix.SamePathOrUnder" executed="True" result="Success" success="True" time="0.001" asserts="7" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="PathUtilTests_Windows" executed="True" result="Success" success="True" time="0.015" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.PathUtilTests_Windows.Canonicalize" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.PathUtilTests_Windows.IsAssemblyFileType" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.PathUtilTests_Windows.PathFromUri" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.PathUtilTests_Windows.RelativePath" executed="True" result="Success" success="True" time="0.001" asserts="12" />

+                          <test-case name="NUnit.Util.Tests.PathUtilTests_Windows.SamePath" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.PathUtilTests_Windows.SamePathOrUnder" executed="True" result="Success" success="True" time="0.000" asserts="9" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ProcessRunnerTests" executed="True" result="Success" success="True" time="12.364" asserts="1">

+                        <properties>

+                          <property name="Timeout" value="30000" />

+                        </properties>

+                        <results>

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.CheckRunnerID" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.CountTestCases" executed="True" result="Success" success="True" time="1.126" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.CountTestCasesAcrossMultipleAssemblies" executed="True" result="Success" success="True" time="0.746" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.LoadAndReloadAssembly" executed="True" result="Success" success="True" time="1.374" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.LoadAssemblyWithFixture" executed="True" result="Success" success="True" time="0.655" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.LoadAssemblyWithoutNamespaces" executed="True" result="Success" success="True" time="0.696" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.LoadAssemblyWithSuite" executed="True" result="Success" success="True" time="0.593" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.LoadMultipleAssemblies" executed="True" result="Success" success="True" time="0.681" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.LoadMultipleAssembliesWithFixture" executed="True" result="Success" success="True" time="0.674" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.LoadMultipleAssembliesWithSuite" executed="True" result="Success" success="True" time="0.630" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.RunAssembly" executed="True" result="Success" success="True" time="0.879" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.RunAssemblyUsingBeginAndEndRun" executed="True" result="Success" success="True" time="0.900" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.RunMultipleAssemblies" executed="True" result="Success" success="True" time="0.938" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.BasicRunnerTests.RunMultipleAssembliesUsingBeginAndEndRun" executed="True" result="Success" success="True" time="0.914" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.ProcessRunnerTests.TestProcessIsReused" executed="True" result="Success" success="True" time="1.449" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ProjectConfigTests" executed="True" result="Success" success="True" time="0.127" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.AbsoluteBasePath" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.AbsoluteConfigurationFile" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.AddingConfigMarksProjectDirty" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.AddingInitialConfigRequiresReload" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.AddingSubsequentConfigDoesNotRequireReload" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.AddToActiveConfigMarksProjectDirty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.AddToActiveConfigRequiresReload" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.AddToInactiveConfigDoesNotRequireReload" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.AddToInactiveConfigMarksProjectDirty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.CanAddAssemblies" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.DefaultConfigurationFile" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.EmptyConfig" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.ManualPrivateBinPath" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.NoBasePathSet" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.NoPrivateBinPath" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.RelativeBasePath" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.RelativeConfigurationFile" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.RemoveActiveConfigMarksProjectDirty" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.RemoveActiveConfigRequiresReload" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.RemoveInactiveConfigDoesNotRequireReload" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.RemoveInactiveConfigMarksProjectDirty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.RenameActiveConfigMarksProjectDirty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.RenameActiveConfigRequiresReload" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.RenameInactiveConfigDoesNotRequireReload" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.RenameInctiveConfigMarksProjectDirty" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingActiveConfigApplicationBaseMarksProjectDirty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingActiveConfigApplicationBaseRequiresReload" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingActiveConfigBinPathTypeMarksProjectDirty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingActiveConfigBinPathTypeRequiresReload" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingActiveConfigConfigurationFileMarksProjectDirty" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingActiveConfigConfigurationFileRequiresReload" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingActiveConfigPrivateBinPathMarksProjectDirty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingActiveConfigPrivateBinPathRequiresReload" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingInactiveConfigApplicationBaseDoesNotRequireReload" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingInactiveConfigApplicationBaseMarksProjectDirty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingInactiveConfigBinPathTypeDoesNotRequireReload" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingInactiveConfigBinPathTypeMarksProjectDirty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingInactiveConfigConfigurationFileDoesNotRequireReload" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingInactiveConfigConfigurationFileMarksProjectDirty" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingInactiveConfigPrivateBinPathDoesNotRequireReload" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.SettingInactiveConfigPrivateBinPathMarksProjectDirty" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.ProjectConfigTests.ToArray" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RecentFileEntryTests" executed="True" result="Success" success="True" time="0.023" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.RecentFileEntryTests.CanCreateFromFileNameAndVersion" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.RecentFileEntryTests.CanCreateFromSimpleFileName" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.RecentFileEntryTests.CanParseFileNamePlusVersionString" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.RecentFileEntryTests.CanParseFileNameWithCommaPlusVersionString" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.RecentFileEntryTests.CanParseSimpleFileName" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.RecentFileEntryTests.CanParseSimpleFileNameWithComma" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.RecentFileEntryTests.EntryCanDisplayItself" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RecentFilesTests" executed="True" result="Success" success="True" time="0.075" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.AddMaxItems" executed="True" result="Success" success="True" time="0.005" asserts="7" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.AddSingleItem" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.AddTooManyItems" executed="True" result="Success" success="True" time="0.001" asserts="7" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.CountAtMax" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.CountAtMin" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.CountDefault" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.CountOverMax" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.CountUnderMin" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.EmptyList" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.IncreaseSize" executed="True" result="Success" success="True" time="0.000" asserts="12" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.IncreaseSizeAfterAdd" executed="True" result="Success" success="True" time="0.003" asserts="8" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.ReduceSize" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.ReduceSizeAfterAdd" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.RemoveFirstProject" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.RemoveLastProject" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.RemoveMultipleProjects" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.RemoveOneProject" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.ReorderLastProject" executed="True" result="Success" success="True" time="0.001" asserts="6" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.ReorderMultipleProjects" executed="True" result="Success" success="True" time="0.001" asserts="6" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.ReorderSameProject" executed="True" result="Success" success="True" time="0.001" asserts="6" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.ReorderSingleProject" executed="True" result="Success" success="True" time="0.001" asserts="6" />

+                          <test-case name="NUnit.Util.Tests.RecentFilesTests.ReorderWithListNotFull" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RegistrySettingsStorageTests" executed="True" result="Success" success="True" time="0.022" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.RegistrySettingsStorageTests.MakeSubStorages" executed="True" result="Success" success="True" time="0.002" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.RegistrySettingsStorageTests.RemoveSettings" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.RegistrySettingsStorageTests.SaveAndLoadSettings" executed="True" result="Success" success="True" time="0.001" asserts="6" />

+                          <test-case name="NUnit.Util.Tests.RegistrySettingsStorageTests.StorageHasCorrectKey" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.RegistrySettingsStorageTests.SubstorageSettings" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.RegistrySettingsStorageTests.TypeSafeSettings" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RemoteTestAgentTests" executed="True" result="Success" success="True" time="0.014" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.RemoteTestAgentTests.AgentReturnsProcessId" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.RemoteTestAgentTests.CanLocateAgentExecutable" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.RemoteTestAgentTests.CanLocateAgentExeForAllInstalledVersions" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.RemoteTestAgentTests.CanLocateBinDirForAllInstalledVersions" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RemoteTestResultTest" executed="True" result="Success" success="True" time="0.865" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.RemoteTestResultTest.ResultStillValidAfterDomainUnload" executed="True" result="Success" success="True" time="0.864" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RuntimeFrameworkSelectorTests" executed="True" result="Success" success="True" time="0.061" asserts="0">

+                        <results>

+                          <test-suite type="Theory" name="RequestForSpecificFrameworkIsHonored" executed="True" result="Success" success="True" time="0.031" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificFrameworkIsHonored(net-1.0)" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificFrameworkIsHonored(net-1.1)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificFrameworkIsHonored(net-2.0)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificFrameworkIsHonored(net-4.0)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificFrameworkIsHonored(mono-1.0)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificFrameworkIsHonored(mono-2.0)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificFrameworkIsHonored(v1.1)" executed="True" result="Inconclusive" success="False" time="0.004" asserts="0">

+                                <reason>

+                                  <message><![CDATA[  Expected: not Any

+  But was:  Any

+]]></message>

+                                </reason>

+                              </test-case>

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificFrameworkIsHonored(v2.0)" executed="True" result="Inconclusive" success="False" time="0.000" asserts="0">

+                                <reason>

+                                  <message><![CDATA[  Expected: not Any

+  But was:  Any

+]]></message>

+                                </reason>

+                              </test-case>

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificFrameworkIsHonored(v4.0)" executed="True" result="Inconclusive" success="False" time="0.000" asserts="0">

+                                <reason>

+                                  <message><![CDATA[  Expected: not Any

+  But was:  Any

+]]></message>

+                                </reason>

+                              </test-case>

+                            </results>

+                          </test-suite>

+                          <test-suite type="Theory" name="RequestForSpecificVersionIsHonored" executed="True" result="Success" success="True" time="0.026" asserts="0">

+                            <results>

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificVersionIsHonored(net-1.0)" executed="True" result="Inconclusive" success="False" time="0.001" asserts="0">

+                                <reason>

+                                  <message><![CDATA[  Expected: Any

+  But was:  Net

+]]></message>

+                                </reason>

+                              </test-case>

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificVersionIsHonored(net-1.1)" executed="True" result="Inconclusive" success="False" time="0.001" asserts="0">

+                                <reason>

+                                  <message><![CDATA[  Expected: Any

+  But was:  Net

+]]></message>

+                                </reason>

+                              </test-case>

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificVersionIsHonored(net-2.0)" executed="True" result="Inconclusive" success="False" time="0.001" asserts="0">

+                                <reason>

+                                  <message><![CDATA[  Expected: Any

+  But was:  Net

+]]></message>

+                                </reason>

+                              </test-case>

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificVersionIsHonored(net-4.0)" executed="True" result="Inconclusive" success="False" time="0.000" asserts="0">

+                                <reason>

+                                  <message><![CDATA[  Expected: Any

+  But was:  Net

+]]></message>

+                                </reason>

+                              </test-case>

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificVersionIsHonored(mono-1.0)" executed="True" result="Inconclusive" success="False" time="0.000" asserts="0">

+                                <reason>

+                                  <message><![CDATA[  Expected: Any

+  But was:  Mono

+]]></message>

+                                </reason>

+                              </test-case>

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificVersionIsHonored(mono-2.0)" executed="True" result="Inconclusive" success="False" time="0.001" asserts="0">

+                                <reason>

+                                  <message><![CDATA[  Expected: Any

+  But was:  Mono

+]]></message>

+                                </reason>

+                              </test-case>

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificVersionIsHonored(v1.1)" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificVersionIsHonored(v2.0)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.Util.Tests.RuntimeFrameworkSelectorTests.RequestForSpecificVersionIsHonored(v4.0)" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ServerUtilityTests" executed="True" result="Success" success="True" time="0.008" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.ServerUtilityTests.CanGetTcpChannelOnSpecifiedPort" executed="True" result="Success" success="True" time="0.003" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.ServerUtilityTests.CanGetTcpChannelOnUnpecifiedPort" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SettingsGroupTests" executed="True" result="Success" success="True" time="0.014" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.SettingsGroupTests.BadSetting" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.SettingsGroupTests.DefaultSettings" executed="True" result="Success" success="True" time="0.001" asserts="7" />

+                          <test-case name="NUnit.Util.Tests.SettingsGroupTests.SubGroupSettings" executed="True" result="Success" success="True" time="0.001" asserts="7" />

+                          <test-case name="NUnit.Util.Tests.SettingsGroupTests.TopLevelSettings" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.SettingsGroupTests.TypeSafeSettings" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="SummaryResultFixture" executed="True" result="Success" success="True" time="0.011" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.SummaryResultFixture.SummaryMatchesResult" executed="True" result="Success" success="True" time="0.010" asserts="9" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestAgencyTests" executed="True" result="Success" success="True" time="0.325" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.TestAgencyTests.CanConnectToAgency" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.TestAgencyTests.CanLaunchAndConnectToAgent" executed="True" result="Success" success="True" time="0.318" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestDomainFixture" executed="True" result="Success" success="True" time="0.889" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.TestDomainFixture.AppDomainIsSetUpCorrectly" executed="True" result="Success" success="True" time="0.002" asserts="8" />

+                          <test-case name="NUnit.Util.Tests.TestDomainFixture.AssemblyIsLoadedCorrectly" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.TestDomainFixture.CanRunMockAssemblyTests" executed="True" result="Success" success="True" time="0.209" asserts="5" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestDomainRunnerTests" executed="True" result="Success" success="True" time="9.763" asserts="1">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.CheckRunnerID" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.CountTestCases" executed="True" result="Success" success="True" time="0.607" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.CountTestCasesAcrossMultipleAssemblies" executed="True" result="Success" success="True" time="0.671" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.LoadAndReloadAssembly" executed="True" result="Success" success="True" time="1.246" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.LoadAssemblyWithFixture" executed="True" result="Success" success="True" time="0.574" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.LoadAssemblyWithoutNamespaces" executed="True" result="Success" success="True" time="0.639" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.LoadAssemblyWithSuite" executed="True" result="Success" success="True" time="0.532" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.LoadMultipleAssemblies" executed="True" result="Success" success="True" time="0.684" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.LoadMultipleAssembliesWithFixture" executed="True" result="Success" success="True" time="0.626" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.LoadMultipleAssembliesWithSuite" executed="True" result="Success" success="True" time="0.618" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.RunAssembly" executed="True" result="Success" success="True" time="0.845" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.RunAssemblyUsingBeginAndEndRun" executed="True" result="Success" success="True" time="0.876" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.RunMultipleAssemblies" executed="True" result="Success" success="True" time="0.879" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainRunnerTests.BasicRunnerTests.RunMultipleAssembliesUsingBeginAndEndRun" executed="True" result="Success" success="True" time="0.880" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestDomainTests" executed="True" result="Success" success="True" time="5.014" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.TestDomainTests.BasePathOverrideIsHonored" executed="True" result="Success" success="True" time="1.083" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainTests.BinPathOverrideIsHonored" executed="True" result="Success" success="True" time="0.635" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainTests.ConfigFileOverrideIsHonored" executed="True" result="Success" success="True" time="0.662" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainTests.FileNotFound" executed="True" result="Success" success="True" time="0.738" asserts="0" />

+                          <test-case name="NUnit.Util.Tests.TestDomainTests.InvalidTestFixture" executed="True" result="Success" success="True" time="0.538" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainTests.SpecificTestFixture" executed="True" result="Success" success="True" time="0.798" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.TestDomainTests.TurnOffShadowCopy" executed="True" result="Success" success="True" time="0.539" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestDomainTests_Multiple" executed="True" result="Success" success="True" time="0.938" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.TestDomainTests_Multiple.AssemblyNodes" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.TestDomainTests_Multiple.BuildSuite" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainTests_Multiple.RootNode" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainTests_Multiple.RunMultipleAssemblies" executed="True" result="Success" success="True" time="0.205" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestDomainTests_Multiple.TestCaseCount" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestDomainTests_MultipleFixture" executed="True" result="Success" success="True" time="0.635" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.TestDomainTests_MultipleFixture.LoadFixture" executed="True" result="Success" success="True" time="0.634" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestLoaderAssemblyTests" executed="True" result="Success" success="True" time="3.332" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.TestLoaderAssemblyTests.AssemblyWithNoTests" executed="True" result="Success" success="True" time="0.734" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.TestLoaderAssemblyTests.FileNotFound" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.TestLoaderAssemblyTests.LoadProject" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.TestLoaderAssemblyTests.LoadTest" executed="True" result="Success" success="True" time="0.668" asserts="6" />

+                          <test-case name="NUnit.Util.Tests.TestLoaderAssemblyTests.RunTest" executed="True" result="Success" success="True" time="1.272" asserts="9" />

+                          <test-case name="NUnit.Util.Tests.TestLoaderAssemblyTests.UnloadProject" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.TestLoaderAssemblyTests.UnloadTest" executed="True" result="Success" success="True" time="0.633" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestLoaderWatcherTests" executed="True" result="Success" success="True" time="4.510" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.TestLoaderWatcherTests.LoadShouldStartWatcher" executed="True" result="Success" success="True" time="0.655" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.TestLoaderWatcherTests.LoadShouldStartWatcherDependingOnSettings" executed="True" result="Success" success="True" time="0.619" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.TestLoaderWatcherTests.ReloadShouldStartWatcher" executed="True" result="Success" success="True" time="1.300" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.TestLoaderWatcherTests.ReloadShouldStartWatcherDependingOnSettings" executed="True" result="Success" success="True" time="1.265" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.TestLoaderWatcherTests.UnloadShouldStopWatcherAndFreeResources" executed="True" result="Success" success="True" time="0.657" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestRunnerFactoryTests" executed="True" result="Success" success="True" time="0.009" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.TestRunnerFactoryTests.DifferentRuntimeUsesProcessRunner" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestRunnerFactoryTests.DifferentVersionUsesProcessRunner" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.TestRunnerFactoryTests.SameFrameworkUsesTestDomain" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="VisualStudioConverterTests" executed="True" result="Success" success="True" time="0.164" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.VisualStudioConverterTests.FromCppProject" executed="True" result="Success" success="True" time="0.085" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.VisualStudioConverterTests.FromCSharpProject" executed="True" result="Success" success="True" time="0.003" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.VisualStudioConverterTests.FromJsharpProject" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.VisualStudioConverterTests.FromMakefileProject" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.VisualStudioConverterTests.FromProjectWithHebrewFileIncluded" executed="True" result="Success" success="True" time="0.004" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.VisualStudioConverterTests.FromVBProject" executed="True" result="Success" success="True" time="0.002" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.VisualStudioConverterTests.FromVSSolution2003" executed="True" result="Success" success="True" time="0.012" asserts="7" />

+                          <test-case name="NUnit.Util.Tests.VisualStudioConverterTests.FromVSSolution2005" executed="True" result="Success" success="True" time="0.016" asserts="7" />

+                          <test-case name="NUnit.Util.Tests.VisualStudioConverterTests.FromWebApplication" executed="True" result="Success" success="True" time="0.005" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.VisualStudioConverterTests.WithUnmanagedCpp" executed="True" result="Success" success="True" time="0.006" asserts="5" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="VSProjectTests" executed="True" result="Success" success="True" time="0.086" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.FileNotFoundError" executed="True" result="Success" success="True" time="0.002" asserts="0" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.GenerateCorrectExtensionsFromVCProjectVS2005" executed="True" result="Success" success="True" time="0.004" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.InvalidProjectFormat" executed="True" result="Success" success="True" time="0.003" asserts="0" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.InvalidXmlFormat" executed="True" result="Success" success="True" time="0.004" asserts="0" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.LoadCppProject" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.LoadCppProjectVS2005" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.LoadCppProjectWithMacros" executed="True" result="Success" success="True" time="0.003" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.LoadCsharpProject" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.LoadCsharpProjectVS2005" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.LoadInvalidFileType" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.LoadJsharpProject" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.LoadJsharpProjectVS2005" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.LoadProjectWithHebrewFileIncluded" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.LoadVbProject" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.LoadVbProjectVS2005" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.MissingAttributes" executed="True" result="Success" success="True" time="0.003" asserts="0" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.NoConfigurations" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.NotWebProject" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.ProjectExtensions" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Util.Tests.VSProjectTests.SolutionExtension" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="XmlResultWriterTest" executed="True" result="Success" success="True" time="0.108" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Util.Tests.XmlResultWriterTest.FailingTestHasCorrectInformation" executed="True" result="Success" success="True" time="0.005" asserts="7" />

+                          <test-case name="NUnit.Util.Tests.XmlResultWriterTest.HasMultipleCategories" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.XmlResultWriterTest.HasMultipleProperties" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.Util.Tests.XmlResultWriterTest.HasSingleCategory" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.XmlResultWriterTest.HasSingleProperty" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.XmlResultWriterTest.IgnoredTestHasCorrectInformation" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.XmlResultWriterTest.InconclusiveTestHasCorrectInformation" executed="True" result="Success" success="True" time="0.001" asserts="6" />

+                          <test-case name="NUnit.Util.Tests.XmlResultWriterTest.PassingTestHasCorrectInformation" executed="True" result="Success" success="True" time="0.000" asserts="6" />

+                          <test-case name="NUnit.Util.Tests.XmlResultWriterTest.SuiteResultHasCategories" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.Util.Tests.XmlResultWriterTest.TestHasCultureInfo" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Util.Tests.XmlResultWriterTest.TestHasEnvironmentInfo" executed="True" result="Success" success="True" time="0.000" asserts="9" />

+                        </results>

+                      </test-suite>

+                    </results>

+                  </test-suite>

+                </results>

+              </test-suite>

+            </results>

+          </test-suite>

+        </results>

+      </test-suite>

+      <test-suite type="Assembly" name="D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.mocks.tests.dll" executed="True" result="Success" success="True" time="0.166" asserts="0">

+        <results>

+          <test-suite type="Namespace" name="NUnit" executed="True" result="Success" success="True" time="0.165" asserts="0">

+            <results>

+              <test-suite type="Namespace" name="Mocks" executed="True" result="Success" success="True" time="0.165" asserts="0">

+                <results>

+                  <test-suite type="Namespace" name="Tests" executed="True" result="Success" success="True" time="0.165" asserts="0">

+                    <results>

+                      <test-suite type="TestFixture" name="DynamicMockTests" executed="True" result="Success" success="True" time="0.044" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Mocks.Tests.DynamicMockTests.CallMethod" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Mocks.Tests.DynamicMockTests.CallMethodWithArgs" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Mocks.Tests.DynamicMockTests.CreateMockForMBRClass" executed="True" result="Success" success="True" time="0.002" asserts="13" />

+                          <test-case name="NUnit.Mocks.Tests.DynamicMockTests.CreateMockForNonMBRClassFails" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Mocks.Tests.DynamicMockTests.DefaultReturnValues" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Mocks.Tests.DynamicMockTests.ExpectedMethod" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Mocks.Tests.DynamicMockTests.ExpectedMethodNotCalled" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Mocks.Tests.DynamicMockTests.MethodWithReturnValue" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Mocks.Tests.DynamicMockTests.MockHasDefaultName" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Mocks.Tests.DynamicMockTests.MockHasNonDefaultName" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Mocks.Tests.DynamicMockTests.OverrideMethodOnDynamicMock" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Mocks.Tests.DynamicMockTests.RefParameter" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Mocks.Tests.DynamicMockTests.WrongReturnType" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="MockTests" executed="True" result="Success" success="True" time="0.115" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Mocks.Tests.MockTests.CallMultipleMethodsInDifferentOrder" executed="True" result="Success" success="True" time="0.000" asserts="6" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.CallMultipleMethodsSomeWithoutExpectations" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.ChangeExpectAndReturnToFixedReturn" executed="True" result="Success" success="True" time="0.001" asserts="8" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.ChangeFixedReturnToExpectAndReturn" executed="True" result="Success" success="True" time="0.001" asserts="9" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.ConstraintArgumentSucceeds" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.ConstraintArgumentThatFails" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.ExpectAndReturn" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.ExpectAndReturnNull" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.ExpectAndReturnWithArgument" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.ExpectAndReturnWithWrongArgument" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.ExpectAndThrowException" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.ExpectNoCallFails" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.ExpectNoCallSucceeds" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.FailWithParametersSpecified" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.IgnoreArguments" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.MethodNotCalled" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.MockHasName" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.MultipleCallsToSameMethod" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.MultipleExpectAndReturn" executed="True" result="Success" success="True" time="0.001" asserts="10" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.MultipleExpectations" executed="True" result="Success" success="True" time="0.001" asserts="12" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.NotEnoughCalls" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.OneExpectation" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.RequireArguments" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.SetReturnValue" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.SetReturnValueMultipleTimesOnMultipleMethods" executed="True" result="Success" success="True" time="0.000" asserts="7" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.SetReturnValueRepeatedCalls" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.SetReturnValueWithoutCalling" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.StrictDefaultsToFalse" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.StrictMode" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.StrictMode_ExceptionsCaught" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.TooManyCalls" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.UnexpectedCallsIgnored" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.Mocks.Tests.MockTests.VerifyNewMock" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                        </results>

+                      </test-suite>

+                    </results>

+                  </test-suite>

+                </results>

+              </test-suite>

+            </results>

+          </test-suite>

+        </results>

+      </test-suite>

+      <test-suite type="Assembly" name="D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit-console.tests.dll" executed="True" result="Success" success="True" time="11.984" asserts="0">

+        <results>

+          <test-suite type="Namespace" name="NUnit" executed="True" result="Success" success="True" time="11.984" asserts="0">

+            <results>

+              <test-suite type="Namespace" name="ConsoleRunner" executed="True" result="Success" success="True" time="11.983" asserts="0">

+                <results>

+                  <test-suite type="Namespace" name="Tests" executed="True" result="Success" success="True" time="11.983" asserts="0">

+                    <results>

+                      <test-suite type="TestFixture" name="CommandLineTests" executed="True" result="Success" success="True" time="0.092" asserts="0">

+                        <results>

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.AllowForwardSlashDefaultsCorrectly" executed="True" result="Success" success="True" time="0.018" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.AssemblyAloneIsValid" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.AssemblyName" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.FileNameWithoutXmlParameterLooksLikeParameter" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.FixtureNamePlusAssemblyIsValid" executed="True" result="Success" success="True" time="0.004" asserts="3" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.HelpTextUsesCorrectDelimiterForPlatform" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.InvalidCommandLineParms" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.InvalidOption" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.NoFixtureNameProvided" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.NoParametersCount" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.OptionsAreRecognized" executed="True" result="Success" success="True" time="0.017" asserts="100" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.XmlParameter" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.XmlParameterWithFullPath" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.XmlParameterWithFullPathUsingEqualSign" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests.XmlParameterWithoutFileNameIsInvalid" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="CommandLineTests_MultipleAssemblies" executed="True" result="Success" success="True" time="0.014" asserts="0">

+                        <results>

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests_MultipleAssemblies.CheckParameters" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests_MultipleAssemblies.FixtureParameters" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests_MultipleAssemblies.FixtureValidate" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests_MultipleAssemblies.MultipleAssemblyValidate" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.CommandLineTests_MultipleAssemblies.ParameterCount" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ConsoleRunnerTest" executed="True" result="Success" success="True" time="11.821" asserts="0">

+                        <results>

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.AssemblyNotFound" executed="True" result="Success" success="True" time="0.025" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.Bug1073539Test" executed="True" result="Success" success="True" time="0.845" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.Bug1311644Test" executed="True" result="Success" success="True" time="0.805" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.CanRunWithMultipleTestDomains" executed="True" result="Success" success="True" time="1.766" asserts="2" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.CanRunWithMultipleTestDomains_NoThread" executed="True" result="Success" success="True" time="1.749" asserts="2" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.CanRunWithoutTestDomain" executed="True" result="Success" success="True" time="0.062" asserts="2" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.CanRunWithoutTestDomain_NoThread" executed="True" result="Success" success="True" time="0.061" asserts="2" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.CanRunWithSingleTestDomain" executed="True" result="Success" success="True" time="1.025" asserts="2" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.CanRunWithSingleTestDomain_NoThread" executed="True" result="Success" success="True" time="0.975" asserts="2" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.FailureFixture" executed="True" result="Success" success="True" time="0.777" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.InvalidFixture" executed="True" result="Success" success="True" time="0.516" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.MultiFailureFixture" executed="True" result="Success" success="True" time="0.820" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.OneOfTwoAssembliesNotFound" executed="True" result="Success" success="True" time="0.007" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.SuccessFixture" executed="True" result="Success" success="True" time="0.773" asserts="1" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.XmlResult" executed="True" result="Success" success="True" time="0.782" asserts="2" />

+                          <test-case name="NUnit.ConsoleRunner.Tests.ConsoleRunnerTest.XmlToConsole" executed="True" result="Success" success="True" time="0.784" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestNameParserTests" executed="True" result="Success" success="True" time="0.041" asserts="0">

+                        <results>

+                          <test-suite type="ParameterizedTest" name="SingleName" executed="True" result="Success" success="True" time="0.026" asserts="0">

+                            <results>

+                              <test-case name="NUnit.ConsoleRunner.Tests.TestNameParserTests.SingleName(&quot;Test.Namespace.Fixture.Method&lt;int,int&gt;()&quot;)" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                              <test-case name="NUnit.ConsoleRunner.Tests.TestNameParserTests.SingleName(&quot;Test.Namespace.Fixture.Method,&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.ConsoleRunner.Tests.TestNameParserTests.SingleName(&quot;  Test.Namespace.Fixture.Method  &quot;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.ConsoleRunner.Tests.TestNameParserTests.SingleName(&quot;  Test.Namespace.Fixture.Method  ,&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.ConsoleRunner.Tests.TestNameParserTests.SingleName(&quot;Test.Namespace.Fixture.Method()&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.ConsoleRunner.Tests.TestNameParserTests.SingleName(&quot;Test.Namespace.Fixture.Method(\&quot;string,argument\&quot;)&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.ConsoleRunner.Tests.TestNameParserTests.SingleName(&quot;Test.Namespace.Fixture.Method(1,2,3)&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.ConsoleRunner.Tests.TestNameParserTests.SingleName(&quot;Test.Namespace.Fixture.Method&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.ConsoleRunner.Tests.TestNameParserTests.SingleName(&quot;Test.Namespace.Fixture.Method(\&quot;)\&quot;)&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="ParameterizedTest" name="TwoNames" executed="True" result="Success" success="True" time="0.010" asserts="0">

+                            <results>

+                              <test-case name="NUnit.ConsoleRunner.Tests.TestNameParserTests.TwoNames(&quot;Test.Namespace.Fixture.Method1&quot;,&quot;Test.Namespace.Fixture.Method2&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                              <test-case name="NUnit.ConsoleRunner.Tests.TestNameParserTests.TwoNames(&quot;Test.Namespace.Fixture.Method1(\&quot;(\&quot;)&quot;,&quot;Test.Namespace.Fixture.Method2(\&quot;&lt;\&quot;)&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                              <test-case name="NUnit.ConsoleRunner.Tests.TestNameParserTests.TwoNames(&quot;Test.Namespace.Fixture.Method1&quot;,&quot;Test.Namespace.Fixture.Method2,&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                              <test-case name="NUnit.ConsoleRunner.Tests.TestNameParserTests.TwoNames(&quot;Test.Namespace.Fixture.Method1(1,2)&quot;,&quot;Test.Namespace.Fixture.Method2(3,4)&quot;)" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                    </results>

+                  </test-suite>

+                </results>

+              </test-suite>

+            </results>

+          </test-suite>

+        </results>

+      </test-suite>

+      <test-suite type="Assembly" name="D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.uiexception.tests.dll" executed="True" result="Success" success="True" time="1.892" asserts="0">

+        <results>

+          <test-suite type="Namespace" name="NUnit" executed="True" result="Success" success="True" time="1.892" asserts="0">

+            <results>

+              <test-suite type="Namespace" name="UiException" executed="True" result="Success" success="True" time="1.891" asserts="0">

+                <results>

+                  <test-suite type="Namespace" name="Tests" executed="True" result="Success" success="True" time="1.891" asserts="0">

+                    <results>

+                      <test-suite type="Namespace" name="CodeFormatters" executed="True" result="Success" success="True" time="0.488" asserts="0">

+                        <results>

+                          <test-suite type="TestFixture" name="TestCodeFormatterCollection" executed="True" result="Success" success="True" time="0.055" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.Clear" executed="True" result="Success" success="True" time="0.004" asserts="1" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.ContainsFormatterFromExtension" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.Indexer_Can_Throw_UnknownExtensionException" executed="True" result="Success" success="True" time="0.002" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.ItemIndexer_Can_Throw_NullExtensionException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.Register_Can_Throw_NullExtensionException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.Register_Can_Throw_NullFormatterException" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.Register_Check_Extension_Case" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.Register_Check_Extension_Is_Not_Empty" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.Register_Check_Extension_Not_Contain_Dot_Character" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.Register_Check_Multiple_Extension_Definition" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.Remove" executed="True" result="Success" success="True" time="0.002" asserts="4" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.Remove_Is_Not_Case_Sensitive" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.StringIndexer_Can_Throw_NullExtensionException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCodeFormatterCollection.Test_Default" executed="True" result="Success" success="True" time="0.003" asserts="10" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestCSharpCodeFormatter" executed="True" result="Success" success="True" time="0.067" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCSharpCodeFormatter.Format_Can_Throw_CSharpNullException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCSharpCodeFormatter.Test_Conserve_Intermediary_Spaces" executed="True" result="Success" success="True" time="0.034" asserts="9" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCSharpCodeFormatter.Test_Default" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCSharpCodeFormatter.Test_Format" executed="True" result="Success" success="True" time="0.006" asserts="1" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCSharpCodeFormatter.Test_Format_2" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCSharpCodeFormatter.Test_Format_3" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestCSharpCodeFormatter.Test_PreProcess" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestFormattedCode" executed="True" result="Success" success="True" time="0.043" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestFormattedCode.CheckData_Can_Throw_NullDataException" executed="True" result="Success" success="True" time="0.003" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestFormattedCode.CheckData_IndexArray_And_TagArray_Count_Must_Match" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestFormattedCode.CheckData_LineArray_Values_Must_Always_Grow_Up" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestFormattedCode.CheckData_LineArray_Values_Must_Be_In_IndexArray_Count" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestFormattedCode.Empty" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestFormattedCode.Test_ComplexCollection" executed="True" result="Success" success="True" time="0.006" asserts="22" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestFormattedCode.Test_Equals" executed="True" result="Success" success="True" time="0.002" asserts="10" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestFormattedCode.Test_MaxLength" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestFormattedCode.Test_SimpleCollection" executed="True" result="Success" success="True" time="0.003" asserts="17" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestGeneralCodeFormatter" executed="True" result="Success" success="True" time="0.103" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.All_Formatters_Have_Unique_Language_Value" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.All_Formatters_Should_Have_Overwrite_Behavior" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.All_Formatters_Should_PreProcess_Tab_Character" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.Any_Formatter_Should_Format_Any_Text" executed="True" result="Success" success="True" time="0.023" asserts="6" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.DefaultFormatter" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.DefaultFormatter_Can_Throw_FormatterNullException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.Format" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.Format_Can_Throw_CodeNullException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.Format_Can_Throw_LanguageNameNullException" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.Format_Pick_Best_Formatter" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.FormatFromExtension_Can_Throw_CodeNullException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.FormatFromExtension_Can_Throw_ExtensionNullException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.GetFormatterFromExtension_Can_Throw_ExtensionNullException" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.GetFormatterFromLanguage_Can_Throw_LanguageNullException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.GetFormatterFroms" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.LanguageFromExtension" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestGeneralCodeFormatter.Test_Default" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestLexer" executed="True" result="Success" success="True" time="0.051" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestLexer.Test_Default" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestLexer.Test_Dot_Character" executed="True" result="Success" success="True" time="0.004" asserts="5" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestLexer.Test_SetText_Throws_NullArgumentException" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestLexer.Test_Split_ColonCharacter" executed="True" result="Success" success="True" time="0.002" asserts="20" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestLexer.Test_Split_CommentC" executed="True" result="Success" success="True" time="0.001" asserts="10" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestLexer.Test_Split_CommentCpp" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestLexer.Test_Split_DoubleQuote" executed="True" result="Success" success="True" time="0.002" asserts="19" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestLexer.Test_Split_Equals" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestLexer.Test_Split_New_Line" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestLexer.Test_Split_NumberSign" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestLexer.Test_Split_SingleQuote" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestLexer.Test_Split_WhiteSpaces" executed="True" result="Success" success="True" time="0.003" asserts="35" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestLexer.Test_Split_Words" executed="True" result="Success" success="True" time="0.001" asserts="10" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestPlainTextCodeFormatter" executed="True" result="Success" success="True" time="0.015" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestPlainTextCodeFormatter.Format_Can_Throw_CodeNullException" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestPlainTextCodeFormatter.Format_HelloWorld" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestPlainTextCodeFormatter.Format_Lines" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestPlainTextCodeFormatter.Test_Language" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestPlainTextCodeFormatter.Test_PreProcess" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestToken" executed="True" result="Success" success="True" time="0.002" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestToken.Test_Equals" executed="True" result="Success" success="True" time="0.001" asserts="6" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestTokenClassifier" executed="True" result="Success" success="True" time="0.063" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenClassifier.test_AcceptToken" executed="True" result="Success" success="True" time="0.006" asserts="60" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenClassifier.Test_Classification_Cases" executed="True" result="Success" success="True" time="0.004" asserts="32" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenClassifier.Test_Classify" executed="True" result="Success" success="True" time="0.003" asserts="60" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenClassifier.Test_Classify_As_Keyword" executed="True" result="Success" success="True" time="0.005" asserts="81" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenClassifier.Test_Classify_Can_Throw_ArgumentNullException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenClassifier.Test_Classify_Throw_NullArgException" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenClassifier.Test_Escaping_sequence" executed="True" result="Success" success="True" time="0.009" asserts="61" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenClassifier.Test_NewState" executed="True" result="Success" success="True" time="0.008" asserts="40" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenClassifier.Test_Reset" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestTokenDictionary" executed="True" result="Success" success="True" time="0.053" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenDictionary.Add_can_throw_AlreadyDefinedException" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenDictionary.Add_can_throw_EmptySequenceException" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenDictionary.Add_can_throw_InvalidSortException" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenDictionary.Add_can_throw_NullValueException" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenDictionary.add_token" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenDictionary.PopulateTokenStartingWith" executed="True" result="Success" success="True" time="0.004" asserts="14" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenDictionary.PopulateTokenStartingWith_can_throw_NullOutputException" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenDictionary.PopulateTokenStartingWith_can_throw_NullStarterException" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenDictionary.test_default" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenDictionary.TryMatch_can_throw_NullPredictionException" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenDictionary.TryMatch_can_throw_NullTextException" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenDictionary.TryMatch_no_prediction" executed="True" result="Success" success="True" time="0.002" asserts="146" />

+                              <test-case name="NUnit.UiException.Tests.CodeFormatters.TestTokenDictionary.TryMatch_prediction" executed="True" result="Success" success="True" time="0.002" asserts="19" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="Namespace" name="Controls" executed="True" result="Success" success="True" time="1.133" asserts="0">

+                        <results>

+                          <test-suite type="TestFixture" name="TestCodeBox" executed="True" result="Success" success="True" time="0.254" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.Controls.TestCodeBox.Can_Disable_ShowCurrentLine" executed="True" result="Success" success="True" time="0.195" asserts="3" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestCodeBox.Can_Set_Back_And_Fore_Colors" executed="True" result="Success" success="True" time="0.007" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestCodeBox.Changing_Font_Causes_Reformatting" executed="True" result="Success" success="True" time="0.006" asserts="24" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestCodeBox.Changing_Language_Causes_Reformatting" executed="True" result="Success" success="True" time="0.005" asserts="34" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestCodeBox.CurrentLine" executed="True" result="Success" success="True" time="0.009" asserts="30" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestCodeBox.DefaultState" executed="True" result="Success" success="True" time="0.003" asserts="11" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestCodeBox.Format_Text_With_Language" executed="True" result="Success" success="True" time="0.003" asserts="25" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestCodeBox.OnPaint" executed="True" result="Success" success="True" time="0.003" asserts="19" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestCodeRenderingContext" executed="True" result="Success" success="True" time="0.016" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.Controls.TestCodeRenderingContext.Can_Change_Colors" executed="True" result="Success" success="True" time="0.008" asserts="43" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestCodeRenderingContext.DefaultState" executed="True" result="Success" success="True" time="0.003" asserts="38" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestDefaultCodeRenderer" executed="True" result="Success" success="True" time="0.036" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.Controls.TestDefaultCodeRenderer.DrawToGraphics_Can_Raise_ArgumentNullException" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestDefaultCodeRenderer.GetDocumentSize" executed="True" result="Success" success="True" time="0.002" asserts="4" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestDefaultCodeRenderer.GetDocumentSize_Can_Raise_ArgumentNullException" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestDefaultCodeRenderer.LineIndexToYCoordinate" executed="True" result="Success" success="True" time="0.002" asserts="4" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestDefaultCodeRenderer.LineIndexToYCoordinate_Can_Raise_ArgumentNullException" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestDefaultCodeRenderer.ViewportLines" executed="True" result="Success" success="True" time="0.009" asserts="32" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestDefaultErrorListRenderer" executed="True" result="Success" success="True" time="0.211" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.Controls.TestDefaultErrorListRenderer.DefaultState" executed="True" result="Success" success="True" time="0.021" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestDefaultErrorListRenderer.DrawToGraphics_Can_Throw_ArgumentNullException" executed="True" result="Success" success="True" time="0.005" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestDefaultErrorListRenderer.GetDocumentSize" executed="True" result="Success" success="True" time="0.003" asserts="5" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestDefaultErrorListRenderer.IsDirty" executed="True" result="Success" success="True" time="0.154" asserts="7" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestDefaultErrorListRenderer.ItemAt" executed="True" result="Success" success="True" time="0.004" asserts="7" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestDefaultErrorListRenderer.MeasureItem" executed="True" result="Success" success="True" time="0.004" asserts="6" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestErrorBrowser" executed="True" result="Success" success="True" time="0.206" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorBrowser.Can_Raise_ErrorSourceChanged" executed="True" result="Success" success="True" time="0.144" asserts="3" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorBrowser.Cannot_Register_Null_Display" executed="True" result="Success" success="True" time="0.002" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorBrowser.DefaultState" executed="True" result="Success" success="True" time="0.004" asserts="10" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorBrowser.ErrorDisplay_Plugins_life_cycle_events" executed="True" result="Success" success="True" time="0.037" asserts="55" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorBrowser.LayoutPanel_Auto_Resizes_When_Parent_Sizes_Change" executed="True" result="Success" success="True" time="0.006" asserts="4" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestErrorList" executed="True" result="Success" success="True" time="0.070" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorList.AutoSelectFirstItem" executed="True" result="Success" success="True" time="0.005" asserts="4" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorList.CanReportInvalidItems" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorList.Click_Can_Select_Item" executed="True" result="Success" success="True" time="0.003" asserts="23" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorList.CurrentSelection" executed="True" result="Success" success="True" time="0.003" asserts="10" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorList.DefaultState" executed="True" result="Success" success="True" time="0.001" asserts="7" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorList.DrawItem" executed="True" result="Success" success="True" time="0.018" asserts="39" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorList.Invoking_DrawToGraphics" executed="True" result="Success" success="True" time="0.005" asserts="22" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorList.ListOrderPolicy" executed="True" result="Success" success="True" time="0.007" asserts="22" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorList.Populate_StackTraceSource" executed="True" result="Success" success="True" time="0.003" asserts="11" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestErrorPanelLayout" executed="True" result="Success" success="True" time="0.014" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorPanelLayout.Can_Layout_Child_Controls_When_Size_Changed" executed="True" result="Success" success="True" time="0.002" asserts="16" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorPanelLayout.DefaultState" executed="True" result="Success" success="True" time="0.001" asserts="13" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorPanelLayout.Setting_Content" executed="True" result="Success" success="True" time="0.001" asserts="21" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorPanelLayout.Setting_Toolbar" executed="True" result="Success" success="True" time="0.001" asserts="14" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestErrorToolbar" executed="True" result="Success" success="True" time="0.128" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorToolbar.Cannot_Register_Null_Display" executed="True" result="Success" success="True" time="0.003" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorToolbar.Cannot_Select_UnRegistered_Display" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorToolbar.DefaultState" executed="True" result="Success" success="True" time="0.003" asserts="8" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorToolbar.NewStripButton" executed="True" result="Success" success="True" time="0.010" asserts="1" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorToolbar.PluginItem_Click_Raises_SelectedRenderedChanged" executed="True" result="Success" success="True" time="0.030" asserts="4" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorToolbar.Registering_displays_adds_ToolStripItem" executed="True" result="Success" success="True" time="0.052" asserts="30" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorToolbar.SelectedDisplay" executed="True" result="Success" success="True" time="0.002" asserts="9" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestErrorToolbar.Set_Or_Unset_Check_Flag_On_Selection" executed="True" result="Success" success="True" time="0.005" asserts="6" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestSourceCodeDisplay" executed="True" result="Success" success="True" time="0.049" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSourceCodeDisplay.CanReportFileException" executed="True" result="Success" success="True" time="0.010" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSourceCodeDisplay.DefaultState" executed="True" result="Success" success="True" time="0.006" asserts="15" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSourceCodeDisplay.ListOrderPolicy" executed="True" result="Success" success="True" time="0.003" asserts="14" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSourceCodeDisplay.SelectedItemChanged" executed="True" result="Success" success="True" time="0.005" asserts="26" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSourceCodeDisplay.SplitOrientation" executed="True" result="Success" success="True" time="0.005" asserts="4" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSourceCodeDisplay.SplitterDistance" executed="True" result="Success" success="True" time="0.004" asserts="2" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestSplitterBox" executed="True" result="Success" success="True" time="0.053" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSplitterBox.CanChangeDefaultControl1" executed="True" result="Success" success="True" time="0.004" asserts="48" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSplitterBox.CanChangeDefaultControl2" executed="True" result="Success" success="True" time="0.001" asserts="48" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSplitterBox.ChangingSizeInvokeDoLayout" executed="True" result="Success" success="True" time="0.000" asserts="28" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSplitterBox.CollapseControl" executed="True" result="Success" success="True" time="0.008" asserts="82" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSplitterBox.DefaultState" executed="True" result="Success" success="True" time="0.002" asserts="51" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSplitterBox.MouseActions" executed="True" result="Success" success="True" time="0.007" asserts="6" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSplitterBox.OrientationAffectsLayout" executed="True" result="Success" success="True" time="0.001" asserts="25" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSplitterBox.PointToSplit" executed="True" result="Success" success="True" time="0.001" asserts="75" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestSplitterBox.SplitterDistance" executed="True" result="Success" success="True" time="0.001" asserts="81" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestStackTraceDisplay" executed="True" result="Success" success="True" time="0.057" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.Controls.TestStackTraceDisplay.CopyToClipBoard" executed="True" result="Success" success="True" time="0.044" asserts="4">

+                                <properties>

+                                  <property name="APARTMENT_STATE" value="STA" />

+                                </properties>

+                              </test-case>

+                              <test-case name="NUnit.UiException.Tests.Controls.TestStackTraceDisplay.DefaultState" executed="True" result="Success" success="True" time="0.002" asserts="10" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestStackTraceDisplay.FeedingDisplayWithGarbageDoesNotMakeItCrash" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                              <test-case name="NUnit.UiException.Tests.Controls.TestStackTraceDisplay.OnStackTraceChanged" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="Namespace" name="StackTraceAnalyzers" executed="True" result="Success" success="True" time="0.095" asserts="0">

+                        <results>

+                          <test-suite type="TestFixture" name="TestFunctionParser" executed="True" result="Success" success="True" time="0.021" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestFunctionParser.Test_Ability_To_Parse_Mono_Stack_Trace" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestFunctionParser.Test_Ability_To_Parse_Regular_Function_Values" executed="True" result="Success" success="True" time="0.001" asserts="7" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestFunctionParser.Test_Fail_To_Parse_Odd_Function_Values" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestFunctionParser.TestIErrorParser.Test_IErrorParser_Can_Throw_ArgsNullException" executed="True" result="Success" success="True" time="0.002" asserts="10" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestFunctionParser.TestIErrorParser.Test_IErrorParser_Can_Throw_ParserNullException" executed="True" result="Success" success="True" time="0.004" asserts="10" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestIErrorParser" executed="True" result="Success" success="True" time="0.005" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestIErrorParser.Test_IErrorParser_Can_Throw_ArgsNullException" executed="True" result="Success" success="True" time="0.001" asserts="10" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestIErrorParser.Test_IErrorParser_Can_Throw_ParserNullException" executed="True" result="Success" success="True" time="0.000" asserts="10" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestLineNumberParser" executed="True" result="Success" success="True" time="0.012" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestLineNumberParser.Test_Ability_To_Parse_Regular_Line_Number_Values" executed="True" result="Success" success="True" time="0.001" asserts="10" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestLineNumberParser.Test_Ability_To_Reject_Odd_Line_Number_Values" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestLineNumberParser.TestIErrorParser.Test_IErrorParser_Can_Throw_ArgsNullException" executed="True" result="Success" success="True" time="0.001" asserts="10" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestLineNumberParser.TestIErrorParser.Test_IErrorParser_Can_Throw_ParserNullException" executed="True" result="Success" success="True" time="0.000" asserts="10" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestPathParser" executed="True" result="Success" success="True" time="0.013" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestPathParser.Test_Ability_To_Handle_Unix_Path_Like_Values" executed="True" result="Success" success="True" time="0.001" asserts="4" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestPathParser.Test_Ability_To_Handle_Windows_Path_Like_Values" executed="True" result="Success" success="True" time="0.000" asserts="4" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestPathParser.TestIErrorParser.Test_IErrorParser_Can_Throw_ArgsNullException" executed="True" result="Success" success="True" time="0.001" asserts="12" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestPathParser.TestIErrorParser.Test_IErrorParser_Can_Throw_ParserNullException" executed="True" result="Success" success="True" time="0.000" asserts="12" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestUnixPathParser" executed="True" result="Success" success="True" time="0.012" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestUnixPathParser.Test_Ability_To_Parse_Regular_Unix_Like_Path_Values" executed="True" result="Success" success="True" time="0.002" asserts="21" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestUnixPathParser.Test_Inability_To_Parse_Non_Unix_Like_Path_Values" executed="True" result="Success" success="True" time="0.001" asserts="6" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestUnixPathParser.TestIErrorParser.Test_IErrorParser_Can_Throw_ArgsNullException" executed="True" result="Success" success="True" time="0.001" asserts="11" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestUnixPathParser.TestIErrorParser.Test_IErrorParser_Can_Throw_ParserNullException" executed="True" result="Success" success="True" time="0.000" asserts="11" />

+                            </results>

+                          </test-suite>

+                          <test-suite type="TestFixture" name="TestWindowsPathParser" executed="True" result="Success" success="True" time="0.013" asserts="0">

+                            <results>

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestWindowsPathParser.Test_Ability_To_Parse_Regular_Windows_Path" executed="True" result="Success" success="True" time="0.001" asserts="21" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestWindowsPathParser.Test_Inability_To_Parse_Non_Windows_Like_Path_Values" executed="True" result="Success" success="True" time="0.001" asserts="6" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestWindowsPathParser.TestIErrorParser.Test_IErrorParser_Can_Throw_ArgsNullException" executed="True" result="Success" success="True" time="0.001" asserts="11" />

+                              <test-case name="NUnit.UiException.Tests.StackTraceAnalyzers.TestWindowsPathParser.TestIErrorParser.Test_IErrorParser_Can_Throw_ParserNullException" executed="True" result="Success" success="True" time="0.001" asserts="11" />

+                            </results>

+                          </test-suite>

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestDefaultTextManager" executed="True" result="Success" success="True" time="0.012" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiException.Tests.TestDefaultTextManager.Test_CodeBlockCollection" executed="True" result="Success" success="True" time="0.004" asserts="15" />

+                          <test-case name="NUnit.UiException.Tests.TestDefaultTextManager.Test_Default" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.UiException.Tests.TestDefaultTextManager.Test_MaxLength" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestErrorItem" executed="True" result="Success" success="True" time="0.033" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiException.Tests.TestErrorItem.Can_Set_Properties" executed="True" result="Success" success="True" time="0.001" asserts="10" />

+                          <test-case name="NUnit.UiException.Tests.TestErrorItem.Ctor_2" executed="True" result="Success" success="True" time="0.001" asserts="10" />

+                          <test-case name="NUnit.UiException.Tests.TestErrorItem.Ctor_Throws_NullPathException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.UiException.Tests.TestErrorItem.Ctor_With_Line_0" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.UiException.Tests.TestErrorItem.ReadFile" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.UiException.Tests.TestErrorItem.ReadFile_Throws_FileNotExistException" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.UiException.Tests.TestErrorItem.Test_Equals" executed="True" result="Success" success="True" time="0.002" asserts="8" />

+                          <test-case name="NUnit.UiException.Tests.TestErrorItem.Test_FileExtension" executed="True" result="Success" success="True" time="0.000" asserts="5" />

+                          <test-case name="NUnit.UiException.Tests.TestErrorItem.Test_MethodName" executed="True" result="Success" success="True" time="0.002" asserts="15" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestErrorItemCollection" executed="True" result="Success" success="True" time="0.020" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiException.Tests.TestErrorItemCollection.Test_Add_Throws_NullItemException" executed="True" result="Success" success="True" time="0.003" asserts="0" />

+                          <test-case name="NUnit.UiException.Tests.TestErrorItemCollection.Test_Clear" executed="True" result="Success" success="True" time="0.002" asserts="2" />

+                          <test-case name="NUnit.UiException.Tests.TestErrorItemCollection.Test_Contains" executed="True" result="Success" success="True" time="0.002" asserts="3" />

+                          <test-case name="NUnit.UiException.Tests.TestErrorItemCollection.Test_TraceItems" executed="True" result="Success" success="True" time="0.004" asserts="7" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestPaintLineLocation" executed="True" result="Success" success="True" time="0.013" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiException.Tests.TestPaintLineLocation.Test_Equals" executed="True" result="Success" success="True" time="0.002" asserts="8" />

+                          <test-case name="NUnit.UiException.Tests.TestPaintLineLocation.Test_PaintLineLocation" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.UiException.Tests.TestPaintLineLocation.Test_SetText_Throws_NullTextException" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestStackTraceParser" executed="True" result="Success" success="True" time="0.034" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiException.Tests.TestStackTraceParser.Test_Ability_To_Handle_Different_Path_System_Syntaxes" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.UiException.Tests.TestStackTraceParser.Test_Ability_To_Handle_Files_With_Unknown_Extension" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.UiException.Tests.TestStackTraceParser.Test_Analysis_Does_Not_Depend_Upon_File_Extension" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.UiException.Tests.TestStackTraceParser.Test_Default" executed="True" result="Success" success="True" time="0.000" asserts="2" />

+                          <test-case name="NUnit.UiException.Tests.TestStackTraceParser.Test_English_Stack" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.UiException.Tests.TestStackTraceParser.Test_Missing_Line_Number" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                          <test-case name="NUnit.UiException.Tests.TestStackTraceParser.Test_Parse" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.UiException.Tests.TestStackTraceParser.Test_Parse_MultipleExtension" executed="True" result="Success" success="True" time="0.002" asserts="6" />

+                          <test-case name="NUnit.UiException.Tests.TestStackTraceParser.Test_Parse_Null" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                          <test-case name="NUnit.UiException.Tests.TestStackTraceParser.Test_Parse_With_Real_Life_Samples" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                          <test-case name="NUnit.UiException.Tests.TestStackTraceParser.Test_Trace_When_Missing_File" executed="True" result="Success" success="True" time="0.001" asserts="5" />

+                        </results>

+                      </test-suite>

+                    </results>

+                  </test-suite>

+                </results>

+              </test-suite>

+            </results>

+          </test-suite>

+        </results>

+      </test-suite>

+      <test-suite type="Assembly" name="D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.uikit.tests.dll" executed="True" result="Success" success="True" time="2.630" asserts="0">

+        <results>

+          <test-suite type="Namespace" name="NUnit" executed="True" result="Success" success="True" time="2.630" asserts="0">

+            <results>

+              <test-suite type="Namespace" name="UiKit" executed="True" result="Success" success="True" time="2.630" asserts="0">

+                <results>

+                  <test-suite type="Namespace" name="Tests" executed="True" result="Success" success="True" time="2.629" asserts="0">

+                    <results>

+                      <test-suite type="TestFixture" name="AddConfigurationDialogTests" executed="True" result="Success" success="True" time="0.349" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiKit.Tests.AddConfigurationDialogTests.CheckComboBox" executed="True" result="Success" success="True" time="0.241" asserts="5" />

+                          <test-case name="NUnit.UiKit.Tests.AddConfigurationDialogTests.CheckForControls" executed="True" result="Success" success="True" time="0.002" asserts="0" />

+                          <test-case name="NUnit.UiKit.Tests.AddConfigurationDialogTests.CheckTextBox" executed="True" result="Success" success="True" time="0.002" asserts="1" />

+                          <test-case name="NUnit.UiKit.Tests.AddConfigurationDialogTests.TestComplexEntry" executed="True" result="Success" success="True" time="0.075" asserts="2" />

+                          <test-case name="NUnit.UiKit.Tests.AddConfigurationDialogTests.TestSimpleEntry" executed="True" result="Success" success="True" time="0.018" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ErrorDisplayTests" executed="True" result="Success" success="True" time="0.042" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiKit.Tests.ErrorDisplayTests.ControlsArePositionedCorrectly" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.UiKit.Tests.ErrorDisplayTests.ControlsExist" executed="True" result="Success" success="True" time="0.000" asserts="0" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="LongRunningOperationDisplayTests" executed="True" result="Success" success="True" time="0.021" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiKit.Tests.LongRunningOperationDisplayTests.CreateDisplay" executed="True" result="Success" success="True" time="0.020" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ProgressBarTests" executed="True" result="Success" success="True" time="0.061" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiKit.Tests.ProgressBarTests.TestProgressDisplay" executed="True" result="Success" success="True" time="0.060" asserts="5" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="RecentFileMenuHandlerTests" executed="True" result="Success" success="True" time="0.013" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiKit.Tests.RecentFileMenuHandlerTests.DisableOnLoadWhenEmpty" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.UiKit.Tests.RecentFileMenuHandlerTests.EnableOnLoadWhenNotEmpty" executed="True" result="Success" success="True" time="0.003" asserts="1" />

+                          <test-case name="NUnit.UiKit.Tests.RecentFileMenuHandlerTests.LoadMenuItems" executed="True" result="Success" success="True" time="0.001" asserts="2" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="StatusBarTests" executed="True" result="Success" success="True" time="0.250" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiKit.Tests.StatusBarTests.TestConstruction" executed="True" result="Success" success="True" time="0.065" asserts="5" />

+                          <test-case name="NUnit.UiKit.Tests.StatusBarTests.TestFinalDisplay" executed="True" result="Success" success="True" time="0.073" asserts="5" />

+                          <test-case name="NUnit.UiKit.Tests.StatusBarTests.TestInitialization" executed="True" result="Success" success="True" time="0.044" asserts="10" />

+                          <test-case name="NUnit.UiKit.Tests.StatusBarTests.TestProgressDisplay" executed="True" result="Success" success="True" time="0.057" asserts="5" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestSuiteTreeNodeTests" executed="True" result="Success" success="True" time="0.096" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeNodeTests.ClearNestedResults" executed="True" result="Success" success="True" time="0.021" asserts="8" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeNodeTests.ClearResult" executed="True" result="Success" success="True" time="0.006" asserts="5" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeNodeTests.ConstructFromTestInfo" executed="True" result="Success" success="True" time="0.006" asserts="6" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeNodeTests.ResultNotSet" executed="True" result="Success" success="True" time="0.006" asserts="2" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeNodeTests.SetResult_Failure" executed="True" result="Success" success="True" time="0.007" asserts="3" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeNodeTests.SetResult_Ignore" executed="True" result="Success" success="True" time="0.006" asserts="4" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeNodeTests.SetResult_Inconclusive" executed="True" result="Success" success="True" time="0.006" asserts="4" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeNodeTests.SetResult_Skipped" executed="True" result="Success" success="True" time="0.006" asserts="3" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeNodeTests.SetResult_Success" executed="True" result="Success" success="True" time="0.006" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestSuiteTreeViewReloadTests" executed="True" result="Success" success="True" time="0.906" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewReloadTests.CanReloadAfterChangingOrder" executed="True" result="Success" success="True" time="0.239" asserts="178" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewReloadTests.CanReloadAfterDeletingBranch" executed="True" result="Success" success="True" time="0.056" asserts="137" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewReloadTests.CanReloadAfterDeletingOneTestCase" executed="True" result="Success" success="True" time="0.056" asserts="175" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewReloadTests.CanReloadAfterDeletingThreeTestCases" executed="True" result="Success" success="True" time="0.065" asserts="169" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewReloadTests.CanReloadAfterInsertingTestCase" executed="True" result="Success" success="True" time="0.059" asserts="181" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewReloadTests.CanReloadAfterInsertingTestFixture" executed="True" result="Success" success="True" time="0.056" asserts="182" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewReloadTests.CanReloadAfterMultipleChanges" executed="True" result="Success" success="True" time="0.058" asserts="179" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewReloadTests.CanReloadAfterTurningOffAutoNamespaces" executed="True" result="Success" success="True" time="0.107" asserts="159" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewReloadTests.CanReloadWithoutChange" executed="True" result="Success" success="True" time="0.061" asserts="177" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewReloadTests.ReloadTreeWithWrongTest" executed="True" result="Success" success="True" time="0.057" asserts="0" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewReloadTests.VerifyCheckTreeWorks" executed="True" result="Success" success="True" time="0.059" asserts="177" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestSuiteTreeViewTests" executed="True" result="Success" success="True" time="0.324" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewTests.BuildFromResult" executed="True" result="Success" success="True" time="0.068" asserts="15" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewTests.BuildTreeView" executed="True" result="Success" success="True" time="0.061" asserts="5" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewTests.ClearTree" executed="True" result="Success" success="True" time="0.058" asserts="1" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewTests.ProcessChecks" executed="True" result="Success" success="True" time="0.062" asserts="7" />

+                          <test-case name="NUnit.UiKit.Tests.TestSuiteTreeViewTests.SetTestResult" executed="True" result="Success" success="True" time="0.063" asserts="3" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="TestTreeTests" executed="True" result="Success" success="True" time="0.054" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiKit.Tests.TestTreeTests.SameCategoryShouldNotBeSelectedMoreThanOnce" executed="True" result="Success" success="True" time="0.053" asserts="4" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="VisualStateTests" executed="True" result="Success" success="True" time="0.480" asserts="0">

+                        <results>

+                          <test-case name="NUnit.UiKit.Tests.VisualStateTests.SaveAndRestoreVisualState" executed="True" result="Success" success="True" time="0.480" asserts="5" />

+                        </results>

+                      </test-suite>

+                    </results>

+                  </test-suite>

+                </results>

+              </test-suite>

+            </results>

+          </test-suite>

+        </results>

+      </test-suite>

+      <test-suite type="Assembly" name="D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit-gui.tests.dll" executed="True" result="Success" success="True" time="0.356" asserts="0">

+        <results>

+          <test-suite type="Namespace" name="NUnit" executed="True" result="Success" success="True" time="0.355" asserts="0">

+            <results>

+              <test-suite type="Namespace" name="Gui" executed="True" result="Success" success="True" time="0.353" asserts="0">

+                <results>

+                  <test-suite type="Namespace" name="Tests" executed="True" result="Success" success="True" time="0.353" asserts="0">

+                    <results>

+                      <test-suite type="TestFixture" name="CommandLineTests" executed="True" result="Success" success="True" time="0.046" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Gui.Tests.CommandLineTests.AssemblyName" executed="True" result="Success" success="True" time="0.016" asserts="1" />

+                          <test-case name="NUnit.Gui.Tests.CommandLineTests.Help" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Gui.Tests.CommandLineTests.HelpTextUsesCorrectDelimiterForPlatform" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Gui.Tests.CommandLineTests.InvalidArgs" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Gui.Tests.CommandLineTests.InvalidCommandLineParms" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Gui.Tests.CommandLineTests.NoNameValuePairs" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                          <test-case name="NUnit.Gui.Tests.CommandLineTests.NoParametersCount" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Gui.Tests.CommandLineTests.ShortHelp" executed="True" result="Success" success="True" time="0.001" asserts="1" />

+                          <test-case name="NUnit.Gui.Tests.CommandLineTests.ValidateSuccessful" executed="True" result="Success" success="True" time="0.000" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ExceptionDetailsFormTests" executed="True" result="Success" success="True" time="0.061" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Gui.Tests.ExceptionDetailsFormTests.ControlsArePositionedCorrectly" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Gui.Tests.ExceptionDetailsFormTests.ControlsExist" executed="True" result="Success" success="True" time="0.001" asserts="0" />

+                          <test-case name="NUnit.Gui.Tests.ExceptionDetailsFormTests.MessageDisplaysCorrectly" executed="True" result="Success" success="True" time="0.032" asserts="1" />

+                        </results>

+                      </test-suite>

+                      <test-suite type="TestFixture" name="ProjectEditorTests" executed="True" result="Success" success="True" time="0.240" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Gui.Tests.ProjectEditorTests.CheckControls" executed="True" result="Success" success="True" time="0.151" asserts="0" />

+                          <test-case name="NUnit.Gui.Tests.ProjectEditorTests.InitialFieldValues" executed="True" result="Success" success="True" time="0.085" asserts="2" />

+                        </results>

+                      </test-suite>

+                    </results>

+                  </test-suite>

+                </results>

+              </test-suite>

+            </results>

+          </test-suite>

+        </results>

+      </test-suite>

+      <test-suite type="Assembly" name="D:\Dev\NUnit\nunit-2.5\work\build\net\2.0\release\tests/nunit.fixtures.tests.dll" executed="True" result="Success" success="True" time="0.021" asserts="0">

+        <results>

+          <test-suite type="Namespace" name="NUnit" executed="True" result="Success" success="True" time="0.021" asserts="0">

+            <results>

+              <test-suite type="Namespace" name="Fixtures" executed="True" result="Success" success="True" time="0.021" asserts="0">

+                <results>

+                  <test-suite type="Namespace" name="Tests" executed="True" result="Success" success="True" time="0.020" asserts="0">

+                    <results>

+                      <test-suite type="TestFixture" name="TestTreeTests" executed="True" result="Success" success="True" time="0.020" asserts="0">

+                        <results>

+                          <test-case name="NUnit.Fixtures.Tests.TestTreeTests.MatchingTreesAreEqual" executed="True" result="Success" success="True" time="0.001" asserts="3" />

+                          <test-case name="NUnit.Fixtures.Tests.TestTreeTests.NonMatchingTreesAreNotEqual" executed="True" result="Success" success="True" time="0.000" asserts="3" />

+                        </results>

+                      </test-suite>

+                    </results>

+                  </test-suite>

+                </results>

+              </test-suite>

+            </results>

+          </test-suite>

+        </results>

+      </test-suite>

+    </results>

+  </test-suite>

+</test-results>
\ No newline at end of file
diff --git a/csharp/lib/NUnit/tools/agent.conf b/csharp/lib/NUnit/tools/agent.conf
new file mode 100644
index 0000000..b4cf550
--- /dev/null
+++ b/csharp/lib/NUnit/tools/agent.conf
@@ -0,0 +1,4 @@
+<AgentConfig>

+  <Port>8080</Port>

+  <PathToAssemblies>.</PathToAssemblies>

+</AgentConfig>
\ No newline at end of file
diff --git a/csharp/lib/NUnit/tools/agent.log.conf b/csharp/lib/NUnit/tools/agent.log.conf
new file mode 100644
index 0000000..d340cad
--- /dev/null
+++ b/csharp/lib/NUnit/tools/agent.log.conf
@@ -0,0 +1,18 @@
+<log4net>

+	<!-- A1 is set to be a ConsoleAppender -->

+	<appender name="A1" type="log4net.Appender.ConsoleAppender">

+

+		<!-- A1 uses PatternLayout -->

+		<layout type="log4net.Layout.PatternLayout">

+			<!-- Print the date in ISO 8601 format -->

+			<conversionPattern value="%-5level %logger - %message%newline" />

+		</layout>

+	</appender>

+	

+	<!-- Set root logger level to DEBUG and its only appender to A1 -->

+	<root>

+		<level value="DEBUG" />

+		<appender-ref ref="A1" />

+	</root>

+

+</log4net>

diff --git a/csharp/lib/NUnit/tools/launcher.log.conf b/csharp/lib/NUnit/tools/launcher.log.conf
new file mode 100644
index 0000000..d340cad
--- /dev/null
+++ b/csharp/lib/NUnit/tools/launcher.log.conf
@@ -0,0 +1,18 @@
+<log4net>

+	<!-- A1 is set to be a ConsoleAppender -->

+	<appender name="A1" type="log4net.Appender.ConsoleAppender">

+

+		<!-- A1 uses PatternLayout -->

+		<layout type="log4net.Layout.PatternLayout">

+			<!-- Print the date in ISO 8601 format -->

+			<conversionPattern value="%-5level %logger - %message%newline" />

+		</layout>

+	</appender>

+	

+	<!-- Set root logger level to DEBUG and its only appender to A1 -->

+	<root>

+		<level value="DEBUG" />

+		<appender-ref ref="A1" />

+	</root>

+

+</log4net>

diff --git a/csharp/lib/NUnit/tools/lib/Failure.png b/csharp/lib/NUnit/tools/lib/Failure.png
new file mode 100644
index 0000000..2e400b2
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/Failure.png
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/Ignored.png b/csharp/lib/NUnit/tools/lib/Ignored.png
new file mode 100644
index 0000000..478efbf
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/Ignored.png
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/Inconclusive.png b/csharp/lib/NUnit/tools/lib/Inconclusive.png
new file mode 100644
index 0000000..4807b7c
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/Inconclusive.png
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/Skipped.png b/csharp/lib/NUnit/tools/lib/Skipped.png
new file mode 100644
index 0000000..7c9fc64
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/Skipped.png
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/Success.png b/csharp/lib/NUnit/tools/lib/Success.png
new file mode 100644
index 0000000..2a30150
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/Success.png
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/fit.dll b/csharp/lib/NUnit/tools/lib/fit.dll
new file mode 100644
index 0000000..40bbef0
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/fit.dll
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/log4net.dll b/csharp/lib/NUnit/tools/lib/log4net.dll
new file mode 100644
index 0000000..20a2e1c
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/log4net.dll
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/nunit-console-runner.dll b/csharp/lib/NUnit/tools/lib/nunit-console-runner.dll
new file mode 100644
index 0000000..1709ce7
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/nunit-console-runner.dll
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/nunit-gui-runner.dll b/csharp/lib/NUnit/tools/lib/nunit-gui-runner.dll
new file mode 100644
index 0000000..35efa73
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/nunit-gui-runner.dll
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/nunit.core.dll b/csharp/lib/NUnit/tools/lib/nunit.core.dll
new file mode 100644
index 0000000..a1dd698
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/nunit.core.dll
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/nunit.core.interfaces.dll b/csharp/lib/NUnit/tools/lib/nunit.core.interfaces.dll
new file mode 100644
index 0000000..0ac8788
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/nunit.core.interfaces.dll
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/nunit.fixtures.dll b/csharp/lib/NUnit/tools/lib/nunit.fixtures.dll
new file mode 100644
index 0000000..8fd1932
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/nunit.fixtures.dll
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/nunit.uiexception.dll b/csharp/lib/NUnit/tools/lib/nunit.uiexception.dll
new file mode 100644
index 0000000..610c170
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/nunit.uiexception.dll
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/nunit.uikit.dll b/csharp/lib/NUnit/tools/lib/nunit.uikit.dll
new file mode 100644
index 0000000..9087db2
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/nunit.uikit.dll
Binary files differ
diff --git a/csharp/lib/NUnit/tools/lib/nunit.util.dll b/csharp/lib/NUnit/tools/lib/nunit.util.dll
new file mode 100644
index 0000000..0b315c2
--- /dev/null
+++ b/csharp/lib/NUnit/tools/lib/nunit.util.dll
Binary files differ
diff --git a/csharp/lib/NUnit/tools/nunit-agent-x86.exe b/csharp/lib/NUnit/tools/nunit-agent-x86.exe
new file mode 100644
index 0000000..ebcee1b
--- /dev/null
+++ b/csharp/lib/NUnit/tools/nunit-agent-x86.exe
Binary files differ
diff --git a/csharp/lib/NUnit/tools/nunit-agent-x86.exe.config b/csharp/lib/NUnit/tools/nunit-agent-x86.exe.config
new file mode 100644
index 0000000..84c2906
--- /dev/null
+++ b/csharp/lib/NUnit/tools/nunit-agent-x86.exe.config
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>

+<configuration>

+  

+  <runtime>

+    <!-- We need this so test exceptions don't crash NUnit -->

+    <legacyUnhandledExceptionPolicy enabled="1" />

+

+    <!-- Look for addins in the addins directory for now -->

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

+      <probing privatePath="lib;addins"/>

+   </assemblyBinding>

+

+    <!--

+    The following <assemblyBinding> section allows running nunit under 

+    .NET 1.0 by redirecting assemblies. The appliesTo attribute

+    causes the section to be ignored except under .NET 1.0

+    on a machine with only the .NET version 1.0 runtime installed.

+    If application and its tests were built for .NET 1.1 you will

+    also need to redirect system assemblies in the test config file,

+    which controls loading of the tests.

+   -->

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"

+			appliesTo="v1.0.3705">

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Data" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Drawing" 

+                          publicKeyToken="b03f5f7f11d50a3a" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Windows.Forms" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Xml" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+    </assemblyBinding>

+  

+  </runtime>

+  

+</configuration>
\ No newline at end of file
diff --git a/csharp/lib/NUnit/tools/nunit-agent.exe b/csharp/lib/NUnit/tools/nunit-agent.exe
new file mode 100644
index 0000000..ec41f32
--- /dev/null
+++ b/csharp/lib/NUnit/tools/nunit-agent.exe
Binary files differ
diff --git a/csharp/lib/NUnit/tools/nunit-agent.exe.config b/csharp/lib/NUnit/tools/nunit-agent.exe.config
new file mode 100644
index 0000000..84c2906
--- /dev/null
+++ b/csharp/lib/NUnit/tools/nunit-agent.exe.config
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>

+<configuration>

+  

+  <runtime>

+    <!-- We need this so test exceptions don't crash NUnit -->

+    <legacyUnhandledExceptionPolicy enabled="1" />

+

+    <!-- Look for addins in the addins directory for now -->

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

+      <probing privatePath="lib;addins"/>

+   </assemblyBinding>

+

+    <!--

+    The following <assemblyBinding> section allows running nunit under 

+    .NET 1.0 by redirecting assemblies. The appliesTo attribute

+    causes the section to be ignored except under .NET 1.0

+    on a machine with only the .NET version 1.0 runtime installed.

+    If application and its tests were built for .NET 1.1 you will

+    also need to redirect system assemblies in the test config file,

+    which controls loading of the tests.

+   -->

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"

+			appliesTo="v1.0.3705">

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Data" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Drawing" 

+                          publicKeyToken="b03f5f7f11d50a3a" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Windows.Forms" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Xml" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+    </assemblyBinding>

+  

+  </runtime>

+  

+</configuration>
\ No newline at end of file
diff --git a/csharp/lib/NUnit/tools/nunit-console-x86.exe b/csharp/lib/NUnit/tools/nunit-console-x86.exe
new file mode 100644
index 0000000..e08ac9c
--- /dev/null
+++ b/csharp/lib/NUnit/tools/nunit-console-x86.exe
Binary files differ
diff --git a/csharp/lib/NUnit/tools/nunit-console-x86.exe.config b/csharp/lib/NUnit/tools/nunit-console-x86.exe.config
new file mode 100644
index 0000000..ce92b5b
--- /dev/null
+++ b/csharp/lib/NUnit/tools/nunit-console-x86.exe.config
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>

+<configuration>

+

+  <runtime>

+    <!-- We need this so test exceptions don't crash NUnit -->

+    <legacyUnhandledExceptionPolicy enabled="1" />

+

+    <!-- Look for addins in the addins directory for now -->

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

+      <probing privatePath="lib;addins"/>

+   </assemblyBinding>

+

+   <!--

+    The following <assemblyBinding> section allows running nunit under 

+    .NET 1.0 by redirecting assemblies. The appliesTo attribute

+    causes the section to be ignored except under .NET 1.0

+    on a machine with only the .NET version 1.0 runtime installed.

+    If application and its tests were built for .NET 1.1 you will

+    also need to redirect system assemblies in the test config file,

+    which controls loading of the tests.

+   -->

+   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"

+			appliesTo="v1.0.3705">

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Data" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Drawing" 

+                          publicKeyToken="b03f5f7f11d50a3a" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Windows.Forms" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Xml" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+    </assemblyBinding>

+

+  </runtime>

+  

+</configuration>
\ No newline at end of file
diff --git a/csharp/lib/NUnit/tools/nunit-console.exe b/csharp/lib/NUnit/tools/nunit-console.exe
new file mode 100644
index 0000000..1544a9d
--- /dev/null
+++ b/csharp/lib/NUnit/tools/nunit-console.exe
Binary files differ
diff --git a/csharp/lib/NUnit/tools/nunit-x86.exe b/csharp/lib/NUnit/tools/nunit-x86.exe
new file mode 100644
index 0000000..fd342c0
--- /dev/null
+++ b/csharp/lib/NUnit/tools/nunit-x86.exe
Binary files differ
diff --git a/csharp/lib/NUnit/tools/nunit-x86.exe.config b/csharp/lib/NUnit/tools/nunit-x86.exe.config
new file mode 100644
index 0000000..6c0320e
--- /dev/null
+++ b/csharp/lib/NUnit/tools/nunit-x86.exe.config
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>

+<configuration>

+  <!--

+     Application settings for NUnit-gui.exe. Do NOT put settings

+	 for use by your tests here.

+	-->

+  <appSettings>

+    <!--

+     Uncomment to specify the url to be used for help. If not used, the

+     default value is something like

+		file://localhost/C:/Program Files/NUnit 2.2/doc/index.html

+	 This setting is provided in case your default browser doesn't

+	 support this format.

+	-->

+    <!-- <add key="helpUrl" value="http://www.nunit.org" /> -->

+  </appSettings>

+

+  <runtime>

+    <!-- We need this so test exceptions don't crash NUnit -->

+    <legacyUnhandledExceptionPolicy enabled="1" />

+

+    <!-- Look for addins in the addins directory for now -->

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

+      <probing privatePath="lib;addins" />

+    </assemblyBinding>

+

+    <!--

+    The following <assemblyBinding> section allows running nunit under 

+    .NET 1.0 by redirecting assemblies. The appliesTo attribute

+    causes the section to be ignored except under .NET 1.0

+    on a machine with only the .NET version 1.0 runtime installed.

+    If application and its tests were built for .NET 1.1 you will

+    also need to redirect system assemblies in the test config file,

+    which controls loading of the tests.

+   -->

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"

+       appliesTo="v1.0.3705">

+

+      <dependentAssembly>

+        <assemblyIdentity name="System"

+                          publicKeyToken="b77a5c561934e089"

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0"

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly>

+        <assemblyIdentity name="System.Data"

+                          publicKeyToken="b77a5c561934e089"

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0"

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly>

+        <assemblyIdentity name="System.Drawing"

+                          publicKeyToken="b03f5f7f11d50a3a"

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0"

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly>

+        <assemblyIdentity name="System.Windows.Forms"

+                          publicKeyToken="b77a5c561934e089"

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0"

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly>

+        <assemblyIdentity name="System.Xml"

+                          publicKeyToken="b77a5c561934e089"

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0"

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+    </assemblyBinding>

+

+  </runtime>

+

+</configuration>
\ No newline at end of file
diff --git a/csharp/lib/NUnit/tools/nunit.exe b/csharp/lib/NUnit/tools/nunit.exe
new file mode 100644
index 0000000..ad8b08a
--- /dev/null
+++ b/csharp/lib/NUnit/tools/nunit.exe
Binary files differ
diff --git a/csharp/lib/NUnit/tools/nunit.exe.config b/csharp/lib/NUnit/tools/nunit.exe.config
new file mode 100644
index 0000000..6c0320e
--- /dev/null
+++ b/csharp/lib/NUnit/tools/nunit.exe.config
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>

+<configuration>

+  <!--

+     Application settings for NUnit-gui.exe. Do NOT put settings

+	 for use by your tests here.

+	-->

+  <appSettings>

+    <!--

+     Uncomment to specify the url to be used for help. If not used, the

+     default value is something like

+		file://localhost/C:/Program Files/NUnit 2.2/doc/index.html

+	 This setting is provided in case your default browser doesn't

+	 support this format.

+	-->

+    <!-- <add key="helpUrl" value="http://www.nunit.org" /> -->

+  </appSettings>

+

+  <runtime>

+    <!-- We need this so test exceptions don't crash NUnit -->

+    <legacyUnhandledExceptionPolicy enabled="1" />

+

+    <!-- Look for addins in the addins directory for now -->

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

+      <probing privatePath="lib;addins" />

+    </assemblyBinding>

+

+    <!--

+    The following <assemblyBinding> section allows running nunit under 

+    .NET 1.0 by redirecting assemblies. The appliesTo attribute

+    causes the section to be ignored except under .NET 1.0

+    on a machine with only the .NET version 1.0 runtime installed.

+    If application and its tests were built for .NET 1.1 you will

+    also need to redirect system assemblies in the test config file,

+    which controls loading of the tests.

+   -->

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"

+       appliesTo="v1.0.3705">

+

+      <dependentAssembly>

+        <assemblyIdentity name="System"

+                          publicKeyToken="b77a5c561934e089"

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0"

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly>

+        <assemblyIdentity name="System.Data"

+                          publicKeyToken="b77a5c561934e089"

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0"

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly>

+        <assemblyIdentity name="System.Drawing"

+                          publicKeyToken="b03f5f7f11d50a3a"

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0"

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly>

+        <assemblyIdentity name="System.Windows.Forms"

+                          publicKeyToken="b77a5c561934e089"

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0"

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly>

+        <assemblyIdentity name="System.Xml"

+                          publicKeyToken="b77a5c561934e089"

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0"

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+    </assemblyBinding>

+

+  </runtime>

+

+</configuration>
\ No newline at end of file
diff --git a/csharp/lib/NUnit/tools/nunit.framework.dll b/csharp/lib/NUnit/tools/nunit.framework.dll
new file mode 100644
index 0000000..6856e51
--- /dev/null
+++ b/csharp/lib/NUnit/tools/nunit.framework.dll
Binary files differ
diff --git a/csharp/lib/NUnit/tools/pnunit-agent.exe b/csharp/lib/NUnit/tools/pnunit-agent.exe
new file mode 100644
index 0000000..7a555e1
--- /dev/null
+++ b/csharp/lib/NUnit/tools/pnunit-agent.exe
Binary files differ
diff --git a/csharp/lib/NUnit/tools/pnunit-agent.exe.config b/csharp/lib/NUnit/tools/pnunit-agent.exe.config
new file mode 100644
index 0000000..5ed5f7b
--- /dev/null
+++ b/csharp/lib/NUnit/tools/pnunit-agent.exe.config
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="Windows-1252"?>

+<configuration>

+

+  <!-- Set the level for tracing NUnit itself -->

+  <!-- 0=Off 1=Error 2=Warning 3=Info 4=Debug -->

+  <system.diagnostics>

+	  <switches>

+      <add name="NTrace" value="0" />

+	  </switches>

+  </system.diagnostics>

+  

+  <runtime>

+    <!-- We need this so test exceptions don't crash NUnit -->

+    <legacyUnhandledExceptionPolicy enabled="1" />

+

+    <!-- Look for addins in the addins directory for now -->

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

+      <probing privatePath="framework;lib;addins"/>

+   </assemblyBinding>

+

+    <!--

+    The following <assemblyBinding> section allows running nunit under 

+    .NET 1.0 by redirecting assemblies. The appliesTo attribute

+    causes the section to be ignored except under .NET 1.0

+    on a machine with only the .NET version 1.0 runtime installed.

+    If application and its tests were built for .NET 1.1 you will

+    also need to redirect system assemblies in the test config file,

+    which controls loading of the tests.

+   -->

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"

+			appliesTo="v1.0.3705">

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Data" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Drawing" 

+                          publicKeyToken="b03f5f7f11d50a3a" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Windows.Forms" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Xml" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+    </assemblyBinding>

+  

+  </runtime>

+  

+</configuration>
\ No newline at end of file
diff --git a/csharp/lib/NUnit/tools/pnunit-launcher.exe b/csharp/lib/NUnit/tools/pnunit-launcher.exe
new file mode 100644
index 0000000..c70e58e
--- /dev/null
+++ b/csharp/lib/NUnit/tools/pnunit-launcher.exe
Binary files differ
diff --git a/csharp/lib/NUnit/tools/pnunit-launcher.exe.config b/csharp/lib/NUnit/tools/pnunit-launcher.exe.config
new file mode 100644
index 0000000..5ed5f7b
--- /dev/null
+++ b/csharp/lib/NUnit/tools/pnunit-launcher.exe.config
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="Windows-1252"?>

+<configuration>

+

+  <!-- Set the level for tracing NUnit itself -->

+  <!-- 0=Off 1=Error 2=Warning 3=Info 4=Debug -->

+  <system.diagnostics>

+	  <switches>

+      <add name="NTrace" value="0" />

+	  </switches>

+  </system.diagnostics>

+  

+  <runtime>

+    <!-- We need this so test exceptions don't crash NUnit -->

+    <legacyUnhandledExceptionPolicy enabled="1" />

+

+    <!-- Look for addins in the addins directory for now -->

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

+      <probing privatePath="framework;lib;addins"/>

+   </assemblyBinding>

+

+    <!--

+    The following <assemblyBinding> section allows running nunit under 

+    .NET 1.0 by redirecting assemblies. The appliesTo attribute

+    causes the section to be ignored except under .NET 1.0

+    on a machine with only the .NET version 1.0 runtime installed.

+    If application and its tests were built for .NET 1.1 you will

+    also need to redirect system assemblies in the test config file,

+    which controls loading of the tests.

+   -->

+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"

+			appliesTo="v1.0.3705">

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Data" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Drawing" 

+                          publicKeyToken="b03f5f7f11d50a3a" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Windows.Forms" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+      <dependentAssembly> 

+        <assemblyIdentity name="System.Xml" 

+                          publicKeyToken="b77a5c561934e089" 

+                          culture="neutral"/>

+        <bindingRedirect  oldVersion="1.0.5000.0" 

+                          newVersion="1.0.3300.0"/>

+      </dependentAssembly>

+

+    </assemblyBinding>

+  

+  </runtime>

+  

+</configuration>
\ No newline at end of file
diff --git a/csharp/lib/NUnit/tools/pnunit.framework.dll b/csharp/lib/NUnit/tools/pnunit.framework.dll
new file mode 100644
index 0000000..6c105d7
--- /dev/null
+++ b/csharp/lib/NUnit/tools/pnunit.framework.dll
Binary files differ
diff --git a/csharp/lib/NUnit/tools/pnunit.tests.dll b/csharp/lib/NUnit/tools/pnunit.tests.dll
new file mode 100644
index 0000000..dce018a
--- /dev/null
+++ b/csharp/lib/NUnit/tools/pnunit.tests.dll
Binary files differ
diff --git a/csharp/lib/NUnit/tools/runFile.exe b/csharp/lib/NUnit/tools/runFile.exe
new file mode 100644
index 0000000..a794458
--- /dev/null
+++ b/csharp/lib/NUnit/tools/runFile.exe
Binary files differ
diff --git a/csharp/lib/NUnit/tools/runFile.exe.config b/csharp/lib/NUnit/tools/runFile.exe.config
new file mode 100644
index 0000000..35909b4
--- /dev/null
+++ b/csharp/lib/NUnit/tools/runFile.exe.config
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" ?>

+<configuration>

+  <startup>

+	  <supportedRuntime version="v2.0.50727" />

+	  <supportedRuntime version="v2.0.50215" />

+	  <supportedRuntime version="v2.0.40607" />

+	  <supportedRuntime version="v1.1.4322" />

+	  <supportedRuntime version="v1.0.3705" />

+	

+	  <requiredRuntime version="v1.0.3705" />

+  </startup>

+

+<!--

+     The following <runtime> section allows running nunit tests under 

+     .NET 1.0 by redirecting assemblies. The appliesTo attribute

+     causes the section to be ignored except under .NET 1.0.

+	-->

+	<runtime>

+		<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"

+				appliesTo="v1.0.3705">

+			<dependentAssembly>

+				<assemblyIdentity name="System" publicKeyToken="b77a5c561934e089" culture="" />

+				<bindingRedirect oldVersion="1.0.5000.0" newVersion="1.0.3300.0" />

+			</dependentAssembly>

+			<dependentAssembly>

+				<assemblyIdentity name="System.Data" publicKeyToken="b77a5c561934e089" culture="" />

+				<bindingRedirect oldVersion="1.0.5000.0" newVersion="1.0.3300.0" />

+			</dependentAssembly>

+			<dependentAssembly>

+				<assemblyIdentity name="System.Drawing" publicKeyToken="b03f5f7f11d50a3a" culture="" />

+				<bindingRedirect oldVersion="1.0.5000.0" newVersion="1.0.3300.0" />

+			</dependentAssembly>

+			<dependentAssembly>

+				<assemblyIdentity name="System.Windows.Forms" publicKeyToken="b77a5c561934e089" culture="" />

+				<bindingRedirect oldVersion="1.0.5000.0" newVersion="1.0.3300.0" />

+			</dependentAssembly>

+			<dependentAssembly>

+				<assemblyIdentity name="System.Xml" publicKeyToken="b77a5c561934e089" culture="" />

+				<bindingRedirect oldVersion="1.0.5000.0" newVersion="1.0.3300.0" />

+			</dependentAssembly>

+		</assemblyBinding>

+	</runtime>

+</configuration>

diff --git a/csharp/lib/NUnit/tools/runpnunit.bat b/csharp/lib/NUnit/tools/runpnunit.bat
new file mode 100644
index 0000000..6efc8b4
--- /dev/null
+++ b/csharp/lib/NUnit/tools/runpnunit.bat
@@ -0,0 +1,2 @@
+start pnunit-agent agent.conf

+pnunit-launcher test.conf
\ No newline at end of file
diff --git a/csharp/lib/NUnit/tools/test.conf b/csharp/lib/NUnit/tools/test.conf
new file mode 100644
index 0000000..a35e718
--- /dev/null
+++ b/csharp/lib/NUnit/tools/test.conf
@@ -0,0 +1,24 @@
+<TestGroup>

+    <ParallelTests>

+

+        <ParallelTest>

+            <Name>Testing</Name>

+            <Tests>

+                <TestConf>

+                    <Name>Testing</Name>

+                    <Assembly>pnunit.tests.dll</Assembly>

+                    <TestToRun>TestLibraries.Testing.EqualTo19</TestToRun>

+                    <Machine>localhost:8080</Machine>

+                    <TestParams>

+                        <string>..\server</string> <!-- server dir -->

+			<string></string> <!-- database server -->

+			<string></string><!-- conn string -->

+                    </TestParams>                                                                                

+                </TestConf>

+

+            </Tests>

+        </ParallelTest>

+

+

+    </ParallelTests>

+</TestGroup>
\ No newline at end of file
diff --git a/csharp/lib/NuGet.exe b/csharp/lib/NuGet.exe
new file mode 100644
index 0000000..8dd7e45
--- /dev/null
+++ b/csharp/lib/NuGet.exe
Binary files differ
diff --git a/csharp/lib/StampVersion.License.txt b/csharp/lib/StampVersion.License.txt
new file mode 100644
index 0000000..75b5248
--- /dev/null
+++ b/csharp/lib/StampVersion.License.txt
@@ -0,0 +1,202 @@
+

+                                 Apache License

+                           Version 2.0, January 2004

+                        http://www.apache.org/licenses/

+

+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

+

+   1. Definitions.

+

+      "License" shall mean the terms and conditions for use, reproduction,

+      and distribution as defined by Sections 1 through 9 of this document.

+

+      "Licensor" shall mean the copyright owner or entity authorized by

+      the copyright owner that is granting the License.

+

+      "Legal Entity" shall mean the union of the acting entity and all

+      other entities that control, are controlled by, or are under common

+      control with that entity. For the purposes of this definition,

+      "control" means (i) the power, direct or indirect, to cause the

+      direction or management of such entity, whether by contract or

+      otherwise, or (ii) ownership of fifty percent (50%) or more of the

+      outstanding shares, or (iii) beneficial ownership of such entity.

+

+      "You" (or "Your") shall mean an individual or Legal Entity

+      exercising permissions granted by this License.

+

+      "Source" form shall mean the preferred form for making modifications,

+      including but not limited to software source code, documentation

+      source, and configuration files.

+

+      "Object" form shall mean any form resulting from mechanical

+      transformation or translation of a Source form, including but

+      not limited to compiled object code, generated documentation,

+      and conversions to other media types.

+

+      "Work" shall mean the work of authorship, whether in Source or

+      Object form, made available under the License, as indicated by a

+      copyright notice that is included in or attached to the work

+      (an example is provided in the Appendix below).

+

+      "Derivative Works" shall mean any work, whether in Source or Object

+      form, that is based on (or derived from) the Work and for which the

+      editorial revisions, annotations, elaborations, or other modifications

+      represent, as a whole, an original work of authorship. For the purposes

+      of this License, Derivative Works shall not include works that remain

+      separable from, or merely link (or bind by name) to the interfaces of,

+      the Work and Derivative Works thereof.

+

+      "Contribution" shall mean any work of authorship, including

+      the original version of the Work and any modifications or additions

+      to that Work or Derivative Works thereof, that is intentionally

+      submitted to Licensor for inclusion in the Work by the copyright owner

+      or by an individual or Legal Entity authorized to submit on behalf of

+      the copyright owner. For the purposes of this definition, "submitted"

+      means any form of electronic, verbal, or written communication sent

+      to the Licensor or its representatives, including but not limited to

+      communication on electronic mailing lists, source code control systems,

+      and issue tracking systems that are managed by, or on behalf of, the

+      Licensor for the purpose of discussing and improving the Work, but

+      excluding communication that is conspicuously marked or otherwise

+      designated in writing by the copyright owner as "Not a Contribution."

+

+      "Contributor" shall mean Licensor and any individual or Legal Entity

+      on behalf of whom a Contribution has been received by Licensor and

+      subsequently incorporated within the Work.

+

+   2. Grant of Copyright License. Subject to the terms and conditions of

+      this License, each Contributor hereby grants to You a perpetual,

+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable

+      copyright license to reproduce, prepare Derivative Works of,

+      publicly display, publicly perform, sublicense, and distribute the

+      Work and such Derivative Works in Source or Object form.

+

+   3. Grant of Patent License. Subject to the terms and conditions of

+      this License, each Contributor hereby grants to You a perpetual,

+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable

+      (except as stated in this section) patent license to make, have made,

+      use, offer to sell, sell, import, and otherwise transfer the Work,

+      where such license applies only to those patent claims licensable

+      by such Contributor that are necessarily infringed by their

+      Contribution(s) alone or by combination of their Contribution(s)

+      with the Work to which such Contribution(s) was submitted. If You

+      institute patent litigation against any entity (including a

+      cross-claim or counterclaim in a lawsuit) alleging that the Work

+      or a Contribution incorporated within the Work constitutes direct

+      or contributory patent infringement, then any patent licenses

+      granted to You under this License for that Work shall terminate

+      as of the date such litigation is filed.

+

+   4. Redistribution. You may reproduce and distribute copies of the

+      Work or Derivative Works thereof in any medium, with or without

+      modifications, and in Source or Object form, provided that You

+      meet the following conditions:

+

+      (a) You must give any other recipients of the Work or

+          Derivative Works a copy of this License; and

+

+      (b) You must cause any modified files to carry prominent notices

+          stating that You changed the files; and

+

+      (c) You must retain, in the Source form of any Derivative Works

+          that You distribute, all copyright, patent, trademark, and

+          attribution notices from the Source form of the Work,

+          excluding those notices that do not pertain to any part of

+          the Derivative Works; and

+

+      (d) If the Work includes a "NOTICE" text file as part of its

+          distribution, then any Derivative Works that You distribute must

+          include a readable copy of the attribution notices contained

+          within such NOTICE file, excluding those notices that do not

+          pertain to any part of the Derivative Works, in at least one

+          of the following places: within a NOTICE text file distributed

+          as part of the Derivative Works; within the Source form or

+          documentation, if provided along with the Derivative Works; or,

+          within a display generated by the Derivative Works, if and

+          wherever such third-party notices normally appear. The contents

+          of the NOTICE file are for informational purposes only and

+          do not modify the License. You may add Your own attribution

+          notices within Derivative Works that You distribute, alongside

+          or as an addendum to the NOTICE text from the Work, provided

+          that such additional attribution notices cannot be construed

+          as modifying the License.

+

+      You may add Your own copyright statement to Your modifications and

+      may provide additional or different license terms and conditions

+      for use, reproduction, or distribution of Your modifications, or

+      for any such Derivative Works as a whole, provided Your use,

+      reproduction, and distribution of the Work otherwise complies with

+      the conditions stated in this License.

+

+   5. Submission of Contributions. Unless You explicitly state otherwise,

+      any Contribution intentionally submitted for inclusion in the Work

+      by You to the Licensor shall be under the terms and conditions of

+      this License, without any additional terms or conditions.

+      Notwithstanding the above, nothing herein shall supersede or modify

+      the terms of any separate license agreement you may have executed

+      with Licensor regarding such Contributions.

+

+   6. Trademarks. This License does not grant permission to use the trade

+      names, trademarks, service marks, or product names of the Licensor,

+      except as required for reasonable and customary use in describing the

+      origin of the Work and reproducing the content of the NOTICE file.

+

+   7. Disclaimer of Warranty. Unless required by applicable law or

+      agreed to in writing, Licensor provides the Work (and each

+      Contributor provides its Contributions) on an "AS IS" BASIS,

+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or

+      implied, including, without limitation, any warranties or conditions

+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A

+      PARTICULAR PURPOSE. You are solely responsible for determining the

+      appropriateness of using or redistributing the Work and assume any

+      risks associated with Your exercise of permissions under this License.

+

+   8. Limitation of Liability. In no event and under no legal theory,

+      whether in tort (including negligence), contract, or otherwise,

+      unless required by applicable law (such as deliberate and grossly

+      negligent acts) or agreed to in writing, shall any Contributor be

+      liable to You for damages, including any direct, indirect, special,

+      incidental, or consequential damages of any character arising as a

+      result of this License or out of the use or inability to use the

+      Work (including but not limited to damages for loss of goodwill,

+      work stoppage, computer failure or malfunction, or any and all

+      other commercial damages or losses), even if such Contributor

+      has been advised of the possibility of such damages.

+

+   9. Accepting Warranty or Additional Liability. While redistributing

+      the Work or Derivative Works thereof, You may choose to offer,

+      and charge a fee for, acceptance of support, warranty, indemnity,

+      or other liability obligations and/or rights consistent with this

+      License. However, in accepting such obligations, You may act only

+      on Your own behalf and on Your sole responsibility, not on behalf

+      of any other Contributor, and only if You agree to indemnify,

+      defend, and hold each Contributor harmless for any liability

+      incurred by, or claims asserted against, such Contributor by reason

+      of your accepting any such warranty or additional liability.

+

+   END OF TERMS AND CONDITIONS

+

+   APPENDIX: How to apply the Apache License to your work.

+

+      To apply the Apache License to your work, attach the following

+      boilerplate notice, with the fields enclosed by brackets "[]"

+      replaced with your own identifying information. (Don't include

+      the brackets!)  The text should be enclosed in the appropriate

+      comment syntax for the file format. We also recommend that a

+      file or class name and description of purpose be included on the

+      same "printed page" as the copyright notice for easier

+      identification within third-party archives.

+

+   Copyright [yyyy] [name of copyright owner]

+

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

diff --git a/csharp/lib/StampVersion.exe b/csharp/lib/StampVersion.exe
new file mode 100644
index 0000000..7017c9f
--- /dev/null
+++ b/csharp/lib/StampVersion.exe
Binary files differ
diff --git a/csharp/lib/StatLight/StatLight.nupkg b/csharp/lib/StatLight/StatLight.nupkg
new file mode 100644
index 0000000..dc6b468
--- /dev/null
+++ b/csharp/lib/StatLight/StatLight.nupkg
Binary files differ
diff --git a/csharp/lib/StatLight/tools/Ionic.Zip.Reduced.dll b/csharp/lib/StatLight/tools/Ionic.Zip.Reduced.dll
new file mode 100644
index 0000000..da07436
--- /dev/null
+++ b/csharp/lib/StatLight/tools/Ionic.Zip.Reduced.dll
Binary files differ
diff --git a/csharp/lib/StatLight/tools/Microsoft.Silverlight.Testing.License.txt b/csharp/lib/StatLight/tools/Microsoft.Silverlight.Testing.License.txt
new file mode 100644
index 0000000..46f9f58
--- /dev/null
+++ b/csharp/lib/StatLight/tools/Microsoft.Silverlight.Testing.License.txt
@@ -0,0 +1,11 @@
+MSDN CODE GALLERY BINARY LICENSE 

+

+You are free to install, use, copy and distribute any number of copies of the software, in object code form, provided that you retain:

+

+• all copyright, patent, trademark, and attribution notices that are present in the software, 

+• this list of conditions, and 

+• the following disclaimer in the documentation and/or other materials provided with the software. 

+

+The software is licensed “as-is.” You bear the risk of using it. No express warranties, guarantees or conditions are provided. To the extent permitted under your local laws, the implied warranties of merchantability, fitness for a particular purpose and non-infringement are excluded. 

+

+This license does not grant you any rights to use any other party’s name, logo, or trademarks. All rights not specifically granted herein are reserved. 
\ No newline at end of file
diff --git a/csharp/lib/StatLight/tools/StatLight.Client.For.April2010.xap b/csharp/lib/StatLight/tools/StatLight.Client.For.April2010.xap
new file mode 100644
index 0000000..7534d41
--- /dev/null
+++ b/csharp/lib/StatLight/tools/StatLight.Client.For.April2010.xap
Binary files differ
diff --git a/csharp/lib/StatLight/tools/StatLight.Client.For.Feb2011.xap b/csharp/lib/StatLight/tools/StatLight.Client.For.Feb2011.xap
new file mode 100644
index 0000000..57b71b2
--- /dev/null
+++ b/csharp/lib/StatLight/tools/StatLight.Client.For.Feb2011.xap
Binary files differ
diff --git a/csharp/lib/StatLight/tools/StatLight.Client.For.July2009.xap b/csharp/lib/StatLight/tools/StatLight.Client.For.July2009.xap
new file mode 100644
index 0000000..63a37b5
--- /dev/null
+++ b/csharp/lib/StatLight/tools/StatLight.Client.For.July2009.xap
Binary files differ
diff --git a/csharp/lib/StatLight/tools/StatLight.Client.For.June2011.xap b/csharp/lib/StatLight/tools/StatLight.Client.For.June2011.xap
new file mode 100644
index 0000000..4330a09
--- /dev/null
+++ b/csharp/lib/StatLight/tools/StatLight.Client.For.June2011.xap
Binary files differ
diff --git a/csharp/lib/StatLight/tools/StatLight.Client.For.March2010.xap b/csharp/lib/StatLight/tools/StatLight.Client.For.March2010.xap
new file mode 100644
index 0000000..7314cb5
--- /dev/null
+++ b/csharp/lib/StatLight/tools/StatLight.Client.For.March2010.xap
Binary files differ
diff --git a/csharp/lib/StatLight/tools/StatLight.Client.For.May2010.xap b/csharp/lib/StatLight/tools/StatLight.Client.For.May2010.xap
new file mode 100644
index 0000000..01ba00b
--- /dev/null
+++ b/csharp/lib/StatLight/tools/StatLight.Client.For.May2010.xap
Binary files differ
diff --git a/csharp/lib/StatLight/tools/StatLight.Client.For.November2009.xap b/csharp/lib/StatLight/tools/StatLight.Client.For.November2009.xap
new file mode 100644
index 0000000..e9f4a72
--- /dev/null
+++ b/csharp/lib/StatLight/tools/StatLight.Client.For.November2009.xap
Binary files differ
diff --git a/csharp/lib/StatLight/tools/StatLight.Client.For.October2009.xap b/csharp/lib/StatLight/tools/StatLight.Client.For.October2009.xap
new file mode 100644
index 0000000..5b089c5
--- /dev/null
+++ b/csharp/lib/StatLight/tools/StatLight.Client.For.October2009.xap
Binary files differ
diff --git a/csharp/lib/StatLight/tools/StatLight.Client.For.UnitDrivenDecember2009.xap b/csharp/lib/StatLight/tools/StatLight.Client.For.UnitDrivenDecember2009.xap
new file mode 100644
index 0000000..09a12f9
--- /dev/null
+++ b/csharp/lib/StatLight/tools/StatLight.Client.For.UnitDrivenDecember2009.xap
Binary files differ
diff --git a/csharp/lib/StatLight/tools/StatLight.Client.For.XUnitContribApril2011.xap b/csharp/lib/StatLight/tools/StatLight.Client.For.XUnitContribApril2011.xap
new file mode 100644
index 0000000..51fd64f
--- /dev/null
+++ b/csharp/lib/StatLight/tools/StatLight.Client.For.XUnitContribApril2011.xap
Binary files differ
diff --git a/csharp/lib/StatLight/tools/StatLight.Core.dll b/csharp/lib/StatLight/tools/StatLight.Core.dll
new file mode 100644
index 0000000..bf019b8
--- /dev/null
+++ b/csharp/lib/StatLight/tools/StatLight.Core.dll
Binary files differ
diff --git a/csharp/lib/StatLight/tools/StatLight.EULA.txt b/csharp/lib/StatLight/tools/StatLight.EULA.txt
new file mode 100644
index 0000000..fa08128
--- /dev/null
+++ b/csharp/lib/StatLight/tools/StatLight.EULA.txt
@@ -0,0 +1,3 @@
+See:

+

+http://statlight.codeplex.com/license
\ No newline at end of file
diff --git a/csharp/lib/StatLight/tools/StatLight.exe b/csharp/lib/StatLight/tools/StatLight.exe
new file mode 100644
index 0000000..1f383a3
--- /dev/null
+++ b/csharp/lib/StatLight/tools/StatLight.exe
Binary files differ
diff --git a/csharp/lib/protoc-license.txt b/csharp/lib/protoc-license.txt
new file mode 100644
index 0000000..c779cb0
--- /dev/null
+++ b/csharp/lib/protoc-license.txt
@@ -0,0 +1,36 @@
+protoc.exe was built from the original source at http://code.google.com/p/protobuf/
+The licence for this code is as follows:
+
+Copyright 2008, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Code generated by the Protocol Buffer compiler is owned by the owner
+of the input file used when generating it.  This code is not
+standalone and requires a support library to be linked with it.  This
+support library is itself covered by the above license.
\ No newline at end of file
diff --git a/csharp/lib/protoc.exe b/csharp/lib/protoc.exe
new file mode 100644
index 0000000..2d8d4a5
--- /dev/null
+++ b/csharp/lib/protoc.exe
Binary files differ
diff --git a/csharp/license.txt b/csharp/license.txt
new file mode 100644
index 0000000..2715f7b
--- /dev/null
+++ b/csharp/license.txt
@@ -0,0 +1,31 @@
+Protocol Buffers - Google's data interchange format

+Copyright 2008-2010 Google Inc.  All rights reserved.

+http://github.com/jskeet/dotnet-protobufs/

+Original C++/Java/Python code:

+http://code.google.com/p/protobuf/

+

+Redistribution and use in source and binary forms, with or without

+modification, are permitted provided that the following conditions are

+met:

+

+    * Redistributions of source code must retain the above copyright

+notice, this list of conditions and the following disclaimer.

+    * Redistributions in binary form must reproduce the above

+copyright notice, this list of conditions and the following disclaimer

+in the documentation and/or other materials provided with the

+distribution.

+    * Neither the name of Google Inc. nor the names of its

+contributors may be used to endorse or promote products derived from

+this software without specific prior written permission.

+

+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

diff --git a/csharp/mono/buildall.sh b/csharp/mono/buildall.sh
new file mode 100755
index 0000000..bdd0490
--- /dev/null
+++ b/csharp/mono/buildall.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+# Adjust these to reflect the location of NUnit in your system,
+# and how you want NUnit to run
+NUNIT=~/protobuf/NUnit-2.5.0.9122/bin/net-2.0/nunit-console.exe
+NUNIT_OPTIONS=-noshadow
+
+# The rest should be okay.
+
+SRC=../src
+LIB=../lib
+KEYFILE=../keys/Google.ProtocolBuffers.snk
+
+rm -rf bin
+mkdir bin
+
+# Running the unit tests requires the dependencies are
+# in the bin directory too
+cp -f $LIB/{Rhino.Mocks.dll,nunit.framework.dll} bin
+
+echo Building main library
+gmcs -target:library -out:bin/Google.ProtocolBuffers.dll `find $SRC/ProtocolBuffers -name '*.cs'` -keyfile:$KEYFILE
+
+echo Building main library tests
+gmcs -target:library -out:bin/Google.ProtocolBuffers.Test.dll `find $SRC/ProtocolBuffers.Test -name '*.cs'` -keyfile:$KEYFILE -r:bin/Google.ProtocolBuffers.dll -r:$LIB/nunit.framework.dll -r:$LIB/Rhino.Mocks.dll
+
+echo Running main library tests
+mono $NUNIT bin/Google.ProtocolBuffers.Test.dll $NUNIT_OPTIONS
+
+echo Building ProtoGen
+gmcs -target:exe -out:bin/ProtoGen.exe `find $SRC/ProtoGen -name '*.cs'` -keyfile:$KEYFILE -r:bin/Google.ProtocolBuffers.dll
+
+echo Building ProtoGen tests
+gmcs -target:library -out:bin/Google.ProtocolBuffers.ProtoGen.Test.dll `find $SRC/ProtoGen.Test -name '*.cs'` -keyfile:$KEYFILE -r:bin/Google.ProtocolBuffers.dll -r:$LIB/nunit.framework.dll -r:bin/ProtoGen.exe
+
+echo Running ProtoGen tests
+mono $NUNIT bin/Google.ProtocolBuffers.ProtoGen.Test.dll $NUNIT_OPTIONS
diff --git a/csharp/mono/generatesource.sh b/csharp/mono/generatesource.sh
new file mode 100755
index 0000000..218449e
--- /dev/null
+++ b/csharp/mono/generatesource.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+echo Compiling protobufs
+rm -rf tmp
+mkdir tmp
+PROTOS_DIR=../protos
+
+./protoc --proto_path=$PROTOS_DIR --descriptor_set_out=tmp/compiled.pb \
+  $PROTOS_DIR/google/protobuf/descriptor.proto \
+  $PROTOS_DIR/google/protobuf/csharp_options.proto \
+  $PROTOS_DIR/google/protobuf/unittest.proto \
+  $PROTOS_DIR/google/protobuf/unittest_csharp_options.proto \
+  $PROTOS_DIR/google/protobuf/unittest_custom_options.proto \
+  $PROTOS_DIR/google/protobuf/unittest_embed_optimize_for.proto \
+  $PROTOS_DIR/google/protobuf/unittest_import.proto \
+  $PROTOS_DIR/google/protobuf/unittest_mset.proto \
+  $PROTOS_DIR/google/protobuf/unittest_optimize_for.proto \
+  $PROTOS_DIR/tutorial/addressbook.proto
+
+cd tmp
+echo Generating new source
+mono ../bin/ProtoGen.exe compiled.pb
+
+echo Copying source into place
+cp DescriptorProtoFile.cs CSharpOptions.cs ../../src/ProtocolBuffers/DescriptorProtos
+cp UnitTest*.cs ../../src/ProtocolBuffers.Test/TestProtos
+cp AddressBookProtos.cs ../../src/AddressBook
+cd ..
+rm -rf tmp
diff --git a/csharp/mono/readme.txt b/csharp/mono/readme.txt
new file mode 100644
index 0000000..ad873a5
--- /dev/null
+++ b/csharp/mono/readme.txt
@@ -0,0 +1,91 @@
+Getting started with Protocol Buffers on Mono
+---------------------------------------------
+
+Prerequisites:
+
+o Mono 2.4 or higher. Earlier versions of Mono had too
+  many issues with the weird and wonderful generic type
+  relationships in Protocol Buffers. (Even Mono 2.4 *did*
+  have a few compile-time problems, but I've worked round them.)
+
+o Some sort of Linux/Unix system
+  You can try running with Bash on Windows via MINGW32 or
+  something similar, but you're on your own :) It's easier
+  to build and test everything with .NET if you're on
+  Windows.
+
+o The native Protocol Buffers build for your system.
+  Get it from http://code.google.com/p/protobuf/
+  After building it, copy the executable protoc
+  file into this directory.
+  
+o The NUnit binaries from http://nunit.org
+  I generally just download the latest version, which
+  may not be the one which goes with nunit.framework.dll
+  in ../lib, but I've never found this to be a problem.
+  
+Building the code with current sources
+--------------------------------------
+
+1) Edit buildall.sh to tell it where to find nunit-console.exe
+   (and possibly change other options)
+   
+2) Run buildall.sh from this directory. It should build the
+   main library code + tests and ProtoGen code + tests, running
+   each set of tests after building it.
+   
+Note that currently one test is ignored in ServiceTest.cs. This
+made the Mono VM blow up - I suspect it's some interaction with
+Rhino which doesn't quite work on Mono 2.4. If you want to see a
+truly nasty stack trace, just comment out the Ignore attribute in
+ServiceTest.cs and rerun.
+
+The binaries will be produced in a bin directory under this one. The
+build currently starts from scratch each time, cleaning out the bin
+directory first. Once I've decided on a full NAnt or xbuild
+strategy, I'll do something a little cleaner.
+
+Rebuilding sources for generated code
+-------------------------------------
+
+1) Build the current code first. The bootstrapping issue is why
+   the generated source code is in the source repository :) See
+   the steps above.
+   
+2) Run generatesource.sh from this directory. This will create a
+   temporary directory, compile the .proto files into a binary
+   format, then run ProtoGen to generate .cs files from the binary
+   format. It will copy these files to the right places in the tree,
+   and finally delete the temporary directory.
+   
+3) Rebuild to test that your newly generated sources work. (Optionally
+   regenerate as well, and hash the generated files to check that
+   the new build generates the same code as the old build :)
+   
+Running the code
+----------------
+
+Once you've built the binaries, you should be able to use them just
+as if you'd built them with .NET. (And indeed, you should be able to
+use binaries built with .NET as if you'd built them with Mono :)
+
+See the getting started guide for more information:
+http://code.google.com/p/protobuf-csharp-port/wiki/GettingStarted
+
+FAQ (Frequently Anticipated Questions)
+--------------------------------------
+
+Q) This build process sucks! Why aren't you doing X, Y, Z?
+A) My Mono skills are limited. My NAnt skills are limited. My
+   MSBuild/xbuild skils are limited. My shell script skills are
+   limited. Any help is *very* welcome!
+   
+Q) Why doesn't it build ProtoBench etc?
+A) This is a first initial "release" I'll add more bits to
+   the build script. I'll be interested to see the results
+   of benchmarking it on Mono :)
+
+Any further questions or suggestions? Please email skeet@pobox.com
+or leave a request at
+http://code.google.com/p/protobuf-csharp-port/issues/list
+
diff --git a/csharp/protos/benchmarks/google_size.proto b/csharp/protos/benchmarks/google_size.proto
new file mode 100644
index 0000000..1442ca2
--- /dev/null
+++ b/csharp/protos/benchmarks/google_size.proto
@@ -0,0 +1,140 @@
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.ProtoBench";
+option (google.protobuf.csharp_file_options).umbrella_classname = "GoogleSizeProtoFile";
+
+package benchmarks;
+
+option java_outer_classname = "GoogleSize";
+option optimize_for = CODE_SIZE;
+
+message SizeMessage1 {
+  required string field1 = 1;
+  optional string field9 = 9;
+  optional string field18 = 18;
+  optional bool field80 = 80 [default=false];
+  optional bool field81 = 81 [default=true];
+  required int32 field2 = 2;
+  required int32 field3 = 3;
+  optional int32 field280 = 280;
+  optional int32 field6 = 6 [default=0];
+  optional int64 field22 = 22;
+  optional string field4 = 4;
+  repeated fixed64 field5 = 5;
+  optional bool field59 = 59 [default=false];
+  optional string field7 = 7;
+  optional int32 field16 = 16;
+  optional int32 field130 = 130 [default=0];
+  optional bool field12 = 12 [default=true];
+  optional bool field17 = 17 [default=true];
+  optional bool field13 = 13 [default=true];
+  optional bool field14 = 14 [default=true];
+  optional int32 field104 = 104 [default=0];
+  optional int32 field100 = 100 [default=0];
+  optional int32 field101 = 101 [default=0];
+  optional string field102 = 102;
+  optional string field103 = 103;
+  optional int32 field29 = 29 [default=0];
+  optional bool field30 = 30 [default=false];
+  optional int32 field60 = 60 [default=-1];
+  optional int32 field271 = 271 [default=-1];
+  optional int32 field272 = 272 [default=-1];
+  optional int32 field150 = 150;
+  optional int32 field23 = 23 [default=0];
+  optional bool field24 = 24 [default=false];
+  optional int32 field25 = 25 [default=0];
+  optional SizeMessage1SubMessage field15 = 15;
+  optional bool field78 = 78;
+  optional int32 field67 = 67 [default=0];
+  optional int32 field68 = 68;
+  optional int32 field128 = 128 [default=0];
+  optional string field129 = 129 [default="xxxxxxxxxxxxxxxxxxxxx"];
+  optional int32 field131 = 131 [default=0];
+}
+
+message SizeMessage1SubMessage {
+  optional int32 field1 = 1 [default=0];
+  optional int32 field2 = 2 [default=0];
+  optional int32 field3 = 3 [default=0];
+  optional string field15 = 15;
+  optional bool field12 = 12 [default=true];
+  optional int64 field13 = 13;
+  optional int64 field14 = 14;
+  optional int32 field16 = 16;
+  optional int32 field19 = 19 [default=2];
+  optional bool field20  = 20 [default=true];
+  optional bool field28 = 28 [default=true];
+  optional fixed64 field21 = 21;
+  optional int32 field22 = 22;
+  optional bool field23 = 23 [ default=false ];
+  optional bool field206 = 206 [default=false];
+  optional fixed32 field203 = 203;
+  optional int32 field204 = 204;
+  optional string field205 = 205;
+  optional uint64 field207 = 207;
+  optional uint64 field300 = 300;
+}
+
+message SizeMessage2 {
+  optional string field1 = 1;
+  optional int64 field3 = 3;
+  optional int64 field4 = 4;
+  optional int64 field30 = 30;
+  optional bool field75  = 75 [default=false];
+  optional string field6 = 6;
+  optional bytes field2 = 2;
+  optional int32 field21 = 21 [default=0];
+  optional int32 field71 = 71;
+  optional float field25 = 25;
+  optional int32 field109 = 109 [default=0];
+  optional int32 field210 = 210 [default=0];
+  optional int32 field211 = 211 [default=0];
+  optional int32 field212 = 212 [default=0];
+  optional int32 field213 = 213 [default=0];
+  optional int32 field216 = 216 [default=0];
+  optional int32 field217 = 217 [default=0];
+  optional int32 field218 = 218 [default=0];
+  optional int32 field220 = 220 [default=0];
+  optional int32 field221 = 221 [default=0];
+  optional float field222 = 222 [default=0.0];
+  optional int32 field63 = 63;
+
+  repeated group Group1 = 10 {
+    required float field11 = 11;
+    optional float field26 = 26;
+    optional string field12 = 12;
+    optional string field13 = 13;
+    repeated string field14 = 14;
+    required uint64 field15 = 15;
+    optional int32 field5 = 5;
+    optional string field27 = 27;
+    optional int32 field28 = 28;
+    optional string field29 = 29;
+    optional string field16 = 16;
+    repeated string field22 = 22;
+    repeated int32 field73 = 73;
+    optional int32 field20 = 20 [default=0];
+    optional string field24 = 24;
+    optional SizeMessage2GroupedMessage field31 = 31;
+  }
+  repeated string field128 = 128;
+  optional int64 field131 = 131;
+  repeated string field127 = 127;
+  optional int32 field129 = 129;
+  repeated int64 field130 = 130;
+  optional bool field205 = 205 [default=false];
+  optional bool field206 = 206 [default=false];
+}
+
+message SizeMessage2GroupedMessage {
+  optional float field1 = 1;
+  optional float field2 = 2;
+  optional float field3 = 3 [default=0.0];
+  optional bool field4 = 4;
+  optional bool field5 = 5;
+  optional bool field6 = 6 [default=true];
+  optional bool field7 = 7 [default=false];
+  optional float field8 = 8;
+  optional bool field9 = 9;
+  optional float field10 = 10;
+  optional int64 field11 = 11;
+}
diff --git a/csharp/protos/benchmarks/google_speed.proto b/csharp/protos/benchmarks/google_speed.proto
new file mode 100644
index 0000000..269eba8
--- /dev/null
+++ b/csharp/protos/benchmarks/google_speed.proto
@@ -0,0 +1,140 @@
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.ProtoBench";
+option (google.protobuf.csharp_file_options).umbrella_classname = "GoogleSpeedProtoFile";
+
+package benchmarks;
+
+option java_outer_classname = "GoogleSpeed";
+option optimize_for = SPEED;
+
+message SpeedMessage1 {
+  required string field1 = 1;
+  optional string field9 = 9;
+  optional string field18 = 18;
+  optional bool field80 = 80 [default=false];
+  optional bool field81 = 81 [default=true];
+  required int32 field2 = 2;
+  required int32 field3 = 3;
+  optional int32 field280 = 280;
+  optional int32 field6 = 6 [default=0];
+  optional int64 field22 = 22;
+  optional string field4 = 4;
+  repeated fixed64 field5 = 5;
+  optional bool field59 = 59 [default=false];
+  optional string field7 = 7;
+  optional int32 field16 = 16;
+  optional int32 field130 = 130 [default=0];
+  optional bool field12 = 12 [default=true];
+  optional bool field17 = 17 [default=true];
+  optional bool field13 = 13 [default=true];
+  optional bool field14 = 14 [default=true];
+  optional int32 field104 = 104 [default=0];
+  optional int32 field100 = 100 [default=0];
+  optional int32 field101 = 101 [default=0];
+  optional string field102 = 102;
+  optional string field103 = 103;
+  optional int32 field29 = 29 [default=0];
+  optional bool field30 = 30 [default=false];
+  optional int32 field60 = 60 [default=-1];
+  optional int32 field271 = 271 [default=-1];
+  optional int32 field272 = 272 [default=-1];
+  optional int32 field150 = 150;
+  optional int32 field23 = 23 [default=0];
+  optional bool field24 = 24 [default=false];
+  optional int32 field25 = 25 [default=0];
+  optional SpeedMessage1SubMessage field15 = 15;
+  optional bool field78 = 78;
+  optional int32 field67 = 67 [default=0];
+  optional int32 field68 = 68;
+  optional int32 field128 = 128 [default=0];
+  optional string field129 = 129 [default="xxxxxxxxxxxxxxxxxxxxx"];
+  optional int32 field131 = 131 [default=0];
+}
+
+message SpeedMessage1SubMessage {
+  optional int32 field1 = 1 [default=0];
+  optional int32 field2 = 2 [default=0];
+  optional int32 field3 = 3 [default=0];
+  optional string field15 = 15;
+  optional bool field12 = 12 [default=true];
+  optional int64 field13 = 13;
+  optional int64 field14 = 14;
+  optional int32 field16 = 16;
+  optional int32 field19 = 19 [default=2];
+  optional bool field20  = 20 [default=true];
+  optional bool field28 = 28 [default=true];
+  optional fixed64 field21 = 21;
+  optional int32 field22 = 22;
+  optional bool field23 = 23 [ default=false ];
+  optional bool field206 = 206 [default=false];
+  optional fixed32 field203 = 203;
+  optional int32 field204 = 204;
+  optional string field205 = 205;
+  optional uint64 field207 = 207;
+  optional uint64 field300 = 300;
+}
+
+message SpeedMessage2 {
+  optional string field1 = 1;
+  optional int64 field3 = 3;
+  optional int64 field4 = 4;
+  optional int64 field30 = 30;
+  optional bool field75  = 75 [default=false];
+  optional string field6 = 6;
+  optional bytes field2 = 2;
+  optional int32 field21 = 21 [default=0];
+  optional int32 field71 = 71;
+  optional float field25 = 25;
+  optional int32 field109 = 109 [default=0];
+  optional int32 field210 = 210 [default=0];
+  optional int32 field211 = 211 [default=0];
+  optional int32 field212 = 212 [default=0];
+  optional int32 field213 = 213 [default=0];
+  optional int32 field216 = 216 [default=0];
+  optional int32 field217 = 217 [default=0];
+  optional int32 field218 = 218 [default=0];
+  optional int32 field220 = 220 [default=0];
+  optional int32 field221 = 221 [default=0];
+  optional float field222 = 222 [default=0.0];
+  optional int32 field63 = 63;
+
+  repeated group Group1 = 10 {
+    required float field11 = 11;
+    optional float field26 = 26;
+    optional string field12 = 12;
+    optional string field13 = 13;
+    repeated string field14 = 14;
+    required uint64 field15 = 15;
+    optional int32 field5 = 5;
+    optional string field27 = 27;
+    optional int32 field28 = 28;
+    optional string field29 = 29;
+    optional string field16 = 16;
+    repeated string field22 = 22;
+    repeated int32 field73 = 73;
+    optional int32 field20 = 20 [default=0];
+    optional string field24 = 24;
+    optional SpeedMessage2GroupedMessage field31 = 31;
+  }
+  repeated string field128 = 128;
+  optional int64 field131 = 131;
+  repeated string field127 = 127;
+  optional int32 field129 = 129;
+  repeated int64 field130 = 130;
+  optional bool field205 = 205 [default=false];
+  optional bool field206 = 206 [default=false];
+}
+
+message SpeedMessage2GroupedMessage {
+  optional float field1 = 1;
+  optional float field2 = 2;
+  optional float field3 = 3 [default=0.0];
+  optional bool field4 = 4;
+  optional bool field5 = 5;
+  optional bool field6 = 6 [default=true];
+  optional bool field7 = 7 [default=false];
+  optional float field8 = 8;
+  optional bool field9 = 9;
+  optional float field10 = 10;
+  optional int64 field11 = 11;
+}
diff --git a/csharp/protos/extest/unittest_extras.proto b/csharp/protos/extest/unittest_extras.proto
new file mode 100644
index 0000000..91f10fb
--- /dev/null
+++ b/csharp/protos/extest/unittest_extras.proto
@@ -0,0 +1,37 @@
+// Additional options required for C# generation. File from copyright

+// line onwards is as per original distribution.

+import "google/protobuf/csharp_options.proto";

+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";

+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestExtrasProtoFile";

+option (google.protobuf.csharp_file_options).add_serializable = true;

+

+package protobuf_unittest_extra;

+

+option java_package = "com.google.protobuf";

+

+message TestUnpackedExtensions {

+  extensions 1 to max;

+}

+

+extend TestUnpackedExtensions {

+  repeated    int32 unpacked_int32_extension    =  90;

+  repeated    int64 unpacked_int64_extension    =  91;

+  repeated   uint32 unpacked_uint32_extension   =  92;

+  repeated   uint64 unpacked_uint64_extension   =  93;

+  repeated   sint32 unpacked_sint32_extension   =  94;

+  repeated   sint64 unpacked_sint64_extension   =  95;

+  repeated  fixed32 unpacked_fixed32_extension  =  96;

+  repeated  fixed64 unpacked_fixed64_extension  =  97;

+  repeated sfixed32 unpacked_sfixed32_extension =  98;

+  repeated sfixed64 unpacked_sfixed64_extension =  99;

+  repeated    float unpacked_float_extension    = 100;

+  repeated   double unpacked_double_extension   = 101;

+  repeated     bool unpacked_bool_extension     = 102;

+  repeated UnpackedExtensionsForeignEnum unpacked_enum_extension  = 103;

+}

+

+enum UnpackedExtensionsForeignEnum {

+  FOREIGN_FOO = 4;

+  FOREIGN_BAR = 5;

+  FOREIGN_BAZ = 6;

+}

diff --git a/csharp/protos/extest/unittest_extras_full.proto b/csharp/protos/extest/unittest_extras_full.proto
new file mode 100644
index 0000000..a334bbf
--- /dev/null
+++ b/csharp/protos/extest/unittest_extras_full.proto
@@ -0,0 +1,72 @@
+// Additional options required for C# generation. File from copyright
+// line onwards is as per original distribution.
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestExtrasFullProtoFile";
+
+package protobuf_unittest_extra;
+
+option optimize_for = CODE_SIZE;
+
+option java_package = "com.google.protobuf";
+
+message TestInteropPerson {
+  required string name = 1;
+  required int32 id = 2;
+  optional string email = 3;
+  repeated int32 codes = 10 [packed=true];
+
+  enum PhoneType {
+    MOBILE = 0;
+    HOME = 1;
+    WORK = 2;
+  }
+
+  message PhoneNumber {
+    required string number = 1;
+    optional PhoneType type = 2 [default = HOME];
+  }
+
+  repeated PhoneNumber phone = 4;
+  
+  repeated group Addresses = 5 {
+    required string address = 1;
+    optional string address2 = 2;
+    required string city = 3;
+    required string state = 4;
+    required fixed32 zip = 5;
+  }
+
+  extensions 100 to 199;
+}
+
+message  TestInteropEmployeeId {
+  required string number = 1;
+}
+  
+extend TestInteropPerson {
+  required TestInteropEmployeeId employee_id = 126;
+}
+
+message TestMissingFieldsA {
+  required string name = 1;
+  required int32 id = 2;
+  optional string email = 3;
+  
+  message SubA {
+    required int32 count = 5;
+    repeated string values = 6;
+  }
+  optional SubA testA = 11;
+}
+
+message TestMissingFieldsB {
+  required string name = 1;
+  required int32 id = 2;
+  optional string website = 4;
+  
+  message SubB {
+    repeated string values = 7;
+  }
+  optional SubB testB = 12;
+}
diff --git a/csharp/protos/extest/unittest_extras_lite.proto b/csharp/protos/extest/unittest_extras_lite.proto
new file mode 100644
index 0000000..ea1bcd2
--- /dev/null
+++ b/csharp/protos/extest/unittest_extras_lite.proto
@@ -0,0 +1,117 @@
+// Additional options required for C# generation. File from copyright

+// line onwards is as per original distribution.

+import "google/protobuf/csharp_options.proto";

+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";

+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestExtrasLiteProtoFile";

+option (google.protobuf.csharp_file_options).add_serializable = true;

+

+package protobuf_unittest_extra;

+

+option optimize_for = LITE_RUNTIME;

+

+option java_package = "com.google.protobuf";

+

+message TestRequiredLite {

+  required int32 d = 1;

+  required ExtraEnum en = 2 [default = DEFAULT];

+}

+

+enum ExtraEnum {

+  DEFAULT = 10;

+  EXLITE_FOO = 7;

+  EXLITE_BAR = 8;

+  EXLITE_BAZ = 9;

+}

+

+message TestInteropPersonLite {

+  required string name = 1;

+  required int32 id = 2;

+  optional string email = 3;

+  repeated int32 codes = 10 [packed=true];

+

+  enum PhoneType {

+    MOBILE = 0;

+    HOME = 1;

+    WORK = 2;

+  }

+

+  message PhoneNumber {

+    required string number = 1;

+    optional PhoneType type = 2 [default = HOME];

+  }

+

+  repeated PhoneNumber phone = 4;

+  

+  repeated group Addresses = 5 {

+    required string address = 1;

+    optional string address2 = 2;

+    required string city = 3;

+    required string state = 4;

+    required fixed32 zip = 5;

+  }

+

+  extensions 100 to 199;

+}

+

+message  TestInteropEmployeeIdLite {

+  required string number = 1;

+}

+  

+extend TestInteropPersonLite {

+  required TestInteropEmployeeIdLite employee_id_lite = 126;

+}

+

+/* Removed from unittest_lite.proto and added back here */

+

+message TestUnpackedExtensionsLite {

+  extensions 1 to max;

+}

+

+message TestUnpackedTypesLite {

+  repeated    int32 unpacked_int32    =  90;

+  repeated    int64 unpacked_int64    =  91;

+  repeated   uint32 unpacked_uint32   =  92;

+  repeated   uint64 unpacked_uint64   =  93;

+  repeated   sint32 unpacked_sint32   =  94;

+  repeated   sint64 unpacked_sint64   =  95;

+  repeated  fixed32 unpacked_fixed32  =  96;

+  repeated  fixed64 unpacked_fixed64  =  97;

+  repeated sfixed32 unpacked_sfixed32 =  98;

+  repeated sfixed64 unpacked_sfixed64 =  99;

+  repeated    float unpacked_float    = 100;

+  repeated   double unpacked_double   = 101;

+  repeated     bool unpacked_bool     = 102;

+  repeated UnpackedTypesForeignEnumLite unpacked_enum  = 103;

+}

+

+extend TestUnpackedExtensionsLite {

+  repeated    int32 unpacked_int32_extension_lite    =  90;

+  repeated    int64 unpacked_int64_extension_lite    =  91;

+  repeated   uint32 unpacked_uint32_extension_lite   =  92;

+  repeated   uint64 unpacked_uint64_extension_lite   =  93;

+  repeated   sint32 unpacked_sint32_extension_lite   =  94;

+  repeated   sint64 unpacked_sint64_extension_lite   =  95;

+  repeated  fixed32 unpacked_fixed32_extension_lite  =  96;

+  repeated  fixed64 unpacked_fixed64_extension_lite  =  97;

+  repeated sfixed32 unpacked_sfixed32_extension_lite =  98;

+  repeated sfixed64 unpacked_sfixed64_extension_lite =  99;

+  repeated    float unpacked_float_extension_lite    = 100;

+  repeated   double unpacked_double_extension_lite   = 101;

+  repeated     bool unpacked_bool_extension_lite     = 102;

+  repeated UnpackedTypesForeignEnumLite unpacked_enum_extension_lite = 103;

+}

+

+enum UnpackedTypesForeignEnumLite {

+  FOREIGN_LITE_FOO = 4;

+  FOREIGN_LITE_BAR = 5;

+  FOREIGN_LITE_BAZ = 6;

+}

+

+message BucketOfBytes {

+    optional bytes value = 1;

+    

+}

+message BucketOfBytesEx {

+    optional bytes value = 1;

+    optional bytes value2 = 255;

+}
\ No newline at end of file
diff --git a/csharp/protos/extest/unittest_extras_xmltest.proto b/csharp/protos/extest/unittest_extras_xmltest.proto
new file mode 100644
index 0000000..ab8088a
--- /dev/null
+++ b/csharp/protos/extest/unittest_extras_xmltest.proto
@@ -0,0 +1,54 @@
+import "google/protobuf/csharp_options.proto";

+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";

+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestXmlSerializerTestProtoFile";

+option (google.protobuf.csharp_file_options).add_serializable = true;

+

+package protobuf_unittest_extra;

+

+option optimize_for = SPEED;

+

+enum EnumOptions {

+  ONE = 0;

+  TWO = 1;

+  THREE = 2;

+}

+

+message TestXmlChild {

+  repeated EnumOptions options = 3;

+  optional bytes binary = 4;

+}

+

+message TestXmlNoFields {

+}

+

+message TestXmlRescursive {

+  optional TestXmlRescursive child = 1;

+}

+

+message TestXmlMessage {

+

+  optional int64 number = 6;

+  repeated int32 numbers = 2;

+  optional string text = 3;

+  repeated string textlines = 700;

+  optional bool valid = 5;

+

+  optional TestXmlChild child = 1;

+  repeated group Children = 401 {

+    repeated EnumOptions options = 3;

+    optional bytes binary = 4;

+  }

+

+extensions 100 to 199;

+}

+

+message  TestXmlExtension {

+  required int32 number = 1;

+}

+

+extend TestXmlMessage {

+  optional EnumOptions extension_enum = 101;

+  optional string extension_text = 102;

+  repeated int32 extension_number = 103 [packed = true];

+  optional TestXmlExtension extension_message = 199;

+}

diff --git a/csharp/protos/extest/unittest_generic_services.proto b/csharp/protos/extest/unittest_generic_services.proto
new file mode 100644
index 0000000..3fe2e8e
--- /dev/null
+++ b/csharp/protos/extest/unittest_generic_services.proto
@@ -0,0 +1,29 @@
+// Additional options required for C# generation. File from copyright

+// line onwards is as per original distribution.

+import "google/protobuf/csharp_options.proto";

+import "google/protobuf/unittest.proto";

+import "google/protobuf/unittest_custom_options.proto";

+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";

+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestGenericServices";

+

+option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;

+

+// We don't put this in a package within proto2 because we need to make sure
+// that the generated code doesn't depend on being in the proto2 namespace.
+package protobuf_unittest;
+
+option optimize_for = SPEED;

+

+service TestGenericService {

+  rpc Foo(FooRequest) returns (FooResponse);

+  rpc Bar(BarRequest) returns (BarResponse);

+}

+
+service TestGenericServiceWithCustomOptions {
+  option (service_opt1) = -9876543210;
+
+  rpc Foo(CustomOptionFooRequest) returns (CustomOptionFooResponse) {
+    option (method_opt1) = METHODOPT1_VAL2;
+  }
+}
+
diff --git a/csharp/protos/extest/unittest_issues.proto b/csharp/protos/extest/unittest_issues.proto
new file mode 100644
index 0000000..cb80379
--- /dev/null
+++ b/csharp/protos/extest/unittest_issues.proto
@@ -0,0 +1,137 @@
+// These proto descriptors have at one time been reported as an issue or defect.

+// They are kept here to replicate the issue, and continue to verify the fix.

+import "google/protobuf/csharp_options.proto";

+

+// Issue: Non-"Google.Protobuffers" namespace will ensure that protobuffer library types are qualified

+option (google.protobuf.csharp_file_options).namespace = "UnitTest.Issues.TestProtos";

+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestExtrasIssuesProtoFile";

+

+package unittest_issues;

+option optimize_for = SPEED;

+

+// The following is a representative set of features

+/*

+enum EnumOptions {

+    ONE = 0;

+    TWO = 1;

+    THREE = 2;

+}

+

+message TestBasicChild

+{

+    repeated EnumOptions options = 3;

+    optional bytes binary = 4;

+}

+

+message TestBasicNoFields {

+}

+

+message TestBasicRescursive {

+    optional TestBasicRescursive child = 1;

+}

+

+message TestBasicMessage {

+

+    optional int64 number = 6;

+    repeated int32 numbers = 2;

+    optional string text = 3;

+    repeated string textlines = 700;

+    optional bool valid = 5;

+    

+    optional TestBasicChild child = 1;

+    repeated group Children = 401 

+    {

+        repeated EnumOptions options = 3;

+        optional bytes binary = 4;

+    }

+

+    extensions 100 to 199;

+}

+

+message  TestBasicExtension {

+  required int32 number = 1;

+}

+  

+extend TestBasicMessage {

+  optional EnumOptions extension_enum = 101;

+  optional string extension_text = 102;

+  repeated int32 extension_number = 103 [packed = true];

+  optional TestBasicExtension extension_message = 199;

+}

+

+// Issue for non-qualified type reference in new services generation

+option (google.protobuf.csharp_file_options).service_generator_type = IRPCDISPATCH;

+

+service TestGenericService {

+  rpc Foo(TestBasicNoFields) returns (TestBasicMessage);

+  rpc Bar(TestBasicNoFields) returns (TestBasicMessage);

+}

+*/

+// Issue 13: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=13

+ 

+message A {

+    optional int32 _A = 1;

+}

+

+message B {

+    optional int32 B_ = 1;

+}

+

+message AB {

+    optional int32 a_b = 1;

+}

+

+// Similar issue with numeric names

+message NumberField {

+    optional int32 _01 = 1;

+}

+

+// Issue 28: Circular message dependencies result in null defaults for DefaultInstance

+

+message MyMessageAReferenceB {

+    required MyMessageBReferenceA value = 1;

+}

+

+message MyMessageBReferenceA {

+    required MyMessageAReferenceB value = 1;

+}

+

+// issue 19 - negative enum values

+

+enum NegativeEnum {

+    FiveBelow = -5;

+    MinusOne = -1;

+    Zero = 0;

+}

+

+message NegativeEnumMessage { 

+    optional NegativeEnum value = 1;

+    repeated NegativeEnum values = 2;

+    repeated NegativeEnum packed_values = 3 [packed=true];

+}

+

+// Issue 21: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=21

+// Decorate fields with [deprecated=true] as [System.Obsolete]

+

+message DeprecatedChild {

+}

+

+enum DeprecatedEnum {

+    one = 1;

+}

+

+message DeprecatedFieldsMessage {

+    optional int32 PrimitiveValue = 1 [deprecated = true];

+    repeated int32 PrimitiveArray = 2 [deprecated = true];

+

+    optional DeprecatedChild MessageValue = 3 [deprecated = true];

+    repeated DeprecatedChild MessageArray = 4 [deprecated = true];

+

+    optional DeprecatedEnum EnumValue = 5 [deprecated = true];

+    repeated DeprecatedEnum EnumArray = 6 [deprecated = true];

+}

+

+// Issue 45: http://code.google.com/p/protobuf-csharp-port/issues/detail?id=45

+message ItemField {

+  optional int32 item = 1;

+}

diff --git a/csharp/protos/extest/unittest_rpc_interop.proto b/csharp/protos/extest/unittest_rpc_interop.proto
new file mode 100644
index 0000000..dec5b87
--- /dev/null
+++ b/csharp/protos/extest/unittest_rpc_interop.proto
@@ -0,0 +1,41 @@
+// Additional options required for C# generation. File from copyright

+// line onwards is as per original distribution.

+import "google/protobuf/csharp_options.proto";

+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";

+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestRpcInterop";

+

+option (google.protobuf.csharp_file_options).service_generator_type = IRPCDISPATCH;

+

+option optimize_for = SPEED;

+

+message SearchRequest {

+  repeated string Criteria = 1;

+}

+

+message SearchResponse {

+  message ResultItem {

+    required string url = 1;

+    optional string name = 2;

+  }

+  

+  repeated ResultItem results = 1;

+}

+

+message RefineSearchRequest {

+  repeated string Criteria = 1;

+  required SearchResponse previous_results = 2;

+}

+

+service SearchService {

+  /*

+  Add this option to specify the GuidAttribute on the service interface

+  option (google.protobuf.csharp_service_options).interface_id = "{A65F0925-FD11-4f94-B166-89AC4F027205}";

+  */

+  rpc Search (SearchRequest) returns (SearchResponse) 

+  /*

+  Add this option to specify the DispIdAttribute on the service interface

+  { option (google.protobuf.csharp_method_options).dispatch_id = 5; } 

+  */ ;

+  

+  rpc RefineSearch (RefineSearchRequest) returns (SearchResponse);

+}

diff --git a/csharp/protos/extest/unittest_rpc_interop_lite.proto b/csharp/protos/extest/unittest_rpc_interop_lite.proto
new file mode 100644
index 0000000..62d1c6a
--- /dev/null
+++ b/csharp/protos/extest/unittest_rpc_interop_lite.proto
@@ -0,0 +1,42 @@
+// Additional options required for C# generation. File from copyright

+// line onwards is as per original distribution.

+import "google/protobuf/csharp_options.proto";

+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";

+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestRpcInteropLite";

+

+option (google.protobuf.csharp_file_options).service_generator_type = IRPCDISPATCH;

+

+option optimize_for = LITE_RUNTIME;

+package unittest_rpc_interop_lite;

+

+message SearchRequest {

+  repeated string Criteria = 1;

+}

+

+message SearchResponse {

+  message ResultItem {

+    required string url = 1;

+    optional string name = 2;

+  }

+  

+  repeated ResultItem results = 1;

+}

+

+message RefineSearchRequest {

+  repeated string Criteria = 1;

+  required SearchResponse previous_results = 2;

+}

+

+service SearchService {

+  /*

+  Add this option to specify the GuidAttribute on the service interface

+  option (google.protobuf.csharp_service_options).interface_id = "{A65F0925-FD11-4f94-B166-89AC4F027205}";

+  */

+  rpc Search (SearchRequest) returns (SearchResponse) 

+  /*

+  Add this option to specify the DispIdAttribute on the service interface

+  { option (google.protobuf.csharp_method_options).dispatch_id = 5; } 

+  */ ;

+  

+  rpc RefineSearch (RefineSearchRequest) returns (SearchResponse);

+}

diff --git a/csharp/protos/google/protobuf/compiler/plugin.proto b/csharp/protos/google/protobuf/compiler/plugin.proto
new file mode 100644
index 0000000..866fba1
--- /dev/null
+++ b/csharp/protos/google/protobuf/compiler/plugin.proto
@@ -0,0 +1,147 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+// Author: kenton@google.com (Kenton Varda)

+//

+// WARNING:  The plugin interface is currently EXPERIMENTAL and is subject to

+//   change.

+//

+// protoc (aka the Protocol Compiler) can be extended via plugins.  A plugin is

+// just a program that reads a CodeGeneratorRequest from stdin and writes a

+// CodeGeneratorResponse to stdout.

+//

+// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead

+// of dealing with the raw protocol defined here.

+//

+// A plugin executable needs only to be placed somewhere in the path.  The

+// plugin should be named "protoc-gen-$NAME", and will then be used when the

+// flag "--${NAME}_out" is passed to protoc.

+

+package google.protobuf.compiler;

+option java_package = "com.google.protobuf.compiler";

+option java_outer_classname = "PluginProtos";

+

+import "google/protobuf/descriptor.proto";

+

+// An encoded CodeGeneratorRequest is written to the plugin's stdin.

+message CodeGeneratorRequest {

+  // The .proto files that were explicitly listed on the command-line.  The

+  // code generator should generate code only for these files.  Each file's

+  // descriptor will be included in proto_file, below.

+  repeated string file_to_generate = 1;

+

+  // The generator parameter passed on the command-line.

+  optional string parameter = 2;

+

+  // FileDescriptorProtos for all files in files_to_generate and everything

+  // they import.  The files will appear in topological order, so each file

+  // appears before any file that imports it.

+  //

+  // protoc guarantees that all proto_files will be written after

+  // the fields above, even though this is not technically guaranteed by the

+  // protobuf wire format.  This theoretically could allow a plugin to stream

+  // in the FileDescriptorProtos and handle them one by one rather than read

+  // the entire set into memory at once.  However, as of this writing, this

+  // is not similarly optimized on protoc's end -- it will store all fields in

+  // memory at once before sending them to the plugin.

+  repeated FileDescriptorProto proto_file = 15;

+}

+

+// The plugin writes an encoded CodeGeneratorResponse to stdout.

+message CodeGeneratorResponse {

+  // Error message.  If non-empty, code generation failed.  The plugin process

+  // should exit with status code zero even if it reports an error in this way.

+  //

+  // This should be used to indicate errors in .proto files which prevent the

+  // code generator from generating correct code.  Errors which indicate a

+  // problem in protoc itself -- such as the input CodeGeneratorRequest being

+  // unparseable -- should be reported by writing a message to stderr and

+  // exiting with a non-zero status code.

+  optional string error = 1;

+

+  // Represents a single generated file.

+  message File {

+    // The file name, relative to the output directory.  The name must not

+    // contain "." or ".." components and must be relative, not be absolute (so,

+    // the file cannot lie outside the output directory).  "/" must be used as

+    // the path separator, not "\".

+    //

+    // If the name is omitted, the content will be appended to the previous

+    // file.  This allows the generator to break large files into small chunks,

+    // and allows the generated text to be streamed back to protoc so that large

+    // files need not reside completely in memory at one time.  Note that as of

+    // this writing protoc does not optimize for this -- it will read the entire

+    // CodeGeneratorResponse before writing files to disk.

+    optional string name = 1;

+

+    // If non-empty, indicates that the named file should already exist, and the

+    // content here is to be inserted into that file at a defined insertion

+    // point.  This feature allows a code generator to extend the output

+    // produced by another code generator.  The original generator may provide

+    // insertion points by placing special annotations in the file that look

+    // like:

+    //   @@protoc_insertion_point(NAME)

+    // The annotation can have arbitrary text before and after it on the line,

+    // which allows it to be placed in a comment.  NAME should be replaced with

+    // an identifier naming the point -- this is what other generators will use

+    // as the insertion_point.  Code inserted at this point will be placed

+    // immediately above the line containing the insertion point (thus multiple

+    // insertions to the same point will come out in the order they were added).

+    // The double-@ is intended to make it unlikely that the generated code

+    // could contain things that look like insertion points by accident.

+    //

+    // For example, the C++ code generator places the following line in the

+    // .pb.h files that it generates:

+    //   // @@protoc_insertion_point(namespace_scope)

+    // This line appears within the scope of the file's package namespace, but

+    // outside of any particular class.  Another plugin can then specify the

+    // insertion_point "namespace_scope" to generate additional classes or

+    // other declarations that should be placed in this scope.

+    //

+    // Note that if the line containing the insertion point begins with

+    // whitespace, the same whitespace will be added to every line of the

+    // inserted text.  This is useful for languages like Python, where

+    // indentation matters.  In these languages, the insertion point comment

+    // should be indented the same amount as any inserted code will need to be

+    // in order to work correctly in that context.

+    //

+    // The code generator that generates the initial file and the one which

+    // inserts into it must both run as part of a single invocation of protoc.

+    // Code generators are executed in the order in which they appear on the

+    // command line.

+    //

+    // If |insertion_point| is present, |name| must also be present.

+    optional string insertion_point = 2;

+

+    // The file contents.

+    optional string content = 15;

+  }

+  repeated File file = 15;

+}

diff --git a/csharp/protos/google/protobuf/csharp_options.proto b/csharp/protos/google/protobuf/csharp_options.proto
new file mode 100644
index 0000000..f09b96a
--- /dev/null
+++ b/csharp/protos/google/protobuf/csharp_options.proto
@@ -0,0 +1,115 @@
+// Extra options for C# generator

+

+import "google/protobuf/descriptor.proto";

+

+package google.protobuf;

+

+message CSharpFileOptions {

+

+  // Namespace for generated classes; defaults to the package.

+  optional string namespace = 1;

+  

+  // Name of the "umbrella" class used for metadata about all

+  // the messages within this file. Default is based on the name

+  // of the file.

+  optional string umbrella_classname = 2;

+  

+  // Whether classes should be public (true) or internal (false)

+  optional bool public_classes = 3 [default = true];

+

+  // Whether to generate a single file for everything within the

+  // .proto file (false), or one file per message (true).

+  // This option is not currently honored; please log a feature

+  // request if you really want it.

+  optional bool multiple_files = 4;

+

+  // Whether to nest messages within a single umbrella class (true)

+  // or create the umbrella class as a peer, with messages as

+  // top-level classes in the namespace (false)

+  optional bool nest_classes = 5;

+  

+  // Generate appropriate support for Code Contracts

+  // (Ongoing; support should improve over time)

+  optional bool code_contracts = 6;

+  

+  // Create subdirectories for namespaces, e.g. namespace "Foo.Bar"

+  // would generate files within [output directory]/Foo/Bar

+  optional bool expand_namespace_directories = 7;

+

+  // Generate attributes indicating non-CLS-compliance

+  optional bool cls_compliance = 8 [default = true];

+  

+  // Generate messages/builders with the [Serializable] attribute

+  optional bool add_serializable = 9 [default = false];

+  

+  // Generates a private ctor for Message types

+  optional bool generate_private_ctor = 10 [default = true];

+

+  // The extension that should be appended to the umbrella_classname when creating files.

+  optional string file_extension = 221 [default = ".cs"];

+  

+  // A nested namespace for the umbrella class.  Helpful for name collisions caused by 

+  // umbrella_classname conflicting with an existing type.  This will be automatically

+  // set to 'Proto' if a collision is detected with types being generated.  This value

+  // is ignored when nest_classes == true

+  optional string umbrella_namespace = 222;

+  

+  // The output path for the source file(s) generated

+  optional string output_directory = 223 [default = "."];

+

+  // Will ignore the type generations and remove dependencies for the descriptor proto

+  // files that declare their package to be "google.protobuf"

+  optional bool ignore_google_protobuf = 224 [default = false];

+

+  // Controls how services are generated, GENERIC is the deprecated original implementation

+  // INTERFACE generates service interfaces only, RPCINTEROP generates interfaces and 

+  // implementations using the included Windows RPC interop libarary.

+  optional CSharpServiceType service_generator_type = 225 [default = NONE];

+  

+  // Used to add the System.Runtime.CompilerServices.CompilerGeneratedAttribute and 

+  // System.CodeDom.Compiler.GeneratedCodeAttribute attributes to generated code.

+  optional bool generated_code_attributes = 226 [default = false];

+}

+

+enum CSharpServiceType {

+  // Services are ignored by the generator

+  NONE = 0;

+  // Generates the original Java generic service implementations

+  GENERIC = 1;

+  // Generates an interface for the service and nothing else

+  INTERFACE = 2;

+  // Generates an interface for the service and client/server wrappers for the interface

+  IRPCDISPATCH = 3;

+}

+

+extend FileOptions {

+  optional CSharpFileOptions csharp_file_options = 1000;

+}

+

+extend FieldOptions {

+  optional CSharpFieldOptions csharp_field_options = 1000;

+}

+

+message CSharpFieldOptions {

+  // Provides the ability to override the name of the property

+  // generated for this field. This is applied to all properties

+  // and methods to do with this field, including HasFoo, FooCount,

+  // FooList etc.

+  optional string property_name = 1;

+}

+

+message CSharpServiceOptions {

+  optional string interface_id = 1;

+}

+

+extend ServiceOptions {

+  optional CSharpServiceOptions csharp_service_options = 1000;

+}

+

+message CSharpMethodOptions {

+  optional int32 dispatch_id = 1;

+}

+

+extend MethodOptions {

+  optional CSharpMethodOptions csharp_method_options = 1000;

+}
\ No newline at end of file
diff --git a/csharp/protos/google/protobuf/descriptor.proto b/csharp/protos/google/protobuf/descriptor.proto
new file mode 100644
index 0000000..233f879
--- /dev/null
+++ b/csharp/protos/google/protobuf/descriptor.proto
@@ -0,0 +1,533 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// The messages in this file describe the definitions found in .proto files.
+// A valid .proto file can be translated directly to a FileDescriptorProto
+// without any other information (e.g. without reading its imports).
+
+
+
+package google.protobuf;
+option java_package = "com.google.protobuf";
+option java_outer_classname = "DescriptorProtos";
+
+// descriptor.proto must be optimized for speed because reflection-based
+// algorithms don't work during bootstrapping.
+option optimize_for = SPEED;
+
+// The protocol compiler can output a FileDescriptorSet containing the .proto
+// files it parses.
+message FileDescriptorSet {
+  repeated FileDescriptorProto file = 1;
+}
+
+// Describes a complete .proto file.
+message FileDescriptorProto {
+  optional string name = 1;       // file name, relative to root of source tree
+  optional string package = 2;    // e.g. "foo", "foo.bar", etc.
+
+  // Names of files imported by this file.
+  repeated string dependency = 3;
+
+  // All top-level definitions in this file.
+  repeated DescriptorProto message_type = 4;
+  repeated EnumDescriptorProto enum_type = 5;
+  repeated ServiceDescriptorProto service = 6;
+  repeated FieldDescriptorProto extension = 7;
+
+  optional FileOptions options = 8;
+
+  // This field contains optional information about the original source code.
+  // You may safely remove this entire field whithout harming runtime
+  // functionality of the descriptors -- the information is needed only by
+  // development tools.
+  optional SourceCodeInfo source_code_info = 9;
+}
+
+// Describes a message type.
+message DescriptorProto {
+  optional string name = 1;
+
+  repeated FieldDescriptorProto field = 2;
+  repeated FieldDescriptorProto extension = 6;
+
+  repeated DescriptorProto nested_type = 3;
+  repeated EnumDescriptorProto enum_type = 4;
+
+  message ExtensionRange {
+    optional int32 start = 1;
+    optional int32 end = 2;
+  }
+  repeated ExtensionRange extension_range = 5;
+
+  optional MessageOptions options = 7;
+}
+
+// Describes a field within a message.
+message FieldDescriptorProto {
+  enum Type {
+    // 0 is reserved for errors.
+    // Order is weird for historical reasons.
+    TYPE_DOUBLE         = 1;
+    TYPE_FLOAT          = 2;
+    TYPE_INT64          = 3;   // Not ZigZag encoded.  Negative numbers
+                               // take 10 bytes.  Use TYPE_SINT64 if negative
+                               // values are likely.
+    TYPE_UINT64         = 4;
+    TYPE_INT32          = 5;   // Not ZigZag encoded.  Negative numbers
+                               // take 10 bytes.  Use TYPE_SINT32 if negative
+                               // values are likely.
+    TYPE_FIXED64        = 6;
+    TYPE_FIXED32        = 7;
+    TYPE_BOOL           = 8;
+    TYPE_STRING         = 9;
+    TYPE_GROUP          = 10;  // Tag-delimited aggregate.
+    TYPE_MESSAGE        = 11;  // Length-delimited aggregate.
+
+    // New in version 2.
+    TYPE_BYTES          = 12;
+    TYPE_UINT32         = 13;
+    TYPE_ENUM           = 14;
+    TYPE_SFIXED32       = 15;
+    TYPE_SFIXED64       = 16;
+    TYPE_SINT32         = 17;  // Uses ZigZag encoding.
+    TYPE_SINT64         = 18;  // Uses ZigZag encoding.
+  };
+
+  enum Label {
+    // 0 is reserved for errors
+    LABEL_OPTIONAL      = 1;
+    LABEL_REQUIRED      = 2;
+    LABEL_REPEATED      = 3;
+    // TODO(sanjay): Should we add LABEL_MAP?
+  };
+
+  optional string name = 1;
+  optional int32 number = 3;
+  optional Label label = 4;
+
+  // If type_name is set, this need not be set.  If both this and type_name
+  // are set, this must be either TYPE_ENUM or TYPE_MESSAGE.
+  optional Type type = 5;
+
+  // For message and enum types, this is the name of the type.  If the name
+  // starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
+  // rules are used to find the type (i.e. first the nested types within this
+  // message are searched, then within the parent, on up to the root
+  // namespace).
+  optional string type_name = 6;
+
+  // For extensions, this is the name of the type being extended.  It is
+  // resolved in the same manner as type_name.
+  optional string extendee = 2;
+
+  // For numeric types, contains the original text representation of the value.
+  // For booleans, "true" or "false".
+  // For strings, contains the default text contents (not escaped in any way).
+  // For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
+  // TODO(kenton):  Base-64 encode?
+  optional string default_value = 7;
+
+  optional FieldOptions options = 8;
+}
+
+// Describes an enum type.
+message EnumDescriptorProto {
+  optional string name = 1;
+
+  repeated EnumValueDescriptorProto value = 2;
+
+  optional EnumOptions options = 3;
+}
+
+// Describes a value within an enum.
+message EnumValueDescriptorProto {
+  optional string name = 1;
+  optional int32 number = 2;
+
+  optional EnumValueOptions options = 3;
+}
+
+// Describes a service.
+message ServiceDescriptorProto {
+  optional string name = 1;
+  repeated MethodDescriptorProto method = 2;
+
+  optional ServiceOptions options = 3;
+}
+
+// Describes a method of a service.
+message MethodDescriptorProto {
+  optional string name = 1;
+
+  // Input and output type names.  These are resolved in the same way as
+  // FieldDescriptorProto.type_name, but must refer to a message type.
+  optional string input_type = 2;
+  optional string output_type = 3;
+
+  optional MethodOptions options = 4;
+}
+
+// ===================================================================
+// Options
+
+// Each of the definitions above may have "options" attached.  These are
+// just annotations which may cause code to be generated slightly differently
+// or may contain hints for code that manipulates protocol messages.
+//
+// Clients may define custom options as extensions of the *Options messages.
+// These extensions may not yet be known at parsing time, so the parser cannot
+// store the values in them.  Instead it stores them in a field in the *Options
+// message called uninterpreted_option. This field must have the same name
+// across all *Options messages. We then use this field to populate the
+// extensions when we build a descriptor, at which point all protos have been
+// parsed and so all extensions are known.
+//
+// Extension numbers for custom options may be chosen as follows:
+// * For options which will only be used within a single application or
+//   organization, or for experimental options, use field numbers 50000
+//   through 99999.  It is up to you to ensure that you do not use the
+//   same number for multiple options.
+// * For options which will be published and used publicly by multiple
+//   independent entities, e-mail kenton@google.com to reserve extension
+//   numbers.  Simply tell me how many you need and I'll send you back a
+//   set of numbers to use -- there's no need to explain how you intend to
+//   use them.  If this turns out to be popular, a web service will be set up
+//   to automatically assign option numbers.
+
+
+message FileOptions {
+
+  // Sets the Java package where classes generated from this .proto will be
+  // placed.  By default, the proto package is used, but this is often
+  // inappropriate because proto packages do not normally start with backwards
+  // domain names.
+  optional string java_package = 1;
+
+
+  // If set, all the classes from the .proto file are wrapped in a single
+  // outer class with the given name.  This applies to both Proto1
+  // (equivalent to the old "--one_java_file" option) and Proto2 (where
+  // a .proto always translates to a single class, but you may want to
+  // explicitly choose the class name).
+  optional string java_outer_classname = 8;
+
+  // If set true, then the Java code generator will generate a separate .java
+  // file for each top-level message, enum, and service defined in the .proto
+  // file.  Thus, these types will *not* be nested inside the outer class
+  // named by java_outer_classname.  However, the outer class will still be
+  // generated to contain the file's getDescriptor() method as well as any
+  // top-level extensions defined in the file.
+  optional bool java_multiple_files = 10 [default=false];
+
+  // If set true, then the Java code generator will generate equals() and
+  // hashCode() methods for all messages defined in the .proto file. This is
+  // purely a speed optimization, as the AbstractMessage base class includes
+  // reflection-based implementations of these methods.
+  optional bool java_generate_equals_and_hash = 20 [default=false];
+
+  // Generated classes can be optimized for speed or code size.
+  enum OptimizeMode {
+    SPEED = 1;        // Generate complete code for parsing, serialization,
+                      // etc.
+    CODE_SIZE = 2;    // Use ReflectionOps to implement these methods.
+    LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime.
+  }
+  optional OptimizeMode optimize_for = 9 [default=SPEED];
+
+
+
+
+  // Should generic services be generated in each language?  "Generic" services
+  // are not specific to any particular RPC system.  They are generated by the
+  // main code generators in each language (without additional plugins).
+  // Generic services were the only kind of service generation supported by
+  // early versions of proto2.
+  //
+  // Generic services are now considered deprecated in favor of using plugins
+  // that generate code specific to your particular RPC system.  Therefore,
+  // these default to false.  Old code which depends on generic services should
+  // explicitly set them to true.
+  optional bool cc_generic_services = 16 [default=false];
+  optional bool java_generic_services = 17 [default=false];
+  optional bool py_generic_services = 18 [default=false];
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message MessageOptions {
+  // Set true to use the old proto1 MessageSet wire format for extensions.
+  // This is provided for backwards-compatibility with the MessageSet wire
+  // format.  You should not use this for any other reason:  It's less
+  // efficient, has fewer features, and is more complicated.
+  //
+  // The message must be defined exactly as follows:
+  //   message Foo {
+  //     option message_set_wire_format = true;
+  //     extensions 4 to max;
+  //   }
+  // Note that the message cannot have any defined fields; MessageSets only
+  // have extensions.
+  //
+  // All extensions of your type must be singular messages; e.g. they cannot
+  // be int32s, enums, or repeated messages.
+  //
+  // Because this is an option, the above two restrictions are not enforced by
+  // the protocol compiler.
+  optional bool message_set_wire_format = 1 [default=false];
+
+  // Disables the generation of the standard "descriptor()" accessor, which can
+  // conflict with a field of the same name.  This is meant to make migration
+  // from proto1 easier; new code should avoid fields named "descriptor".
+  optional bool no_standard_descriptor_accessor = 2 [default=false];
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message FieldOptions {
+  // The ctype option instructs the C++ code generator to use a different
+  // representation of the field than it normally would.  See the specific
+  // options below.  This option is not yet implemented in the open source
+  // release -- sorry, we'll try to include it in a future version!
+  optional CType ctype = 1 [default = STRING];
+  enum CType {
+    // Default mode.
+    STRING = 0;
+
+    CORD = 1;
+
+    STRING_PIECE = 2;
+  }
+  // The packed option can be enabled for repeated primitive fields to enable
+  // a more efficient representation on the wire. Rather than repeatedly
+  // writing the tag and type for each element, the entire array is encoded as
+  // a single length-delimited blob.
+  optional bool packed = 2;
+
+
+  // Is this field deprecated?
+  // Depending on the target platform, this can emit Deprecated annotations
+  // for accessors, or it will be completely ignored; in the very least, this
+  // is a formalization for deprecating fields.
+  optional bool deprecated = 3 [default=false];
+
+  // EXPERIMENTAL.  DO NOT USE.
+  // For "map" fields, the name of the field in the enclosed type that
+  // is the key for this map.  For example, suppose we have:
+  //   message Item {
+  //     required string name = 1;
+  //     required string value = 2;
+  //   }
+  //   message Config {
+  //     repeated Item items = 1 [experimental_map_key="name"];
+  //   }
+  // In this situation, the map key for Item will be set to "name".
+  // TODO: Fully-implement this, then remove the "experimental_" prefix.
+  optional string experimental_map_key = 9;
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message EnumOptions {
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message EnumValueOptions {
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message ServiceOptions {
+
+  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
+  //   framework.  We apologize for hoarding these numbers to ourselves, but
+  //   we were already using them long before we decided to release Protocol
+  //   Buffers.
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+message MethodOptions {
+
+  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
+  //   framework.  We apologize for hoarding these numbers to ourselves, but
+  //   we were already using them long before we decided to release Protocol
+  //   Buffers.
+
+  // The parser stores options it doesn't recognize here. See above.
+  repeated UninterpretedOption uninterpreted_option = 999;
+
+  // Clients can define custom options in extensions of this message. See above.
+  extensions 1000 to max;
+}
+
+// A message representing a option the parser does not recognize. This only
+// appears in options protos created by the compiler::Parser class.
+// DescriptorPool resolves these when building Descriptor objects. Therefore,
+// options protos in descriptor objects (e.g. returned by Descriptor::options(),
+// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
+// in them.
+message UninterpretedOption {
+  // The name of the uninterpreted option.  Each string represents a segment in
+  // a dot-separated name.  is_extension is true iff a segment represents an
+  // extension (denoted with parentheses in options specs in .proto files).
+  // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
+  // "foo.(bar.baz).qux".
+  message NamePart {
+    required string name_part = 1;
+    required bool is_extension = 2;
+  }
+  repeated NamePart name = 2;
+
+  // The value of the uninterpreted option, in whatever type the tokenizer
+  // identified it as during parsing. Exactly one of these should be set.
+  optional string identifier_value = 3;
+  optional uint64 positive_int_value = 4;
+  optional int64 negative_int_value = 5;
+  optional double double_value = 6;
+  optional bytes string_value = 7;
+  optional string aggregate_value = 8;
+}
+
+// ===================================================================
+// Optional source code info
+
+// Encapsulates information about the original source file from which a
+// FileDescriptorProto was generated.
+message SourceCodeInfo {
+  // A Location identifies a piece of source code in a .proto file which
+  // corresponds to a particular definition.  This information is intended
+  // to be useful to IDEs, code indexers, documentation generators, and similar
+  // tools.
+  //
+  // For example, say we have a file like:
+  //   message Foo {
+  //     optional string foo = 1;
+  //   }
+  // Let's look at just the field definition:
+  //   optional string foo = 1;
+  //   ^       ^^     ^^  ^  ^^^
+  //   a       bc     de  f  ghi
+  // We have the following locations:
+  //   span   path               represents
+  //   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
+  //   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
+  //   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
+  //   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
+  //   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
+  //
+  // Notes:
+  // - A location may refer to a repeated field itself (i.e. not to any
+  //   particular index within it).  This is used whenever a set of elements are
+  //   logically enclosed in a single code segment.  For example, an entire
+  //   extend block (possibly containing multiple extension definitions) will
+  //   have an outer location whose path refers to the "extensions" repeated
+  //   field without an index.
+  // - Multiple locations may have the same path.  This happens when a single
+  //   logical declaration is spread out across multiple places.  The most
+  //   obvious example is the "extend" block again -- there may be multiple
+  //   extend blocks in the same scope, each of which will have the same path.
+  // - A location's span is not always a subset of its parent's span.  For
+  //   example, the "extendee" of an extension declaration appears at the
+  //   beginning of the "extend" block and is shared by all extensions within
+  //   the block.
+  // - Just because a location's span is a subset of some other location's span
+  //   does not mean that it is a descendent.  For example, a "group" defines
+  //   both a type and a field in a single declaration.  Thus, the locations
+  //   corresponding to the type and field and their components will overlap.
+  // - Code which tries to interpret locations should probably be designed to
+  //   ignore those that it doesn't understand, as more types of locations could
+  //   be recorded in the future.
+  repeated Location location = 1;
+  message Location {
+    // Identifies which part of the FileDescriptorProto was defined at this
+    // location.
+    //
+    // Each element is a field number or an index.  They form a path from
+    // the root FileDescriptorProto to the place where the definition.  For
+    // example, this path:
+    //   [ 4, 3, 2, 7, 1 ]
+    // refers to:
+    //   file.message_type(3)  // 4, 3
+    //       .field(7)         // 2, 7
+    //       .name()           // 1
+    // This is because FileDescriptorProto.message_type has field number 4:
+    //   repeated DescriptorProto message_type = 4;
+    // and DescriptorProto.field has field number 2:
+    //   repeated FieldDescriptorProto field = 2;
+    // and FieldDescriptorProto.name has field number 1:
+    //   optional string name = 1;
+    //
+    // Thus, the above path gives the location of a field name.  If we removed
+    // the last element:
+    //   [ 4, 3, 2, 7 ]
+    // this path refers to the whole field declaration (from the beginning
+    // of the label to the terminating semicolon).
+    repeated int32 path = 1 [packed=true];
+
+    // Always has exactly three or four elements: start line, start column,
+    // end line (optional, otherwise assumed same as start line), end column.
+    // These are packed into a single field for efficiency.  Note that line
+    // and column numbers are zero-based -- typically you will want to add
+    // 1 to each before displaying to a user.
+    repeated int32 span = 2 [packed=true];
+
+    // TODO(kenton):  Record comments appearing before and after the
+    // declaration.
+  }
+}
diff --git a/csharp/protos/google/protobuf/unittest.proto b/csharp/protos/google/protobuf/unittest.proto
new file mode 100644
index 0000000..7f05cf8
--- /dev/null
+++ b/csharp/protos/google/protobuf/unittest.proto
@@ -0,0 +1,636 @@
+// Additional options required for C# generation. File from copyright
+// line onwards is as per original distribution.
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestProtoFile";
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// A proto file we will use for unit testing.
+
+
+// Some generic_services option(s) added automatically.
+// See:  http://go/proto2-generic-services-default
+option cc_generic_services = true;     // auto-added
+option java_generic_services = true;   // auto-added
+option py_generic_services = true;     // auto-added
+
+import "google/protobuf/unittest_import.proto";
+
+// We don't put this in a package within proto2 because we need to make sure
+// that the generated code doesn't depend on being in the proto2 namespace.
+// In test_util.h we do "using namespace unittest = protobuf_unittest".
+package protobuf_unittest;
+
+// Protos optimized for SPEED use a strict superset of the generated code
+// of equivalent ones optimized for CODE_SIZE, so we should optimize all our
+// tests for speed unless explicitly testing code size optimization.
+option optimize_for = SPEED;
+
+option java_outer_classname = "UnittestProto";
+
+// This proto includes every type of field in both singular and repeated
+// forms.
+message TestAllTypes {
+  message NestedMessage {
+    // The field name "b" fails to compile in proto1 because it conflicts with
+    // a local variable named "b" in one of the generated methods.  Doh.
+    // This file needs to compile in proto1 to test backwards-compatibility.
+    optional int32 bb = 1;
+  }
+
+  enum NestedEnum {
+    FOO = 1;
+    BAR = 2;
+    BAZ = 3;
+  }
+
+  // Singular
+  optional    int32 optional_int32    =  1;
+  optional    int64 optional_int64    =  2;
+  optional   uint32 optional_uint32   =  3;
+  optional   uint64 optional_uint64   =  4;
+  optional   sint32 optional_sint32   =  5;
+  optional   sint64 optional_sint64   =  6;
+  optional  fixed32 optional_fixed32  =  7;
+  optional  fixed64 optional_fixed64  =  8;
+  optional sfixed32 optional_sfixed32 =  9;
+  optional sfixed64 optional_sfixed64 = 10;
+  optional    float optional_float    = 11;
+  optional   double optional_double   = 12;
+  optional     bool optional_bool     = 13;
+  optional   string optional_string   = 14;
+  optional    bytes optional_bytes    = 15;
+
+  optional group OptionalGroup = 16 {
+    optional int32 a = 17;
+  }
+
+  optional NestedMessage                        optional_nested_message  = 18;
+  optional ForeignMessage                       optional_foreign_message = 19;
+  optional protobuf_unittest_import.ImportMessage optional_import_message  = 20;
+
+  optional NestedEnum                           optional_nested_enum     = 21;
+  optional ForeignEnum                          optional_foreign_enum    = 22;
+  optional protobuf_unittest_import.ImportEnum    optional_import_enum     = 23;
+
+  optional string optional_string_piece = 24 [ctype=STRING_PIECE];
+  optional string optional_cord = 25 [ctype=CORD];
+
+  // Repeated
+  repeated    int32 repeated_int32    = 31;
+  repeated    int64 repeated_int64    = 32;
+  repeated   uint32 repeated_uint32   = 33;
+  repeated   uint64 repeated_uint64   = 34;
+  repeated   sint32 repeated_sint32   = 35;
+  repeated   sint64 repeated_sint64   = 36;
+  repeated  fixed32 repeated_fixed32  = 37;
+  repeated  fixed64 repeated_fixed64  = 38;
+  repeated sfixed32 repeated_sfixed32 = 39;
+  repeated sfixed64 repeated_sfixed64 = 40;
+  repeated    float repeated_float    = 41;
+  repeated   double repeated_double   = 42;
+  repeated     bool repeated_bool     = 43;
+  repeated   string repeated_string   = 44;
+  repeated    bytes repeated_bytes    = 45;
+
+  repeated group RepeatedGroup = 46 {
+    optional int32 a = 47;
+  }
+
+  repeated NestedMessage                        repeated_nested_message  = 48;
+  repeated ForeignMessage                       repeated_foreign_message = 49;
+  repeated protobuf_unittest_import.ImportMessage repeated_import_message  = 50;
+
+  repeated NestedEnum                           repeated_nested_enum     = 51;
+  repeated ForeignEnum                          repeated_foreign_enum    = 52;
+  repeated protobuf_unittest_import.ImportEnum    repeated_import_enum     = 53;
+
+  repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
+  repeated string repeated_cord = 55 [ctype=CORD];
+
+  // Singular with defaults
+  optional    int32 default_int32    = 61 [default =  41    ];
+  optional    int64 default_int64    = 62 [default =  42    ];
+  optional   uint32 default_uint32   = 63 [default =  43    ];
+  optional   uint64 default_uint64   = 64 [default =  44    ];
+  optional   sint32 default_sint32   = 65 [default = -45    ];
+  optional   sint64 default_sint64   = 66 [default =  46    ];
+  optional  fixed32 default_fixed32  = 67 [default =  47    ];
+  optional  fixed64 default_fixed64  = 68 [default =  48    ];
+  optional sfixed32 default_sfixed32 = 69 [default =  49    ];
+  optional sfixed64 default_sfixed64 = 70 [default = -50    ];
+  optional    float default_float    = 71 [default =  51.5  ];
+  optional   double default_double   = 72 [default =  52e3  ];
+  optional     bool default_bool     = 73 [default = true   ];
+  optional   string default_string   = 74 [default = "hello"];
+  optional    bytes default_bytes    = 75 [default = "world"];
+
+  optional NestedEnum  default_nested_enum  = 81 [default = BAR        ];
+  optional ForeignEnum default_foreign_enum = 82 [default = FOREIGN_BAR];
+  optional protobuf_unittest_import.ImportEnum
+      default_import_enum = 83 [default = IMPORT_BAR];
+
+  optional string default_string_piece = 84 [ctype=STRING_PIECE,default="abc"];
+  optional string default_cord = 85 [ctype=CORD,default="123"];
+}
+
+message TestDeprecatedFields {
+  optional int32 deprecated_int32 = 1 [deprecated=true];
+}
+
+// Define these after TestAllTypes to make sure the compiler can handle
+// that.
+message ForeignMessage {
+  optional int32 c = 1;
+}
+
+enum ForeignEnum {
+  FOREIGN_FOO = 4;
+  FOREIGN_BAR = 5;
+  FOREIGN_BAZ = 6;
+}
+
+message TestAllExtensions {
+  extensions 1 to max;
+}
+
+extend TestAllExtensions {
+  // Singular
+  optional    int32 optional_int32_extension    =  1;
+  optional    int64 optional_int64_extension    =  2;
+  optional   uint32 optional_uint32_extension   =  3;
+  optional   uint64 optional_uint64_extension   =  4;
+  optional   sint32 optional_sint32_extension   =  5;
+  optional   sint64 optional_sint64_extension   =  6;
+  optional  fixed32 optional_fixed32_extension  =  7;
+  optional  fixed64 optional_fixed64_extension  =  8;
+  optional sfixed32 optional_sfixed32_extension =  9;
+  optional sfixed64 optional_sfixed64_extension = 10;
+  optional    float optional_float_extension    = 11;
+  optional   double optional_double_extension   = 12;
+  optional     bool optional_bool_extension     = 13;
+  optional   string optional_string_extension   = 14;
+  optional    bytes optional_bytes_extension    = 15;
+
+  optional group OptionalGroup_extension = 16 {
+    optional int32 a = 17;
+  }
+
+  optional TestAllTypes.NestedMessage optional_nested_message_extension = 18;
+  optional ForeignMessage optional_foreign_message_extension = 19;
+  optional protobuf_unittest_import.ImportMessage
+    optional_import_message_extension = 20;
+
+  optional TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
+  optional ForeignEnum optional_foreign_enum_extension = 22;
+  optional protobuf_unittest_import.ImportEnum
+    optional_import_enum_extension = 23;
+
+  optional string optional_string_piece_extension = 24 [ctype=STRING_PIECE];
+  optional string optional_cord_extension = 25 [ctype=CORD];
+
+  // Repeated
+  repeated    int32 repeated_int32_extension    = 31;
+  repeated    int64 repeated_int64_extension    = 32;
+  repeated   uint32 repeated_uint32_extension   = 33;
+  repeated   uint64 repeated_uint64_extension   = 34;
+  repeated   sint32 repeated_sint32_extension   = 35;
+  repeated   sint64 repeated_sint64_extension   = 36;
+  repeated  fixed32 repeated_fixed32_extension  = 37;
+  repeated  fixed64 repeated_fixed64_extension  = 38;
+  repeated sfixed32 repeated_sfixed32_extension = 39;
+  repeated sfixed64 repeated_sfixed64_extension = 40;
+  repeated    float repeated_float_extension    = 41;
+  repeated   double repeated_double_extension   = 42;
+  repeated     bool repeated_bool_extension     = 43;
+  repeated   string repeated_string_extension   = 44;
+  repeated    bytes repeated_bytes_extension    = 45;
+
+  repeated group RepeatedGroup_extension = 46 {
+    optional int32 a = 47;
+  }
+
+  repeated TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
+  repeated ForeignMessage repeated_foreign_message_extension = 49;
+  repeated protobuf_unittest_import.ImportMessage
+    repeated_import_message_extension = 50;
+
+  repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
+  repeated ForeignEnum repeated_foreign_enum_extension = 52;
+  repeated protobuf_unittest_import.ImportEnum
+    repeated_import_enum_extension = 53;
+
+  repeated string repeated_string_piece_extension = 54 [ctype=STRING_PIECE];
+  repeated string repeated_cord_extension = 55 [ctype=CORD];
+
+  // Singular with defaults
+  optional    int32 default_int32_extension    = 61 [default =  41    ];
+  optional    int64 default_int64_extension    = 62 [default =  42    ];
+  optional   uint32 default_uint32_extension   = 63 [default =  43    ];
+  optional   uint64 default_uint64_extension   = 64 [default =  44    ];
+  optional   sint32 default_sint32_extension   = 65 [default = -45    ];
+  optional   sint64 default_sint64_extension   = 66 [default =  46    ];
+  optional  fixed32 default_fixed32_extension  = 67 [default =  47    ];
+  optional  fixed64 default_fixed64_extension  = 68 [default =  48    ];
+  optional sfixed32 default_sfixed32_extension = 69 [default =  49    ];
+  optional sfixed64 default_sfixed64_extension = 70 [default = -50    ];
+  optional    float default_float_extension    = 71 [default =  51.5  ];
+  optional   double default_double_extension   = 72 [default =  52e3  ];
+  optional     bool default_bool_extension     = 73 [default = true   ];
+  optional   string default_string_extension   = 74 [default = "hello"];
+  optional    bytes default_bytes_extension    = 75 [default = "world"];
+
+  optional TestAllTypes.NestedEnum
+    default_nested_enum_extension = 81 [default = BAR];
+  optional ForeignEnum
+    default_foreign_enum_extension = 82 [default = FOREIGN_BAR];
+  optional protobuf_unittest_import.ImportEnum
+    default_import_enum_extension = 83 [default = IMPORT_BAR];
+
+  optional string default_string_piece_extension = 84 [ctype=STRING_PIECE,
+                                                       default="abc"];
+  optional string default_cord_extension = 85 [ctype=CORD, default="123"];
+}
+
+message TestNestedExtension {
+  extend TestAllExtensions {
+    // Check for bug where string extensions declared in tested scope did not
+    // compile.
+    optional string test = 1002 [default="test"];
+  }
+}
+
+// We have separate messages for testing required fields because it's
+// annoying to have to fill in required fields in TestProto in order to
+// do anything with it.  Note that we don't need to test every type of
+// required filed because the code output is basically identical to
+// optional fields for all types.
+message TestRequired {
+  required int32 a = 1;
+  optional int32 dummy2 = 2;
+  required int32 b = 3;
+
+  extend TestAllExtensions {
+    optional TestRequired single = 1000;
+    repeated TestRequired multi  = 1001;
+  }
+
+  // Pad the field count to 32 so that we can test that IsInitialized()
+  // properly checks multiple elements of has_bits_.
+  optional int32 dummy4  =  4;
+  optional int32 dummy5  =  5;
+  optional int32 dummy6  =  6;
+  optional int32 dummy7  =  7;
+  optional int32 dummy8  =  8;
+  optional int32 dummy9  =  9;
+  optional int32 dummy10 = 10;
+  optional int32 dummy11 = 11;
+  optional int32 dummy12 = 12;
+  optional int32 dummy13 = 13;
+  optional int32 dummy14 = 14;
+  optional int32 dummy15 = 15;
+  optional int32 dummy16 = 16;
+  optional int32 dummy17 = 17;
+  optional int32 dummy18 = 18;
+  optional int32 dummy19 = 19;
+  optional int32 dummy20 = 20;
+  optional int32 dummy21 = 21;
+  optional int32 dummy22 = 22;
+  optional int32 dummy23 = 23;
+  optional int32 dummy24 = 24;
+  optional int32 dummy25 = 25;
+  optional int32 dummy26 = 26;
+  optional int32 dummy27 = 27;
+  optional int32 dummy28 = 28;
+  optional int32 dummy29 = 29;
+  optional int32 dummy30 = 30;
+  optional int32 dummy31 = 31;
+  optional int32 dummy32 = 32;
+
+  required int32 c = 33;
+}
+
+message TestRequiredForeign {
+  optional TestRequired optional_message = 1;
+  repeated TestRequired repeated_message = 2;
+  optional int32 dummy = 3;
+}
+
+// Test that we can use NestedMessage from outside TestAllTypes.
+message TestForeignNested {
+  optional TestAllTypes.NestedMessage foreign_nested = 1;
+}
+
+// TestEmptyMessage is used to test unknown field support.
+message TestEmptyMessage {
+}
+
+// Like above, but declare all field numbers as potential extensions.  No
+// actual extensions should ever be defined for this type.
+message TestEmptyMessageWithExtensions {
+  extensions 1 to max;
+}
+
+message TestMultipleExtensionRanges {
+  extensions 42;
+  extensions 4143 to 4243;
+  extensions 65536 to max;
+}
+
+// Test that really large tag numbers don't break anything.
+message TestReallyLargeTagNumber {
+  // The largest possible tag number is 2^28 - 1, since the wire format uses
+  // three bits to communicate wire type.
+  optional int32 a = 1;
+  optional int32 bb = 268435455;
+}
+
+message TestRecursiveMessage {
+  optional TestRecursiveMessage a = 1;
+  optional int32 i = 2;
+}
+
+// Test that mutual recursion works.
+message TestMutualRecursionA {
+  optional TestMutualRecursionB bb = 1;
+}
+
+message TestMutualRecursionB {
+  optional TestMutualRecursionA a = 1;
+  optional int32 optional_int32 = 2;
+}
+
+// Test that groups have disjoint field numbers from their siblings and
+// parents.  This is NOT possible in proto1; only proto2.  When attempting
+// to compile with proto1, this will emit an error; so we only include it
+// in protobuf_unittest_proto.
+message TestDupFieldNumber {                        // NO_PROTO1
+  optional int32 a = 1;                             // NO_PROTO1
+  optional group Foo = 2 { optional int32 a = 1; }  // NO_PROTO1
+  optional group Bar = 3 { optional int32 a = 1; }  // NO_PROTO1
+}                                                   // NO_PROTO1
+
+
+// Needed for a Python test.
+message TestNestedMessageHasBits {
+  message NestedMessage {
+    repeated int32 nestedmessage_repeated_int32 = 1;
+    repeated ForeignMessage nestedmessage_repeated_foreignmessage = 2;
+  }
+  optional NestedMessage optional_nested_message = 1;
+}
+
+
+// Test an enum that has multiple values with the same number.
+enum TestEnumWithDupValue {
+  FOO1 = 1;
+  BAR1 = 2;
+  BAZ = 3;
+  FOO2 = 1;
+  BAR2 = 2;
+}
+
+// Test an enum with large, unordered values.
+enum TestSparseEnum {
+  SPARSE_A = 123;
+  SPARSE_B = 62374;
+  SPARSE_C = 12589234;
+  SPARSE_D = -15;
+  SPARSE_E = -53452;
+  SPARSE_F = 0;
+  SPARSE_G = 2;
+}
+
+// Test message with CamelCase field names.  This violates Protocol Buffer
+// standard style.
+message TestCamelCaseFieldNames {
+  optional int32 PrimitiveField = 1;
+  optional string StringField = 2;
+  optional ForeignEnum EnumField = 3;
+  optional ForeignMessage MessageField = 4;
+  optional string StringPieceField = 5 [ctype=STRING_PIECE];
+  optional string CordField = 6 [ctype=CORD];
+
+  repeated int32 RepeatedPrimitiveField = 7;
+  repeated string RepeatedStringField = 8;
+  repeated ForeignEnum RepeatedEnumField = 9;
+  repeated ForeignMessage RepeatedMessageField = 10;
+  repeated string RepeatedStringPieceField = 11 [ctype=STRING_PIECE];
+  repeated string RepeatedCordField = 12 [ctype=CORD];
+}
+
+
+// We list fields out of order, to ensure that we're using field number and not
+// field index to determine serialization order.
+message TestFieldOrderings {
+  optional string my_string = 11;
+  extensions 2 to 10;
+  optional int64 my_int = 1;
+  extensions 12 to 100;
+  optional float my_float = 101;
+}
+
+
+extend TestFieldOrderings {
+  optional string my_extension_string = 50;
+  optional int32 my_extension_int = 5;
+}
+
+
+message TestExtremeDefaultValues {
+  optional bytes escaped_bytes = 1 [default = "\0\001\a\b\f\n\r\t\v\\\'\"\xfe"];
+  optional uint32 large_uint32 = 2 [default = 0xFFFFFFFF];
+  optional uint64 large_uint64 = 3 [default = 0xFFFFFFFFFFFFFFFF];
+  optional  int32 small_int32  = 4 [default = -0x7FFFFFFF];
+  optional  int64 small_int64  = 5 [default = -0x7FFFFFFFFFFFFFFF];
+
+  // The default value here is UTF-8 for "\u1234".  (We could also just type
+  // the UTF-8 text directly into this text file rather than escape it, but
+  // lots of people use editors that would be confused by this.)
+  optional string utf8_string = 6 [default = "\341\210\264"];
+
+  // Tests for single-precision floating-point values.
+  optional float zero_float = 7 [default = 0];
+  optional float one_float = 8 [default = 1];
+  optional float small_float = 9 [default = 1.5];
+  optional float negative_one_float = 10 [default = -1];
+  optional float negative_float = 11 [default = -1.5];
+  // Using exponents
+  optional float large_float = 12 [default = 2E8];
+  optional float small_negative_float = 13 [default = -8e-28];
+
+  // Text for nonfinite floating-point values.
+  optional double inf_double = 14 [default = inf];
+  optional double neg_inf_double = 15 [default = -inf];
+  optional double nan_double = 16 [default = nan];
+  optional float inf_float = 17 [default = inf];
+  optional float neg_inf_float = 18 [default = -inf];
+  optional float nan_float = 19 [default = nan];
+
+  // Tests for C++ trigraphs.
+  // Trigraphs should be escaped in C++ generated files, but they should not be
+  // escaped for other languages.
+  // Note that in .proto file, "\?" is a valid way to escape ? in string
+  // literals.
+  optional string cpp_trigraph = 20 [default = "? \? ?? \?? \??? ??/ ?\?-"];
+}
+
+message SparseEnumMessage {
+  optional TestSparseEnum sparse_enum = 1;
+}
+
+// Test String and Bytes: string is for valid UTF-8 strings
+message OneString {
+  optional string data = 1;
+}
+
+message OneBytes {
+  optional bytes data = 1;
+}
+
+// Test messages for packed fields
+
+message TestPackedTypes {
+  repeated    int32 packed_int32    =  90 [packed = true];
+  repeated    int64 packed_int64    =  91 [packed = true];
+  repeated   uint32 packed_uint32   =  92 [packed = true];
+  repeated   uint64 packed_uint64   =  93 [packed = true];
+  repeated   sint32 packed_sint32   =  94 [packed = true];
+  repeated   sint64 packed_sint64   =  95 [packed = true];
+  repeated  fixed32 packed_fixed32  =  96 [packed = true];
+  repeated  fixed64 packed_fixed64  =  97 [packed = true];
+  repeated sfixed32 packed_sfixed32 =  98 [packed = true];
+  repeated sfixed64 packed_sfixed64 =  99 [packed = true];
+  repeated    float packed_float    = 100 [packed = true];
+  repeated   double packed_double   = 101 [packed = true];
+  repeated     bool packed_bool     = 102 [packed = true];
+  repeated ForeignEnum packed_enum  = 103 [packed = true];
+}
+
+// A message with the same fields as TestPackedTypes, but without packing. Used
+// to test packed <-> unpacked wire compatibility.
+message TestUnpackedTypes {
+  repeated    int32 unpacked_int32    =  90 [packed = false];
+  repeated    int64 unpacked_int64    =  91 [packed = false];
+  repeated   uint32 unpacked_uint32   =  92 [packed = false];
+  repeated   uint64 unpacked_uint64   =  93 [packed = false];
+  repeated   sint32 unpacked_sint32   =  94 [packed = false];
+  repeated   sint64 unpacked_sint64   =  95 [packed = false];
+  repeated  fixed32 unpacked_fixed32  =  96 [packed = false];
+  repeated  fixed64 unpacked_fixed64  =  97 [packed = false];
+  repeated sfixed32 unpacked_sfixed32 =  98 [packed = false];
+  repeated sfixed64 unpacked_sfixed64 =  99 [packed = false];
+  repeated    float unpacked_float    = 100 [packed = false];
+  repeated   double unpacked_double   = 101 [packed = false];
+  repeated     bool unpacked_bool     = 102 [packed = false];
+  repeated ForeignEnum unpacked_enum  = 103 [packed = false];
+}
+
+message TestPackedExtensions {
+  extensions 1 to max;
+}
+
+extend TestPackedExtensions {
+  repeated    int32 packed_int32_extension    =  90 [packed = true];
+  repeated    int64 packed_int64_extension    =  91 [packed = true];
+  repeated   uint32 packed_uint32_extension   =  92 [packed = true];
+  repeated   uint64 packed_uint64_extension   =  93 [packed = true];
+  repeated   sint32 packed_sint32_extension   =  94 [packed = true];
+  repeated   sint64 packed_sint64_extension   =  95 [packed = true];
+  repeated  fixed32 packed_fixed32_extension  =  96 [packed = true];
+  repeated  fixed64 packed_fixed64_extension  =  97 [packed = true];
+  repeated sfixed32 packed_sfixed32_extension =  98 [packed = true];
+  repeated sfixed64 packed_sfixed64_extension =  99 [packed = true];
+  repeated    float packed_float_extension    = 100 [packed = true];
+  repeated   double packed_double_extension   = 101 [packed = true];
+  repeated     bool packed_bool_extension     = 102 [packed = true];
+  repeated ForeignEnum packed_enum_extension  = 103 [packed = true];
+}
+
+// Used by ExtensionSetTest/DynamicExtensions.  The test actually builds
+// a set of extensions to TestAllExtensions dynamically, based on the fields
+// of this message type.
+message TestDynamicExtensions {
+  enum DynamicEnumType {
+    DYNAMIC_FOO = 2200;
+    DYNAMIC_BAR = 2201;
+    DYNAMIC_BAZ = 2202;
+  }
+  message DynamicMessageType {
+    optional int32 dynamic_field = 2100;
+  }
+
+  optional fixed32 scalar_extension = 2000;
+  optional ForeignEnum enum_extension = 2001;
+  optional DynamicEnumType dynamic_enum_extension = 2002;
+
+  optional ForeignMessage message_extension = 2003;
+  optional DynamicMessageType dynamic_message_extension = 2004;
+
+  repeated string repeated_extension = 2005;
+  repeated sint32 packed_extension = 2006 [packed = true];
+}
+
+message TestRepeatedScalarDifferentTagSizes {
+  // Parsing repeated fixed size values used to fail. This message needs to be
+  // used in order to get a tag of the right size; all of the repeated fields
+  // in TestAllTypes didn't trigger the check.
+  repeated fixed32 repeated_fixed32 = 12;
+  // Check for a varint type, just for good measure.
+  repeated int32   repeated_int32   = 13;
+
+  // These have two-byte tags.
+  repeated fixed64 repeated_fixed64 = 2046;
+  repeated int64   repeated_int64   = 2047;
+
+  // Three byte tags.
+  repeated float   repeated_float   = 262142;
+  repeated uint64  repeated_uint64  = 262143;
+}
+
+
+// Test that RPC services work.
+message FooRequest  {}
+message FooResponse {}
+
+service TestService {
+  rpc Foo(FooRequest) returns (FooResponse);
+  rpc Bar(BarRequest) returns (BarResponse);
+}
+
+
+message BarRequest  {}
+message BarResponse {}
diff --git a/csharp/protos/google/protobuf/unittest_csharp_options.proto b/csharp/protos/google/protobuf/unittest_csharp_options.proto
new file mode 100644
index 0000000..3769329
--- /dev/null
+++ b/csharp/protos/google/protobuf/unittest_csharp_options.proto
@@ -0,0 +1,52 @@
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: jonskeet@google.com (Jon Skeet)
+//
+// A proto file for unit testing the custom C# options
+
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestCSharpOptionsProtoFile";
+//option (google.protobuf.csharp_file_options).nest_classes = true;
+
+package protobuf_unittest;
+
+message OptionsMessage {
+
+  // Will be left as Normal
+  optional string normal = 1;
+
+  // Will be converted to OptionsMessage_
+  optional string options_message = 2;
+  
+  // Will be converted to CustomName
+  optional string customized = 3 [(google.protobuf.csharp_field_options).property_name = "CustomName"];
+}
diff --git a/csharp/protos/google/protobuf/unittest_custom_options.proto b/csharp/protos/google/protobuf/unittest_custom_options.proto
new file mode 100644
index 0000000..201fb32
--- /dev/null
+++ b/csharp/protos/google/protobuf/unittest_custom_options.proto
@@ -0,0 +1,372 @@
+// Additional options required for C# generation. File from copyright
+// line onwards is as per original distribution.
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestCustomOptionsProtoFile";
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: benjy@google.com (Benjy Weinberger)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// A proto file used to test the "custom options" feature of proto2.
+
+
+// Some generic_services option(s) added automatically.
+// See:  http://go/proto2-generic-services-default
+option cc_generic_services = true;     // auto-added
+option java_generic_services = true;   // auto-added
+option py_generic_services = true;
+
+// A custom file option (defined below).
+option (file_opt1) = 9876543210;
+
+import "google/protobuf/descriptor.proto";
+
+// We don't put this in a package within proto2 because we need to make sure
+// that the generated code doesn't depend on being in the proto2 namespace.
+package protobuf_unittest;
+
+
+// Some simple test custom options of various types.
+
+extend google.protobuf.FileOptions {
+  optional uint64 file_opt1 = 7736974;
+}
+
+extend google.protobuf.MessageOptions {
+  optional int32 message_opt1 = 7739036;
+}
+
+extend google.protobuf.FieldOptions {
+  optional fixed64 field_opt1 = 7740936;
+  // This is useful for testing that we correctly register default values for
+  // extension options.
+  optional int32 field_opt2 = 7753913 [default=42];
+}
+
+extend google.protobuf.EnumOptions {
+  optional sfixed32 enum_opt1 = 7753576;
+}
+
+extend google.protobuf.EnumValueOptions {
+  optional int32 enum_value_opt1 = 1560678;
+}
+
+extend google.protobuf.ServiceOptions {
+  optional sint64 service_opt1 = 7887650;
+}
+
+enum MethodOpt1 {
+  METHODOPT1_VAL1 = 1;
+  METHODOPT1_VAL2 = 2;
+}
+
+extend google.protobuf.MethodOptions {
+  optional MethodOpt1 method_opt1 = 7890860;
+}
+
+// A test message with custom options at all possible locations (and also some
+// regular options, to make sure they interact nicely).
+message TestMessageWithCustomOptions {
+  option message_set_wire_format = false;
+
+  option (message_opt1) = -56;
+
+  optional string field1 = 1 [ctype=CORD,
+                              (field_opt1)=8765432109];
+
+  enum AnEnum {
+    option (enum_opt1) = -789;
+
+    ANENUM_VAL1 = 1;
+    ANENUM_VAL2 = 2 [(enum_value_opt1) = 123];
+  }
+}
+
+
+// A test RPC service with custom options at all possible locations (and also
+// some regular options, to make sure they interact nicely).
+message CustomOptionFooRequest {
+}
+
+message CustomOptionFooResponse {
+}
+
+service TestServiceWithCustomOptions {
+  option (service_opt1) = -9876543210;
+
+  rpc Foo(CustomOptionFooRequest) returns (CustomOptionFooResponse) {
+    option (method_opt1) = METHODOPT1_VAL2;
+  }
+}
+
+
+
+// Options of every possible field type, so we can test them all exhaustively.
+
+message DummyMessageContainingEnum {
+  enum TestEnumType {
+    TEST_OPTION_ENUM_TYPE1 = 22;
+    TEST_OPTION_ENUM_TYPE2 = -23;
+  }
+}
+
+message DummyMessageInvalidAsOptionType {
+}
+
+extend google.protobuf.MessageOptions {
+  optional         bool     bool_opt = 7706090;
+  optional        int32    int32_opt = 7705709;
+  optional        int64    int64_opt = 7705542;
+  optional       uint32   uint32_opt = 7704880;
+  optional       uint64   uint64_opt = 7702367;
+  optional       sint32   sint32_opt = 7701568;
+  optional       sint64   sint64_opt = 7700863;
+  optional      fixed32  fixed32_opt = 7700307;
+  optional      fixed64  fixed64_opt = 7700194;
+  optional     sfixed32 sfixed32_opt = 7698645;
+  optional     sfixed64 sfixed64_opt = 7685475;
+  optional        float    float_opt = 7675390;
+  optional       double   double_opt = 7673293;
+  optional       string   string_opt = 7673285;
+  optional        bytes    bytes_opt = 7673238;
+  optional DummyMessageContainingEnum.TestEnumType enum_opt = 7673233;
+  optional DummyMessageInvalidAsOptionType message_type_opt = 7665967;
+}
+
+message CustomOptionMinIntegerValues {
+  option     (bool_opt) = false;
+  option    (int32_opt) = -0x80000000;
+  option    (int64_opt) = -0x8000000000000000;
+  option   (uint32_opt) = 0;
+  option   (uint64_opt) = 0;
+  option   (sint32_opt) = -0x80000000;
+  option   (sint64_opt) = -0x8000000000000000;
+  option  (fixed32_opt) = 0;
+  option  (fixed64_opt) = 0;
+  option (sfixed32_opt) = -0x80000000;
+  option (sfixed64_opt) = -0x8000000000000000;
+}
+
+message CustomOptionMaxIntegerValues {
+  option     (bool_opt) = true;
+  option    (int32_opt) = 0x7FFFFFFF;
+  option    (int64_opt) = 0x7FFFFFFFFFFFFFFF;
+  option   (uint32_opt) = 0xFFFFFFFF;
+  option   (uint64_opt) = 0xFFFFFFFFFFFFFFFF;
+  option   (sint32_opt) = 0x7FFFFFFF;
+  option   (sint64_opt) = 0x7FFFFFFFFFFFFFFF;
+  option  (fixed32_opt) = 0xFFFFFFFF;
+  option  (fixed64_opt) = 0xFFFFFFFFFFFFFFFF;
+  option (sfixed32_opt) = 0x7FFFFFFF;
+  option (sfixed64_opt) = 0x7FFFFFFFFFFFFFFF;
+}
+
+message CustomOptionOtherValues {
+  option  (int32_opt) = -100;  // To test sign-extension.
+  option  (float_opt) = 12.3456789;
+  option (double_opt) = 1.234567890123456789;
+  option (string_opt) = "Hello, \"World\"";
+  option  (bytes_opt) = "Hello\0World";
+  option   (enum_opt) = TEST_OPTION_ENUM_TYPE2;
+}
+
+message SettingRealsFromPositiveInts {
+  option  (float_opt) = 12;
+  option (double_opt) = 154;
+}
+
+message SettingRealsFromNegativeInts {
+  option  (float_opt) = -12;
+  option  (double_opt) = -154;
+}
+
+// Options of complex message types, themselves combined and extended in
+// various ways.
+
+message ComplexOptionType1 {
+  optional int32 foo = 1;
+  optional int32 foo2 = 2;
+  optional int32 foo3 = 3;
+
+  extensions 100 to max;
+}
+
+message ComplexOptionType2 {
+  optional ComplexOptionType1 bar = 1;
+  optional int32 baz = 2;
+
+  message ComplexOptionType4 {
+    optional int32 waldo = 1;
+
+    extend google.protobuf.MessageOptions {
+      optional ComplexOptionType4 complex_opt4 = 7633546;
+    }
+  }
+
+  optional ComplexOptionType4 fred = 3;
+
+  extensions 100 to max;
+}
+
+message ComplexOptionType3 {
+  optional int32 qux = 1;
+
+  optional group ComplexOptionType5 = 2 {
+    optional int32 plugh = 3;
+  }
+}
+
+extend ComplexOptionType1 {
+  optional int32 quux = 7663707;
+  optional ComplexOptionType3 corge = 7663442;
+}
+
+extend ComplexOptionType2 {
+  optional int32 grault = 7650927;
+  optional ComplexOptionType1 garply = 7649992;
+}
+
+extend google.protobuf.MessageOptions {
+  optional protobuf_unittest.ComplexOptionType1 complex_opt1 = 7646756;
+  optional ComplexOptionType2 complex_opt2 = 7636949;
+  optional ComplexOptionType3 complex_opt3 = 7636463;
+  optional group ComplexOpt6 = 7595468 {
+    optional int32 xyzzy = 7593951;
+  }
+}
+
+// Note that we try various different ways of naming the same extension.
+message VariousComplexOptions {
+  option (.protobuf_unittest.complex_opt1).foo = 42;
+  option (protobuf_unittest.complex_opt1).(.protobuf_unittest.quux) = 324;
+  option (.protobuf_unittest.complex_opt1).(protobuf_unittest.corge).qux = 876;
+  option (complex_opt2).baz = 987;
+  option (complex_opt2).(grault) = 654;
+  option (complex_opt2).bar.foo = 743;
+  option (complex_opt2).bar.(quux) = 1999;
+  option (complex_opt2).bar.(protobuf_unittest.corge).qux = 2008;
+  option (complex_opt2).(garply).foo = 741;
+  option (complex_opt2).(garply).(.protobuf_unittest.quux) = 1998;
+  option (complex_opt2).(protobuf_unittest.garply).(corge).qux = 2121;
+  option (ComplexOptionType2.ComplexOptionType4.complex_opt4).waldo = 1971;
+  option (complex_opt2).fred.waldo = 321;
+  option (protobuf_unittest.complex_opt3).qux = 9;
+  option (complex_opt3).complexoptiontype5.plugh = 22;
+  option (complexopt6).xyzzy = 24;
+}
+
+// ------------------------------------------------------
+// Definitions for testing aggregate option parsing.
+// See descriptor_unittest.cc.
+
+message AggregateMessageSet {
+  option message_set_wire_format = true;
+  extensions 4 to max;
+}
+
+message AggregateMessageSetElement {
+  extend AggregateMessageSet {
+    optional AggregateMessageSetElement message_set_extension = 15447542;
+  }
+  optional string s = 1;
+}
+
+// A helper type used to test aggregate option parsing
+message Aggregate {
+  optional int32 i = 1;
+  optional string s = 2;
+
+  // A nested object
+  optional Aggregate sub = 3;
+
+  // To test the parsing of extensions inside aggregate values
+  optional google.protobuf.FileOptions file = 4;
+  extend google.protobuf.FileOptions {
+    optional Aggregate nested = 15476903;
+  }
+
+  // An embedded message set
+  optional AggregateMessageSet mset = 5;
+}
+
+// Allow Aggregate to be used as an option at all possible locations
+// in the .proto grammer.
+extend google.protobuf.FileOptions      { optional Aggregate fileopt    = 15478479; }
+extend google.protobuf.MessageOptions   { optional Aggregate msgopt     = 15480088; }
+extend google.protobuf.FieldOptions     { optional Aggregate fieldopt   = 15481374; }
+extend google.protobuf.EnumOptions      { optional Aggregate enumopt_renamed    = 15483218; }
+extend google.protobuf.EnumValueOptions { optional Aggregate enumvalopt = 15486921; }
+extend google.protobuf.ServiceOptions   { optional Aggregate serviceopt = 15497145; }
+extend google.protobuf.MethodOptions    { optional Aggregate methodopt  = 15512713; }
+
+// Try using AggregateOption at different points in the proto grammar
+option (fileopt) = {
+  s: 'FileAnnotation'
+  // Also test the handling of comments
+  /* of both types */ i: 100
+
+  sub { s: 'NestedFileAnnotation' }
+
+  // Include a google.protobuf.FileOptions and recursively extend it with
+  // another fileopt.
+  file {
+    [protobuf_unittest.fileopt] {
+      s:'FileExtensionAnnotation'
+    }
+  }
+
+  // A message set inside an option value
+  mset {
+    [protobuf_unittest.AggregateMessageSetElement.message_set_extension] {
+      s: 'EmbeddedMessageSetElement'
+    }
+  }
+};
+
+message AggregateMessage {
+  option (msgopt) = { i:101 s:'MessageAnnotation' };
+  optional int32 fieldname = 1 [(fieldopt) = { s:'FieldAnnotation' }];
+}
+
+service AggregateService {
+  option (serviceopt) = { s:'ServiceAnnotation' };
+  rpc Method (AggregateMessage) returns (AggregateMessage) {
+    option (methodopt) = { s:'MethodAnnotation' };
+  }
+}
+
+enum AggregateEnum {
+  option (enumopt_renamed) = { s:'EnumAnnotation' };
+  VALUE = 1 [(enumvalopt) = { s:'EnumValueAnnotation' }];
+}
diff --git a/csharp/protos/google/protobuf/unittest_embed_optimize_for.proto b/csharp/protos/google/protobuf/unittest_embed_optimize_for.proto
new file mode 100644
index 0000000..5625538
--- /dev/null
+++ b/csharp/protos/google/protobuf/unittest_embed_optimize_for.proto
@@ -0,0 +1,56 @@
+// Additional options required for C# generation. File from copyright
+// line onwards is as per original distribution.
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestEmbedOptimizeForProtoFile";
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// A proto file which imports a proto file that uses optimize_for = CODE_SIZE.
+
+import "google/protobuf/unittest_optimize_for.proto";
+
+package protobuf_unittest;
+
+// We optimize for speed here, but we are importing a proto that is optimized
+// for code size.
+option optimize_for = SPEED;
+
+message TestEmbedOptimizedForSize {
+  // Test that embedding a message which has optimize_for = CODE_SIZE into
+  // one optimized for speed works.
+  optional TestOptimizedForSize optional_message = 1;
+  repeated TestOptimizedForSize repeated_message = 2;
+}
diff --git a/csharp/protos/google/protobuf/unittest_empty.proto b/csharp/protos/google/protobuf/unittest_empty.proto
new file mode 100644
index 0000000..f6b532a
--- /dev/null
+++ b/csharp/protos/google/protobuf/unittest_empty.proto
@@ -0,0 +1,43 @@
+// Additional options required for C# generation. File from copyright
+// line onwards is as per original distribution.
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestEmptyProtoFile";
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// This file intentionally left blank.  (At one point this wouldn't compile
+// correctly.)
+
diff --git a/csharp/protos/google/protobuf/unittest_enormous_descriptor.proto b/csharp/protos/google/protobuf/unittest_enormous_descriptor.proto
new file mode 100644
index 0000000..fa97778
--- /dev/null
+++ b/csharp/protos/google/protobuf/unittest_enormous_descriptor.proto
@@ -0,0 +1,1052 @@
+// Additional options required for C# generation. File from copyright
+// line onwards is as per original distribution.
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestEnormousDescriptorProtoFile";
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// A proto file that has an extremely large descriptor.  Used to test that
+// descriptors over 64k don't break the string literal length limit in Java.
+
+
+package google.protobuf;
+option java_package = "com.google.protobuf";
+
+// Avoid generating insanely long methods.
+option optimize_for = CODE_SIZE;
+
+message TestEnormousDescriptor {
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_1 = 1 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_2 = 2 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_3 = 3 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_4 = 4 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_5 = 5 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_6 = 6 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_7 = 7 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_8 = 8 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_9 = 9 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_10 = 10 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_11 = 11 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_12 = 12 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_13 = 13 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_14 = 14 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_15 = 15 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_16 = 16 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_17 = 17 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_18 = 18 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_19 = 19 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_20 = 20 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_21 = 21 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_22 = 22 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_23 = 23 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_24 = 24 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_25 = 25 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_26 = 26 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_27 = 27 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_28 = 28 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_29 = 29 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_30 = 30 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_31 = 31 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_32 = 32 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_33 = 33 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_34 = 34 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_35 = 35 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_36 = 36 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_37 = 37 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_38 = 38 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_39 = 39 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_40 = 40 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_41 = 41 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_42 = 42 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_43 = 43 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_44 = 44 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_45 = 45 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_46 = 46 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_47 = 47 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_48 = 48 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_49 = 49 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_50 = 50 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_51 = 51 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_52 = 52 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_53 = 53 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_54 = 54 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_55 = 55 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_56 = 56 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_57 = 57 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_58 = 58 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_59 = 59 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_60 = 60 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_61 = 61 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_62 = 62 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_63 = 63 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_64 = 64 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_65 = 65 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_66 = 66 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_67 = 67 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_68 = 68 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_69 = 69 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_70 = 70 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_71 = 71 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_72 = 72 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_73 = 73 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_74 = 74 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_75 = 75 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_76 = 76 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_77 = 77 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_78 = 78 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_79 = 79 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_80 = 80 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_81 = 81 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_82 = 82 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_83 = 83 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_84 = 84 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_85 = 85 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_86 = 86 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_87 = 87 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_88 = 88 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_89 = 89 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_90 = 90 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_91 = 91 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_92 = 92 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_93 = 93 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_94 = 94 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_95 = 95 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_96 = 96 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_97 = 97 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_98 = 98 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_99 = 99 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_100 = 100 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_101 = 101 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_102 = 102 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_103 = 103 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_104 = 104 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_105 = 105 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_106 = 106 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_107 = 107 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_108 = 108 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_109 = 109 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_110 = 110 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_111 = 111 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_112 = 112 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_113 = 113 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_114 = 114 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_115 = 115 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_116 = 116 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_117 = 117 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_118 = 118 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_119 = 119 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_120 = 120 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_121 = 121 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_122 = 122 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_123 = 123 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_124 = 124 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_125 = 125 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_126 = 126 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_127 = 127 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_128 = 128 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_129 = 129 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_130 = 130 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_131 = 131 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_132 = 132 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_133 = 133 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_134 = 134 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_135 = 135 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_136 = 136 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_137 = 137 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_138 = 138 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_139 = 139 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_140 = 140 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_141 = 141 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_142 = 142 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_143 = 143 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_144 = 144 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_145 = 145 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_146 = 146 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_147 = 147 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_148 = 148 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_149 = 149 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_150 = 150 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_151 = 151 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_152 = 152 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_153 = 153 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_154 = 154 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_155 = 155 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_156 = 156 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_157 = 157 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_158 = 158 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_159 = 159 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_160 = 160 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_161 = 161 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_162 = 162 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_163 = 163 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_164 = 164 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_165 = 165 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_166 = 166 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_167 = 167 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_168 = 168 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_169 = 169 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_170 = 170 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_171 = 171 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_172 = 172 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_173 = 173 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_174 = 174 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_175 = 175 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_176 = 176 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_177 = 177 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_178 = 178 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_179 = 179 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_180 = 180 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_181 = 181 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_182 = 182 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_183 = 183 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_184 = 184 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_185 = 185 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_186 = 186 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_187 = 187 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_188 = 188 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_189 = 189 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_190 = 190 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_191 = 191 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_192 = 192 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_193 = 193 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_194 = 194 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_195 = 195 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_196 = 196 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_197 = 197 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_198 = 198 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_199 = 199 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_200 = 200 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_201 = 201 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_202 = 202 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_203 = 203 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_204 = 204 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_205 = 205 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_206 = 206 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_207 = 207 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_208 = 208 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_209 = 209 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_210 = 210 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_211 = 211 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_212 = 212 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_213 = 213 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_214 = 214 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_215 = 215 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_216 = 216 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_217 = 217 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_218 = 218 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_219 = 219 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_220 = 220 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_221 = 221 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_222 = 222 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_223 = 223 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_224 = 224 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_225 = 225 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_226 = 226 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_227 = 227 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_228 = 228 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_229 = 229 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_230 = 230 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_231 = 231 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_232 = 232 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_233 = 233 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_234 = 234 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_235 = 235 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_236 = 236 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_237 = 237 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_238 = 238 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_239 = 239 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_240 = 240 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_241 = 241 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_242 = 242 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_243 = 243 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_244 = 244 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_245 = 245 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_246 = 246 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_247 = 247 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_248 = 248 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_249 = 249 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_250 = 250 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_251 = 251 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_252 = 252 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_253 = 253 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_254 = 254 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_255 = 255 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_256 = 256 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_257 = 257 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_258 = 258 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_259 = 259 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_260 = 260 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_261 = 261 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_262 = 262 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_263 = 263 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_264 = 264 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_265 = 265 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_266 = 266 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_267 = 267 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_268 = 268 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_269 = 269 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_270 = 270 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_271 = 271 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_272 = 272 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_273 = 273 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_274 = 274 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_275 = 275 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_276 = 276 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_277 = 277 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_278 = 278 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_279 = 279 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_280 = 280 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_281 = 281 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_282 = 282 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_283 = 283 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_284 = 284 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_285 = 285 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_286 = 286 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_287 = 287 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_288 = 288 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_289 = 289 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_290 = 290 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_291 = 291 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_292 = 292 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_293 = 293 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_294 = 294 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_295 = 295 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_296 = 296 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_297 = 297 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_298 = 298 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_299 = 299 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_300 = 300 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_301 = 301 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_302 = 302 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_303 = 303 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_304 = 304 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_305 = 305 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_306 = 306 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_307 = 307 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_308 = 308 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_309 = 309 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_310 = 310 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_311 = 311 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_312 = 312 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_313 = 313 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_314 = 314 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_315 = 315 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_316 = 316 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_317 = 317 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_318 = 318 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_319 = 319 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_320 = 320 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_321 = 321 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_322 = 322 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_323 = 323 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_324 = 324 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_325 = 325 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_326 = 326 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_327 = 327 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_328 = 328 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_329 = 329 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_330 = 330 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_331 = 331 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_332 = 332 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_333 = 333 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_334 = 334 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_335 = 335 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_336 = 336 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_337 = 337 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_338 = 338 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_339 = 339 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_340 = 340 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_341 = 341 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_342 = 342 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_343 = 343 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_344 = 344 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_345 = 345 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_346 = 346 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_347 = 347 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_348 = 348 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_349 = 349 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_350 = 350 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_351 = 351 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_352 = 352 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_353 = 353 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_354 = 354 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_355 = 355 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_356 = 356 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_357 = 357 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_358 = 358 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_359 = 359 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_360 = 360 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_361 = 361 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_362 = 362 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_363 = 363 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_364 = 364 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_365 = 365 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_366 = 366 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_367 = 367 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_368 = 368 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_369 = 369 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_370 = 370 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_371 = 371 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_372 = 372 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_373 = 373 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_374 = 374 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_375 = 375 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_376 = 376 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_377 = 377 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_378 = 378 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_379 = 379 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_380 = 380 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_381 = 381 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_382 = 382 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_383 = 383 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_384 = 384 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_385 = 385 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_386 = 386 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_387 = 387 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_388 = 388 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_389 = 389 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_390 = 390 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_391 = 391 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_392 = 392 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_393 = 393 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_394 = 394 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_395 = 395 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_396 = 396 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_397 = 397 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_398 = 398 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_399 = 399 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_400 = 400 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_401 = 401 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_402 = 402 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_403 = 403 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_404 = 404 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_405 = 405 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_406 = 406 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_407 = 407 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_408 = 408 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_409 = 409 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_410 = 410 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_411 = 411 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_412 = 412 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_413 = 413 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_414 = 414 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_415 = 415 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_416 = 416 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_417 = 417 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_418 = 418 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_419 = 419 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_420 = 420 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_421 = 421 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_422 = 422 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_423 = 423 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_424 = 424 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_425 = 425 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_426 = 426 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_427 = 427 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_428 = 428 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_429 = 429 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_430 = 430 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_431 = 431 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_432 = 432 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_433 = 433 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_434 = 434 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_435 = 435 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_436 = 436 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_437 = 437 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_438 = 438 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_439 = 439 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_440 = 440 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_441 = 441 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_442 = 442 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_443 = 443 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_444 = 444 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_445 = 445 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_446 = 446 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_447 = 447 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_448 = 448 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_449 = 449 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_450 = 450 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_451 = 451 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_452 = 452 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_453 = 453 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_454 = 454 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_455 = 455 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_456 = 456 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_457 = 457 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_458 = 458 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_459 = 459 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_460 = 460 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_461 = 461 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_462 = 462 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_463 = 463 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_464 = 464 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_465 = 465 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_466 = 466 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_467 = 467 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_468 = 468 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_469 = 469 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_470 = 470 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_471 = 471 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_472 = 472 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_473 = 473 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_474 = 474 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_475 = 475 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_476 = 476 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_477 = 477 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_478 = 478 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_479 = 479 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_480 = 480 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_481 = 481 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_482 = 482 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_483 = 483 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_484 = 484 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_485 = 485 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_486 = 486 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_487 = 487 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_488 = 488 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_489 = 489 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_490 = 490 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_491 = 491 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_492 = 492 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_493 = 493 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_494 = 494 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_495 = 495 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_496 = 496 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_497 = 497 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_498 = 498 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_499 = 499 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_500 = 500 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_501 = 501 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_502 = 502 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_503 = 503 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_504 = 504 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_505 = 505 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_506 = 506 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_507 = 507 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_508 = 508 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_509 = 509 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_510 = 510 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_511 = 511 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_512 = 512 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_513 = 513 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_514 = 514 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_515 = 515 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_516 = 516 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_517 = 517 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_518 = 518 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_519 = 519 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_520 = 520 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_521 = 521 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_522 = 522 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_523 = 523 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_524 = 524 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_525 = 525 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_526 = 526 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_527 = 527 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_528 = 528 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_529 = 529 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_530 = 530 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_531 = 531 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_532 = 532 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_533 = 533 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_534 = 534 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_535 = 535 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_536 = 536 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_537 = 537 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_538 = 538 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_539 = 539 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_540 = 540 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_541 = 541 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_542 = 542 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_543 = 543 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_544 = 544 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_545 = 545 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_546 = 546 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_547 = 547 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_548 = 548 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_549 = 549 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_550 = 550 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_551 = 551 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_552 = 552 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_553 = 553 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_554 = 554 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_555 = 555 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_556 = 556 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_557 = 557 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_558 = 558 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_559 = 559 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_560 = 560 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_561 = 561 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_562 = 562 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_563 = 563 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_564 = 564 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_565 = 565 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_566 = 566 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_567 = 567 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_568 = 568 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_569 = 569 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_570 = 570 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_571 = 571 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_572 = 572 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_573 = 573 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_574 = 574 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_575 = 575 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_576 = 576 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_577 = 577 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_578 = 578 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_579 = 579 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_580 = 580 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_581 = 581 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_582 = 582 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_583 = 583 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_584 = 584 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_585 = 585 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_586 = 586 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_587 = 587 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_588 = 588 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_589 = 589 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_590 = 590 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_591 = 591 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_592 = 592 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_593 = 593 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_594 = 594 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_595 = 595 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_596 = 596 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_597 = 597 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_598 = 598 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_599 = 599 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_600 = 600 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_601 = 601 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_602 = 602 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_603 = 603 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_604 = 604 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_605 = 605 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_606 = 606 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_607 = 607 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_608 = 608 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_609 = 609 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_610 = 610 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_611 = 611 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_612 = 612 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_613 = 613 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_614 = 614 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_615 = 615 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_616 = 616 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_617 = 617 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_618 = 618 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_619 = 619 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_620 = 620 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_621 = 621 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_622 = 622 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_623 = 623 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_624 = 624 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_625 = 625 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_626 = 626 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_627 = 627 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_628 = 628 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_629 = 629 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_630 = 630 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_631 = 631 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_632 = 632 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_633 = 633 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_634 = 634 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_635 = 635 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_636 = 636 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_637 = 637 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_638 = 638 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_639 = 639 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_640 = 640 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_641 = 641 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_642 = 642 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_643 = 643 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_644 = 644 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_645 = 645 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_646 = 646 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_647 = 647 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_648 = 648 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_649 = 649 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_650 = 650 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_651 = 651 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_652 = 652 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_653 = 653 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_654 = 654 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_655 = 655 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_656 = 656 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_657 = 657 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_658 = 658 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_659 = 659 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_660 = 660 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_661 = 661 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_662 = 662 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_663 = 663 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_664 = 664 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_665 = 665 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_666 = 666 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_667 = 667 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_668 = 668 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_669 = 669 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_670 = 670 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_671 = 671 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_672 = 672 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_673 = 673 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_674 = 674 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_675 = 675 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_676 = 676 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_677 = 677 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_678 = 678 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_679 = 679 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_680 = 680 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_681 = 681 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_682 = 682 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_683 = 683 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_684 = 684 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_685 = 685 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_686 = 686 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_687 = 687 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_688 = 688 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_689 = 689 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_690 = 690 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_691 = 691 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_692 = 692 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_693 = 693 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_694 = 694 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_695 = 695 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_696 = 696 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_697 = 697 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_698 = 698 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_699 = 699 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_700 = 700 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_701 = 701 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_702 = 702 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_703 = 703 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_704 = 704 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_705 = 705 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_706 = 706 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_707 = 707 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_708 = 708 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_709 = 709 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_710 = 710 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_711 = 711 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_712 = 712 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_713 = 713 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_714 = 714 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_715 = 715 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_716 = 716 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_717 = 717 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_718 = 718 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_719 = 719 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_720 = 720 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_721 = 721 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_722 = 722 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_723 = 723 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_724 = 724 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_725 = 725 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_726 = 726 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_727 = 727 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_728 = 728 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_729 = 729 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_730 = 730 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_731 = 731 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_732 = 732 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_733 = 733 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_734 = 734 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_735 = 735 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_736 = 736 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_737 = 737 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_738 = 738 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_739 = 739 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_740 = 740 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_741 = 741 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_742 = 742 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_743 = 743 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_744 = 744 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_745 = 745 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_746 = 746 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_747 = 747 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_748 = 748 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_749 = 749 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_750 = 750 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_751 = 751 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_752 = 752 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_753 = 753 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_754 = 754 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_755 = 755 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_756 = 756 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_757 = 757 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_758 = 758 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_759 = 759 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_760 = 760 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_761 = 761 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_762 = 762 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_763 = 763 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_764 = 764 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_765 = 765 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_766 = 766 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_767 = 767 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_768 = 768 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_769 = 769 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_770 = 770 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_771 = 771 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_772 = 772 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_773 = 773 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_774 = 774 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_775 = 775 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_776 = 776 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_777 = 777 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_778 = 778 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_779 = 779 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_780 = 780 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_781 = 781 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_782 = 782 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_783 = 783 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_784 = 784 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_785 = 785 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_786 = 786 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_787 = 787 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_788 = 788 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_789 = 789 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_790 = 790 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_791 = 791 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_792 = 792 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_793 = 793 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_794 = 794 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_795 = 795 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_796 = 796 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_797 = 797 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_798 = 798 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_799 = 799 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_800 = 800 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_801 = 801 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_802 = 802 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_803 = 803 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_804 = 804 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_805 = 805 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_806 = 806 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_807 = 807 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_808 = 808 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_809 = 809 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_810 = 810 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_811 = 811 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_812 = 812 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_813 = 813 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_814 = 814 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_815 = 815 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_816 = 816 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_817 = 817 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_818 = 818 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_819 = 819 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_820 = 820 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_821 = 821 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_822 = 822 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_823 = 823 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_824 = 824 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_825 = 825 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_826 = 826 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_827 = 827 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_828 = 828 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_829 = 829 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_830 = 830 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_831 = 831 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_832 = 832 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_833 = 833 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_834 = 834 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_835 = 835 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_836 = 836 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_837 = 837 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_838 = 838 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_839 = 839 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_840 = 840 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_841 = 841 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_842 = 842 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_843 = 843 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_844 = 844 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_845 = 845 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_846 = 846 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_847 = 847 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_848 = 848 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_849 = 849 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_850 = 850 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_851 = 851 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_852 = 852 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_853 = 853 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_854 = 854 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_855 = 855 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_856 = 856 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_857 = 857 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_858 = 858 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_859 = 859 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_860 = 860 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_861 = 861 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_862 = 862 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_863 = 863 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_864 = 864 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_865 = 865 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_866 = 866 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_867 = 867 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_868 = 868 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_869 = 869 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_870 = 870 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_871 = 871 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_872 = 872 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_873 = 873 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_874 = 874 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_875 = 875 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_876 = 876 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_877 = 877 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_878 = 878 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_879 = 879 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_880 = 880 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_881 = 881 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_882 = 882 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_883 = 883 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_884 = 884 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_885 = 885 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_886 = 886 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_887 = 887 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_888 = 888 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_889 = 889 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_890 = 890 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_891 = 891 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_892 = 892 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_893 = 893 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_894 = 894 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_895 = 895 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_896 = 896 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_897 = 897 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_898 = 898 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_899 = 899 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_900 = 900 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_901 = 901 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_902 = 902 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_903 = 903 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_904 = 904 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_905 = 905 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_906 = 906 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_907 = 907 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_908 = 908 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_909 = 909 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_910 = 910 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_911 = 911 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_912 = 912 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_913 = 913 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_914 = 914 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_915 = 915 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_916 = 916 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_917 = 917 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_918 = 918 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_919 = 919 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_920 = 920 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_921 = 921 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_922 = 922 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_923 = 923 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_924 = 924 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_925 = 925 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_926 = 926 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_927 = 927 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_928 = 928 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_929 = 929 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_930 = 930 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_931 = 931 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_932 = 932 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_933 = 933 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_934 = 934 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_935 = 935 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_936 = 936 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_937 = 937 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_938 = 938 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_939 = 939 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_940 = 940 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_941 = 941 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_942 = 942 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_943 = 943 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_944 = 944 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_945 = 945 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_946 = 946 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_947 = 947 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_948 = 948 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_949 = 949 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_950 = 950 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_951 = 951 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_952 = 952 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_953 = 953 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_954 = 954 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_955 = 955 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_956 = 956 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_957 = 957 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_958 = 958 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_959 = 959 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_960 = 960 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_961 = 961 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_962 = 962 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_963 = 963 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_964 = 964 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_965 = 965 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_966 = 966 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_967 = 967 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_968 = 968 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_969 = 969 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_970 = 970 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_971 = 971 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_972 = 972 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_973 = 973 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_974 = 974 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_975 = 975 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_976 = 976 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_977 = 977 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_978 = 978 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_979 = 979 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_980 = 980 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_981 = 981 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_982 = 982 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_983 = 983 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_984 = 984 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_985 = 985 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_986 = 986 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_987 = 987 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_988 = 988 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_989 = 989 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_990 = 990 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_991 = 991 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_992 = 992 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_993 = 993 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_994 = 994 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_995 = 995 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_996 = 996 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_997 = 997 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_998 = 998 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_999 = 999 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+  optional string long_field_name_is_looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong_1000 = 1000 [default="long default value is also loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong"];
+}
diff --git a/csharp/protos/google/protobuf/unittest_import.proto b/csharp/protos/google/protobuf/unittest_import.proto
new file mode 100644
index 0000000..aa68c86
--- /dev/null
+++ b/csharp/protos/google/protobuf/unittest_import.proto
@@ -0,0 +1,67 @@
+// Additional options required for C# generation. File from copyright
+// line onwards is as per original distribution.
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestImportProtoFile";
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// A proto file which is imported by unittest.proto to test importing.
+
+
+// We don't put this in a package within proto2 because we need to make sure
+// that the generated code doesn't depend on being in the proto2 namespace.
+// In test_util.h we do
+// "using namespace unittest_import = protobuf_unittest_import".
+package protobuf_unittest_import;
+
+option optimize_for = SPEED;
+
+// Excercise the java_package option.
+option java_package = "com.google.protobuf.test";
+
+// Do not set a java_outer_classname here to verify that Proto2 works without
+// one.
+
+message ImportMessage {
+  optional int32 d = 1;
+}
+
+enum ImportEnum {
+  IMPORT_FOO = 7;
+  IMPORT_BAR = 8;
+  IMPORT_BAZ = 9;
+}
+
diff --git a/csharp/protos/google/protobuf/unittest_import_lite.proto b/csharp/protos/google/protobuf/unittest_import_lite.proto
new file mode 100644
index 0000000..d8755d0
--- /dev/null
+++ b/csharp/protos/google/protobuf/unittest_import_lite.proto
@@ -0,0 +1,55 @@
+// Additional options required for C# generation. File from copyright
+// line onwards is as per original distribution.
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestImportLiteProtoFile";
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+//
+// This is like unittest_import.proto but with optimize_for = LITE_RUNTIME.
+
+package protobuf_unittest_import;
+
+option optimize_for = LITE_RUNTIME;
+
+option java_package = "com.google.protobuf";
+
+message ImportMessageLite {
+  optional int32 d = 1;
+}
+
+enum ImportEnumLite {
+  IMPORT_LITE_FOO = 7;
+  IMPORT_LITE_BAR = 8;
+  IMPORT_LITE_BAZ = 9;
+}
diff --git a/csharp/protos/google/protobuf/unittest_lite.proto b/csharp/protos/google/protobuf/unittest_lite.proto
new file mode 100644
index 0000000..823fa1d
--- /dev/null
+++ b/csharp/protos/google/protobuf/unittest_lite.proto
@@ -0,0 +1,318 @@
+// Additional options required for C# generation. File from copyright
+// line onwards is as per original distribution.
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestLiteProtoFile";
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+//
+// This is like unittest.proto but with optimize_for = LITE_RUNTIME.
+
+package protobuf_unittest;
+
+import "google/protobuf/unittest_import_lite.proto";
+
+option optimize_for = LITE_RUNTIME;
+
+option java_package = "com.google.protobuf";
+
+// Same as TestAllTypes but with the lite runtime.
+message TestAllTypesLite {
+  message NestedMessage {
+    optional int32 bb = 1;
+  }
+
+  enum NestedEnum {
+    FOO = 1;
+    BAR = 2;
+    BAZ = 3;
+  }
+
+  // Singular
+  optional    int32 optional_int32    =  1;
+  optional    int64 optional_int64    =  2;
+  optional   uint32 optional_uint32   =  3;
+  optional   uint64 optional_uint64   =  4;
+  optional   sint32 optional_sint32   =  5;
+  optional   sint64 optional_sint64   =  6;
+  optional  fixed32 optional_fixed32  =  7;
+  optional  fixed64 optional_fixed64  =  8;
+  optional sfixed32 optional_sfixed32 =  9;
+  optional sfixed64 optional_sfixed64 = 10;
+  optional    float optional_float    = 11;
+  optional   double optional_double   = 12;
+  optional     bool optional_bool     = 13;
+  optional   string optional_string   = 14;
+  optional    bytes optional_bytes    = 15;
+
+  optional group OptionalGroup = 16 {
+    optional int32 a = 17;
+  }
+
+  optional NestedMessage      optional_nested_message  = 18;
+  optional ForeignMessageLite optional_foreign_message = 19;
+  optional protobuf_unittest_import.ImportMessageLite
+    optional_import_message = 20;
+
+  optional NestedEnum      optional_nested_enum     = 21;
+  optional ForeignEnumLite optional_foreign_enum    = 22;
+  optional protobuf_unittest_import.ImportEnumLite optional_import_enum = 23;
+
+  optional string optional_string_piece = 24 [ctype=STRING_PIECE];
+  optional string optional_cord = 25 [ctype=CORD];
+
+  // Repeated
+  repeated    int32 repeated_int32    = 31;
+  repeated    int64 repeated_int64    = 32;
+  repeated   uint32 repeated_uint32   = 33;
+  repeated   uint64 repeated_uint64   = 34;
+  repeated   sint32 repeated_sint32   = 35;
+  repeated   sint64 repeated_sint64   = 36;
+  repeated  fixed32 repeated_fixed32  = 37;
+  repeated  fixed64 repeated_fixed64  = 38;
+  repeated sfixed32 repeated_sfixed32 = 39;
+  repeated sfixed64 repeated_sfixed64 = 40;
+  repeated    float repeated_float    = 41;
+  repeated   double repeated_double   = 42;
+  repeated     bool repeated_bool     = 43;
+  repeated   string repeated_string   = 44;
+  repeated    bytes repeated_bytes    = 45;
+
+  repeated group RepeatedGroup = 46 {
+    optional int32 a = 47;
+  }
+
+  repeated NestedMessage      repeated_nested_message  = 48;
+  repeated ForeignMessageLite repeated_foreign_message = 49;
+  repeated protobuf_unittest_import.ImportMessageLite
+    repeated_import_message = 50;
+
+  repeated NestedEnum      repeated_nested_enum  = 51;
+  repeated ForeignEnumLite repeated_foreign_enum = 52;
+  repeated protobuf_unittest_import.ImportEnumLite repeated_import_enum = 53;
+
+  repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
+  repeated string repeated_cord = 55 [ctype=CORD];
+
+  // Singular with defaults
+  optional    int32 default_int32    = 61 [default =  41    ];
+  optional    int64 default_int64    = 62 [default =  42    ];
+  optional   uint32 default_uint32   = 63 [default =  43    ];
+  optional   uint64 default_uint64   = 64 [default =  44    ];
+  optional   sint32 default_sint32   = 65 [default = -45    ];
+  optional   sint64 default_sint64   = 66 [default =  46    ];
+  optional  fixed32 default_fixed32  = 67 [default =  47    ];
+  optional  fixed64 default_fixed64  = 68 [default =  48    ];
+  optional sfixed32 default_sfixed32 = 69 [default =  49    ];
+  optional sfixed64 default_sfixed64 = 70 [default = -50    ];
+  optional    float default_float    = 71 [default =  51.5  ];
+  optional   double default_double   = 72 [default =  52e3  ];
+  optional     bool default_bool     = 73 [default = true   ];
+  optional   string default_string   = 74 [default = "hello"];
+  optional    bytes default_bytes    = 75 [default = "world"];
+
+  optional NestedEnum default_nested_enum = 81 [default = BAR];
+  optional ForeignEnumLite default_foreign_enum = 82
+      [default = FOREIGN_LITE_BAR];
+  optional protobuf_unittest_import.ImportEnumLite
+      default_import_enum = 83 [default = IMPORT_LITE_BAR];
+
+  optional string default_string_piece = 84 [ctype=STRING_PIECE,default="abc"];
+  optional string default_cord = 85 [ctype=CORD,default="123"];
+}
+
+message ForeignMessageLite {
+  optional int32 c = 1;
+}
+
+enum ForeignEnumLite {
+  FOREIGN_LITE_FOO = 4;
+  FOREIGN_LITE_BAR = 5;
+  FOREIGN_LITE_BAZ = 6;
+}
+
+message TestPackedTypesLite {
+  repeated    int32 packed_int32    =  90 [packed = true];
+  repeated    int64 packed_int64    =  91 [packed = true];
+  repeated   uint32 packed_uint32   =  92 [packed = true];
+  repeated   uint64 packed_uint64   =  93 [packed = true];
+  repeated   sint32 packed_sint32   =  94 [packed = true];
+  repeated   sint64 packed_sint64   =  95 [packed = true];
+  repeated  fixed32 packed_fixed32  =  96 [packed = true];
+  repeated  fixed64 packed_fixed64  =  97 [packed = true];
+  repeated sfixed32 packed_sfixed32 =  98 [packed = true];
+  repeated sfixed64 packed_sfixed64 =  99 [packed = true];
+  repeated    float packed_float    = 100 [packed = true];
+  repeated   double packed_double   = 101 [packed = true];
+  repeated     bool packed_bool     = 102 [packed = true];
+  repeated ForeignEnumLite packed_enum  = 103 [packed = true];
+}
+
+message TestAllExtensionsLite {
+  extensions 1 to max;
+}
+
+extend TestAllExtensionsLite {
+  // Singular
+  optional    int32 optional_int32_extension_lite    =  1;
+  optional    int64 optional_int64_extension_lite    =  2;
+  optional   uint32 optional_uint32_extension_lite   =  3;
+  optional   uint64 optional_uint64_extension_lite   =  4;
+  optional   sint32 optional_sint32_extension_lite   =  5;
+  optional   sint64 optional_sint64_extension_lite   =  6;
+  optional  fixed32 optional_fixed32_extension_lite  =  7;
+  optional  fixed64 optional_fixed64_extension_lite  =  8;
+  optional sfixed32 optional_sfixed32_extension_lite =  9;
+  optional sfixed64 optional_sfixed64_extension_lite = 10;
+  optional    float optional_float_extension_lite    = 11;
+  optional   double optional_double_extension_lite   = 12;
+  optional     bool optional_bool_extension_lite     = 13;
+  optional   string optional_string_extension_lite   = 14;
+  optional    bytes optional_bytes_extension_lite    = 15;
+
+  optional group OptionalGroup_extension_lite = 16 {
+    optional int32 a = 17;
+  }
+
+  optional TestAllTypesLite.NestedMessage optional_nested_message_extension_lite
+      = 18;
+  optional ForeignMessageLite optional_foreign_message_extension_lite = 19;
+  optional protobuf_unittest_import.ImportMessageLite
+    optional_import_message_extension_lite = 20;
+
+  optional TestAllTypesLite.NestedEnum optional_nested_enum_extension_lite = 21;
+  optional ForeignEnumLite optional_foreign_enum_extension_lite = 22;
+  optional protobuf_unittest_import.ImportEnumLite
+    optional_import_enum_extension_lite = 23;
+
+  optional string optional_string_piece_extension_lite = 24
+      [ctype=STRING_PIECE];
+  optional string optional_cord_extension_lite = 25 [ctype=CORD];
+
+  // Repeated
+  repeated    int32 repeated_int32_extension_lite    = 31;
+  repeated    int64 repeated_int64_extension_lite    = 32;
+  repeated   uint32 repeated_uint32_extension_lite   = 33;
+  repeated   uint64 repeated_uint64_extension_lite   = 34;
+  repeated   sint32 repeated_sint32_extension_lite   = 35;
+  repeated   sint64 repeated_sint64_extension_lite   = 36;
+  repeated  fixed32 repeated_fixed32_extension_lite  = 37;
+  repeated  fixed64 repeated_fixed64_extension_lite  = 38;
+  repeated sfixed32 repeated_sfixed32_extension_lite = 39;
+  repeated sfixed64 repeated_sfixed64_extension_lite = 40;
+  repeated    float repeated_float_extension_lite    = 41;
+  repeated   double repeated_double_extension_lite   = 42;
+  repeated     bool repeated_bool_extension_lite     = 43;
+  repeated   string repeated_string_extension_lite   = 44;
+  repeated    bytes repeated_bytes_extension_lite    = 45;
+
+  repeated group RepeatedGroup_extension_lite = 46 {
+    optional int32 a = 47;
+  }
+
+  repeated TestAllTypesLite.NestedMessage repeated_nested_message_extension_lite
+      = 48;
+  repeated ForeignMessageLite repeated_foreign_message_extension_lite = 49;
+  repeated protobuf_unittest_import.ImportMessageLite
+    repeated_import_message_extension_lite = 50;
+
+  repeated TestAllTypesLite.NestedEnum repeated_nested_enum_extension_lite = 51;
+  repeated ForeignEnumLite repeated_foreign_enum_extension_lite = 52;
+  repeated protobuf_unittest_import.ImportEnumLite
+    repeated_import_enum_extension_lite = 53;
+
+  repeated string repeated_string_piece_extension_lite = 54
+      [ctype=STRING_PIECE];
+  repeated string repeated_cord_extension_lite = 55 [ctype=CORD];
+
+  // Singular with defaults
+  optional    int32 default_int32_extension_lite    = 61 [default =  41    ];
+  optional    int64 default_int64_extension_lite    = 62 [default =  42    ];
+  optional   uint32 default_uint32_extension_lite   = 63 [default =  43    ];
+  optional   uint64 default_uint64_extension_lite   = 64 [default =  44    ];
+  optional   sint32 default_sint32_extension_lite   = 65 [default = -45    ];
+  optional   sint64 default_sint64_extension_lite   = 66 [default =  46    ];
+  optional  fixed32 default_fixed32_extension_lite  = 67 [default =  47    ];
+  optional  fixed64 default_fixed64_extension_lite  = 68 [default =  48    ];
+  optional sfixed32 default_sfixed32_extension_lite = 69 [default =  49    ];
+  optional sfixed64 default_sfixed64_extension_lite = 70 [default = -50    ];
+  optional    float default_float_extension_lite    = 71 [default =  51.5  ];
+  optional   double default_double_extension_lite   = 72 [default =  52e3  ];
+  optional     bool default_bool_extension_lite     = 73 [default = true   ];
+  optional   string default_string_extension_lite   = 74 [default = "hello"];
+  optional    bytes default_bytes_extension_lite    = 75 [default = "world"];
+
+  optional TestAllTypesLite.NestedEnum
+    default_nested_enum_extension_lite = 81 [default = BAR];
+  optional ForeignEnumLite
+    default_foreign_enum_extension_lite = 82 [default = FOREIGN_LITE_BAR];
+  optional protobuf_unittest_import.ImportEnumLite
+    default_import_enum_extension_lite = 83 [default = IMPORT_LITE_BAR];
+
+  optional string default_string_piece_extension_lite = 84 [ctype=STRING_PIECE,
+                                                            default="abc"];
+  optional string default_cord_extension_lite = 85 [ctype=CORD, default="123"];
+}
+
+message TestPackedExtensionsLite {
+  extensions 1 to max;
+}
+
+extend TestPackedExtensionsLite {
+  repeated    int32 packed_int32_extension_lite    =  90 [packed = true];
+  repeated    int64 packed_int64_extension_lite    =  91 [packed = true];
+  repeated   uint32 packed_uint32_extension_lite   =  92 [packed = true];
+  repeated   uint64 packed_uint64_extension_lite   =  93 [packed = true];
+  repeated   sint32 packed_sint32_extension_lite   =  94 [packed = true];
+  repeated   sint64 packed_sint64_extension_lite   =  95 [packed = true];
+  repeated  fixed32 packed_fixed32_extension_lite  =  96 [packed = true];
+  repeated  fixed64 packed_fixed64_extension_lite  =  97 [packed = true];
+  repeated sfixed32 packed_sfixed32_extension_lite =  98 [packed = true];
+  repeated sfixed64 packed_sfixed64_extension_lite =  99 [packed = true];
+  repeated    float packed_float_extension_lite    = 100 [packed = true];
+  repeated   double packed_double_extension_lite   = 101 [packed = true];
+  repeated     bool packed_bool_extension_lite     = 102 [packed = true];
+  repeated ForeignEnumLite packed_enum_extension_lite = 103 [packed = true];
+}
+
+message TestNestedExtensionLite {
+  extend TestAllExtensionsLite {
+    optional int32 nested_extension = 12345;
+  }
+}
+
+// Test that deprecated fields work.  We only verify that they compile (at one
+// point this failed).
+message TestDeprecatedLite {
+  optional int32 deprecated_field = 1 [deprecated = true];
+}
diff --git a/csharp/protos/google/protobuf/unittest_lite_imports_nonlite.proto b/csharp/protos/google/protobuf/unittest_lite_imports_nonlite.proto
new file mode 100644
index 0000000..8f18f4d
--- /dev/null
+++ b/csharp/protos/google/protobuf/unittest_lite_imports_nonlite.proto
@@ -0,0 +1,49 @@
+// Additional options required for C# generation. File from copyright
+// line onwards is as per original distribution.
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestLiteImportNonLiteProtoFile";
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+//
+// Tests that a "lite" message can import a regular message.
+
+package protobuf_unittest;
+
+import "google/protobuf/unittest.proto";
+
+option optimize_for = LITE_RUNTIME;
+
+message TestLiteImportsNonlite {
+  optional TestAllTypes message = 1;
+}
diff --git a/csharp/protos/google/protobuf/unittest_mset.proto b/csharp/protos/google/protobuf/unittest_mset.proto
new file mode 100644
index 0000000..8c74ef4
--- /dev/null
+++ b/csharp/protos/google/protobuf/unittest_mset.proto
@@ -0,0 +1,78 @@
+// Additional options required for C# generation. File from copyright
+// line onwards is as per original distribution.
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestMessageSetProtoFile";
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// This file contains messages for testing message_set_wire_format.
+
+package protobuf_unittest;
+
+option optimize_for = SPEED;
+
+// A message with message_set_wire_format.
+message TestMessageSet {
+  option message_set_wire_format = true;
+  extensions 4 to max;
+}
+
+message TestMessageSetContainer {
+  optional TestMessageSet message_set = 1;
+}
+
+message TestMessageSetExtension1 {
+  extend TestMessageSet {
+    optional TestMessageSetExtension1 message_set_extension = 1545008;
+  }
+  optional int32 i = 15;
+}
+
+message TestMessageSetExtension2 {
+  extend TestMessageSet {
+    optional TestMessageSetExtension2 message_set_extension = 1547769;
+  }
+  optional string str = 25;
+}
+
+// MessageSet wire format is equivalent to this.
+message RawMessageSet {
+  repeated group Item = 1 {
+    required int32 type_id = 2;
+    required bytes message = 3;
+  }
+}
+
diff --git a/csharp/protos/google/protobuf/unittest_no_generic_services.proto b/csharp/protos/google/protobuf/unittest_no_generic_services.proto
new file mode 100644
index 0000000..5ab533b
--- /dev/null
+++ b/csharp/protos/google/protobuf/unittest_no_generic_services.proto
@@ -0,0 +1,58 @@
+// Additional options required for C# generation. File from copyright
+// line onwards is as per original distribution.
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos.NoGenericService";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestNoGenericServicesProtoFile";
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+
+package google.protobuf.no_generic_services_test;
+
+// *_generic_services are false by default.
+
+message TestMessage {
+  optional int32 a = 1;
+  extensions 1000 to max;
+}
+
+enum TestEnum {
+  FOO = 1;
+}
+
+extend TestMessage {
+  optional int32 test_extension = 1000;
+}
+
+service TestService {
+  rpc Foo(TestMessage) returns(TestMessage);
+}
diff --git a/csharp/protos/google/protobuf/unittest_optimize_for.proto b/csharp/protos/google/protobuf/unittest_optimize_for.proto
new file mode 100644
index 0000000..99efad6
--- /dev/null
+++ b/csharp/protos/google/protobuf/unittest_optimize_for.proto
@@ -0,0 +1,67 @@
+// Additional options required for C# generation. File from copyright
+// line onwards is as per original distribution.
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestOptimizeForProtoFile";
+
+// Protocol Buffers - Google's data interchange format
+// Copyright 2008 Google Inc.  All rights reserved.
+// http://code.google.com/p/protobuf/
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//     * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//     * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//     * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// Author: kenton@google.com (Kenton Varda)
+//  Based on original Protocol Buffers design by
+//  Sanjay Ghemawat, Jeff Dean, and others.
+//
+// A proto file which uses optimize_for = CODE_SIZE.
+
+import "google/protobuf/unittest.proto";
+
+package protobuf_unittest;
+
+option optimize_for = CODE_SIZE;
+
+message TestOptimizedForSize {
+  optional int32 i = 1;
+  optional ForeignMessage msg = 19;
+
+  extensions 1000 to max;
+
+  extend TestOptimizedForSize {
+    optional int32 test_extension = 1234;
+    optional TestRequiredOptimizedForSize test_extension2 = 1235;
+  }
+}
+
+message TestRequiredOptimizedForSize {
+  required int32 x = 1;
+}
+ 
+message TestOptionalOptimizedForSize {
+  optional TestRequiredOptimizedForSize o = 1;
+}
diff --git a/csharp/protos/google/test/google_size.proto b/csharp/protos/google/test/google_size.proto
new file mode 100644
index 0000000..2e777df
--- /dev/null
+++ b/csharp/protos/google/test/google_size.proto
@@ -0,0 +1,140 @@
+package unittest_google_size;
+
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestGoogleSizeProtoFile";
+
+option java_outer_classname = "GoogleSize";
+option optimize_for = CODE_SIZE;
+
+message SizeMessage1 {
+  required string field1 = 1;
+  optional string field9 = 9;
+  optional string field18 = 18;
+  optional bool field80 = 80 [default=false];
+  optional bool field81 = 81 [default=true];
+  required int32 field2 = 2;
+  required int32 field3 = 3;
+  optional int32 field280 = 280;
+  optional int32 field6 = 6 [default=0];
+  optional int64 field22 = 22;
+  optional string field4 = 4;
+  repeated fixed64 field5 = 5;
+  optional bool field59 = 59 [default=false];
+  optional string field7 = 7;
+  optional int32 field16 = 16;
+  optional int32 field130 = 130 [default=0];
+  optional bool field12 = 12 [default=true];
+  optional bool field17 = 17 [default=true];
+  optional bool field13 = 13 [default=true];
+  optional bool field14 = 14 [default=true];
+  optional int32 field104 = 104 [default=0];
+  optional int32 field100 = 100 [default=0];
+  optional int32 field101 = 101 [default=0];
+  optional string field102 = 102;
+  optional string field103 = 103;
+  optional int32 field29 = 29 [default=0];
+  optional bool field30 = 30 [default=false];
+  optional int32 field60 = 60 [default=-1];
+  optional int32 field271 = 271 [default=-1];
+  optional int32 field272 = 272 [default=-1];
+  optional int32 field150 = 150;
+  optional int32 field23 = 23 [default=0];
+  optional bool field24 = 24 [default=false];
+  optional int32 field25 = 25 [default=0];
+  optional SizeMessage1SubMessage field15 = 15;
+  optional bool field78 = 78;
+  optional int32 field67 = 67 [default=0];
+  optional int32 field68 = 68;
+  optional int32 field128 = 128 [default=0];
+  optional string field129 = 129 [default="xxxxxxxxxxxxxxxxxxxxx"];
+  optional int32 field131 = 131 [default=0];
+}
+
+message SizeMessage1SubMessage {
+  optional int32 field1 = 1 [default=0];
+  optional int32 field2 = 2 [default=0];
+  optional int32 field3 = 3 [default=0];
+  optional string field15 = 15;
+  optional bool field12 = 12 [default=true];
+  optional int64 field13 = 13;
+  optional int64 field14 = 14;
+  optional int32 field16 = 16;
+  optional int32 field19 = 19 [default=2];
+  optional bool field20  = 20 [default=true];
+  optional bool field28 = 28 [default=true];
+  optional fixed64 field21 = 21;
+  optional int32 field22 = 22;
+  optional bool field23 = 23 [ default=false ];
+  optional bool field206 = 206 [default=false];
+  optional fixed32 field203 = 203;
+  optional int32 field204 = 204;
+  optional string field205 = 205;
+  optional uint64 field207 = 207;
+  optional uint64 field300 = 300;
+}
+
+message SizeMessage2 {
+  optional string field1 = 1;
+  optional int64 field3 = 3;
+  optional int64 field4 = 4;
+  optional int64 field30 = 30;
+  optional bool field75  = 75 [default=false];
+  optional string field6 = 6;
+  optional bytes field2 = 2;
+  optional int32 field21 = 21 [default=0];
+  optional int32 field71 = 71;
+  optional float field25 = 25;
+  optional int32 field109 = 109 [default=0];
+  optional int32 field210 = 210 [default=0];
+  optional int32 field211 = 211 [default=0];
+  optional int32 field212 = 212 [default=0];
+  optional int32 field213 = 213 [default=0];
+  optional int32 field216 = 216 [default=0];
+  optional int32 field217 = 217 [default=0];
+  optional int32 field218 = 218 [default=0];
+  optional int32 field220 = 220 [default=0];
+  optional int32 field221 = 221 [default=0];
+  optional float field222 = 222 [default=0.0];
+  optional int32 field63 = 63;
+
+  repeated group Group1 = 10 {
+    required float field11 = 11;
+    optional float field26 = 26;
+    optional string field12 = 12;
+    optional string field13 = 13;
+    repeated string field14 = 14;
+    required uint64 field15 = 15;
+    optional int32 field5 = 5;
+    optional string field27 = 27;
+    optional int32 field28 = 28;
+    optional string field29 = 29;
+    optional string field16 = 16;
+    repeated string field22 = 22;
+    repeated int32 field73 = 73;
+    optional int32 field20 = 20 [default=0];
+    optional string field24 = 24;
+    optional SizeMessage2GroupedMessage field31 = 31;
+  }
+  repeated string field128 = 128;
+  optional int64 field131 = 131;
+  repeated string field127 = 127;
+  optional int32 field129 = 129;
+  repeated int64 field130 = 130;
+  optional bool field205 = 205 [default=false];
+  optional bool field206 = 206 [default=false];
+}
+
+message SizeMessage2GroupedMessage {
+  optional float field1 = 1;
+  optional float field2 = 2;
+  optional float field3 = 3 [default=0.0];
+  optional bool field4 = 4;
+  optional bool field5 = 5;
+  optional bool field6 = 6 [default=true];
+  optional bool field7 = 7 [default=false];
+  optional float field8 = 8;
+  optional bool field9 = 9;
+  optional float field10 = 10;
+  optional int64 field11 = 11;
+}
diff --git a/csharp/protos/google/test/google_speed.proto b/csharp/protos/google/test/google_speed.proto
new file mode 100644
index 0000000..eef2a07
--- /dev/null
+++ b/csharp/protos/google/test/google_speed.proto
@@ -0,0 +1,140 @@
+package unittest_google_speed;
+
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.TestProtos";
+option (google.protobuf.csharp_file_options).umbrella_classname = "UnitTestGoogleSpeedProtoFile";
+
+option java_outer_classname = "GoogleSpeed";
+option optimize_for = SPEED;
+
+message SpeedMessage1 {
+  required string field1 = 1;
+  optional string field9 = 9;
+  optional string field18 = 18;
+  optional bool field80 = 80 [default=false];
+  optional bool field81 = 81 [default=true];
+  required int32 field2 = 2;
+  required int32 field3 = 3;
+  optional int32 field280 = 280;
+  optional int32 field6 = 6 [default=0];
+  optional int64 field22 = 22;
+  optional string field4 = 4;
+  repeated fixed64 field5 = 5;
+  optional bool field59 = 59 [default=false];
+  optional string field7 = 7;
+  optional int32 field16 = 16;
+  optional int32 field130 = 130 [default=0];
+  optional bool field12 = 12 [default=true];
+  optional bool field17 = 17 [default=true];
+  optional bool field13 = 13 [default=true];
+  optional bool field14 = 14 [default=true];
+  optional int32 field104 = 104 [default=0];
+  optional int32 field100 = 100 [default=0];
+  optional int32 field101 = 101 [default=0];
+  optional string field102 = 102;
+  optional string field103 = 103;
+  optional int32 field29 = 29 [default=0];
+  optional bool field30 = 30 [default=false];
+  optional int32 field60 = 60 [default=-1];
+  optional int32 field271 = 271 [default=-1];
+  optional int32 field272 = 272 [default=-1];
+  optional int32 field150 = 150;
+  optional int32 field23 = 23 [default=0];
+  optional bool field24 = 24 [default=false];
+  optional int32 field25 = 25 [default=0];
+  optional SpeedMessage1SubMessage field15 = 15;
+  optional bool field78 = 78;
+  optional int32 field67 = 67 [default=0];
+  optional int32 field68 = 68;
+  optional int32 field128 = 128 [default=0];
+  optional string field129 = 129 [default="xxxxxxxxxxxxxxxxxxxxx"];
+  optional int32 field131 = 131 [default=0];
+}
+
+message SpeedMessage1SubMessage {
+  optional int32 field1 = 1 [default=0];
+  optional int32 field2 = 2 [default=0];
+  optional int32 field3 = 3 [default=0];
+  optional string field15 = 15;
+  optional bool field12 = 12 [default=true];
+  optional int64 field13 = 13;
+  optional int64 field14 = 14;
+  optional int32 field16 = 16;
+  optional int32 field19 = 19 [default=2];
+  optional bool field20  = 20 [default=true];
+  optional bool field28 = 28 [default=true];
+  optional fixed64 field21 = 21;
+  optional int32 field22 = 22;
+  optional bool field23 = 23 [ default=false ];
+  optional bool field206 = 206 [default=false];
+  optional fixed32 field203 = 203;
+  optional int32 field204 = 204;
+  optional string field205 = 205;
+  optional uint64 field207 = 207;
+  optional uint64 field300 = 300;
+}
+
+message SpeedMessage2 {
+  optional string field1 = 1;
+  optional int64 field3 = 3;
+  optional int64 field4 = 4;
+  optional int64 field30 = 30;
+  optional bool field75  = 75 [default=false];
+  optional string field6 = 6;
+  optional bytes field2 = 2;
+  optional int32 field21 = 21 [default=0];
+  optional int32 field71 = 71;
+  optional float field25 = 25;
+  optional int32 field109 = 109 [default=0];
+  optional int32 field210 = 210 [default=0];
+  optional int32 field211 = 211 [default=0];
+  optional int32 field212 = 212 [default=0];
+  optional int32 field213 = 213 [default=0];
+  optional int32 field216 = 216 [default=0];
+  optional int32 field217 = 217 [default=0];
+  optional int32 field218 = 218 [default=0];
+  optional int32 field220 = 220 [default=0];
+  optional int32 field221 = 221 [default=0];
+  optional float field222 = 222 [default=0.0];
+  optional int32 field63 = 63;
+
+  repeated group Group1 = 10 {
+    required float field11 = 11;
+    optional float field26 = 26;
+    optional string field12 = 12;
+    optional string field13 = 13;
+    repeated string field14 = 14;
+    required uint64 field15 = 15;
+    optional int32 field5 = 5;
+    optional string field27 = 27;
+    optional int32 field28 = 28;
+    optional string field29 = 29;
+    optional string field16 = 16;
+    repeated string field22 = 22;
+    repeated int32 field73 = 73;
+    optional int32 field20 = 20 [default=0];
+    optional string field24 = 24;
+    optional SpeedMessage2GroupedMessage field31 = 31;
+  }
+  repeated string field128 = 128;
+  optional int64 field131 = 131;
+  repeated string field127 = 127;
+  optional int32 field129 = 129;
+  repeated int64 field130 = 130;
+  optional bool field205 = 205 [default=false];
+  optional bool field206 = 206 [default=false];
+}
+
+message SpeedMessage2GroupedMessage {
+  optional float field1 = 1;
+  optional float field2 = 2;
+  optional float field3 = 3 [default=0.0];
+  optional bool field4 = 4;
+  optional bool field5 = 5;
+  optional bool field6 = 6 [default=true];
+  optional bool field7 = 7 [default=false];
+  optional float field8 = 8;
+  optional bool field9 = 9;
+  optional float field10 = 10;
+  optional int64 field11 = 11;
+}
diff --git a/csharp/protos/npp.language.xml b/csharp/protos/npp.language.xml
new file mode 100644
index 0000000..c612218
--- /dev/null
+++ b/csharp/protos/npp.language.xml
@@ -0,0 +1,44 @@
+<NotepadPlus>

+<!--

+Defines syntax highlighting for Notepad++.

+1. Install Notepad++ from http://notepad-plus-plus.org

+2. Open Notepad++, from the View menu, select "User-Defined Dialog..."

+3. Click the "Import..." button and select this file

+4. Restart Notepad++

+5. Open and edit any *.proto file

+-->

+    <UserLang name="Proto Buffer" ext="proto">

+        <Settings>

+            <Global caseIgnored="no" />

+            <TreatAsSymbol comment="no" commentLine="yes" />

+            <Prefix words1="no" words2="no" words3="no" words4="yes" />

+        </Settings>

+        <KeywordLists>

+            <Keywords name="Delimiters">[00]00</Keywords>

+            <Keywords name="Folder+">{</Keywords>

+            <Keywords name="Folder-">}</Keywords>

+            <Keywords name="Operators">=</Keywords>

+            <Keywords name="Comment"> 1option 1package 1import 2; 0//</Keywords>

+            <Keywords name="Words1">message enum service extend</Keywords>

+            <Keywords name="Words2">required optional repeated extensions to rpc returns</Keywords>

+            <Keywords name="Words3">double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes</Keywords>

+            <Keywords name="Words4"></Keywords>

+        </KeywordLists>

+        <Styles>

+            <WordsStyle name="DEFAULT" styleID="11" fgColor="000000" bgColor="FFFFFF" fontStyle="0" />

+            <WordsStyle name="FOLDEROPEN" styleID="12" fgColor="000000" bgColor="FFFFFF" fontStyle="1" />

+            <WordsStyle name="FOLDERCLOSE" styleID="13" fgColor="000000" bgColor="FFFFFF" fontStyle="1" />

+            <WordsStyle name="KEYWORD1" styleID="5" fgColor="0000FF" bgColor="FFFFFF" fontStyle="0" />

+            <WordsStyle name="KEYWORD2" styleID="6" fgColor="0080C0" bgColor="FFFFFF" fontStyle="0" />

+            <WordsStyle name="KEYWORD3" styleID="7" fgColor="0000FF" bgColor="FFFFFF" fontStyle="0" />

+            <WordsStyle name="KEYWORD4" styleID="8" fgColor="008040" bgColor="FFFFFF" fontStyle="0" />

+            <WordsStyle name="COMMENT" styleID="1" fgColor="008000" bgColor="FFFFFF" fontStyle="0" />

+            <WordsStyle name="COMMENT LINE" styleID="2" fgColor="949494" bgColor="FFFFFF" fontStyle="0" />

+            <WordsStyle name="NUMBER" styleID="4" fgColor="FF0000" bgColor="FFFFFF" fontStyle="0" />

+            <WordsStyle name="OPERATOR" styleID="10" fgColor="000000" bgColor="FFFFFF" fontStyle="0" />

+            <WordsStyle name="DELIMINER1" styleID="14" fgColor="800080" bgColor="FFFFFF" fontStyle="0" />

+            <WordsStyle name="DELIMINER2" styleID="15" fgColor="808080" bgColor="FFFFFF" fontStyle="0" />

+            <WordsStyle name="DELIMINER3" styleID="16" fgColor="000000" bgColor="FFFFFF" fontStyle="0" />

+        </Styles>

+    </UserLang>

+</NotepadPlus>

diff --git a/csharp/protos/tutorial/addressbook.proto b/csharp/protos/tutorial/addressbook.proto
new file mode 100644
index 0000000..5abe35c
--- /dev/null
+++ b/csharp/protos/tutorial/addressbook.proto
@@ -0,0 +1,31 @@
+package tutorial;
+ 
+import "google/protobuf/csharp_options.proto";
+option (google.protobuf.csharp_file_options).namespace = "Google.ProtocolBuffers.Examples.AddressBook";
+option (google.protobuf.csharp_file_options).umbrella_classname = "AddressBookProtos";
+
+option optimize_for = SPEED;
+
+message Person {
+  required string name = 1;
+  required int32 id = 2;        // Unique ID number for this person.
+  optional string email = 3;
+ 
+  enum PhoneType {
+    MOBILE = 0;
+    HOME = 1;
+    WORK = 2;
+  }
+ 
+  message PhoneNumber {
+    required string number = 1;
+    optional PhoneType type = 2 [default = HOME];
+  }
+ 
+  repeated PhoneNumber phone = 4;
+}
+ 
+// Our address book file is just one of these.
+message AddressBook {
+  repeated Person person = 1;
+}
diff --git a/csharp/src/AddressBook/AddPerson.cs b/csharp/src/AddressBook/AddPerson.cs
new file mode 100644
index 0000000..462b0c5
--- /dev/null
+++ b/csharp/src/AddressBook/AddPerson.cs
@@ -0,0 +1,136 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.IO;

+

+namespace Google.ProtocolBuffers.Examples.AddressBook

+{

+    internal class AddPerson

+    {

+        /// <summary>

+        /// Builds a person based on user input

+        /// </summary>

+        private static Person PromptForAddress(TextReader input, TextWriter output)

+        {

+            Person.Builder person = Person.CreateBuilder();

+

+            output.Write("Enter person ID: ");

+            person.Id = int.Parse(input.ReadLine());

+

+            output.Write("Enter name: ");

+            person.Name = input.ReadLine();

+

+            output.Write("Enter email address (blank for none): ");

+            string email = input.ReadLine();

+            if (email.Length > 0)

+            {

+                person.Email = email;

+            }

+

+            while (true)

+            {

+                output.Write("Enter a phone number (or leave blank to finish): ");

+                string number = input.ReadLine();

+                if (number.Length == 0)

+                {

+                    break;

+                }

+

+                Person.Types.PhoneNumber.Builder phoneNumber =

+                    Person.Types.PhoneNumber.CreateBuilder().SetNumber(number);

+

+                output.Write("Is this a mobile, home, or work phone? ");

+                String type = input.ReadLine();

+                switch (type)

+                {

+                    case "mobile":

+                        phoneNumber.Type = Person.Types.PhoneType.MOBILE;

+                        break;

+                    case "home":

+                        phoneNumber.Type = Person.Types.PhoneType.HOME;

+                        break;

+                    case "work":

+                        phoneNumber.Type = Person.Types.PhoneType.WORK;

+                        break;

+                    default:

+                        output.Write("Unknown phone type. Using default.");

+                        break;

+                }

+

+                person.AddPhone(phoneNumber);

+            }

+            return person.Build();

+        }

+

+        /// <summary>

+        /// Entry point - loads an existing addressbook or creates a new one,

+        /// then writes it back to the file.

+        /// </summary>

+        public static int Main(string[] args)

+        {

+            if (args.Length != 1)

+            {

+                Console.Error.WriteLine("Usage:  AddPerson ADDRESS_BOOK_FILE");

+                return -1;

+            }

+

+            AddressBook.Builder addressBook = AddressBook.CreateBuilder();

+

+            if (File.Exists(args[0]))

+            {

+                using (Stream file = File.OpenRead(args[0]))

+                {

+                    addressBook.MergeFrom(file);

+                }

+            }

+            else

+            {

+                Console.WriteLine("{0}: File not found. Creating a new file.", args[0]);

+            }

+

+            // Add an address.

+            addressBook.AddPerson(PromptForAddress(Console.In, Console.Out));

+

+            // Write the new address book back to disk.

+            using (Stream output = File.OpenWrite(args[0]))

+            {

+                addressBook.Build().WriteTo(output);

+            }

+            return 0;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/AddressBook/AddressBook.csproj b/csharp/src/AddressBook/AddressBook.csproj
new file mode 100644
index 0000000..5d27ee7
--- /dev/null
+++ b/csharp/src/AddressBook/AddressBook.csproj
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{A31F5FB2-4FF3-432A-B35B-5CD203606311}</ProjectGuid>

+    <OutputType>Exe</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Examples.AddressBook</RootNamespace>

+    <AssemblyName>AddressBook</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <StartupObject>Google.ProtocolBuffers.Examples.AddressBook.Program</StartupObject>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Data" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AddPerson.cs" />

+    <Compile Include="AddressBookProtos.cs" />

+    <Compile Include="SampleUsage.cs" />

+    <Compile Include="ListPeople.cs" />

+    <Compile Include="Program.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <None Include="app.config" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/AddressBook/AddressBookProtos.cs b/csharp/src/AddressBook/AddressBookProtos.cs
new file mode 100644
index 0000000..23276dd
--- /dev/null
+++ b/csharp/src/AddressBook/AddressBookProtos.cs
@@ -0,0 +1,1160 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.Examples.AddressBook {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class AddressBookProtos {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_tutorial_Person__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.Examples.AddressBook.Person, global::Google.ProtocolBuffers.Examples.AddressBook.Person.Builder> internal__static_tutorial_Person__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_tutorial_Person_PhoneNumber__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber, global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber.Builder> internal__static_tutorial_Person_PhoneNumber__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_tutorial_AddressBook__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.Examples.AddressBook.AddressBook, global::Google.ProtocolBuffers.Examples.AddressBook.AddressBook.Builder> internal__static_tutorial_AddressBook__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static AddressBookProtos() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "Chp0dXRvcmlhbC9hZGRyZXNzYm9vay5wcm90bxIIdHV0b3JpYWwaJGdvb2ds", 

+            "ZS9wcm90b2J1Zi9jc2hhcnBfb3B0aW9ucy5wcm90byLaAQoGUGVyc29uEgwK", 

+            "BG5hbWUYASACKAkSCgoCaWQYAiACKAUSDQoFZW1haWwYAyABKAkSKwoFcGhv", 

+            "bmUYBCADKAsyHC50dXRvcmlhbC5QZXJzb24uUGhvbmVOdW1iZXIaTQoLUGhv", 

+            "bmVOdW1iZXISDgoGbnVtYmVyGAEgAigJEi4KBHR5cGUYAiABKA4yGi50dXRv", 

+            "cmlhbC5QZXJzb24uUGhvbmVUeXBlOgRIT01FIisKCVBob25lVHlwZRIKCgZN", 

+            "T0JJTEUQABIICgRIT01FEAESCAoEV09SSxACIi8KC0FkZHJlc3NCb29rEiAK", 

+            "BnBlcnNvbhgBIAMoCzIQLnR1dG9yaWFsLlBlcnNvbkJFSAHCPkAKK0dvb2ds", 

+            "ZS5Qcm90b2NvbEJ1ZmZlcnMuRXhhbXBsZXMuQWRkcmVzc0Jvb2sSEUFkZHJl", 

+          "c3NCb29rUHJvdG9z"));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_tutorial_Person__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_tutorial_Person__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.Examples.AddressBook.Person, global::Google.ProtocolBuffers.Examples.AddressBook.Person.Builder>(internal__static_tutorial_Person__Descriptor,

+                new string[] { "Name", "Id", "Email", "Phone", });

+        internal__static_tutorial_Person_PhoneNumber__Descriptor = internal__static_tutorial_Person__Descriptor.NestedTypes[0];

+        internal__static_tutorial_Person_PhoneNumber__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber, global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber.Builder>(internal__static_tutorial_Person_PhoneNumber__Descriptor,

+                new string[] { "Number", "Type", });

+        internal__static_tutorial_AddressBook__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_tutorial_AddressBook__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.Examples.AddressBook.AddressBook, global::Google.ProtocolBuffers.Examples.AddressBook.AddressBook.Builder>(internal__static_tutorial_AddressBook__Descriptor,

+                new string[] { "Person", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class Person : pb::GeneratedMessage<Person, Person.Builder> {

+    private Person() { }

+    private static readonly Person defaultInstance = new Person().MakeReadOnly();

+    private static readonly string[] _personFieldNames = new string[] { "email", "id", "name", "phone" };

+    private static readonly uint[] _personFieldTags = new uint[] { 26, 16, 10, 34 };

+    public static Person DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override Person DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override Person ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.Examples.AddressBook.AddressBookProtos.internal__static_tutorial_Person__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<Person, Person.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.Examples.AddressBook.AddressBookProtos.internal__static_tutorial_Person__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum PhoneType {

+        MOBILE = 0,

+        HOME = 1,

+        WORK = 2,

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class PhoneNumber : pb::GeneratedMessage<PhoneNumber, PhoneNumber.Builder> {

+        private PhoneNumber() { }

+        private static readonly PhoneNumber defaultInstance = new PhoneNumber().MakeReadOnly();

+        private static readonly string[] _phoneNumberFieldNames = new string[] { "number", "type" };

+        private static readonly uint[] _phoneNumberFieldTags = new uint[] { 10, 16 };

+        public static PhoneNumber DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override PhoneNumber DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override PhoneNumber ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.Examples.AddressBook.AddressBookProtos.internal__static_tutorial_Person_PhoneNumber__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<PhoneNumber, PhoneNumber.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.Examples.AddressBook.AddressBookProtos.internal__static_tutorial_Person_PhoneNumber__FieldAccessorTable; }

+        }

+        

+        public const int NumberFieldNumber = 1;

+        private bool hasNumber;

+        private string number_ = "";

+        public bool HasNumber {

+          get { return hasNumber; }

+        }

+        public string Number {

+          get { return number_; }

+        }

+        

+        public const int TypeFieldNumber = 2;

+        private bool hasType;

+        private global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneType type_ = global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneType.HOME;

+        public bool HasType {

+          get { return hasType; }

+        }

+        public global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneType Type {

+          get { return type_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            if (!hasNumber) return false;

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _phoneNumberFieldNames;

+          if (hasNumber) {

+            output.WriteString(1, field_names[0], Number);

+          }

+          if (hasType) {

+            output.WriteEnum(2, field_names[1], (int) Type, Type);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasNumber) {

+            size += pb::CodedOutputStream.ComputeStringSize(1, Number);

+          }

+          if (hasType) {

+            size += pb::CodedOutputStream.ComputeEnumSize(2, (int) Type);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static PhoneNumber ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static PhoneNumber ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static PhoneNumber ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private PhoneNumber MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(PhoneNumber prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<PhoneNumber, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(PhoneNumber cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private PhoneNumber result;

+          

+          private PhoneNumber PrepareBuilder() {

+            if (resultIsReadOnly) {

+              PhoneNumber original = result;

+              result = new PhoneNumber();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override PhoneNumber MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber.Descriptor; }

+          }

+          

+          public override PhoneNumber DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber.DefaultInstance; }

+          }

+          

+          public override PhoneNumber BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is PhoneNumber) {

+              return MergeFrom((PhoneNumber) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(PhoneNumber other) {

+            if (other == global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasNumber) {

+              Number = other.Number;

+            }

+            if (other.HasType) {

+              Type = other.Type;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_phoneNumberFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _phoneNumberFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 10: {

+                  result.hasNumber = input.ReadString(ref result.number_);

+                  break;

+                }

+                case 16: {

+                  object unknown;

+                  if(input.ReadEnum(ref result.type_, out unknown)) {

+                    result.hasType = true;

+                  } else if(unknown is int) {

+                    if (unknownFields == null) {

+                      unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                    }

+                    unknownFields.MergeVarintField(2, (ulong)(int)unknown);

+                  }

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasNumber {

+            get { return result.hasNumber; }

+          }

+          public string Number {

+            get { return result.Number; }

+            set { SetNumber(value); }

+          }

+          public Builder SetNumber(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasNumber = true;

+            result.number_ = value;

+            return this;

+          }

+          public Builder ClearNumber() {

+            PrepareBuilder();

+            result.hasNumber = false;

+            result.number_ = "";

+            return this;

+          }

+          

+          public bool HasType {

+           get { return result.hasType; }

+          }

+          public global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneType Type {

+            get { return result.Type; }

+            set { SetType(value); }

+          }

+          public Builder SetType(global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneType value) {

+            PrepareBuilder();

+            result.hasType = true;

+            result.type_ = value;

+            return this;

+          }

+          public Builder ClearType() {

+            PrepareBuilder();

+            result.hasType = false;

+            result.type_ = global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneType.HOME;

+            return this;

+          }

+        }

+        static PhoneNumber() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.Examples.AddressBook.AddressBookProtos.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int NameFieldNumber = 1;

+    private bool hasName;

+    private string name_ = "";

+    public bool HasName {

+      get { return hasName; }

+    }

+    public string Name {

+      get { return name_; }

+    }

+    

+    public const int IdFieldNumber = 2;

+    private bool hasId;

+    private int id_;

+    public bool HasId {

+      get { return hasId; }

+    }

+    public int Id {

+      get { return id_; }

+    }

+    

+    public const int EmailFieldNumber = 3;

+    private bool hasEmail;

+    private string email_ = "";

+    public bool HasEmail {

+      get { return hasEmail; }

+    }

+    public string Email {

+      get { return email_; }

+    }

+    

+    public const int PhoneFieldNumber = 4;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber> phone_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber>();

+    public scg::IList<global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber> PhoneList {

+      get { return phone_; }

+    }

+    public int PhoneCount {

+      get { return phone_.Count; }

+    }

+    public global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber GetPhone(int index) {

+      return phone_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasName) return false;

+        if (!hasId) return false;

+        foreach (global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber element in PhoneList) {

+          if (!element.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _personFieldNames;

+      if (hasName) {

+        output.WriteString(1, field_names[2], Name);

+      }

+      if (hasId) {

+        output.WriteInt32(2, field_names[1], Id);

+      }

+      if (hasEmail) {

+        output.WriteString(3, field_names[0], Email);

+      }

+      if (phone_.Count > 0) {

+        output.WriteMessageArray(4, field_names[3], phone_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasName) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Name);

+      }

+      if (hasId) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, Id);

+      }

+      if (hasEmail) {

+        size += pb::CodedOutputStream.ComputeStringSize(3, Email);

+      }

+      foreach (global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber element in PhoneList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(4, element);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static Person ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static Person ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static Person ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static Person ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static Person ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static Person ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static Person ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static Person ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static Person ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static Person ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private Person MakeReadOnly() {

+      phone_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(Person prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<Person, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(Person cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private Person result;

+      

+      private Person PrepareBuilder() {

+        if (resultIsReadOnly) {

+          Person original = result;

+          result = new Person();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override Person MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.Examples.AddressBook.Person.Descriptor; }

+      }

+      

+      public override Person DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.Examples.AddressBook.Person.DefaultInstance; }

+      }

+      

+      public override Person BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is Person) {

+          return MergeFrom((Person) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(Person other) {

+        if (other == global::Google.ProtocolBuffers.Examples.AddressBook.Person.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasName) {

+          Name = other.Name;

+        }

+        if (other.HasId) {

+          Id = other.Id;

+        }

+        if (other.HasEmail) {

+          Email = other.Email;

+        }

+        if (other.phone_.Count != 0) {

+          result.phone_.Add(other.phone_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_personFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _personFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasName = input.ReadString(ref result.name_);

+              break;

+            }

+            case 16: {

+              result.hasId = input.ReadInt32(ref result.id_);

+              break;

+            }

+            case 26: {

+              result.hasEmail = input.ReadString(ref result.email_);

+              break;

+            }

+            case 34: {

+              input.ReadMessageArray(tag, field_name, result.phone_, global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasName {

+        get { return result.hasName; }

+      }

+      public string Name {

+        get { return result.Name; }

+        set { SetName(value); }

+      }

+      public Builder SetName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasName = true;

+        result.name_ = value;

+        return this;

+      }

+      public Builder ClearName() {

+        PrepareBuilder();

+        result.hasName = false;

+        result.name_ = "";

+        return this;

+      }

+      

+      public bool HasId {

+        get { return result.hasId; }

+      }

+      public int Id {

+        get { return result.Id; }

+        set { SetId(value); }

+      }

+      public Builder SetId(int value) {

+        PrepareBuilder();

+        result.hasId = true;

+        result.id_ = value;

+        return this;

+      }

+      public Builder ClearId() {

+        PrepareBuilder();

+        result.hasId = false;

+        result.id_ = 0;

+        return this;

+      }

+      

+      public bool HasEmail {

+        get { return result.hasEmail; }

+      }

+      public string Email {

+        get { return result.Email; }

+        set { SetEmail(value); }

+      }

+      public Builder SetEmail(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasEmail = true;

+        result.email_ = value;

+        return this;

+      }

+      public Builder ClearEmail() {

+        PrepareBuilder();

+        result.hasEmail = false;

+        result.email_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber> PhoneList {

+        get { return PrepareBuilder().phone_; }

+      }

+      public int PhoneCount {

+        get { return result.PhoneCount; }

+      }

+      public global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber GetPhone(int index) {

+        return result.GetPhone(index);

+      }

+      public Builder SetPhone(int index, global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.phone_[index] = value;

+        return this;

+      }

+      public Builder SetPhone(int index, global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.phone_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddPhone(global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.phone_.Add(value);

+        return this;

+      }

+      public Builder AddPhone(global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.phone_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangePhone(scg::IEnumerable<global::Google.ProtocolBuffers.Examples.AddressBook.Person.Types.PhoneNumber> values) {

+        PrepareBuilder();

+        result.phone_.Add(values);

+        return this;

+      }

+      public Builder ClearPhone() {

+        PrepareBuilder();

+        result.phone_.Clear();

+        return this;

+      }

+    }

+    static Person() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.Examples.AddressBook.AddressBookProtos.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class AddressBook : pb::GeneratedMessage<AddressBook, AddressBook.Builder> {

+    private AddressBook() { }

+    private static readonly AddressBook defaultInstance = new AddressBook().MakeReadOnly();

+    private static readonly string[] _addressBookFieldNames = new string[] { "person" };

+    private static readonly uint[] _addressBookFieldTags = new uint[] { 10 };

+    public static AddressBook DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override AddressBook DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override AddressBook ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.Examples.AddressBook.AddressBookProtos.internal__static_tutorial_AddressBook__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<AddressBook, AddressBook.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.Examples.AddressBook.AddressBookProtos.internal__static_tutorial_AddressBook__FieldAccessorTable; }

+    }

+    

+    public const int PersonFieldNumber = 1;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.Examples.AddressBook.Person> person_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.Examples.AddressBook.Person>();

+    public scg::IList<global::Google.ProtocolBuffers.Examples.AddressBook.Person> PersonList {

+      get { return person_; }

+    }

+    public int PersonCount {

+      get { return person_.Count; }

+    }

+    public global::Google.ProtocolBuffers.Examples.AddressBook.Person GetPerson(int index) {

+      return person_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.Examples.AddressBook.Person element in PersonList) {

+          if (!element.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _addressBookFieldNames;

+      if (person_.Count > 0) {

+        output.WriteMessageArray(1, field_names[0], person_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      foreach (global::Google.ProtocolBuffers.Examples.AddressBook.Person element in PersonList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, element);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static AddressBook ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static AddressBook ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static AddressBook ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static AddressBook ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static AddressBook ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static AddressBook ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static AddressBook ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static AddressBook ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static AddressBook ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static AddressBook ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private AddressBook MakeReadOnly() {

+      person_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(AddressBook prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<AddressBook, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(AddressBook cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private AddressBook result;

+      

+      private AddressBook PrepareBuilder() {

+        if (resultIsReadOnly) {

+          AddressBook original = result;

+          result = new AddressBook();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override AddressBook MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.Examples.AddressBook.AddressBook.Descriptor; }

+      }

+      

+      public override AddressBook DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.Examples.AddressBook.AddressBook.DefaultInstance; }

+      }

+      

+      public override AddressBook BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is AddressBook) {

+          return MergeFrom((AddressBook) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(AddressBook other) {

+        if (other == global::Google.ProtocolBuffers.Examples.AddressBook.AddressBook.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.person_.Count != 0) {

+          result.person_.Add(other.person_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_addressBookFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _addressBookFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              input.ReadMessageArray(tag, field_name, result.person_, global::Google.ProtocolBuffers.Examples.AddressBook.Person.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.Examples.AddressBook.Person> PersonList {

+        get { return PrepareBuilder().person_; }

+      }

+      public int PersonCount {

+        get { return result.PersonCount; }

+      }

+      public global::Google.ProtocolBuffers.Examples.AddressBook.Person GetPerson(int index) {

+        return result.GetPerson(index);

+      }

+      public Builder SetPerson(int index, global::Google.ProtocolBuffers.Examples.AddressBook.Person value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.person_[index] = value;

+        return this;

+      }

+      public Builder SetPerson(int index, global::Google.ProtocolBuffers.Examples.AddressBook.Person.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.person_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddPerson(global::Google.ProtocolBuffers.Examples.AddressBook.Person value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.person_.Add(value);

+        return this;

+      }

+      public Builder AddPerson(global::Google.ProtocolBuffers.Examples.AddressBook.Person.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.person_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangePerson(scg::IEnumerable<global::Google.ProtocolBuffers.Examples.AddressBook.Person> values) {

+        PrepareBuilder();

+        result.person_.Add(values);

+        return this;

+      }

+      public Builder ClearPerson() {

+        PrepareBuilder();

+        result.person_.Clear();

+        return this;

+      }

+    }

+    static AddressBook() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.Examples.AddressBook.AddressBookProtos.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/AddressBook/ListPeople.cs b/csharp/src/AddressBook/ListPeople.cs
new file mode 100644
index 0000000..fe6f52d
--- /dev/null
+++ b/csharp/src/AddressBook/ListPeople.cs
@@ -0,0 +1,103 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.IO;

+

+namespace Google.ProtocolBuffers.Examples.AddressBook

+{

+    internal class ListPeople

+    {

+        /// <summary>

+        /// Iterates though all people in the AddressBook and prints info about them.

+        /// </summary>

+        private static void Print(AddressBook addressBook)

+        {

+            foreach (Person person in addressBook.PersonList)

+            {

+                Console.WriteLine("Person ID: {0}", person.Id);

+                Console.WriteLine("  Name: {0}", person.Name);

+                if (person.HasEmail)

+                {

+                    Console.WriteLine("  E-mail address: {0}", person.Email);

+                }

+

+                foreach (Person.Types.PhoneNumber phoneNumber in person.PhoneList)

+                {

+                    switch (phoneNumber.Type)

+                    {

+                        case Person.Types.PhoneType.MOBILE:

+                            Console.Write("  Mobile phone #: ");

+                            break;

+                        case Person.Types.PhoneType.HOME:

+                            Console.Write("  Home phone #: ");

+                            break;

+                        case Person.Types.PhoneType.WORK:

+                            Console.Write("  Work phone #: ");

+                            break;

+                    }

+                    Console.WriteLine(phoneNumber.Number);

+                }

+            }

+        }

+

+        /// <summary>

+        /// Entry point - loads the addressbook and then displays it.

+        /// </summary>

+        public static int Main(string[] args)

+        {

+            if (args.Length != 1)

+            {

+                Console.Error.WriteLine("Usage:  ListPeople ADDRESS_BOOK_FILE");

+                return 1;

+            }

+

+            if (!File.Exists(args[0]))

+            {

+                Console.WriteLine("{0} doesn't exist. Add a person to create the file first.", args[0]);

+                return 0;

+            }

+

+            // Read the existing address book.

+            using (Stream stream = File.OpenRead(args[0]))

+            {

+                AddressBook addressBook = AddressBook.ParseFrom(stream);

+                Print(addressBook);

+            }

+            return 0;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/AddressBook/Program.cs b/csharp/src/AddressBook/Program.cs
new file mode 100644
index 0000000..e0d6d49
--- /dev/null
+++ b/csharp/src/AddressBook/Program.cs
@@ -0,0 +1,99 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+

+namespace Google.ProtocolBuffers.Examples.AddressBook

+{

+    /// <summary>

+    /// Entry point. Repeatedly prompts user for an action to take, delegating actual behaviour

+    /// to individual actions. Each action has its own Main method, so that it can be used as an

+    /// invidual complete program.

+    /// </summary>

+    internal class Program

+    {

+        private static int Main(string[] args)

+        {

+            if (args.Length > 1)

+            {

+                Console.Error.WriteLine("Usage: AddressBook [file]");

+                Console.Error.WriteLine("If the filename isn't specified, \"addressbook.data\" is used instead.");

+                return 1;

+            }

+            string addressBookFile = args.Length > 0 ? args[0] : "addressbook.data";

+

+            bool stopping = false;

+            while (!stopping)

+            {

+                Console.WriteLine("Options:");

+                Console.WriteLine("  L: List contents");

+                Console.WriteLine("  A: Add new person");

+                Console.WriteLine("  Q: Quit");

+                Console.Write("Action? ");

+                Console.Out.Flush();

+                char choice = Console.ReadKey().KeyChar;

+                Console.WriteLine();

+                try

+                {

+                    switch (choice)

+                    {

+                        case 'A':

+                        case 'a':

+                            AddPerson.Main(new string[] {addressBookFile});

+                            break;

+                        case 'L':

+                        case 'l':

+                            ListPeople.Main(new string[] {addressBookFile});

+                            break;

+                        case 'Q':

+                        case 'q':

+                            stopping = true;

+                            break;

+                        default:

+                            Console.WriteLine("Unknown option: {0}", choice);

+                            break;

+                    }

+                }

+                catch (Exception e)

+                {

+                    Console.WriteLine("Exception executing action: {0}", e);

+                }

+                Console.WriteLine();

+            }

+            return 0;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/AddressBook/Properties/AssemblyInfo.cs b/csharp/src/AddressBook/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..e9c40dc
--- /dev/null
+++ b/csharp/src/AddressBook/Properties/AssemblyInfo.cs
@@ -0,0 +1,29 @@
+using System.Reflection;

+using System.Runtime.InteropServices;

+

+// General Information about an assembly is controlled through the following 

+// set of attributes. Change these attribute values to modify the information

+// associated with an assembly.

+

+[assembly: AssemblyTitle("AddressBook")]

+[assembly: AssemblyDescription("")]

+[assembly: AssemblyConfiguration("")]

+[assembly: AssemblyCompany("")]

+[assembly: AssemblyProduct("AddressBook")]

+[assembly: AssemblyCopyright("Copyright ©  2008")]

+[assembly: AssemblyTrademark("")]

+[assembly: AssemblyCulture("")]

+

+// Version information for an assembly consists of the following four values:

+//

+//      Major Version

+//      Minor Version 

+//      Build Number

+//      Revision

+//

+// You can specify all the values or you can default the Build and Revision Numbers 

+// by using the '*' as shown below:

+// [assembly: AssemblyVersion("2.4.1.555")]

+

+[assembly: AssemblyVersion("2.4.1.555")]

+[assembly: AssemblyFileVersion("2.4.1.555")]
\ No newline at end of file
diff --git a/csharp/src/AddressBook/SampleUsage.cs b/csharp/src/AddressBook/SampleUsage.cs
new file mode 100644
index 0000000..084b165
--- /dev/null
+++ b/csharp/src/AddressBook/SampleUsage.cs
@@ -0,0 +1,44 @@
+using System;

+using System.IO;

+

+namespace Google.ProtocolBuffers.Examples.AddressBook

+{

+    internal class SampleUsage

+    {

+        private static void Main()

+        {

+            byte[] bytes;

+            //Create a builder to start building a message

+            Person.Builder newContact = Person.CreateBuilder();

+            //Set the primitive properties

+            newContact.SetId(1)

+                .SetName("Foo")

+                .SetEmail("foo@bar");

+            //Now add an item to a list (repeating) field

+            newContact.AddPhone(

+                //Create the child message inline

+                Person.Types.PhoneNumber.CreateBuilder().SetNumber("555-1212").Build()

+                );

+            //Now build the final message:

+            Person person = newContact.Build();

+            //The builder is no longer valid (at least not now, scheduled for 2.4):

+            newContact = null;

+            using (MemoryStream stream = new MemoryStream())

+            {

+                //Save the person to a stream

+                person.WriteTo(stream);

+                bytes = stream.ToArray();

+            }

+            //Create another builder, merge the byte[], and build the message:

+            Person copy = Person.CreateBuilder().MergeFrom(bytes).Build();

+

+            //A more streamlined approach might look like this:

+            bytes = AddressBook.CreateBuilder().AddPerson(copy).Build().ToByteArray();

+            //And read the address book back again

+            AddressBook restored = AddressBook.CreateBuilder().MergeFrom(bytes).Build();

+            //The message performs a deep-comparison on equality:

+            if (restored.PersonCount != 1 || !person.Equals(restored.PersonList[0]))

+                throw new ApplicationException("There is a bad person in here!");

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/AddressBook/app.config b/csharp/src/AddressBook/app.config
new file mode 100644
index 0000000..0df7832
--- /dev/null
+++ b/csharp/src/AddressBook/app.config
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<configuration>
+	<startup/></configuration>
diff --git a/csharp/src/ProtoBench/Program.cs b/csharp/src/ProtoBench/Program.cs
new file mode 100644
index 0000000..820fc12
--- /dev/null
+++ b/csharp/src/ProtoBench/Program.cs
@@ -0,0 +1,538 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.Diagnostics;

+using System.IO;

+using System.Runtime.Serialization.Json;

+using System.Text;

+using System.Threading;

+using System.Xml;

+using Google.ProtocolBuffers.Serialization;

+using Google.ProtocolBuffers.TestProtos;

+

+namespace Google.ProtocolBuffers.ProtoBench

+{

+    /// <summary>

+    /// Simple benchmarking of arbitrary messages.

+    /// </summary>

+    public sealed class Program

+    {

+        private static TimeSpan MinSampleTime = TimeSpan.FromSeconds(2);

+        private static TimeSpan TargetTime = TimeSpan.FromSeconds(30);

+        private static bool Verbose = false, FastTest = false, OtherFormats = false;

+        // Avoid a .NET 3.5 dependency

+        private delegate void Action();

+

+        private delegate void BenchmarkTest(string name, long dataSize, Action action);

+

+        private static BenchmarkTest RunBenchmark;

+

+        private static string _logFile;

+        static void WriteLine(string format, params object[] arg)

+        {

+            if (arg.Length > 0) format = String.Format(format, arg);

+            Console.Out.WriteLine(format);

+            if (!String.IsNullOrEmpty(_logFile))

+                File.AppendAllText(_logFile, format + Environment.NewLine);

+        }

+

+        [STAThread]

+        public static int Main(string[] args)

+        {

+            List<string> temp = new List<string>(args);

+

+            Verbose = temp.Remove("/verbose") || temp.Remove("-verbose");

+            OtherFormats = temp.Remove("/formats") || temp.Remove("-formats");

+

+            foreach (string arg in temp)

+            {

+                if (arg.StartsWith("/log:", StringComparison.OrdinalIgnoreCase) || arg.StartsWith("-log:", StringComparison.OrdinalIgnoreCase))

+                {

+                    _logFile = arg.Substring(5);

+                    if (!String.IsNullOrEmpty(_logFile))

+                        File.AppendAllText(_logFile, Environment.NewLine + "Started benchmarks at " + DateTime.Now + Environment.NewLine);

+                    temp.Remove(arg);

+                    break;

+                }

+            }

+

+            if (true == (FastTest = (temp.Remove("/fast") || temp.Remove("-fast"))))

+            {

+                TargetTime = TimeSpan.FromSeconds(10);

+            }

+

+            RunBenchmark = BenchmarkV1;

+            if (temp.Remove("/v2") || temp.Remove("-v2"))

+            {

+                Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime;

+                Process.GetCurrentProcess().ProcessorAffinity = new IntPtr(1);

+                RunBenchmark = BenchmarkV2;

+            }

+            if (temp.Remove("/all") || temp.Remove("-all"))

+            {

+                if (FastTest)

+                {

+                    TargetTime = TimeSpan.FromSeconds(5);

+                }

+                foreach (KeyValuePair<string, string> item in MakeTests())

+                {

+                    temp.Add(item.Key);

+                    temp.Add(item.Value);

+                }

+            }

+            args = temp.ToArray();

+

+            if (args.Length < 2 || (args.Length%2) != 0)

+            {

+                Console.Error.WriteLine("Usage: ProtoBench [/fast] <descriptor type name> <input data>");

+                Console.Error.WriteLine("The descriptor type name is the fully-qualified message name,");

+                Console.Error.WriteLine(

+                    "including assembly - e.g. Google.ProtocolBuffers.BenchmarkProtos.Message1,ProtoBench");

+                Console.Error.WriteLine("(You can specify multiple pairs of descriptor type name and input data.)");

+                return 1;

+            }

+

+            bool success = true;

+            for (int i = 0; i < args.Length; i += 2)

+            {

+                success &= RunTest(args[i], args[i + 1], null);

+            }

+            return success ? 0 : 1;

+        }

+

+        /// <summary>

+        /// Runs a single test. Error messages are displayed to Console.Error, and the return value indicates

+        /// general success/failure.

+        /// </summary>

+        public static bool RunTest(string typeName, string file, byte[] inputData)

+        {

+            WriteLine("Benchmarking {0} with file {1}", typeName, file);

+            IMessage defaultMessage;

+            try

+            {

+                defaultMessage = MessageUtil.GetDefaultMessage(typeName);

+            }

+            catch (ArgumentException e)

+            {

+                Console.Error.WriteLine(e.Message);

+                return false;

+            }

+            try

+            {

+                ExtensionRegistry registry = ExtensionRegistry.Empty;

+                inputData = inputData ?? File.ReadAllBytes(file);

+                MemoryStream inputStream = new MemoryStream(inputData);

+                ByteString inputString = ByteString.CopyFrom(inputData);

+                IMessage sampleMessage =

+                    defaultMessage.WeakCreateBuilderForType().WeakMergeFrom(inputString, registry).WeakBuild();

+

+                IDictionary<string, object> dictionary = null;

+                byte[] jsonBytes = null, xmlBytes = null; /*no pun intended, well... maybe for xml*/

+                if (OtherFormats)

+                {

+                    using (MemoryStream temp = new MemoryStream())

+                    {

+                        XmlFormatWriter.CreateInstance(temp).WriteMessage(sampleMessage);

+                        xmlBytes = temp.ToArray();

+                    }

+                    using (MemoryStream temp = new MemoryStream())

+                    {

+                        JsonFormatWriter.CreateInstance(temp).WriteMessage(sampleMessage);

+                        jsonBytes = temp.ToArray();

+                    }

+                    dictionary = new Dictionary<string, object>(StringComparer.Ordinal);

+                    new DictionaryWriter(dictionary).WriteMessage(sampleMessage);

+                }

+

+                //Serializers

+                if (!FastTest)

+                {

+                    RunBenchmark("Serialize to byte string", inputData.Length, () => sampleMessage.ToByteString());

+                }

+                RunBenchmark("Serialize to byte array", inputData.Length, () => sampleMessage.ToByteArray());

+                if (!FastTest)

+                {

+                    RunBenchmark("Serialize to memory stream", inputData.Length,

+                                 () => sampleMessage.WriteTo(new MemoryStream()));

+                }

+

+                if (OtherFormats)

+                {

+                    RunBenchmark("Serialize to xml", xmlBytes.Length,

+                                 () =>

+                                     {

+                                         XmlFormatWriter.CreateInstance(new MemoryStream(), Encoding.UTF8).WriteMessage(sampleMessage);

+                                     });

+                    RunBenchmark("Serialize to json", jsonBytes.Length,

+                                 () => { JsonFormatWriter.CreateInstance().WriteMessage(sampleMessage); });

+                    RunBenchmark("Serialize to json via xml", jsonBytes.Length,

+                                 () =>

+                                 XmlFormatWriter.CreateInstance(

+                                     JsonReaderWriterFactory.CreateJsonWriter(new MemoryStream(), Encoding.UTF8))

+                                     .SetOptions(XmlWriterOptions.OutputJsonTypes)

+                                     .WriteMessage(sampleMessage)

+                        );

+

+                    RunBenchmark("Serialize to dictionary", sampleMessage.SerializedSize,

+                                 () => new DictionaryWriter().WriteMessage(sampleMessage));

+                }

+                //Deserializers

+                if (!FastTest)

+                {

+                    RunBenchmark("Deserialize from byte string", inputData.Length,

+                                 () => defaultMessage.WeakCreateBuilderForType()

+                                           .WeakMergeFrom(inputString, registry)

+                                           .WeakBuild()

+                        );

+                }

+

+                RunBenchmark("Deserialize from byte array", inputData.Length,

+                             () => defaultMessage.WeakCreateBuilderForType()

+                                       .WeakMergeFrom(CodedInputStream.CreateInstance(inputData), registry)

+                                       .WeakBuild()

+                    );

+                if (!FastTest)

+                {

+                    RunBenchmark("Deserialize from memory stream", inputData.Length,

+                                 () =>

+                                     {

+                                         inputStream.Position = 0;

+                                         defaultMessage.WeakCreateBuilderForType().WeakMergeFrom(

+                                             CodedInputStream.CreateInstance(inputStream), registry)

+                                             .WeakBuild();

+                                     });

+                }

+

+                if (OtherFormats)

+                {

+                    RunBenchmark("Deserialize from xml", xmlBytes.Length,

+                                 () =>

+                                 XmlFormatReader.CreateInstance(xmlBytes).Merge(

+                                     defaultMessage.WeakCreateBuilderForType()).WeakBuild());

+                    RunBenchmark("Deserialize from json", jsonBytes.Length,

+                                 () =>

+                                 JsonFormatReader.CreateInstance(jsonBytes).Merge(

+                                     defaultMessage.WeakCreateBuilderForType()).WeakBuild());

+                    RunBenchmark("Deserialize from json via xml", jsonBytes.Length,

+                                 () =>

+                                 XmlFormatReader.CreateInstance(JsonReaderWriterFactory.CreateJsonReader(jsonBytes, XmlDictionaryReaderQuotas.Max))

+                                     .SetOptions(XmlReaderOptions.ReadNestedArrays).Merge(

+                                         defaultMessage.WeakCreateBuilderForType()).WeakBuild());

+

+                    RunBenchmark("Deserialize from dictionary", sampleMessage.SerializedSize,

+                                 () =>

+                                 new DictionaryReader(dictionary).Merge(defaultMessage.WeakCreateBuilderForType()).

+                                     WeakBuild());

+                }

+                WriteLine(String.Empty);

+                return true;

+            }

+            catch (Exception e)

+            {

+                Console.Error.WriteLine("Error: {0}", e.Message);

+                Console.Error.WriteLine();

+                Console.Error.WriteLine("Detailed exception information: {0}", e);

+                return false;

+            }

+        }

+

+        private static void BenchmarkV2(string name, long dataSize, Action action)

+        {

+            Thread.BeginThreadAffinity();

+            TimeSpan elapsed = TimeSpan.Zero;

+            long runs = 0;

+            long totalCount = 0;

+            double best = double.MinValue, worst = double.MaxValue;

+

+            action();

+            // Run it progressively more times until we've got a reasonable sample

+

+            int iterations = 100;

+            elapsed = TimeAction(action, iterations);

+            while (elapsed.TotalMilliseconds < 1000)

+            {

+                elapsed += TimeAction(action, iterations);

+                iterations *= 2;

+            }

+

+            TimeSpan target = TimeSpan.FromSeconds(1);

+

+            elapsed = TimeAction(action, iterations);

+            iterations = (int) ((target.Ticks*iterations)/(double) elapsed.Ticks);

+            elapsed = TimeAction(action, iterations);

+            iterations = (int) ((target.Ticks*iterations)/(double) elapsed.Ticks);

+            elapsed = TimeAction(action, iterations);

+            iterations = (int) ((target.Ticks*iterations)/(double) elapsed.Ticks);

+

+            double first = (iterations*dataSize)/(elapsed.TotalSeconds*1024*1024);

+            if (Verbose)

+            {

+                WriteLine("Round ---: Count = {1,6}, Bps = {2,8:f3}", 0, iterations, first);

+            }

+            elapsed = TimeSpan.Zero;

+            int max = (int) TargetTime.TotalSeconds;

+

+            while (runs < max)

+            {

+                TimeSpan cycle = TimeAction(action, iterations);

+                // Accumulate and scale for next cycle.

+

+                double bps = (iterations*dataSize)/(cycle.TotalSeconds*1024*1024);

+                if (Verbose)

+                {

+                    WriteLine("Round {1,3}: Count = {2,6}, Bps = {3,8:f3}",

+                                      0, runs, iterations, bps);

+                }

+

+                best = Math.Max(best, bps);

+                worst = Math.Min(worst, bps);

+

+                runs++;

+                elapsed += cycle;

+                totalCount += iterations;

+                iterations = (int) ((target.Ticks*totalCount)/(double) elapsed.Ticks);

+            }

+

+            Thread.EndThreadAffinity();

+            WriteLine(

+                "{1}: averages {2} per {3:f3}s for {4} runs; avg: {5:f3}mbps; best: {6:f3}mbps; worst: {7:f3}mbps",

+                0, name, totalCount/runs, elapsed.TotalSeconds/runs, runs,

+                (totalCount*dataSize)/(elapsed.TotalSeconds*1024*1024), best, worst);

+        }

+

+        private static void BenchmarkV1(string name, long dataSize, Action action)

+        {

+            // Make sure it's JITted

+            action();

+            // Run it progressively more times until we've got a reasonable sample

+

+            int iterations = 1;

+            TimeSpan elapsed = TimeAction(action, iterations);

+            while (elapsed < MinSampleTime)

+            {

+                iterations *= 2;

+                elapsed = TimeAction(action, iterations);

+            }

+            // Upscale the sample to the target time. Do this in floating point arithmetic

+            // to avoid overflow issues.

+            iterations = (int) ((TargetTime.Ticks/(double) elapsed.Ticks)*iterations);

+            elapsed = TimeAction(action, iterations);

+            WriteLine("{0}: {1} iterations in {2:f3}s; {3:f3}MB/s",

+                              name, iterations, elapsed.TotalSeconds,

+                              (iterations*dataSize)/(elapsed.TotalSeconds*1024*1024));

+        }

+

+        private static TimeSpan TimeAction(Action action, int iterations)

+        {

+            GC.Collect();

+            GC.GetTotalMemory(true);

+            GC.WaitForPendingFinalizers();

+

+            Stopwatch sw = Stopwatch.StartNew();

+            for (int i = 0; i < iterations; i++)

+            {

+                action();

+            }

+            sw.Stop();

+            return sw.Elapsed;

+        }

+

+        private static IEnumerable<KeyValuePair<string, string>> MakeTests()

+        {

+            //Aggregate Tests

+            yield return MakeWorkItem("all-types", MakeTestAllTypes());

+            yield return MakeWorkItem("repeated-100", MakeRepeatedTestAllTypes(100));

+            yield return MakeWorkItem("packed-100", MakeTestPackedTypes(100));

+

+            //Discrete Tests

+            foreach (KeyValuePair<string, Action<TestAllTypes.Builder>> item in MakeTestAllTypes())

+            {

+                yield return MakeWorkItem(item.Key, new[] {item});

+            }

+

+            foreach (KeyValuePair<string, Action<TestAllTypes.Builder>> item in MakeRepeatedTestAllTypes(100))

+            {

+                yield return MakeWorkItem(item.Key, new[] {item});

+            }

+

+            foreach (KeyValuePair<string, Action<TestPackedTypes.Builder>> item in MakeTestPackedTypes(100))

+            {

+                yield return MakeWorkItem(item.Key, new[] {item});

+            }

+        }

+

+        private static IEnumerable<KeyValuePair<string, Action<TestAllTypes.Builder>>> MakeTestAllTypes()

+        {

+            // Many of the raw type serializers below perform poorly due to the numerous fields defined

+            // in TestAllTypes.

+

+            //single values

+            yield return MakeItem<TestAllTypes.Builder>("int32", 1, x => x.SetOptionalInt32(1001));

+            yield return MakeItem<TestAllTypes.Builder>("int64", 1, x => x.SetOptionalInt64(1001));

+            yield return MakeItem<TestAllTypes.Builder>("uint32", 1, x => x.SetOptionalUint32(1001));

+            yield return MakeItem<TestAllTypes.Builder>("uint64", 1, x => x.SetOptionalUint64(1001));

+            yield return MakeItem<TestAllTypes.Builder>("sint32", 1, x => x.SetOptionalSint32(-1001));

+            yield return MakeItem<TestAllTypes.Builder>("sint64", 1, x => x.SetOptionalSint64(-1001));

+            yield return MakeItem<TestAllTypes.Builder>("fixed32", 1, x => x.SetOptionalFixed32(1001));

+            yield return MakeItem<TestAllTypes.Builder>("fixed64", 1, x => x.SetOptionalFixed64(1001));

+            yield return MakeItem<TestAllTypes.Builder>("sfixed32", 1, x => x.SetOptionalSfixed32(-1001));

+            yield return MakeItem<TestAllTypes.Builder>("sfixed64", 1, x => x.SetOptionalSfixed64(-1001));

+            yield return MakeItem<TestAllTypes.Builder>("float", 1, x => x.SetOptionalFloat(1001.1001f));

+            yield return MakeItem<TestAllTypes.Builder>("double", 1, x => x.SetOptionalDouble(1001.1001));

+            yield return MakeItem<TestAllTypes.Builder>("bool", 1, x => x.SetOptionalBool(true));

+            yield return MakeItem<TestAllTypes.Builder>("string", 1, x => x.SetOptionalString("this is a string value"))

+                ;

+            yield return

+                MakeItem<TestAllTypes.Builder>("bytes", 1,

+                                               x =>

+                                               x.SetOptionalBytes(ByteString.CopyFromUtf8("this is an array of bytes")))

+                ;

+            yield return

+                MakeItem<TestAllTypes.Builder>("group", 1,

+                                               x =>

+                                               x.SetOptionalGroup(

+                                                   new TestAllTypes.Types.OptionalGroup.Builder().SetA(1001)));

+            yield return

+                MakeItem<TestAllTypes.Builder>("message", 1,

+                                               x =>

+                                               x.SetOptionalNestedMessage(

+                                                   new TestAllTypes.Types.NestedMessage.Builder().SetBb(1001)));

+            yield return

+                MakeItem<TestAllTypes.Builder>("enum", 1,

+                                               x => x.SetOptionalNestedEnum(TestAllTypes.Types.NestedEnum.FOO));

+        }

+

+        private static IEnumerable<KeyValuePair<string, Action<TestAllTypes.Builder>>> MakeRepeatedTestAllTypes(int size)

+        {

+            //repeated values

+            yield return MakeItem<TestAllTypes.Builder>("repeated-int32", size, x => x.AddRepeatedInt32(1001));

+            yield return MakeItem<TestAllTypes.Builder>("repeated-int64", size, x => x.AddRepeatedInt64(1001));

+            yield return MakeItem<TestAllTypes.Builder>("repeated-uint32", size, x => x.AddRepeatedUint32(1001));

+            yield return MakeItem<TestAllTypes.Builder>("repeated-uint64", size, x => x.AddRepeatedUint64(1001));

+            yield return MakeItem<TestAllTypes.Builder>("repeated-sint32", size, x => x.AddRepeatedSint32(-1001));

+            yield return MakeItem<TestAllTypes.Builder>("repeated-sint64", size, x => x.AddRepeatedSint64(-1001));

+            yield return MakeItem<TestAllTypes.Builder>("repeated-fixed32", size, x => x.AddRepeatedFixed32(1001));

+            yield return MakeItem<TestAllTypes.Builder>("repeated-fixed64", size, x => x.AddRepeatedFixed64(1001));

+            yield return MakeItem<TestAllTypes.Builder>("repeated-sfixed32", size, x => x.AddRepeatedSfixed32(-1001));

+            yield return MakeItem<TestAllTypes.Builder>("repeated-sfixed64", size, x => x.AddRepeatedSfixed64(-1001));

+            yield return MakeItem<TestAllTypes.Builder>("repeated-float", size, x => x.AddRepeatedFloat(1001.1001f));

+            yield return MakeItem<TestAllTypes.Builder>("repeated-double", size, x => x.AddRepeatedDouble(1001.1001));

+            yield return MakeItem<TestAllTypes.Builder>("repeated-bool", size, x => x.AddRepeatedBool(true));

+            yield return

+                MakeItem<TestAllTypes.Builder>("repeated-string", size,

+                                               x => x.AddRepeatedString("this is a string value"));

+            yield return

+                MakeItem<TestAllTypes.Builder>("repeated-bytes", size,

+                                               x =>

+                                               x.AddRepeatedBytes(ByteString.CopyFromUtf8("this is an array of bytes")))

+                ;

+            yield return

+                MakeItem<TestAllTypes.Builder>("repeated-group", size,

+                                               x =>

+                                               x.AddRepeatedGroup(

+                                                   new TestAllTypes.Types.RepeatedGroup.Builder().SetA(1001)));

+            yield return

+                MakeItem<TestAllTypes.Builder>("repeated-message", size,

+                                               x =>

+                                               x.AddRepeatedNestedMessage(

+                                                   new TestAllTypes.Types.NestedMessage.Builder().SetBb(1001)));

+            yield return

+                MakeItem<TestAllTypes.Builder>("repeated-enum", size,

+                                               x => x.AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.FOO));

+        }

+

+        private static IEnumerable<KeyValuePair<string, Action<TestPackedTypes.Builder>>> MakeTestPackedTypes(int size)

+        {

+            //packed values

+            yield return MakeItem<TestPackedTypes.Builder>("packed-int32", size, x => x.AddPackedInt32(1001));

+            yield return MakeItem<TestPackedTypes.Builder>("packed-int64", size, x => x.AddPackedInt64(1001));

+            yield return MakeItem<TestPackedTypes.Builder>("packed-uint32", size, x => x.AddPackedUint32(1001));

+            yield return MakeItem<TestPackedTypes.Builder>("packed-uint64", size, x => x.AddPackedUint64(1001));

+            yield return MakeItem<TestPackedTypes.Builder>("packed-sint32", size, x => x.AddPackedSint32(-1001));

+            yield return MakeItem<TestPackedTypes.Builder>("packed-sint64", size, x => x.AddPackedSint64(-1001));

+            yield return MakeItem<TestPackedTypes.Builder>("packed-fixed32", size, x => x.AddPackedFixed32(1001));

+            yield return MakeItem<TestPackedTypes.Builder>("packed-fixed64", size, x => x.AddPackedFixed64(1001));

+            yield return MakeItem<TestPackedTypes.Builder>("packed-sfixed32", size, x => x.AddPackedSfixed32(-1001));

+            yield return MakeItem<TestPackedTypes.Builder>("packed-sfixed64", size, x => x.AddPackedSfixed64(-1001));

+            yield return MakeItem<TestPackedTypes.Builder>("packed-float", size, x => x.AddPackedFloat(1001.1001f));

+            yield return MakeItem<TestPackedTypes.Builder>("packed-double", size, x => x.AddPackedDouble(1001.1001));

+            yield return MakeItem<TestPackedTypes.Builder>("packed-bool", size, x => x.AddPackedBool(true));

+            yield return

+                MakeItem<TestPackedTypes.Builder>("packed-enum", size, x => x.AddPackedEnum(ForeignEnum.FOREIGN_FOO));

+        }

+

+        private static KeyValuePair<string, Action<T>> MakeItem<T>(string name, int repeated, Action<T> build)

+            where T : IBuilderLite, new()

+        {

+            if (repeated == 1)

+            {

+                return new KeyValuePair<string, Action<T>>(name, build);

+            }

+

+            return new KeyValuePair<string, Action<T>>(

+                String.Format("{0}[{1}]", name, repeated),

+                x =>

+                    {

+                        for (int i = 0; i < repeated; i++)

+                        {

+                            build(x);

+                        }

+                    }

+                );

+        }

+

+        private static KeyValuePair<string, string> MakeWorkItem<T>(string name,

+                                                                    IEnumerable<KeyValuePair<string, Action<T>>>

+                                                                        builders) where T : IBuilderLite, new()

+        {

+            T builder = new T();

+

+            foreach (KeyValuePair<string, Action<T>> item in builders)

+            {

+                item.Value(builder);

+            }

+

+            IMessageLite msg = builder.WeakBuild();

+            string fname = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "unittest_" + name + ".dat");

+            File.WriteAllBytes(fname, msg.ToByteArray());

+            return

+                new KeyValuePair<string, string>(

+                    String.Format("{0},{1}", msg.GetType().FullName, msg.GetType().Assembly.GetName().Name), fname);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoBench/Properties/AssemblyInfo.cs b/csharp/src/ProtoBench/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..8600c13
--- /dev/null
+++ b/csharp/src/ProtoBench/Properties/AssemblyInfo.cs
@@ -0,0 +1,32 @@
+using System;

+using System.Reflection;

+using System.Runtime.CompilerServices;

+using System.Runtime.InteropServices;

+

+// General Information about an assembly is controlled through the following 

+// set of attributes. Change these attribute values to modify the information

+// associated with an assembly.

+

+[assembly: AssemblyTitle("ProtoBench")]

+[assembly: AssemblyDescription("")]

+[assembly: AssemblyConfiguration("")]

+[assembly: AssemblyCompany("")]

+[assembly: AssemblyProduct("ProtoBench")]

+[assembly: AssemblyCopyright("Copyright ©  2009")]

+[assembly: AssemblyTrademark("")]

+[assembly: AssemblyCulture("")]

+[assembly: CLSCompliant(true)]

+

+// Version information for an assembly consists of the following four values:

+//

+//      Major Version

+//      Minor Version 

+//      Build Number

+//      Revision

+//

+// You can specify all the values or you can default the Build and Revision Numbers 

+// by using the '*' as shown below:

+// [assembly: AssemblyVersion("2.4.1.555")]

+

+[assembly: AssemblyVersion("2.4.1.555")]

+[assembly: AssemblyFileVersion("2.4.1.555")]
\ No newline at end of file
diff --git a/csharp/src/ProtoBench/ProtoBench.csproj b/csharp/src/ProtoBench/ProtoBench.csproj
new file mode 100644
index 0000000..9df4774
--- /dev/null
+++ b/csharp/src/ProtoBench/ProtoBench.csproj
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{C7A4A435-2813-41C8-AA87-BD914BA5223D}</ProjectGuid>

+    <OutputType>Exe</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.ProtoBench</RootNamespace>

+    <AssemblyName>ProtoBench</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Data" />

+    <Reference Include="System.Runtime.Serialization" />

+    <Reference Include="System.ServiceModel" />

+    <Reference Include="System.ServiceModel.Web" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="Program.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="TestProtos\GoogleSizeProtoFile.cs" />

+    <Compile Include="TestProtos\GoogleSpeedProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.csproj">

+      <Project>{231391AF-449C-4a39-986C-AD7F270F4750}</Project>

+      <Name>ProtocolBuffers.Serialization</Name>

+      <Private>True</Private>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+      <Private>True</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <None Include="google_message1.dat">

+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>

+    </None>

+    <None Include="google_message2.dat">

+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>

+    </None>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtoBench/TestProtos/GoogleSizeProtoFile.cs b/csharp/src/ProtoBench/TestProtos/GoogleSizeProtoFile.cs
new file mode 100644
index 0000000..aa6c507
--- /dev/null
+++ b/csharp/src/ProtoBench/TestProtos/GoogleSizeProtoFile.cs
@@ -0,0 +1,4572 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.ProtoBench {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class GoogleSizeProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_benchmarks_SizeMessage1__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SizeMessage1, global::Google.ProtocolBuffers.ProtoBench.SizeMessage1.Builder> internal__static_benchmarks_SizeMessage1__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_benchmarks_SizeMessage1SubMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage, global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage.Builder> internal__static_benchmarks_SizeMessage1SubMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_benchmarks_SizeMessage2__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SizeMessage2, global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Builder> internal__static_benchmarks_SizeMessage2__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_benchmarks_SizeMessage2_Group1__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1, global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1.Builder> internal__static_benchmarks_SizeMessage2_Group1__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_benchmarks_SizeMessage2GroupedMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage, global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage.Builder> internal__static_benchmarks_SizeMessage2GroupedMessage__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static GoogleSizeProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "ChxiZW5jaG1hcmtzL2dvb2dsZV9zaXplLnByb3RvEgpiZW5jaG1hcmtzGiRn", 

+            "b29nbGUvcHJvdG9idWYvY3NoYXJwX29wdGlvbnMucHJvdG8i9gYKDFNpemVN", 

+            "ZXNzYWdlMRIOCgZmaWVsZDEYASACKAkSDgoGZmllbGQ5GAkgASgJEg8KB2Zp", 

+            "ZWxkMTgYEiABKAkSFgoHZmllbGQ4MBhQIAEoCDoFZmFsc2USFQoHZmllbGQ4", 

+            "MRhRIAEoCDoEdHJ1ZRIOCgZmaWVsZDIYAiACKAUSDgoGZmllbGQzGAMgAigF", 

+            "EhEKCGZpZWxkMjgwGJgCIAEoBRIRCgZmaWVsZDYYBiABKAU6ATASDwoHZmll", 

+            "bGQyMhgWIAEoAxIOCgZmaWVsZDQYBCABKAkSDgoGZmllbGQ1GAUgAygGEhYK", 

+            "B2ZpZWxkNTkYOyABKAg6BWZhbHNlEg4KBmZpZWxkNxgHIAEoCRIPCgdmaWVs", 

+            "ZDE2GBAgASgFEhQKCGZpZWxkMTMwGIIBIAEoBToBMBIVCgdmaWVsZDEyGAwg", 

+            "ASgIOgR0cnVlEhUKB2ZpZWxkMTcYESABKAg6BHRydWUSFQoHZmllbGQxMxgN", 

+            "IAEoCDoEdHJ1ZRIVCgdmaWVsZDE0GA4gASgIOgR0cnVlEhMKCGZpZWxkMTA0", 

+            "GGggASgFOgEwEhMKCGZpZWxkMTAwGGQgASgFOgEwEhMKCGZpZWxkMTAxGGUg", 

+            "ASgFOgEwEhAKCGZpZWxkMTAyGGYgASgJEhAKCGZpZWxkMTAzGGcgASgJEhIK", 

+            "B2ZpZWxkMjkYHSABKAU6ATASFgoHZmllbGQzMBgeIAEoCDoFZmFsc2USEwoH", 

+            "ZmllbGQ2MBg8IAEoBToCLTESFQoIZmllbGQyNzEYjwIgASgFOgItMRIVCghm", 

+            "aWVsZDI3MhiQAiABKAU6Ai0xEhEKCGZpZWxkMTUwGJYBIAEoBRISCgdmaWVs", 

+            "ZDIzGBcgASgFOgEwEhYKB2ZpZWxkMjQYGCABKAg6BWZhbHNlEhIKB2ZpZWxk", 

+            "MjUYGSABKAU6ATASMwoHZmllbGQxNRgPIAEoCzIiLmJlbmNobWFya3MuU2l6", 

+            "ZU1lc3NhZ2UxU3ViTWVzc2FnZRIPCgdmaWVsZDc4GE4gASgIEhIKB2ZpZWxk", 

+            "NjcYQyABKAU6ATASDwoHZmllbGQ2OBhEIAEoBRIUCghmaWVsZDEyOBiAASAB", 

+            "KAU6ATASKAoIZmllbGQxMjkYgQEgASgJOhV4eHh4eHh4eHh4eHh4eHh4eHh4", 

+            "eHgSFAoIZmllbGQxMzEYgwEgASgFOgEwIqEDChZTaXplTWVzc2FnZTFTdWJN", 

+            "ZXNzYWdlEhEKBmZpZWxkMRgBIAEoBToBMBIRCgZmaWVsZDIYAiABKAU6ATAS", 

+            "EQoGZmllbGQzGAMgASgFOgEwEg8KB2ZpZWxkMTUYDyABKAkSFQoHZmllbGQx", 

+            "MhgMIAEoCDoEdHJ1ZRIPCgdmaWVsZDEzGA0gASgDEg8KB2ZpZWxkMTQYDiAB", 

+            "KAMSDwoHZmllbGQxNhgQIAEoBRISCgdmaWVsZDE5GBMgASgFOgEyEhUKB2Zp", 

+            "ZWxkMjAYFCABKAg6BHRydWUSFQoHZmllbGQyOBgcIAEoCDoEdHJ1ZRIPCgdm", 

+            "aWVsZDIxGBUgASgGEg8KB2ZpZWxkMjIYFiABKAUSFgoHZmllbGQyMxgXIAEo", 

+            "CDoFZmFsc2USGAoIZmllbGQyMDYYzgEgASgIOgVmYWxzZRIRCghmaWVsZDIw", 

+            "MxjLASABKAcSEQoIZmllbGQyMDQYzAEgASgFEhEKCGZpZWxkMjA1GM0BIAEo", 

+            "CRIRCghmaWVsZDIwNxjPASABKAQSEQoIZmllbGQzMDAYrAIgASgEIscHCgxT", 

+            "aXplTWVzc2FnZTISDgoGZmllbGQxGAEgASgJEg4KBmZpZWxkMxgDIAEoAxIO", 

+            "CgZmaWVsZDQYBCABKAMSDwoHZmllbGQzMBgeIAEoAxIWCgdmaWVsZDc1GEsg", 

+            "ASgIOgVmYWxzZRIOCgZmaWVsZDYYBiABKAkSDgoGZmllbGQyGAIgASgMEhIK", 

+            "B2ZpZWxkMjEYFSABKAU6ATASDwoHZmllbGQ3MRhHIAEoBRIPCgdmaWVsZDI1", 

+            "GBkgASgCEhMKCGZpZWxkMTA5GG0gASgFOgEwEhQKCGZpZWxkMjEwGNIBIAEo", 

+            "BToBMBIUCghmaWVsZDIxMRjTASABKAU6ATASFAoIZmllbGQyMTIY1AEgASgF", 

+            "OgEwEhQKCGZpZWxkMjEzGNUBIAEoBToBMBIUCghmaWVsZDIxNhjYASABKAU6", 

+            "ATASFAoIZmllbGQyMTcY2QEgASgFOgEwEhQKCGZpZWxkMjE4GNoBIAEoBToB", 

+            "MBIUCghmaWVsZDIyMBjcASABKAU6ATASFAoIZmllbGQyMjEY3QEgASgFOgEw", 

+            "EhQKCGZpZWxkMjIyGN4BIAEoAjoBMBIPCgdmaWVsZDYzGD8gASgFEi8KBmdy", 

+            "b3VwMRgKIAMoCjIfLmJlbmNobWFya3MuU2l6ZU1lc3NhZ2UyLkdyb3VwMRIR", 

+            "CghmaWVsZDEyOBiAASADKAkSEQoIZmllbGQxMzEYgwEgASgDEhAKCGZpZWxk", 

+            "MTI3GH8gAygJEhEKCGZpZWxkMTI5GIEBIAEoBRIRCghmaWVsZDEzMBiCASAD", 

+            "KAMSGAoIZmllbGQyMDUYzQEgASgIOgVmYWxzZRIYCghmaWVsZDIwNhjOASAB", 

+            "KAg6BWZhbHNlGsICCgZHcm91cDESDwoHZmllbGQxMRgLIAIoAhIPCgdmaWVs", 

+            "ZDI2GBogASgCEg8KB2ZpZWxkMTIYDCABKAkSDwoHZmllbGQxMxgNIAEoCRIP", 

+            "CgdmaWVsZDE0GA4gAygJEg8KB2ZpZWxkMTUYDyACKAQSDgoGZmllbGQ1GAUg", 

+            "ASgFEg8KB2ZpZWxkMjcYGyABKAkSDwoHZmllbGQyOBgcIAEoBRIPCgdmaWVs", 

+            "ZDI5GB0gASgJEg8KB2ZpZWxkMTYYECABKAkSDwoHZmllbGQyMhgWIAMoCRIP", 

+            "CgdmaWVsZDczGEkgAygFEhIKB2ZpZWxkMjAYFCABKAU6ATASDwoHZmllbGQy", 

+            "NBgYIAEoCRI3CgdmaWVsZDMxGB8gASgLMiYuYmVuY2htYXJrcy5TaXplTWVz", 

+            "c2FnZTJHcm91cGVkTWVzc2FnZSLeAQoaU2l6ZU1lc3NhZ2UyR3JvdXBlZE1l", 

+            "c3NhZ2USDgoGZmllbGQxGAEgASgCEg4KBmZpZWxkMhgCIAEoAhIRCgZmaWVs", 

+            "ZDMYAyABKAI6ATASDgoGZmllbGQ0GAQgASgIEg4KBmZpZWxkNRgFIAEoCBIU", 

+            "CgZmaWVsZDYYBiABKAg6BHRydWUSFQoGZmllbGQ3GAcgASgIOgVmYWxzZRIO", 

+            "CgZmaWVsZDgYCCABKAISDgoGZmllbGQ5GAkgASgIEg8KB2ZpZWxkMTAYCiAB", 

+            "KAISDwoHZmllbGQxMRgLIAEoA0JJQgpHb29nbGVTaXplSALCPjgKIUdvb2ds", 

+            "ZS5Qcm90b2NvbEJ1ZmZlcnMuUHJvdG9CZW5jaBITR29vZ2xlU2l6ZVByb3Rv", 

+          "RmlsZQ=="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_benchmarks_SizeMessage1__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_benchmarks_SizeMessage1__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SizeMessage1, global::Google.ProtocolBuffers.ProtoBench.SizeMessage1.Builder>(internal__static_benchmarks_SizeMessage1__Descriptor,

+                new string[] { "Field1", "Field9", "Field18", "Field80", "Field81", "Field2", "Field3", "Field280", "Field6", "Field22", "Field4", "Field5", "Field59", "Field7", "Field16", "Field130", "Field12", "Field17", "Field13", "Field14", "Field104", "Field100", "Field101", "Field102", "Field103", "Field29", "Field30", "Field60", "Field271", "Field272", "Field150", "Field23", "Field24", "Field25", "Field15", "Field78", "Field67", "Field68", "Field128", "Field129", "Field131", });

+        internal__static_benchmarks_SizeMessage1SubMessage__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_benchmarks_SizeMessage1SubMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage, global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage.Builder>(internal__static_benchmarks_SizeMessage1SubMessage__Descriptor,

+                new string[] { "Field1", "Field2", "Field3", "Field15", "Field12", "Field13", "Field14", "Field16", "Field19", "Field20", "Field28", "Field21", "Field22", "Field23", "Field206", "Field203", "Field204", "Field205", "Field207", "Field300", });

+        internal__static_benchmarks_SizeMessage2__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_benchmarks_SizeMessage2__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SizeMessage2, global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Builder>(internal__static_benchmarks_SizeMessage2__Descriptor,

+                new string[] { "Field1", "Field3", "Field4", "Field30", "Field75", "Field6", "Field2", "Field21", "Field71", "Field25", "Field109", "Field210", "Field211", "Field212", "Field213", "Field216", "Field217", "Field218", "Field220", "Field221", "Field222", "Field63", "Group1", "Field128", "Field131", "Field127", "Field129", "Field130", "Field205", "Field206", });

+        internal__static_benchmarks_SizeMessage2_Group1__Descriptor = internal__static_benchmarks_SizeMessage2__Descriptor.NestedTypes[0];

+        internal__static_benchmarks_SizeMessage2_Group1__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1, global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1.Builder>(internal__static_benchmarks_SizeMessage2_Group1__Descriptor,

+                new string[] { "Field11", "Field26", "Field12", "Field13", "Field14", "Field15", "Field5", "Field27", "Field28", "Field29", "Field16", "Field22", "Field73", "Field20", "Field24", "Field31", });

+        internal__static_benchmarks_SizeMessage2GroupedMessage__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_benchmarks_SizeMessage2GroupedMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage, global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage.Builder>(internal__static_benchmarks_SizeMessage2GroupedMessage__Descriptor,

+                new string[] { "Field1", "Field2", "Field3", "Field4", "Field5", "Field6", "Field7", "Field8", "Field9", "Field10", "Field11", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SizeMessage1 : pb::GeneratedMessage<SizeMessage1, SizeMessage1.Builder> {

+    private SizeMessage1() { }

+    private static readonly SizeMessage1 defaultInstance = new SizeMessage1().MakeReadOnly();

+    public static SizeMessage1 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SizeMessage1 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SizeMessage1 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.internal__static_benchmarks_SizeMessage1__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage1, SizeMessage1.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.internal__static_benchmarks_SizeMessage1__FieldAccessorTable; }

+    }

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private string field1_ = "";

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public string Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field9FieldNumber = 9;

+    private bool hasField9;

+    private string field9_ = "";

+    public bool HasField9 {

+      get { return hasField9; }

+    }

+    public string Field9 {

+      get { return field9_; }

+    }

+    

+    public const int Field18FieldNumber = 18;

+    private bool hasField18;

+    private string field18_ = "";

+    public bool HasField18 {

+      get { return hasField18; }

+    }

+    public string Field18 {

+      get { return field18_; }

+    }

+    

+    public const int Field80FieldNumber = 80;

+    private bool hasField80;

+    private bool field80_;

+    public bool HasField80 {

+      get { return hasField80; }

+    }

+    public bool Field80 {

+      get { return field80_; }

+    }

+    

+    public const int Field81FieldNumber = 81;

+    private bool hasField81;

+    private bool field81_ = true;

+    public bool HasField81 {

+      get { return hasField81; }

+    }

+    public bool Field81 {

+      get { return field81_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private int field2_;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public int Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private int field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public int Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field280FieldNumber = 280;

+    private bool hasField280;

+    private int field280_;

+    public bool HasField280 {

+      get { return hasField280; }

+    }

+    public int Field280 {

+      get { return field280_; }

+    }

+    

+    public const int Field6FieldNumber = 6;

+    private bool hasField6;

+    private int field6_;

+    public bool HasField6 {

+      get { return hasField6; }

+    }

+    public int Field6 {

+      get { return field6_; }

+    }

+    

+    public const int Field22FieldNumber = 22;

+    private bool hasField22;

+    private long field22_;

+    public bool HasField22 {

+      get { return hasField22; }

+    }

+    public long Field22 {

+      get { return field22_; }

+    }

+    

+    public const int Field4FieldNumber = 4;

+    private bool hasField4;

+    private string field4_ = "";

+    public bool HasField4 {

+      get { return hasField4; }

+    }

+    public string Field4 {

+      get { return field4_; }

+    }

+    

+    public const int Field5FieldNumber = 5;

+    private pbc::PopsicleList<ulong> field5_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> Field5List {

+      get { return pbc::Lists.AsReadOnly(field5_); }

+    }

+    public int Field5Count {

+      get { return field5_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetField5(int index) {

+      return field5_[index];

+    }

+    

+    public const int Field59FieldNumber = 59;

+    private bool hasField59;

+    private bool field59_;

+    public bool HasField59 {

+      get { return hasField59; }

+    }

+    public bool Field59 {

+      get { return field59_; }

+    }

+    

+    public const int Field7FieldNumber = 7;

+    private bool hasField7;

+    private string field7_ = "";

+    public bool HasField7 {

+      get { return hasField7; }

+    }

+    public string Field7 {

+      get { return field7_; }

+    }

+    

+    public const int Field16FieldNumber = 16;

+    private bool hasField16;

+    private int field16_;

+    public bool HasField16 {

+      get { return hasField16; }

+    }

+    public int Field16 {

+      get { return field16_; }

+    }

+    

+    public const int Field130FieldNumber = 130;

+    private bool hasField130;

+    private int field130_;

+    public bool HasField130 {

+      get { return hasField130; }

+    }

+    public int Field130 {

+      get { return field130_; }

+    }

+    

+    public const int Field12FieldNumber = 12;

+    private bool hasField12;

+    private bool field12_ = true;

+    public bool HasField12 {

+      get { return hasField12; }

+    }

+    public bool Field12 {

+      get { return field12_; }

+    }

+    

+    public const int Field17FieldNumber = 17;

+    private bool hasField17;

+    private bool field17_ = true;

+    public bool HasField17 {

+      get { return hasField17; }

+    }

+    public bool Field17 {

+      get { return field17_; }

+    }

+    

+    public const int Field13FieldNumber = 13;

+    private bool hasField13;

+    private bool field13_ = true;

+    public bool HasField13 {

+      get { return hasField13; }

+    }

+    public bool Field13 {

+      get { return field13_; }

+    }

+    

+    public const int Field14FieldNumber = 14;

+    private bool hasField14;

+    private bool field14_ = true;

+    public bool HasField14 {

+      get { return hasField14; }

+    }

+    public bool Field14 {

+      get { return field14_; }

+    }

+    

+    public const int Field104FieldNumber = 104;

+    private bool hasField104;

+    private int field104_;

+    public bool HasField104 {

+      get { return hasField104; }

+    }

+    public int Field104 {

+      get { return field104_; }

+    }

+    

+    public const int Field100FieldNumber = 100;

+    private bool hasField100;

+    private int field100_;

+    public bool HasField100 {

+      get { return hasField100; }

+    }

+    public int Field100 {

+      get { return field100_; }

+    }

+    

+    public const int Field101FieldNumber = 101;

+    private bool hasField101;

+    private int field101_;

+    public bool HasField101 {

+      get { return hasField101; }

+    }

+    public int Field101 {

+      get { return field101_; }

+    }

+    

+    public const int Field102FieldNumber = 102;

+    private bool hasField102;

+    private string field102_ = "";

+    public bool HasField102 {

+      get { return hasField102; }

+    }

+    public string Field102 {

+      get { return field102_; }

+    }

+    

+    public const int Field103FieldNumber = 103;

+    private bool hasField103;

+    private string field103_ = "";

+    public bool HasField103 {

+      get { return hasField103; }

+    }

+    public string Field103 {

+      get { return field103_; }

+    }

+    

+    public const int Field29FieldNumber = 29;

+    private bool hasField29;

+    private int field29_;

+    public bool HasField29 {

+      get { return hasField29; }

+    }

+    public int Field29 {

+      get { return field29_; }

+    }

+    

+    public const int Field30FieldNumber = 30;

+    private bool hasField30;

+    private bool field30_;

+    public bool HasField30 {

+      get { return hasField30; }

+    }

+    public bool Field30 {

+      get { return field30_; }

+    }

+    

+    public const int Field60FieldNumber = 60;

+    private bool hasField60;

+    private int field60_ = -1;

+    public bool HasField60 {

+      get { return hasField60; }

+    }

+    public int Field60 {

+      get { return field60_; }

+    }

+    

+    public const int Field271FieldNumber = 271;

+    private bool hasField271;

+    private int field271_ = -1;

+    public bool HasField271 {

+      get { return hasField271; }

+    }

+    public int Field271 {

+      get { return field271_; }

+    }

+    

+    public const int Field272FieldNumber = 272;

+    private bool hasField272;

+    private int field272_ = -1;

+    public bool HasField272 {

+      get { return hasField272; }

+    }

+    public int Field272 {

+      get { return field272_; }

+    }

+    

+    public const int Field150FieldNumber = 150;

+    private bool hasField150;

+    private int field150_;

+    public bool HasField150 {

+      get { return hasField150; }

+    }

+    public int Field150 {

+      get { return field150_; }

+    }

+    

+    public const int Field23FieldNumber = 23;

+    private bool hasField23;

+    private int field23_;

+    public bool HasField23 {

+      get { return hasField23; }

+    }

+    public int Field23 {

+      get { return field23_; }

+    }

+    

+    public const int Field24FieldNumber = 24;

+    private bool hasField24;

+    private bool field24_;

+    public bool HasField24 {

+      get { return hasField24; }

+    }

+    public bool Field24 {

+      get { return field24_; }

+    }

+    

+    public const int Field25FieldNumber = 25;

+    private bool hasField25;

+    private int field25_;

+    public bool HasField25 {

+      get { return hasField25; }

+    }

+    public int Field25 {

+      get { return field25_; }

+    }

+    

+    public const int Field15FieldNumber = 15;

+    private bool hasField15;

+    private global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage field15_;

+    public bool HasField15 {

+      get { return hasField15; }

+    }

+    public global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage Field15 {

+      get { return field15_ ?? global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage.DefaultInstance; }

+    }

+    

+    public const int Field78FieldNumber = 78;

+    private bool hasField78;

+    private bool field78_;

+    public bool HasField78 {

+      get { return hasField78; }

+    }

+    public bool Field78 {

+      get { return field78_; }

+    }

+    

+    public const int Field67FieldNumber = 67;

+    private bool hasField67;

+    private int field67_;

+    public bool HasField67 {

+      get { return hasField67; }

+    }

+    public int Field67 {

+      get { return field67_; }

+    }

+    

+    public const int Field68FieldNumber = 68;

+    private bool hasField68;

+    private int field68_;

+    public bool HasField68 {

+      get { return hasField68; }

+    }

+    public int Field68 {

+      get { return field68_; }

+    }

+    

+    public const int Field128FieldNumber = 128;

+    private bool hasField128;

+    private int field128_;

+    public bool HasField128 {

+      get { return hasField128; }

+    }

+    public int Field128 {

+      get { return field128_; }

+    }

+    

+    public const int Field129FieldNumber = 129;

+    private bool hasField129;

+    private string field129_ = "xxxxxxxxxxxxxxxxxxxxx";

+    public bool HasField129 {

+      get { return hasField129; }

+    }

+    public string Field129 {

+      get { return field129_; }

+    }

+    

+    public const int Field131FieldNumber = 131;

+    private bool hasField131;

+    private int field131_;

+    public bool HasField131 {

+      get { return hasField131; }

+    }

+    public int Field131 {

+      get { return field131_; }

+    }

+    

+    public static SizeMessage1 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage1 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SizeMessage1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SizeMessage1 MakeReadOnly() {

+      field5_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SizeMessage1 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage1, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SizeMessage1 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SizeMessage1 result;

+      

+      private SizeMessage1 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SizeMessage1 original = result;

+          result = new SizeMessage1();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SizeMessage1 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SizeMessage1.Descriptor; }

+      }

+      

+      public override SizeMessage1 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SizeMessage1.DefaultInstance; }

+      }

+      

+      public override SizeMessage1 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public string Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = "";

+        return this;

+      }

+      

+      public bool HasField9 {

+        get { return result.hasField9; }

+      }

+      public string Field9 {

+        get { return result.Field9; }

+        set { SetField9(value); }

+      }

+      public Builder SetField9(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField9 = true;

+        result.field9_ = value;

+        return this;

+      }

+      public Builder ClearField9() {

+        PrepareBuilder();

+        result.hasField9 = false;

+        result.field9_ = "";

+        return this;

+      }

+      

+      public bool HasField18 {

+        get { return result.hasField18; }

+      }

+      public string Field18 {

+        get { return result.Field18; }

+        set { SetField18(value); }

+      }

+      public Builder SetField18(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField18 = true;

+        result.field18_ = value;

+        return this;

+      }

+      public Builder ClearField18() {

+        PrepareBuilder();

+        result.hasField18 = false;

+        result.field18_ = "";

+        return this;

+      }

+      

+      public bool HasField80 {

+        get { return result.hasField80; }

+      }

+      public bool Field80 {

+        get { return result.Field80; }

+        set { SetField80(value); }

+      }

+      public Builder SetField80(bool value) {

+        PrepareBuilder();

+        result.hasField80 = true;

+        result.field80_ = value;

+        return this;

+      }

+      public Builder ClearField80() {

+        PrepareBuilder();

+        result.hasField80 = false;

+        result.field80_ = false;

+        return this;

+      }

+      

+      public bool HasField81 {

+        get { return result.hasField81; }

+      }

+      public bool Field81 {

+        get { return result.Field81; }

+        set { SetField81(value); }

+      }

+      public Builder SetField81(bool value) {

+        PrepareBuilder();

+        result.hasField81 = true;

+        result.field81_ = value;

+        return this;

+      }

+      public Builder ClearField81() {

+        PrepareBuilder();

+        result.hasField81 = false;

+        result.field81_ = true;

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public int Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(int value) {

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = 0;

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public int Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(int value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0;

+        return this;

+      }

+      

+      public bool HasField280 {

+        get { return result.hasField280; }

+      }

+      public int Field280 {

+        get { return result.Field280; }

+        set { SetField280(value); }

+      }

+      public Builder SetField280(int value) {

+        PrepareBuilder();

+        result.hasField280 = true;

+        result.field280_ = value;

+        return this;

+      }

+      public Builder ClearField280() {

+        PrepareBuilder();

+        result.hasField280 = false;

+        result.field280_ = 0;

+        return this;

+      }

+      

+      public bool HasField6 {

+        get { return result.hasField6; }

+      }

+      public int Field6 {

+        get { return result.Field6; }

+        set { SetField6(value); }

+      }

+      public Builder SetField6(int value) {

+        PrepareBuilder();

+        result.hasField6 = true;

+        result.field6_ = value;

+        return this;

+      }

+      public Builder ClearField6() {

+        PrepareBuilder();

+        result.hasField6 = false;

+        result.field6_ = 0;

+        return this;

+      }

+      

+      public bool HasField22 {

+        get { return result.hasField22; }

+      }

+      public long Field22 {

+        get { return result.Field22; }

+        set { SetField22(value); }

+      }

+      public Builder SetField22(long value) {

+        PrepareBuilder();

+        result.hasField22 = true;

+        result.field22_ = value;

+        return this;

+      }

+      public Builder ClearField22() {

+        PrepareBuilder();

+        result.hasField22 = false;

+        result.field22_ = 0L;

+        return this;

+      }

+      

+      public bool HasField4 {

+        get { return result.hasField4; }

+      }

+      public string Field4 {

+        get { return result.Field4; }

+        set { SetField4(value); }

+      }

+      public Builder SetField4(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField4 = true;

+        result.field4_ = value;

+        return this;

+      }

+      public Builder ClearField4() {

+        PrepareBuilder();

+        result.hasField4 = false;

+        result.field4_ = "";

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> Field5List {

+        get { return PrepareBuilder().field5_; }

+      }

+      public int Field5Count {

+        get { return result.Field5Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetField5(int index) {

+        return result.GetField5(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField5(int index, ulong value) {

+        PrepareBuilder();

+        result.field5_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddField5(ulong value) {

+        PrepareBuilder();

+        result.field5_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeField5(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.field5_.Add(values);

+        return this;

+      }

+      public Builder ClearField5() {

+        PrepareBuilder();

+        result.field5_.Clear();

+        return this;

+      }

+      

+      public bool HasField59 {

+        get { return result.hasField59; }

+      }

+      public bool Field59 {

+        get { return result.Field59; }

+        set { SetField59(value); }

+      }

+      public Builder SetField59(bool value) {

+        PrepareBuilder();

+        result.hasField59 = true;

+        result.field59_ = value;

+        return this;

+      }

+      public Builder ClearField59() {

+        PrepareBuilder();

+        result.hasField59 = false;

+        result.field59_ = false;

+        return this;

+      }

+      

+      public bool HasField7 {

+        get { return result.hasField7; }

+      }

+      public string Field7 {

+        get { return result.Field7; }

+        set { SetField7(value); }

+      }

+      public Builder SetField7(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField7 = true;

+        result.field7_ = value;

+        return this;

+      }

+      public Builder ClearField7() {

+        PrepareBuilder();

+        result.hasField7 = false;

+        result.field7_ = "";

+        return this;

+      }

+      

+      public bool HasField16 {

+        get { return result.hasField16; }

+      }

+      public int Field16 {

+        get { return result.Field16; }

+        set { SetField16(value); }

+      }

+      public Builder SetField16(int value) {

+        PrepareBuilder();

+        result.hasField16 = true;

+        result.field16_ = value;

+        return this;

+      }

+      public Builder ClearField16() {

+        PrepareBuilder();

+        result.hasField16 = false;

+        result.field16_ = 0;

+        return this;

+      }

+      

+      public bool HasField130 {

+        get { return result.hasField130; }

+      }

+      public int Field130 {

+        get { return result.Field130; }

+        set { SetField130(value); }

+      }

+      public Builder SetField130(int value) {

+        PrepareBuilder();

+        result.hasField130 = true;

+        result.field130_ = value;

+        return this;

+      }

+      public Builder ClearField130() {

+        PrepareBuilder();

+        result.hasField130 = false;

+        result.field130_ = 0;

+        return this;

+      }

+      

+      public bool HasField12 {

+        get { return result.hasField12; }

+      }

+      public bool Field12 {

+        get { return result.Field12; }

+        set { SetField12(value); }

+      }

+      public Builder SetField12(bool value) {

+        PrepareBuilder();

+        result.hasField12 = true;

+        result.field12_ = value;

+        return this;

+      }

+      public Builder ClearField12() {

+        PrepareBuilder();

+        result.hasField12 = false;

+        result.field12_ = true;

+        return this;

+      }

+      

+      public bool HasField17 {

+        get { return result.hasField17; }

+      }

+      public bool Field17 {

+        get { return result.Field17; }

+        set { SetField17(value); }

+      }

+      public Builder SetField17(bool value) {

+        PrepareBuilder();

+        result.hasField17 = true;

+        result.field17_ = value;

+        return this;

+      }

+      public Builder ClearField17() {

+        PrepareBuilder();

+        result.hasField17 = false;

+        result.field17_ = true;

+        return this;

+      }

+      

+      public bool HasField13 {

+        get { return result.hasField13; }

+      }

+      public bool Field13 {

+        get { return result.Field13; }

+        set { SetField13(value); }

+      }

+      public Builder SetField13(bool value) {

+        PrepareBuilder();

+        result.hasField13 = true;

+        result.field13_ = value;

+        return this;

+      }

+      public Builder ClearField13() {

+        PrepareBuilder();

+        result.hasField13 = false;

+        result.field13_ = true;

+        return this;

+      }

+      

+      public bool HasField14 {

+        get { return result.hasField14; }

+      }

+      public bool Field14 {

+        get { return result.Field14; }

+        set { SetField14(value); }

+      }

+      public Builder SetField14(bool value) {

+        PrepareBuilder();

+        result.hasField14 = true;

+        result.field14_ = value;

+        return this;

+      }

+      public Builder ClearField14() {

+        PrepareBuilder();

+        result.hasField14 = false;

+        result.field14_ = true;

+        return this;

+      }

+      

+      public bool HasField104 {

+        get { return result.hasField104; }

+      }

+      public int Field104 {

+        get { return result.Field104; }

+        set { SetField104(value); }

+      }

+      public Builder SetField104(int value) {

+        PrepareBuilder();

+        result.hasField104 = true;

+        result.field104_ = value;

+        return this;

+      }

+      public Builder ClearField104() {

+        PrepareBuilder();

+        result.hasField104 = false;

+        result.field104_ = 0;

+        return this;

+      }

+      

+      public bool HasField100 {

+        get { return result.hasField100; }

+      }

+      public int Field100 {

+        get { return result.Field100; }

+        set { SetField100(value); }

+      }

+      public Builder SetField100(int value) {

+        PrepareBuilder();

+        result.hasField100 = true;

+        result.field100_ = value;

+        return this;

+      }

+      public Builder ClearField100() {

+        PrepareBuilder();

+        result.hasField100 = false;

+        result.field100_ = 0;

+        return this;

+      }

+      

+      public bool HasField101 {

+        get { return result.hasField101; }

+      }

+      public int Field101 {

+        get { return result.Field101; }

+        set { SetField101(value); }

+      }

+      public Builder SetField101(int value) {

+        PrepareBuilder();

+        result.hasField101 = true;

+        result.field101_ = value;

+        return this;

+      }

+      public Builder ClearField101() {

+        PrepareBuilder();

+        result.hasField101 = false;

+        result.field101_ = 0;

+        return this;

+      }

+      

+      public bool HasField102 {

+        get { return result.hasField102; }

+      }

+      public string Field102 {

+        get { return result.Field102; }

+        set { SetField102(value); }

+      }

+      public Builder SetField102(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField102 = true;

+        result.field102_ = value;

+        return this;

+      }

+      public Builder ClearField102() {

+        PrepareBuilder();

+        result.hasField102 = false;

+        result.field102_ = "";

+        return this;

+      }

+      

+      public bool HasField103 {

+        get { return result.hasField103; }

+      }

+      public string Field103 {

+        get { return result.Field103; }

+        set { SetField103(value); }

+      }

+      public Builder SetField103(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField103 = true;

+        result.field103_ = value;

+        return this;

+      }

+      public Builder ClearField103() {

+        PrepareBuilder();

+        result.hasField103 = false;

+        result.field103_ = "";

+        return this;

+      }

+      

+      public bool HasField29 {

+        get { return result.hasField29; }

+      }

+      public int Field29 {

+        get { return result.Field29; }

+        set { SetField29(value); }

+      }

+      public Builder SetField29(int value) {

+        PrepareBuilder();

+        result.hasField29 = true;

+        result.field29_ = value;

+        return this;

+      }

+      public Builder ClearField29() {

+        PrepareBuilder();

+        result.hasField29 = false;

+        result.field29_ = 0;

+        return this;

+      }

+      

+      public bool HasField30 {

+        get { return result.hasField30; }

+      }

+      public bool Field30 {

+        get { return result.Field30; }

+        set { SetField30(value); }

+      }

+      public Builder SetField30(bool value) {

+        PrepareBuilder();

+        result.hasField30 = true;

+        result.field30_ = value;

+        return this;

+      }

+      public Builder ClearField30() {

+        PrepareBuilder();

+        result.hasField30 = false;

+        result.field30_ = false;

+        return this;

+      }

+      

+      public bool HasField60 {

+        get { return result.hasField60; }

+      }

+      public int Field60 {

+        get { return result.Field60; }

+        set { SetField60(value); }

+      }

+      public Builder SetField60(int value) {

+        PrepareBuilder();

+        result.hasField60 = true;

+        result.field60_ = value;

+        return this;

+      }

+      public Builder ClearField60() {

+        PrepareBuilder();

+        result.hasField60 = false;

+        result.field60_ = -1;

+        return this;

+      }

+      

+      public bool HasField271 {

+        get { return result.hasField271; }

+      }

+      public int Field271 {

+        get { return result.Field271; }

+        set { SetField271(value); }

+      }

+      public Builder SetField271(int value) {

+        PrepareBuilder();

+        result.hasField271 = true;

+        result.field271_ = value;

+        return this;

+      }

+      public Builder ClearField271() {

+        PrepareBuilder();

+        result.hasField271 = false;

+        result.field271_ = -1;

+        return this;

+      }

+      

+      public bool HasField272 {

+        get { return result.hasField272; }

+      }

+      public int Field272 {

+        get { return result.Field272; }

+        set { SetField272(value); }

+      }

+      public Builder SetField272(int value) {

+        PrepareBuilder();

+        result.hasField272 = true;

+        result.field272_ = value;

+        return this;

+      }

+      public Builder ClearField272() {

+        PrepareBuilder();

+        result.hasField272 = false;

+        result.field272_ = -1;

+        return this;

+      }

+      

+      public bool HasField150 {

+        get { return result.hasField150; }

+      }

+      public int Field150 {

+        get { return result.Field150; }

+        set { SetField150(value); }

+      }

+      public Builder SetField150(int value) {

+        PrepareBuilder();

+        result.hasField150 = true;

+        result.field150_ = value;

+        return this;

+      }

+      public Builder ClearField150() {

+        PrepareBuilder();

+        result.hasField150 = false;

+        result.field150_ = 0;

+        return this;

+      }

+      

+      public bool HasField23 {

+        get { return result.hasField23; }

+      }

+      public int Field23 {

+        get { return result.Field23; }

+        set { SetField23(value); }

+      }

+      public Builder SetField23(int value) {

+        PrepareBuilder();

+        result.hasField23 = true;

+        result.field23_ = value;

+        return this;

+      }

+      public Builder ClearField23() {

+        PrepareBuilder();

+        result.hasField23 = false;

+        result.field23_ = 0;

+        return this;

+      }

+      

+      public bool HasField24 {

+        get { return result.hasField24; }

+      }

+      public bool Field24 {

+        get { return result.Field24; }

+        set { SetField24(value); }

+      }

+      public Builder SetField24(bool value) {

+        PrepareBuilder();

+        result.hasField24 = true;

+        result.field24_ = value;

+        return this;

+      }

+      public Builder ClearField24() {

+        PrepareBuilder();

+        result.hasField24 = false;

+        result.field24_ = false;

+        return this;

+      }

+      

+      public bool HasField25 {

+        get { return result.hasField25; }

+      }

+      public int Field25 {

+        get { return result.Field25; }

+        set { SetField25(value); }

+      }

+      public Builder SetField25(int value) {

+        PrepareBuilder();

+        result.hasField25 = true;

+        result.field25_ = value;

+        return this;

+      }

+      public Builder ClearField25() {

+        PrepareBuilder();

+        result.hasField25 = false;

+        result.field25_ = 0;

+        return this;

+      }

+      

+      public bool HasField15 {

+       get { return result.hasField15; }

+      }

+      public global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage Field15 {

+        get { return result.Field15; }

+        set { SetField15(value); }

+      }

+      public Builder SetField15(global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField15 = true;

+        result.field15_ = value;

+        return this;

+      }

+      public Builder SetField15(global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasField15 = true;

+        result.field15_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeField15(global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasField15 &&

+            result.field15_ != global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage.DefaultInstance) {

+            result.field15_ = global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage.CreateBuilder(result.field15_).MergeFrom(value).BuildPartial();

+        } else {

+          result.field15_ = value;

+        }

+        result.hasField15 = true;

+        return this;

+      }

+      public Builder ClearField15() {

+        PrepareBuilder();

+        result.hasField15 = false;

+        result.field15_ = null;

+        return this;

+      }

+      

+      public bool HasField78 {

+        get { return result.hasField78; }

+      }

+      public bool Field78 {

+        get { return result.Field78; }

+        set { SetField78(value); }

+      }

+      public Builder SetField78(bool value) {

+        PrepareBuilder();

+        result.hasField78 = true;

+        result.field78_ = value;

+        return this;

+      }

+      public Builder ClearField78() {

+        PrepareBuilder();

+        result.hasField78 = false;

+        result.field78_ = false;

+        return this;

+      }

+      

+      public bool HasField67 {

+        get { return result.hasField67; }

+      }

+      public int Field67 {

+        get { return result.Field67; }

+        set { SetField67(value); }

+      }

+      public Builder SetField67(int value) {

+        PrepareBuilder();

+        result.hasField67 = true;

+        result.field67_ = value;

+        return this;

+      }

+      public Builder ClearField67() {

+        PrepareBuilder();

+        result.hasField67 = false;

+        result.field67_ = 0;

+        return this;

+      }

+      

+      public bool HasField68 {

+        get { return result.hasField68; }

+      }

+      public int Field68 {

+        get { return result.Field68; }

+        set { SetField68(value); }

+      }

+      public Builder SetField68(int value) {

+        PrepareBuilder();

+        result.hasField68 = true;

+        result.field68_ = value;

+        return this;

+      }

+      public Builder ClearField68() {

+        PrepareBuilder();

+        result.hasField68 = false;

+        result.field68_ = 0;

+        return this;

+      }

+      

+      public bool HasField128 {

+        get { return result.hasField128; }

+      }

+      public int Field128 {

+        get { return result.Field128; }

+        set { SetField128(value); }

+      }

+      public Builder SetField128(int value) {

+        PrepareBuilder();

+        result.hasField128 = true;

+        result.field128_ = value;

+        return this;

+      }

+      public Builder ClearField128() {

+        PrepareBuilder();

+        result.hasField128 = false;

+        result.field128_ = 0;

+        return this;

+      }

+      

+      public bool HasField129 {

+        get { return result.hasField129; }

+      }

+      public string Field129 {

+        get { return result.Field129; }

+        set { SetField129(value); }

+      }

+      public Builder SetField129(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField129 = true;

+        result.field129_ = value;

+        return this;

+      }

+      public Builder ClearField129() {

+        PrepareBuilder();

+        result.hasField129 = false;

+        result.field129_ = "xxxxxxxxxxxxxxxxxxxxx";

+        return this;

+      }

+      

+      public bool HasField131 {

+        get { return result.hasField131; }

+      }

+      public int Field131 {

+        get { return result.Field131; }

+        set { SetField131(value); }

+      }

+      public Builder SetField131(int value) {

+        PrepareBuilder();

+        result.hasField131 = true;

+        result.field131_ = value;

+        return this;

+      }

+      public Builder ClearField131() {

+        PrepareBuilder();

+        result.hasField131 = false;

+        result.field131_ = 0;

+        return this;

+      }

+    }

+    static SizeMessage1() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SizeMessage1SubMessage : pb::GeneratedMessage<SizeMessage1SubMessage, SizeMessage1SubMessage.Builder> {

+    private SizeMessage1SubMessage() { }

+    private static readonly SizeMessage1SubMessage defaultInstance = new SizeMessage1SubMessage().MakeReadOnly();

+    public static SizeMessage1SubMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SizeMessage1SubMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SizeMessage1SubMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.internal__static_benchmarks_SizeMessage1SubMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage1SubMessage, SizeMessage1SubMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.internal__static_benchmarks_SizeMessage1SubMessage__FieldAccessorTable; }

+    }

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private int field1_;

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public int Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private int field2_;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public int Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private int field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public int Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field15FieldNumber = 15;

+    private bool hasField15;

+    private string field15_ = "";

+    public bool HasField15 {

+      get { return hasField15; }

+    }

+    public string Field15 {

+      get { return field15_; }

+    }

+    

+    public const int Field12FieldNumber = 12;

+    private bool hasField12;

+    private bool field12_ = true;

+    public bool HasField12 {

+      get { return hasField12; }

+    }

+    public bool Field12 {

+      get { return field12_; }

+    }

+    

+    public const int Field13FieldNumber = 13;

+    private bool hasField13;

+    private long field13_;

+    public bool HasField13 {

+      get { return hasField13; }

+    }

+    public long Field13 {

+      get { return field13_; }

+    }

+    

+    public const int Field14FieldNumber = 14;

+    private bool hasField14;

+    private long field14_;

+    public bool HasField14 {

+      get { return hasField14; }

+    }

+    public long Field14 {

+      get { return field14_; }

+    }

+    

+    public const int Field16FieldNumber = 16;

+    private bool hasField16;

+    private int field16_;

+    public bool HasField16 {

+      get { return hasField16; }

+    }

+    public int Field16 {

+      get { return field16_; }

+    }

+    

+    public const int Field19FieldNumber = 19;

+    private bool hasField19;

+    private int field19_ = 2;

+    public bool HasField19 {

+      get { return hasField19; }

+    }

+    public int Field19 {

+      get { return field19_; }

+    }

+    

+    public const int Field20FieldNumber = 20;

+    private bool hasField20;

+    private bool field20_ = true;

+    public bool HasField20 {

+      get { return hasField20; }

+    }

+    public bool Field20 {

+      get { return field20_; }

+    }

+    

+    public const int Field28FieldNumber = 28;

+    private bool hasField28;

+    private bool field28_ = true;

+    public bool HasField28 {

+      get { return hasField28; }

+    }

+    public bool Field28 {

+      get { return field28_; }

+    }

+    

+    public const int Field21FieldNumber = 21;

+    private bool hasField21;

+    private ulong field21_;

+    public bool HasField21 {

+      get { return hasField21; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong Field21 {

+      get { return field21_; }

+    }

+    

+    public const int Field22FieldNumber = 22;

+    private bool hasField22;

+    private int field22_;

+    public bool HasField22 {

+      get { return hasField22; }

+    }

+    public int Field22 {

+      get { return field22_; }

+    }

+    

+    public const int Field23FieldNumber = 23;

+    private bool hasField23;

+    private bool field23_;

+    public bool HasField23 {

+      get { return hasField23; }

+    }

+    public bool Field23 {

+      get { return field23_; }

+    }

+    

+    public const int Field206FieldNumber = 206;

+    private bool hasField206;

+    private bool field206_;

+    public bool HasField206 {

+      get { return hasField206; }

+    }

+    public bool Field206 {

+      get { return field206_; }

+    }

+    

+    public const int Field203FieldNumber = 203;

+    private bool hasField203;

+    private uint field203_;

+    public bool HasField203 {

+      get { return hasField203; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint Field203 {

+      get { return field203_; }

+    }

+    

+    public const int Field204FieldNumber = 204;

+    private bool hasField204;

+    private int field204_;

+    public bool HasField204 {

+      get { return hasField204; }

+    }

+    public int Field204 {

+      get { return field204_; }

+    }

+    

+    public const int Field205FieldNumber = 205;

+    private bool hasField205;

+    private string field205_ = "";

+    public bool HasField205 {

+      get { return hasField205; }

+    }

+    public string Field205 {

+      get { return field205_; }

+    }

+    

+    public const int Field207FieldNumber = 207;

+    private bool hasField207;

+    private ulong field207_;

+    public bool HasField207 {

+      get { return hasField207; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong Field207 {

+      get { return field207_; }

+    }

+    

+    public const int Field300FieldNumber = 300;

+    private bool hasField300;

+    private ulong field300_;

+    public bool HasField300 {

+      get { return hasField300; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong Field300 {

+      get { return field300_; }

+    }

+    

+    public static SizeMessage1SubMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SizeMessage1SubMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SizeMessage1SubMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage1SubMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SizeMessage1SubMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SizeMessage1SubMessage result;

+      

+      private SizeMessage1SubMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SizeMessage1SubMessage original = result;

+          result = new SizeMessage1SubMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SizeMessage1SubMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage.Descriptor; }

+      }

+      

+      public override SizeMessage1SubMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SizeMessage1SubMessage.DefaultInstance; }

+      }

+      

+      public override SizeMessage1SubMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public int Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(int value) {

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = 0;

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public int Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(int value) {

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = 0;

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public int Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(int value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0;

+        return this;

+      }

+      

+      public bool HasField15 {

+        get { return result.hasField15; }

+      }

+      public string Field15 {

+        get { return result.Field15; }

+        set { SetField15(value); }

+      }

+      public Builder SetField15(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField15 = true;

+        result.field15_ = value;

+        return this;

+      }

+      public Builder ClearField15() {

+        PrepareBuilder();

+        result.hasField15 = false;

+        result.field15_ = "";

+        return this;

+      }

+      

+      public bool HasField12 {

+        get { return result.hasField12; }

+      }

+      public bool Field12 {

+        get { return result.Field12; }

+        set { SetField12(value); }

+      }

+      public Builder SetField12(bool value) {

+        PrepareBuilder();

+        result.hasField12 = true;

+        result.field12_ = value;

+        return this;

+      }

+      public Builder ClearField12() {

+        PrepareBuilder();

+        result.hasField12 = false;

+        result.field12_ = true;

+        return this;

+      }

+      

+      public bool HasField13 {

+        get { return result.hasField13; }

+      }

+      public long Field13 {

+        get { return result.Field13; }

+        set { SetField13(value); }

+      }

+      public Builder SetField13(long value) {

+        PrepareBuilder();

+        result.hasField13 = true;

+        result.field13_ = value;

+        return this;

+      }

+      public Builder ClearField13() {

+        PrepareBuilder();

+        result.hasField13 = false;

+        result.field13_ = 0L;

+        return this;

+      }

+      

+      public bool HasField14 {

+        get { return result.hasField14; }

+      }

+      public long Field14 {

+        get { return result.Field14; }

+        set { SetField14(value); }

+      }

+      public Builder SetField14(long value) {

+        PrepareBuilder();

+        result.hasField14 = true;

+        result.field14_ = value;

+        return this;

+      }

+      public Builder ClearField14() {

+        PrepareBuilder();

+        result.hasField14 = false;

+        result.field14_ = 0L;

+        return this;

+      }

+      

+      public bool HasField16 {

+        get { return result.hasField16; }

+      }

+      public int Field16 {

+        get { return result.Field16; }

+        set { SetField16(value); }

+      }

+      public Builder SetField16(int value) {

+        PrepareBuilder();

+        result.hasField16 = true;

+        result.field16_ = value;

+        return this;

+      }

+      public Builder ClearField16() {

+        PrepareBuilder();

+        result.hasField16 = false;

+        result.field16_ = 0;

+        return this;

+      }

+      

+      public bool HasField19 {

+        get { return result.hasField19; }

+      }

+      public int Field19 {

+        get { return result.Field19; }

+        set { SetField19(value); }

+      }

+      public Builder SetField19(int value) {

+        PrepareBuilder();

+        result.hasField19 = true;

+        result.field19_ = value;

+        return this;

+      }

+      public Builder ClearField19() {

+        PrepareBuilder();

+        result.hasField19 = false;

+        result.field19_ = 2;

+        return this;

+      }

+      

+      public bool HasField20 {

+        get { return result.hasField20; }

+      }

+      public bool Field20 {

+        get { return result.Field20; }

+        set { SetField20(value); }

+      }

+      public Builder SetField20(bool value) {

+        PrepareBuilder();

+        result.hasField20 = true;

+        result.field20_ = value;

+        return this;

+      }

+      public Builder ClearField20() {

+        PrepareBuilder();

+        result.hasField20 = false;

+        result.field20_ = true;

+        return this;

+      }

+      

+      public bool HasField28 {

+        get { return result.hasField28; }

+      }

+      public bool Field28 {

+        get { return result.Field28; }

+        set { SetField28(value); }

+      }

+      public Builder SetField28(bool value) {

+        PrepareBuilder();

+        result.hasField28 = true;

+        result.field28_ = value;

+        return this;

+      }

+      public Builder ClearField28() {

+        PrepareBuilder();

+        result.hasField28 = false;

+        result.field28_ = true;

+        return this;

+      }

+      

+      public bool HasField21 {

+        get { return result.hasField21; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong Field21 {

+        get { return result.Field21; }

+        set { SetField21(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField21(ulong value) {

+        PrepareBuilder();

+        result.hasField21 = true;

+        result.field21_ = value;

+        return this;

+      }

+      public Builder ClearField21() {

+        PrepareBuilder();

+        result.hasField21 = false;

+        result.field21_ = 0;

+        return this;

+      }

+      

+      public bool HasField22 {

+        get { return result.hasField22; }

+      }

+      public int Field22 {

+        get { return result.Field22; }

+        set { SetField22(value); }

+      }

+      public Builder SetField22(int value) {

+        PrepareBuilder();

+        result.hasField22 = true;

+        result.field22_ = value;

+        return this;

+      }

+      public Builder ClearField22() {

+        PrepareBuilder();

+        result.hasField22 = false;

+        result.field22_ = 0;

+        return this;

+      }

+      

+      public bool HasField23 {

+        get { return result.hasField23; }

+      }

+      public bool Field23 {

+        get { return result.Field23; }

+        set { SetField23(value); }

+      }

+      public Builder SetField23(bool value) {

+        PrepareBuilder();

+        result.hasField23 = true;

+        result.field23_ = value;

+        return this;

+      }

+      public Builder ClearField23() {

+        PrepareBuilder();

+        result.hasField23 = false;

+        result.field23_ = false;

+        return this;

+      }

+      

+      public bool HasField206 {

+        get { return result.hasField206; }

+      }

+      public bool Field206 {

+        get { return result.Field206; }

+        set { SetField206(value); }

+      }

+      public Builder SetField206(bool value) {

+        PrepareBuilder();

+        result.hasField206 = true;

+        result.field206_ = value;

+        return this;

+      }

+      public Builder ClearField206() {

+        PrepareBuilder();

+        result.hasField206 = false;

+        result.field206_ = false;

+        return this;

+      }

+      

+      public bool HasField203 {

+        get { return result.hasField203; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint Field203 {

+        get { return result.Field203; }

+        set { SetField203(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField203(uint value) {

+        PrepareBuilder();

+        result.hasField203 = true;

+        result.field203_ = value;

+        return this;

+      }

+      public Builder ClearField203() {

+        PrepareBuilder();

+        result.hasField203 = false;

+        result.field203_ = 0;

+        return this;

+      }

+      

+      public bool HasField204 {

+        get { return result.hasField204; }

+      }

+      public int Field204 {

+        get { return result.Field204; }

+        set { SetField204(value); }

+      }

+      public Builder SetField204(int value) {

+        PrepareBuilder();

+        result.hasField204 = true;

+        result.field204_ = value;

+        return this;

+      }

+      public Builder ClearField204() {

+        PrepareBuilder();

+        result.hasField204 = false;

+        result.field204_ = 0;

+        return this;

+      }

+      

+      public bool HasField205 {

+        get { return result.hasField205; }

+      }

+      public string Field205 {

+        get { return result.Field205; }

+        set { SetField205(value); }

+      }

+      public Builder SetField205(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField205 = true;

+        result.field205_ = value;

+        return this;

+      }

+      public Builder ClearField205() {

+        PrepareBuilder();

+        result.hasField205 = false;

+        result.field205_ = "";

+        return this;

+      }

+      

+      public bool HasField207 {

+        get { return result.hasField207; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong Field207 {

+        get { return result.Field207; }

+        set { SetField207(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField207(ulong value) {

+        PrepareBuilder();

+        result.hasField207 = true;

+        result.field207_ = value;

+        return this;

+      }

+      public Builder ClearField207() {

+        PrepareBuilder();

+        result.hasField207 = false;

+        result.field207_ = 0UL;

+        return this;

+      }

+      

+      public bool HasField300 {

+        get { return result.hasField300; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong Field300 {

+        get { return result.Field300; }

+        set { SetField300(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField300(ulong value) {

+        PrepareBuilder();

+        result.hasField300 = true;

+        result.field300_ = value;

+        return this;

+      }

+      public Builder ClearField300() {

+        PrepareBuilder();

+        result.hasField300 = false;

+        result.field300_ = 0UL;

+        return this;

+      }

+    }

+    static SizeMessage1SubMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SizeMessage2 : pb::GeneratedMessage<SizeMessage2, SizeMessage2.Builder> {

+    private SizeMessage2() { }

+    private static readonly SizeMessage2 defaultInstance = new SizeMessage2().MakeReadOnly();

+    public static SizeMessage2 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SizeMessage2 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SizeMessage2 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.internal__static_benchmarks_SizeMessage2__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage2, SizeMessage2.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.internal__static_benchmarks_SizeMessage2__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Group1 : pb::GeneratedMessage<Group1, Group1.Builder> {

+        private Group1() { }

+        private static readonly Group1 defaultInstance = new Group1().MakeReadOnly();

+        public static Group1 DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Group1 DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Group1 ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.internal__static_benchmarks_SizeMessage2_Group1__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Group1, Group1.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.internal__static_benchmarks_SizeMessage2_Group1__FieldAccessorTable; }

+        }

+        

+        public const int Field11FieldNumber = 11;

+        private bool hasField11;

+        private float field11_;

+        public bool HasField11 {

+          get { return hasField11; }

+        }

+        public float Field11 {

+          get { return field11_; }

+        }

+        

+        public const int Field26FieldNumber = 26;

+        private bool hasField26;

+        private float field26_;

+        public bool HasField26 {

+          get { return hasField26; }

+        }

+        public float Field26 {

+          get { return field26_; }

+        }

+        

+        public const int Field12FieldNumber = 12;

+        private bool hasField12;

+        private string field12_ = "";

+        public bool HasField12 {

+          get { return hasField12; }

+        }

+        public string Field12 {

+          get { return field12_; }

+        }

+        

+        public const int Field13FieldNumber = 13;

+        private bool hasField13;

+        private string field13_ = "";

+        public bool HasField13 {

+          get { return hasField13; }

+        }

+        public string Field13 {

+          get { return field13_; }

+        }

+        

+        public const int Field14FieldNumber = 14;

+        private pbc::PopsicleList<string> field14_ = new pbc::PopsicleList<string>();

+        public scg::IList<string> Field14List {

+          get { return pbc::Lists.AsReadOnly(field14_); }

+        }

+        public int Field14Count {

+          get { return field14_.Count; }

+        }

+        public string GetField14(int index) {

+          return field14_[index];

+        }

+        

+        public const int Field15FieldNumber = 15;

+        private bool hasField15;

+        private ulong field15_;

+        public bool HasField15 {

+          get { return hasField15; }

+        }

+        [global::System.CLSCompliant(false)]

+        public ulong Field15 {

+          get { return field15_; }

+        }

+        

+        public const int Field5FieldNumber = 5;

+        private bool hasField5;

+        private int field5_;

+        public bool HasField5 {

+          get { return hasField5; }

+        }

+        public int Field5 {

+          get { return field5_; }

+        }

+        

+        public const int Field27FieldNumber = 27;

+        private bool hasField27;

+        private string field27_ = "";

+        public bool HasField27 {

+          get { return hasField27; }

+        }

+        public string Field27 {

+          get { return field27_; }

+        }

+        

+        public const int Field28FieldNumber = 28;

+        private bool hasField28;

+        private int field28_;

+        public bool HasField28 {

+          get { return hasField28; }

+        }

+        public int Field28 {

+          get { return field28_; }

+        }

+        

+        public const int Field29FieldNumber = 29;

+        private bool hasField29;

+        private string field29_ = "";

+        public bool HasField29 {

+          get { return hasField29; }

+        }

+        public string Field29 {

+          get { return field29_; }

+        }

+        

+        public const int Field16FieldNumber = 16;

+        private bool hasField16;

+        private string field16_ = "";

+        public bool HasField16 {

+          get { return hasField16; }

+        }

+        public string Field16 {

+          get { return field16_; }

+        }

+        

+        public const int Field22FieldNumber = 22;

+        private pbc::PopsicleList<string> field22_ = new pbc::PopsicleList<string>();

+        public scg::IList<string> Field22List {

+          get { return pbc::Lists.AsReadOnly(field22_); }

+        }

+        public int Field22Count {

+          get { return field22_.Count; }

+        }

+        public string GetField22(int index) {

+          return field22_[index];

+        }

+        

+        public const int Field73FieldNumber = 73;

+        private pbc::PopsicleList<int> field73_ = new pbc::PopsicleList<int>();

+        public scg::IList<int> Field73List {

+          get { return pbc::Lists.AsReadOnly(field73_); }

+        }

+        public int Field73Count {

+          get { return field73_.Count; }

+        }

+        public int GetField73(int index) {

+          return field73_[index];

+        }

+        

+        public const int Field20FieldNumber = 20;

+        private bool hasField20;

+        private int field20_;

+        public bool HasField20 {

+          get { return hasField20; }

+        }

+        public int Field20 {

+          get { return field20_; }

+        }

+        

+        public const int Field24FieldNumber = 24;

+        private bool hasField24;

+        private string field24_ = "";

+        public bool HasField24 {

+          get { return hasField24; }

+        }

+        public string Field24 {

+          get { return field24_; }

+        }

+        

+        public const int Field31FieldNumber = 31;

+        private bool hasField31;

+        private global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage field31_;

+        public bool HasField31 {

+          get { return hasField31; }

+        }

+        public global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage Field31 {

+          get { return field31_ ?? global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage.DefaultInstance; }

+        }

+        

+        public static Group1 ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Group1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Group1 ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Group1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Group1 ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Group1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Group1 ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Group1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Group1 ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Group1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Group1 MakeReadOnly() {

+          field14_.MakeReadOnly();

+          field22_.MakeReadOnly();

+          field73_.MakeReadOnly();

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Group1 prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Group1, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Group1 cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Group1 result;

+          

+          private Group1 PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Group1 original = result;

+              result = new Group1();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Group1 MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1.Descriptor; }

+          }

+          

+          public override Group1 DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1.DefaultInstance; }

+          }

+          

+          public override Group1 BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          

+          public bool HasField11 {

+            get { return result.hasField11; }

+          }

+          public float Field11 {

+            get { return result.Field11; }

+            set { SetField11(value); }

+          }

+          public Builder SetField11(float value) {

+            PrepareBuilder();

+            result.hasField11 = true;

+            result.field11_ = value;

+            return this;

+          }

+          public Builder ClearField11() {

+            PrepareBuilder();

+            result.hasField11 = false;

+            result.field11_ = 0F;

+            return this;

+          }

+          

+          public bool HasField26 {

+            get { return result.hasField26; }

+          }

+          public float Field26 {

+            get { return result.Field26; }

+            set { SetField26(value); }

+          }

+          public Builder SetField26(float value) {

+            PrepareBuilder();

+            result.hasField26 = true;

+            result.field26_ = value;

+            return this;

+          }

+          public Builder ClearField26() {

+            PrepareBuilder();

+            result.hasField26 = false;

+            result.field26_ = 0F;

+            return this;

+          }

+          

+          public bool HasField12 {

+            get { return result.hasField12; }

+          }

+          public string Field12 {

+            get { return result.Field12; }

+            set { SetField12(value); }

+          }

+          public Builder SetField12(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField12 = true;

+            result.field12_ = value;

+            return this;

+          }

+          public Builder ClearField12() {

+            PrepareBuilder();

+            result.hasField12 = false;

+            result.field12_ = "";

+            return this;

+          }

+          

+          public bool HasField13 {

+            get { return result.hasField13; }

+          }

+          public string Field13 {

+            get { return result.Field13; }

+            set { SetField13(value); }

+          }

+          public Builder SetField13(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField13 = true;

+            result.field13_ = value;

+            return this;

+          }

+          public Builder ClearField13() {

+            PrepareBuilder();

+            result.hasField13 = false;

+            result.field13_ = "";

+            return this;

+          }

+          

+          public pbc::IPopsicleList<string> Field14List {

+            get { return PrepareBuilder().field14_; }

+          }

+          public int Field14Count {

+            get { return result.Field14Count; }

+          }

+          public string GetField14(int index) {

+            return result.GetField14(index);

+          }

+          public Builder SetField14(int index, string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field14_[index] = value;

+            return this;

+          }

+          public Builder AddField14(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field14_.Add(value);

+            return this;

+          }

+          public Builder AddRangeField14(scg::IEnumerable<string> values) {

+            PrepareBuilder();

+            result.field14_.Add(values);

+            return this;

+          }

+          public Builder ClearField14() {

+            PrepareBuilder();

+            result.field14_.Clear();

+            return this;

+          }

+          

+          public bool HasField15 {

+            get { return result.hasField15; }

+          }

+          [global::System.CLSCompliant(false)]

+          public ulong Field15 {

+            get { return result.Field15; }

+            set { SetField15(value); }

+          }

+          [global::System.CLSCompliant(false)]

+          public Builder SetField15(ulong value) {

+            PrepareBuilder();

+            result.hasField15 = true;

+            result.field15_ = value;

+            return this;

+          }

+          public Builder ClearField15() {

+            PrepareBuilder();

+            result.hasField15 = false;

+            result.field15_ = 0UL;

+            return this;

+          }

+          

+          public bool HasField5 {

+            get { return result.hasField5; }

+          }

+          public int Field5 {

+            get { return result.Field5; }

+            set { SetField5(value); }

+          }

+          public Builder SetField5(int value) {

+            PrepareBuilder();

+            result.hasField5 = true;

+            result.field5_ = value;

+            return this;

+          }

+          public Builder ClearField5() {

+            PrepareBuilder();

+            result.hasField5 = false;

+            result.field5_ = 0;

+            return this;

+          }

+          

+          public bool HasField27 {

+            get { return result.hasField27; }

+          }

+          public string Field27 {

+            get { return result.Field27; }

+            set { SetField27(value); }

+          }

+          public Builder SetField27(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField27 = true;

+            result.field27_ = value;

+            return this;

+          }

+          public Builder ClearField27() {

+            PrepareBuilder();

+            result.hasField27 = false;

+            result.field27_ = "";

+            return this;

+          }

+          

+          public bool HasField28 {

+            get { return result.hasField28; }

+          }

+          public int Field28 {

+            get { return result.Field28; }

+            set { SetField28(value); }

+          }

+          public Builder SetField28(int value) {

+            PrepareBuilder();

+            result.hasField28 = true;

+            result.field28_ = value;

+            return this;

+          }

+          public Builder ClearField28() {

+            PrepareBuilder();

+            result.hasField28 = false;

+            result.field28_ = 0;

+            return this;

+          }

+          

+          public bool HasField29 {

+            get { return result.hasField29; }

+          }

+          public string Field29 {

+            get { return result.Field29; }

+            set { SetField29(value); }

+          }

+          public Builder SetField29(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField29 = true;

+            result.field29_ = value;

+            return this;

+          }

+          public Builder ClearField29() {

+            PrepareBuilder();

+            result.hasField29 = false;

+            result.field29_ = "";

+            return this;

+          }

+          

+          public bool HasField16 {

+            get { return result.hasField16; }

+          }

+          public string Field16 {

+            get { return result.Field16; }

+            set { SetField16(value); }

+          }

+          public Builder SetField16(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField16 = true;

+            result.field16_ = value;

+            return this;

+          }

+          public Builder ClearField16() {

+            PrepareBuilder();

+            result.hasField16 = false;

+            result.field16_ = "";

+            return this;

+          }

+          

+          public pbc::IPopsicleList<string> Field22List {

+            get { return PrepareBuilder().field22_; }

+          }

+          public int Field22Count {

+            get { return result.Field22Count; }

+          }

+          public string GetField22(int index) {

+            return result.GetField22(index);

+          }

+          public Builder SetField22(int index, string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field22_[index] = value;

+            return this;

+          }

+          public Builder AddField22(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field22_.Add(value);

+            return this;

+          }

+          public Builder AddRangeField22(scg::IEnumerable<string> values) {

+            PrepareBuilder();

+            result.field22_.Add(values);

+            return this;

+          }

+          public Builder ClearField22() {

+            PrepareBuilder();

+            result.field22_.Clear();

+            return this;

+          }

+          

+          public pbc::IPopsicleList<int> Field73List {

+            get { return PrepareBuilder().field73_; }

+          }

+          public int Field73Count {

+            get { return result.Field73Count; }

+          }

+          public int GetField73(int index) {

+            return result.GetField73(index);

+          }

+          public Builder SetField73(int index, int value) {

+            PrepareBuilder();

+            result.field73_[index] = value;

+            return this;

+          }

+          public Builder AddField73(int value) {

+            PrepareBuilder();

+            result.field73_.Add(value);

+            return this;

+          }

+          public Builder AddRangeField73(scg::IEnumerable<int> values) {

+            PrepareBuilder();

+            result.field73_.Add(values);

+            return this;

+          }

+          public Builder ClearField73() {

+            PrepareBuilder();

+            result.field73_.Clear();

+            return this;

+          }

+          

+          public bool HasField20 {

+            get { return result.hasField20; }

+          }

+          public int Field20 {

+            get { return result.Field20; }

+            set { SetField20(value); }

+          }

+          public Builder SetField20(int value) {

+            PrepareBuilder();

+            result.hasField20 = true;

+            result.field20_ = value;

+            return this;

+          }

+          public Builder ClearField20() {

+            PrepareBuilder();

+            result.hasField20 = false;

+            result.field20_ = 0;

+            return this;

+          }

+          

+          public bool HasField24 {

+            get { return result.hasField24; }

+          }

+          public string Field24 {

+            get { return result.Field24; }

+            set { SetField24(value); }

+          }

+          public Builder SetField24(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField24 = true;

+            result.field24_ = value;

+            return this;

+          }

+          public Builder ClearField24() {

+            PrepareBuilder();

+            result.hasField24 = false;

+            result.field24_ = "";

+            return this;

+          }

+          

+          public bool HasField31 {

+           get { return result.hasField31; }

+          }

+          public global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage Field31 {

+            get { return result.Field31; }

+            set { SetField31(value); }

+          }

+          public Builder SetField31(global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField31 = true;

+            result.field31_ = value;

+            return this;

+          }

+          public Builder SetField31(global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage.Builder builderForValue) {

+            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+            PrepareBuilder();

+            result.hasField31 = true;

+            result.field31_ = builderForValue.Build();

+            return this;

+          }

+          public Builder MergeField31(global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            if (result.hasField31 &&

+                result.field31_ != global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage.DefaultInstance) {

+                result.field31_ = global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage.CreateBuilder(result.field31_).MergeFrom(value).BuildPartial();

+            } else {

+              result.field31_ = value;

+            }

+            result.hasField31 = true;

+            return this;

+          }

+          public Builder ClearField31() {

+            PrepareBuilder();

+            result.hasField31 = false;

+            result.field31_ = null;

+            return this;

+          }

+        }

+        static Group1() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private string field1_ = "";

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public string Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private long field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public long Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field4FieldNumber = 4;

+    private bool hasField4;

+    private long field4_;

+    public bool HasField4 {

+      get { return hasField4; }

+    }

+    public long Field4 {

+      get { return field4_; }

+    }

+    

+    public const int Field30FieldNumber = 30;

+    private bool hasField30;

+    private long field30_;

+    public bool HasField30 {

+      get { return hasField30; }

+    }

+    public long Field30 {

+      get { return field30_; }

+    }

+    

+    public const int Field75FieldNumber = 75;

+    private bool hasField75;

+    private bool field75_;

+    public bool HasField75 {

+      get { return hasField75; }

+    }

+    public bool Field75 {

+      get { return field75_; }

+    }

+    

+    public const int Field6FieldNumber = 6;

+    private bool hasField6;

+    private string field6_ = "";

+    public bool HasField6 {

+      get { return hasField6; }

+    }

+    public string Field6 {

+      get { return field6_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private pb::ByteString field2_ = pb::ByteString.Empty;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public pb::ByteString Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field21FieldNumber = 21;

+    private bool hasField21;

+    private int field21_;

+    public bool HasField21 {

+      get { return hasField21; }

+    }

+    public int Field21 {

+      get { return field21_; }

+    }

+    

+    public const int Field71FieldNumber = 71;

+    private bool hasField71;

+    private int field71_;

+    public bool HasField71 {

+      get { return hasField71; }

+    }

+    public int Field71 {

+      get { return field71_; }

+    }

+    

+    public const int Field25FieldNumber = 25;

+    private bool hasField25;

+    private float field25_;

+    public bool HasField25 {

+      get { return hasField25; }

+    }

+    public float Field25 {

+      get { return field25_; }

+    }

+    

+    public const int Field109FieldNumber = 109;

+    private bool hasField109;

+    private int field109_;

+    public bool HasField109 {

+      get { return hasField109; }

+    }

+    public int Field109 {

+      get { return field109_; }

+    }

+    

+    public const int Field210FieldNumber = 210;

+    private bool hasField210;

+    private int field210_;

+    public bool HasField210 {

+      get { return hasField210; }

+    }

+    public int Field210 {

+      get { return field210_; }

+    }

+    

+    public const int Field211FieldNumber = 211;

+    private bool hasField211;

+    private int field211_;

+    public bool HasField211 {

+      get { return hasField211; }

+    }

+    public int Field211 {

+      get { return field211_; }

+    }

+    

+    public const int Field212FieldNumber = 212;

+    private bool hasField212;

+    private int field212_;

+    public bool HasField212 {

+      get { return hasField212; }

+    }

+    public int Field212 {

+      get { return field212_; }

+    }

+    

+    public const int Field213FieldNumber = 213;

+    private bool hasField213;

+    private int field213_;

+    public bool HasField213 {

+      get { return hasField213; }

+    }

+    public int Field213 {

+      get { return field213_; }

+    }

+    

+    public const int Field216FieldNumber = 216;

+    private bool hasField216;

+    private int field216_;

+    public bool HasField216 {

+      get { return hasField216; }

+    }

+    public int Field216 {

+      get { return field216_; }

+    }

+    

+    public const int Field217FieldNumber = 217;

+    private bool hasField217;

+    private int field217_;

+    public bool HasField217 {

+      get { return hasField217; }

+    }

+    public int Field217 {

+      get { return field217_; }

+    }

+    

+    public const int Field218FieldNumber = 218;

+    private bool hasField218;

+    private int field218_;

+    public bool HasField218 {

+      get { return hasField218; }

+    }

+    public int Field218 {

+      get { return field218_; }

+    }

+    

+    public const int Field220FieldNumber = 220;

+    private bool hasField220;

+    private int field220_;

+    public bool HasField220 {

+      get { return hasField220; }

+    }

+    public int Field220 {

+      get { return field220_; }

+    }

+    

+    public const int Field221FieldNumber = 221;

+    private bool hasField221;

+    private int field221_;

+    public bool HasField221 {

+      get { return hasField221; }

+    }

+    public int Field221 {

+      get { return field221_; }

+    }

+    

+    public const int Field222FieldNumber = 222;

+    private bool hasField222;

+    private float field222_;

+    public bool HasField222 {

+      get { return hasField222; }

+    }

+    public float Field222 {

+      get { return field222_; }

+    }

+    

+    public const int Field63FieldNumber = 63;

+    private bool hasField63;

+    private int field63_;

+    public bool HasField63 {

+      get { return hasField63; }

+    }

+    public int Field63 {

+      get { return field63_; }

+    }

+    

+    public const int Group1FieldNumber = 10;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1> group1_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1>();

+    public scg::IList<global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1> Group1List {

+      get { return group1_; }

+    }

+    public int Group1Count {

+      get { return group1_.Count; }

+    }

+    public global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1 GetGroup1(int index) {

+      return group1_[index];

+    }

+    

+    public const int Field128FieldNumber = 128;

+    private pbc::PopsicleList<string> field128_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> Field128List {

+      get { return pbc::Lists.AsReadOnly(field128_); }

+    }

+    public int Field128Count {

+      get { return field128_.Count; }

+    }

+    public string GetField128(int index) {

+      return field128_[index];

+    }

+    

+    public const int Field131FieldNumber = 131;

+    private bool hasField131;

+    private long field131_;

+    public bool HasField131 {

+      get { return hasField131; }

+    }

+    public long Field131 {

+      get { return field131_; }

+    }

+    

+    public const int Field127FieldNumber = 127;

+    private pbc::PopsicleList<string> field127_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> Field127List {

+      get { return pbc::Lists.AsReadOnly(field127_); }

+    }

+    public int Field127Count {

+      get { return field127_.Count; }

+    }

+    public string GetField127(int index) {

+      return field127_[index];

+    }

+    

+    public const int Field129FieldNumber = 129;

+    private bool hasField129;

+    private int field129_;

+    public bool HasField129 {

+      get { return hasField129; }

+    }

+    public int Field129 {

+      get { return field129_; }

+    }

+    

+    public const int Field130FieldNumber = 130;

+    private pbc::PopsicleList<long> field130_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> Field130List {

+      get { return pbc::Lists.AsReadOnly(field130_); }

+    }

+    public int Field130Count {

+      get { return field130_.Count; }

+    }

+    public long GetField130(int index) {

+      return field130_[index];

+    }

+    

+    public const int Field205FieldNumber = 205;

+    private bool hasField205;

+    private bool field205_;

+    public bool HasField205 {

+      get { return hasField205; }

+    }

+    public bool Field205 {

+      get { return field205_; }

+    }

+    

+    public const int Field206FieldNumber = 206;

+    private bool hasField206;

+    private bool field206_;

+    public bool HasField206 {

+      get { return hasField206; }

+    }

+    public bool Field206 {

+      get { return field206_; }

+    }

+    

+    public static SizeMessage2 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage2 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SizeMessage2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SizeMessage2 MakeReadOnly() {

+      group1_.MakeReadOnly();

+      field128_.MakeReadOnly();

+      field127_.MakeReadOnly();

+      field130_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SizeMessage2 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage2, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SizeMessage2 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SizeMessage2 result;

+      

+      private SizeMessage2 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SizeMessage2 original = result;

+          result = new SizeMessage2();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SizeMessage2 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Descriptor; }

+      }

+      

+      public override SizeMessage2 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.DefaultInstance; }

+      }

+      

+      public override SizeMessage2 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public string Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = "";

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public long Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(long value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0L;

+        return this;

+      }

+      

+      public bool HasField4 {

+        get { return result.hasField4; }

+      }

+      public long Field4 {

+        get { return result.Field4; }

+        set { SetField4(value); }

+      }

+      public Builder SetField4(long value) {

+        PrepareBuilder();

+        result.hasField4 = true;

+        result.field4_ = value;

+        return this;

+      }

+      public Builder ClearField4() {

+        PrepareBuilder();

+        result.hasField4 = false;

+        result.field4_ = 0L;

+        return this;

+      }

+      

+      public bool HasField30 {

+        get { return result.hasField30; }

+      }

+      public long Field30 {

+        get { return result.Field30; }

+        set { SetField30(value); }

+      }

+      public Builder SetField30(long value) {

+        PrepareBuilder();

+        result.hasField30 = true;

+        result.field30_ = value;

+        return this;

+      }

+      public Builder ClearField30() {

+        PrepareBuilder();

+        result.hasField30 = false;

+        result.field30_ = 0L;

+        return this;

+      }

+      

+      public bool HasField75 {

+        get { return result.hasField75; }

+      }

+      public bool Field75 {

+        get { return result.Field75; }

+        set { SetField75(value); }

+      }

+      public Builder SetField75(bool value) {

+        PrepareBuilder();

+        result.hasField75 = true;

+        result.field75_ = value;

+        return this;

+      }

+      public Builder ClearField75() {

+        PrepareBuilder();

+        result.hasField75 = false;

+        result.field75_ = false;

+        return this;

+      }

+      

+      public bool HasField6 {

+        get { return result.hasField6; }

+      }

+      public string Field6 {

+        get { return result.Field6; }

+        set { SetField6(value); }

+      }

+      public Builder SetField6(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField6 = true;

+        result.field6_ = value;

+        return this;

+      }

+      public Builder ClearField6() {

+        PrepareBuilder();

+        result.hasField6 = false;

+        result.field6_ = "";

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public pb::ByteString Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = pb::ByteString.Empty;

+        return this;

+      }

+      

+      public bool HasField21 {

+        get { return result.hasField21; }

+      }

+      public int Field21 {

+        get { return result.Field21; }

+        set { SetField21(value); }

+      }

+      public Builder SetField21(int value) {

+        PrepareBuilder();

+        result.hasField21 = true;

+        result.field21_ = value;

+        return this;

+      }

+      public Builder ClearField21() {

+        PrepareBuilder();

+        result.hasField21 = false;

+        result.field21_ = 0;

+        return this;

+      }

+      

+      public bool HasField71 {

+        get { return result.hasField71; }

+      }

+      public int Field71 {

+        get { return result.Field71; }

+        set { SetField71(value); }

+      }

+      public Builder SetField71(int value) {

+        PrepareBuilder();

+        result.hasField71 = true;

+        result.field71_ = value;

+        return this;

+      }

+      public Builder ClearField71() {

+        PrepareBuilder();

+        result.hasField71 = false;

+        result.field71_ = 0;

+        return this;

+      }

+      

+      public bool HasField25 {

+        get { return result.hasField25; }

+      }

+      public float Field25 {

+        get { return result.Field25; }

+        set { SetField25(value); }

+      }

+      public Builder SetField25(float value) {

+        PrepareBuilder();

+        result.hasField25 = true;

+        result.field25_ = value;

+        return this;

+      }

+      public Builder ClearField25() {

+        PrepareBuilder();

+        result.hasField25 = false;

+        result.field25_ = 0F;

+        return this;

+      }

+      

+      public bool HasField109 {

+        get { return result.hasField109; }

+      }

+      public int Field109 {

+        get { return result.Field109; }

+        set { SetField109(value); }

+      }

+      public Builder SetField109(int value) {

+        PrepareBuilder();

+        result.hasField109 = true;

+        result.field109_ = value;

+        return this;

+      }

+      public Builder ClearField109() {

+        PrepareBuilder();

+        result.hasField109 = false;

+        result.field109_ = 0;

+        return this;

+      }

+      

+      public bool HasField210 {

+        get { return result.hasField210; }

+      }

+      public int Field210 {

+        get { return result.Field210; }

+        set { SetField210(value); }

+      }

+      public Builder SetField210(int value) {

+        PrepareBuilder();

+        result.hasField210 = true;

+        result.field210_ = value;

+        return this;

+      }

+      public Builder ClearField210() {

+        PrepareBuilder();

+        result.hasField210 = false;

+        result.field210_ = 0;

+        return this;

+      }

+      

+      public bool HasField211 {

+        get { return result.hasField211; }

+      }

+      public int Field211 {

+        get { return result.Field211; }

+        set { SetField211(value); }

+      }

+      public Builder SetField211(int value) {

+        PrepareBuilder();

+        result.hasField211 = true;

+        result.field211_ = value;

+        return this;

+      }

+      public Builder ClearField211() {

+        PrepareBuilder();

+        result.hasField211 = false;

+        result.field211_ = 0;

+        return this;

+      }

+      

+      public bool HasField212 {

+        get { return result.hasField212; }

+      }

+      public int Field212 {

+        get { return result.Field212; }

+        set { SetField212(value); }

+      }

+      public Builder SetField212(int value) {

+        PrepareBuilder();

+        result.hasField212 = true;

+        result.field212_ = value;

+        return this;

+      }

+      public Builder ClearField212() {

+        PrepareBuilder();

+        result.hasField212 = false;

+        result.field212_ = 0;

+        return this;

+      }

+      

+      public bool HasField213 {

+        get { return result.hasField213; }

+      }

+      public int Field213 {

+        get { return result.Field213; }

+        set { SetField213(value); }

+      }

+      public Builder SetField213(int value) {

+        PrepareBuilder();

+        result.hasField213 = true;

+        result.field213_ = value;

+        return this;

+      }

+      public Builder ClearField213() {

+        PrepareBuilder();

+        result.hasField213 = false;

+        result.field213_ = 0;

+        return this;

+      }

+      

+      public bool HasField216 {

+        get { return result.hasField216; }

+      }

+      public int Field216 {

+        get { return result.Field216; }

+        set { SetField216(value); }

+      }

+      public Builder SetField216(int value) {

+        PrepareBuilder();

+        result.hasField216 = true;

+        result.field216_ = value;

+        return this;

+      }

+      public Builder ClearField216() {

+        PrepareBuilder();

+        result.hasField216 = false;

+        result.field216_ = 0;

+        return this;

+      }

+      

+      public bool HasField217 {

+        get { return result.hasField217; }

+      }

+      public int Field217 {

+        get { return result.Field217; }

+        set { SetField217(value); }

+      }

+      public Builder SetField217(int value) {

+        PrepareBuilder();

+        result.hasField217 = true;

+        result.field217_ = value;

+        return this;

+      }

+      public Builder ClearField217() {

+        PrepareBuilder();

+        result.hasField217 = false;

+        result.field217_ = 0;

+        return this;

+      }

+      

+      public bool HasField218 {

+        get { return result.hasField218; }

+      }

+      public int Field218 {

+        get { return result.Field218; }

+        set { SetField218(value); }

+      }

+      public Builder SetField218(int value) {

+        PrepareBuilder();

+        result.hasField218 = true;

+        result.field218_ = value;

+        return this;

+      }

+      public Builder ClearField218() {

+        PrepareBuilder();

+        result.hasField218 = false;

+        result.field218_ = 0;

+        return this;

+      }

+      

+      public bool HasField220 {

+        get { return result.hasField220; }

+      }

+      public int Field220 {

+        get { return result.Field220; }

+        set { SetField220(value); }

+      }

+      public Builder SetField220(int value) {

+        PrepareBuilder();

+        result.hasField220 = true;

+        result.field220_ = value;

+        return this;

+      }

+      public Builder ClearField220() {

+        PrepareBuilder();

+        result.hasField220 = false;

+        result.field220_ = 0;

+        return this;

+      }

+      

+      public bool HasField221 {

+        get { return result.hasField221; }

+      }

+      public int Field221 {

+        get { return result.Field221; }

+        set { SetField221(value); }

+      }

+      public Builder SetField221(int value) {

+        PrepareBuilder();

+        result.hasField221 = true;

+        result.field221_ = value;

+        return this;

+      }

+      public Builder ClearField221() {

+        PrepareBuilder();

+        result.hasField221 = false;

+        result.field221_ = 0;

+        return this;

+      }

+      

+      public bool HasField222 {

+        get { return result.hasField222; }

+      }

+      public float Field222 {

+        get { return result.Field222; }

+        set { SetField222(value); }

+      }

+      public Builder SetField222(float value) {

+        PrepareBuilder();

+        result.hasField222 = true;

+        result.field222_ = value;

+        return this;

+      }

+      public Builder ClearField222() {

+        PrepareBuilder();

+        result.hasField222 = false;

+        result.field222_ = 0F;

+        return this;

+      }

+      

+      public bool HasField63 {

+        get { return result.hasField63; }

+      }

+      public int Field63 {

+        get { return result.Field63; }

+        set { SetField63(value); }

+      }

+      public Builder SetField63(int value) {

+        PrepareBuilder();

+        result.hasField63 = true;

+        result.field63_ = value;

+        return this;

+      }

+      public Builder ClearField63() {

+        PrepareBuilder();

+        result.hasField63 = false;

+        result.field63_ = 0;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1> Group1List {

+        get { return PrepareBuilder().group1_; }

+      }

+      public int Group1Count {

+        get { return result.Group1Count; }

+      }

+      public global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1 GetGroup1(int index) {

+        return result.GetGroup1(index);

+      }

+      public Builder SetGroup1(int index, global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.group1_[index] = value;

+        return this;

+      }

+      public Builder SetGroup1(int index, global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.group1_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddGroup1(global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.group1_.Add(value);

+        return this;

+      }

+      public Builder AddGroup1(global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.group1_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeGroup1(scg::IEnumerable<global::Google.ProtocolBuffers.ProtoBench.SizeMessage2.Types.Group1> values) {

+        PrepareBuilder();

+        result.group1_.Add(values);

+        return this;

+      }

+      public Builder ClearGroup1() {

+        PrepareBuilder();

+        result.group1_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> Field128List {

+        get { return PrepareBuilder().field128_; }

+      }

+      public int Field128Count {

+        get { return result.Field128Count; }

+      }

+      public string GetField128(int index) {

+        return result.GetField128(index);

+      }

+      public Builder SetField128(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field128_[index] = value;

+        return this;

+      }

+      public Builder AddField128(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field128_.Add(value);

+        return this;

+      }

+      public Builder AddRangeField128(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.field128_.Add(values);

+        return this;

+      }

+      public Builder ClearField128() {

+        PrepareBuilder();

+        result.field128_.Clear();

+        return this;

+      }

+      

+      public bool HasField131 {

+        get { return result.hasField131; }

+      }

+      public long Field131 {

+        get { return result.Field131; }

+        set { SetField131(value); }

+      }

+      public Builder SetField131(long value) {

+        PrepareBuilder();

+        result.hasField131 = true;

+        result.field131_ = value;

+        return this;

+      }

+      public Builder ClearField131() {

+        PrepareBuilder();

+        result.hasField131 = false;

+        result.field131_ = 0L;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> Field127List {

+        get { return PrepareBuilder().field127_; }

+      }

+      public int Field127Count {

+        get { return result.Field127Count; }

+      }

+      public string GetField127(int index) {

+        return result.GetField127(index);

+      }

+      public Builder SetField127(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field127_[index] = value;

+        return this;

+      }

+      public Builder AddField127(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field127_.Add(value);

+        return this;

+      }

+      public Builder AddRangeField127(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.field127_.Add(values);

+        return this;

+      }

+      public Builder ClearField127() {

+        PrepareBuilder();

+        result.field127_.Clear();

+        return this;

+      }

+      

+      public bool HasField129 {

+        get { return result.hasField129; }

+      }

+      public int Field129 {

+        get { return result.Field129; }

+        set { SetField129(value); }

+      }

+      public Builder SetField129(int value) {

+        PrepareBuilder();

+        result.hasField129 = true;

+        result.field129_ = value;

+        return this;

+      }

+      public Builder ClearField129() {

+        PrepareBuilder();

+        result.hasField129 = false;

+        result.field129_ = 0;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> Field130List {

+        get { return PrepareBuilder().field130_; }

+      }

+      public int Field130Count {

+        get { return result.Field130Count; }

+      }

+      public long GetField130(int index) {

+        return result.GetField130(index);

+      }

+      public Builder SetField130(int index, long value) {

+        PrepareBuilder();

+        result.field130_[index] = value;

+        return this;

+      }

+      public Builder AddField130(long value) {

+        PrepareBuilder();

+        result.field130_.Add(value);

+        return this;

+      }

+      public Builder AddRangeField130(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.field130_.Add(values);

+        return this;

+      }

+      public Builder ClearField130() {

+        PrepareBuilder();

+        result.field130_.Clear();

+        return this;

+      }

+      

+      public bool HasField205 {

+        get { return result.hasField205; }

+      }

+      public bool Field205 {

+        get { return result.Field205; }

+        set { SetField205(value); }

+      }

+      public Builder SetField205(bool value) {

+        PrepareBuilder();

+        result.hasField205 = true;

+        result.field205_ = value;

+        return this;

+      }

+      public Builder ClearField205() {

+        PrepareBuilder();

+        result.hasField205 = false;

+        result.field205_ = false;

+        return this;

+      }

+      

+      public bool HasField206 {

+        get { return result.hasField206; }

+      }

+      public bool Field206 {

+        get { return result.Field206; }

+        set { SetField206(value); }

+      }

+      public Builder SetField206(bool value) {

+        PrepareBuilder();

+        result.hasField206 = true;

+        result.field206_ = value;

+        return this;

+      }

+      public Builder ClearField206() {

+        PrepareBuilder();

+        result.hasField206 = false;

+        result.field206_ = false;

+        return this;

+      }

+    }

+    static SizeMessage2() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SizeMessage2GroupedMessage : pb::GeneratedMessage<SizeMessage2GroupedMessage, SizeMessage2GroupedMessage.Builder> {

+    private SizeMessage2GroupedMessage() { }

+    private static readonly SizeMessage2GroupedMessage defaultInstance = new SizeMessage2GroupedMessage().MakeReadOnly();

+    public static SizeMessage2GroupedMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SizeMessage2GroupedMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SizeMessage2GroupedMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.internal__static_benchmarks_SizeMessage2GroupedMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage2GroupedMessage, SizeMessage2GroupedMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.internal__static_benchmarks_SizeMessage2GroupedMessage__FieldAccessorTable; }

+    }

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private float field1_;

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public float Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private float field2_;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public float Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private float field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public float Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field4FieldNumber = 4;

+    private bool hasField4;

+    private bool field4_;

+    public bool HasField4 {

+      get { return hasField4; }

+    }

+    public bool Field4 {

+      get { return field4_; }

+    }

+    

+    public const int Field5FieldNumber = 5;

+    private bool hasField5;

+    private bool field5_;

+    public bool HasField5 {

+      get { return hasField5; }

+    }

+    public bool Field5 {

+      get { return field5_; }

+    }

+    

+    public const int Field6FieldNumber = 6;

+    private bool hasField6;

+    private bool field6_ = true;

+    public bool HasField6 {

+      get { return hasField6; }

+    }

+    public bool Field6 {

+      get { return field6_; }

+    }

+    

+    public const int Field7FieldNumber = 7;

+    private bool hasField7;

+    private bool field7_;

+    public bool HasField7 {

+      get { return hasField7; }

+    }

+    public bool Field7 {

+      get { return field7_; }

+    }

+    

+    public const int Field8FieldNumber = 8;

+    private bool hasField8;

+    private float field8_;

+    public bool HasField8 {

+      get { return hasField8; }

+    }

+    public float Field8 {

+      get { return field8_; }

+    }

+    

+    public const int Field9FieldNumber = 9;

+    private bool hasField9;

+    private bool field9_;

+    public bool HasField9 {

+      get { return hasField9; }

+    }

+    public bool Field9 {

+      get { return field9_; }

+    }

+    

+    public const int Field10FieldNumber = 10;

+    private bool hasField10;

+    private float field10_;

+    public bool HasField10 {

+      get { return hasField10; }

+    }

+    public float Field10 {

+      get { return field10_; }

+    }

+    

+    public const int Field11FieldNumber = 11;

+    private bool hasField11;

+    private long field11_;

+    public bool HasField11 {

+      get { return hasField11; }

+    }

+    public long Field11 {

+      get { return field11_; }

+    }

+    

+    public static SizeMessage2GroupedMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SizeMessage2GroupedMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SizeMessage2GroupedMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage2GroupedMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SizeMessage2GroupedMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SizeMessage2GroupedMessage result;

+      

+      private SizeMessage2GroupedMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SizeMessage2GroupedMessage original = result;

+          result = new SizeMessage2GroupedMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SizeMessage2GroupedMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage.Descriptor; }

+      }

+      

+      public override SizeMessage2GroupedMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SizeMessage2GroupedMessage.DefaultInstance; }

+      }

+      

+      public override SizeMessage2GroupedMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public float Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(float value) {

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = 0F;

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public float Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(float value) {

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = 0F;

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public float Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(float value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0F;

+        return this;

+      }

+      

+      public bool HasField4 {

+        get { return result.hasField4; }

+      }

+      public bool Field4 {

+        get { return result.Field4; }

+        set { SetField4(value); }

+      }

+      public Builder SetField4(bool value) {

+        PrepareBuilder();

+        result.hasField4 = true;

+        result.field4_ = value;

+        return this;

+      }

+      public Builder ClearField4() {

+        PrepareBuilder();

+        result.hasField4 = false;

+        result.field4_ = false;

+        return this;

+      }

+      

+      public bool HasField5 {

+        get { return result.hasField5; }

+      }

+      public bool Field5 {

+        get { return result.Field5; }

+        set { SetField5(value); }

+      }

+      public Builder SetField5(bool value) {

+        PrepareBuilder();

+        result.hasField5 = true;

+        result.field5_ = value;

+        return this;

+      }

+      public Builder ClearField5() {

+        PrepareBuilder();

+        result.hasField5 = false;

+        result.field5_ = false;

+        return this;

+      }

+      

+      public bool HasField6 {

+        get { return result.hasField6; }

+      }

+      public bool Field6 {

+        get { return result.Field6; }

+        set { SetField6(value); }

+      }

+      public Builder SetField6(bool value) {

+        PrepareBuilder();

+        result.hasField6 = true;

+        result.field6_ = value;

+        return this;

+      }

+      public Builder ClearField6() {

+        PrepareBuilder();

+        result.hasField6 = false;

+        result.field6_ = true;

+        return this;

+      }

+      

+      public bool HasField7 {

+        get { return result.hasField7; }

+      }

+      public bool Field7 {

+        get { return result.Field7; }

+        set { SetField7(value); }

+      }

+      public Builder SetField7(bool value) {

+        PrepareBuilder();

+        result.hasField7 = true;

+        result.field7_ = value;

+        return this;

+      }

+      public Builder ClearField7() {

+        PrepareBuilder();

+        result.hasField7 = false;

+        result.field7_ = false;

+        return this;

+      }

+      

+      public bool HasField8 {

+        get { return result.hasField8; }

+      }

+      public float Field8 {

+        get { return result.Field8; }

+        set { SetField8(value); }

+      }

+      public Builder SetField8(float value) {

+        PrepareBuilder();

+        result.hasField8 = true;

+        result.field8_ = value;

+        return this;

+      }

+      public Builder ClearField8() {

+        PrepareBuilder();

+        result.hasField8 = false;

+        result.field8_ = 0F;

+        return this;

+      }

+      

+      public bool HasField9 {

+        get { return result.hasField9; }

+      }

+      public bool Field9 {

+        get { return result.Field9; }

+        set { SetField9(value); }

+      }

+      public Builder SetField9(bool value) {

+        PrepareBuilder();

+        result.hasField9 = true;

+        result.field9_ = value;

+        return this;

+      }

+      public Builder ClearField9() {

+        PrepareBuilder();

+        result.hasField9 = false;

+        result.field9_ = false;

+        return this;

+      }

+      

+      public bool HasField10 {

+        get { return result.hasField10; }

+      }

+      public float Field10 {

+        get { return result.Field10; }

+        set { SetField10(value); }

+      }

+      public Builder SetField10(float value) {

+        PrepareBuilder();

+        result.hasField10 = true;

+        result.field10_ = value;

+        return this;

+      }

+      public Builder ClearField10() {

+        PrepareBuilder();

+        result.hasField10 = false;

+        result.field10_ = 0F;

+        return this;

+      }

+      

+      public bool HasField11 {

+        get { return result.hasField11; }

+      }

+      public long Field11 {

+        get { return result.Field11; }

+        set { SetField11(value); }

+      }

+      public Builder SetField11(long value) {

+        PrepareBuilder();

+        result.hasField11 = true;

+        result.field11_ = value;

+        return this;

+      }

+      public Builder ClearField11() {

+        PrepareBuilder();

+        result.hasField11 = false;

+        result.field11_ = 0L;

+        return this;

+      }

+    }

+    static SizeMessage2GroupedMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.ProtoBench.GoogleSizeProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtoBench/TestProtos/GoogleSpeedProtoFile.cs b/csharp/src/ProtoBench/TestProtos/GoogleSpeedProtoFile.cs
new file mode 100644
index 0000000..3a18950
--- /dev/null
+++ b/csharp/src/ProtoBench/TestProtos/GoogleSpeedProtoFile.cs
@@ -0,0 +1,6637 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.ProtoBench {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class GoogleSpeedProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_benchmarks_SpeedMessage1__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1.Builder> internal__static_benchmarks_SpeedMessage1__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_benchmarks_SpeedMessage1SubMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage.Builder> internal__static_benchmarks_SpeedMessage1SubMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_benchmarks_SpeedMessage2__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Builder> internal__static_benchmarks_SpeedMessage2__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_benchmarks_SpeedMessage2_Group1__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1.Builder> internal__static_benchmarks_SpeedMessage2_Group1__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_benchmarks_SpeedMessage2GroupedMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage.Builder> internal__static_benchmarks_SpeedMessage2GroupedMessage__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static GoogleSpeedProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "Ch1iZW5jaG1hcmtzL2dvb2dsZV9zcGVlZC5wcm90bxIKYmVuY2htYXJrcxok", 

+            "Z29vZ2xlL3Byb3RvYnVmL2NzaGFycF9vcHRpb25zLnByb3RvIvgGCg1TcGVl", 

+            "ZE1lc3NhZ2UxEg4KBmZpZWxkMRgBIAIoCRIOCgZmaWVsZDkYCSABKAkSDwoH", 

+            "ZmllbGQxOBgSIAEoCRIWCgdmaWVsZDgwGFAgASgIOgVmYWxzZRIVCgdmaWVs", 

+            "ZDgxGFEgASgIOgR0cnVlEg4KBmZpZWxkMhgCIAIoBRIOCgZmaWVsZDMYAyAC", 

+            "KAUSEQoIZmllbGQyODAYmAIgASgFEhEKBmZpZWxkNhgGIAEoBToBMBIPCgdm", 

+            "aWVsZDIyGBYgASgDEg4KBmZpZWxkNBgEIAEoCRIOCgZmaWVsZDUYBSADKAYS", 

+            "FgoHZmllbGQ1ORg7IAEoCDoFZmFsc2USDgoGZmllbGQ3GAcgASgJEg8KB2Zp", 

+            "ZWxkMTYYECABKAUSFAoIZmllbGQxMzAYggEgASgFOgEwEhUKB2ZpZWxkMTIY", 

+            "DCABKAg6BHRydWUSFQoHZmllbGQxNxgRIAEoCDoEdHJ1ZRIVCgdmaWVsZDEz", 

+            "GA0gASgIOgR0cnVlEhUKB2ZpZWxkMTQYDiABKAg6BHRydWUSEwoIZmllbGQx", 

+            "MDQYaCABKAU6ATASEwoIZmllbGQxMDAYZCABKAU6ATASEwoIZmllbGQxMDEY", 

+            "ZSABKAU6ATASEAoIZmllbGQxMDIYZiABKAkSEAoIZmllbGQxMDMYZyABKAkS", 

+            "EgoHZmllbGQyORgdIAEoBToBMBIWCgdmaWVsZDMwGB4gASgIOgVmYWxzZRIT", 

+            "CgdmaWVsZDYwGDwgASgFOgItMRIVCghmaWVsZDI3MRiPAiABKAU6Ai0xEhUK", 

+            "CGZpZWxkMjcyGJACIAEoBToCLTESEQoIZmllbGQxNTAYlgEgASgFEhIKB2Zp", 

+            "ZWxkMjMYFyABKAU6ATASFgoHZmllbGQyNBgYIAEoCDoFZmFsc2USEgoHZmll", 

+            "bGQyNRgZIAEoBToBMBI0CgdmaWVsZDE1GA8gASgLMiMuYmVuY2htYXJrcy5T", 

+            "cGVlZE1lc3NhZ2UxU3ViTWVzc2FnZRIPCgdmaWVsZDc4GE4gASgIEhIKB2Zp", 

+            "ZWxkNjcYQyABKAU6ATASDwoHZmllbGQ2OBhEIAEoBRIUCghmaWVsZDEyOBiA", 

+            "ASABKAU6ATASKAoIZmllbGQxMjkYgQEgASgJOhV4eHh4eHh4eHh4eHh4eHh4", 

+            "eHh4eHgSFAoIZmllbGQxMzEYgwEgASgFOgEwIqIDChdTcGVlZE1lc3NhZ2Ux", 

+            "U3ViTWVzc2FnZRIRCgZmaWVsZDEYASABKAU6ATASEQoGZmllbGQyGAIgASgF", 

+            "OgEwEhEKBmZpZWxkMxgDIAEoBToBMBIPCgdmaWVsZDE1GA8gASgJEhUKB2Zp", 

+            "ZWxkMTIYDCABKAg6BHRydWUSDwoHZmllbGQxMxgNIAEoAxIPCgdmaWVsZDE0", 

+            "GA4gASgDEg8KB2ZpZWxkMTYYECABKAUSEgoHZmllbGQxORgTIAEoBToBMhIV", 

+            "CgdmaWVsZDIwGBQgASgIOgR0cnVlEhUKB2ZpZWxkMjgYHCABKAg6BHRydWUS", 

+            "DwoHZmllbGQyMRgVIAEoBhIPCgdmaWVsZDIyGBYgASgFEhYKB2ZpZWxkMjMY", 

+            "FyABKAg6BWZhbHNlEhgKCGZpZWxkMjA2GM4BIAEoCDoFZmFsc2USEQoIZmll", 

+            "bGQyMDMYywEgASgHEhEKCGZpZWxkMjA0GMwBIAEoBRIRCghmaWVsZDIwNRjN", 

+            "ASABKAkSEQoIZmllbGQyMDcYzwEgASgEEhEKCGZpZWxkMzAwGKwCIAEoBCLK", 

+            "BwoNU3BlZWRNZXNzYWdlMhIOCgZmaWVsZDEYASABKAkSDgoGZmllbGQzGAMg", 

+            "ASgDEg4KBmZpZWxkNBgEIAEoAxIPCgdmaWVsZDMwGB4gASgDEhYKB2ZpZWxk", 

+            "NzUYSyABKAg6BWZhbHNlEg4KBmZpZWxkNhgGIAEoCRIOCgZmaWVsZDIYAiAB", 

+            "KAwSEgoHZmllbGQyMRgVIAEoBToBMBIPCgdmaWVsZDcxGEcgASgFEg8KB2Zp", 

+            "ZWxkMjUYGSABKAISEwoIZmllbGQxMDkYbSABKAU6ATASFAoIZmllbGQyMTAY", 

+            "0gEgASgFOgEwEhQKCGZpZWxkMjExGNMBIAEoBToBMBIUCghmaWVsZDIxMhjU", 

+            "ASABKAU6ATASFAoIZmllbGQyMTMY1QEgASgFOgEwEhQKCGZpZWxkMjE2GNgB", 

+            "IAEoBToBMBIUCghmaWVsZDIxNxjZASABKAU6ATASFAoIZmllbGQyMTgY2gEg", 

+            "ASgFOgEwEhQKCGZpZWxkMjIwGNwBIAEoBToBMBIUCghmaWVsZDIyMRjdASAB", 

+            "KAU6ATASFAoIZmllbGQyMjIY3gEgASgCOgEwEg8KB2ZpZWxkNjMYPyABKAUS", 

+            "MAoGZ3JvdXAxGAogAygKMiAuYmVuY2htYXJrcy5TcGVlZE1lc3NhZ2UyLkdy", 

+            "b3VwMRIRCghmaWVsZDEyOBiAASADKAkSEQoIZmllbGQxMzEYgwEgASgDEhAK", 

+            "CGZpZWxkMTI3GH8gAygJEhEKCGZpZWxkMTI5GIEBIAEoBRIRCghmaWVsZDEz", 

+            "MBiCASADKAMSGAoIZmllbGQyMDUYzQEgASgIOgVmYWxzZRIYCghmaWVsZDIw", 

+            "NhjOASABKAg6BWZhbHNlGsMCCgZHcm91cDESDwoHZmllbGQxMRgLIAIoAhIP", 

+            "CgdmaWVsZDI2GBogASgCEg8KB2ZpZWxkMTIYDCABKAkSDwoHZmllbGQxMxgN", 

+            "IAEoCRIPCgdmaWVsZDE0GA4gAygJEg8KB2ZpZWxkMTUYDyACKAQSDgoGZmll", 

+            "bGQ1GAUgASgFEg8KB2ZpZWxkMjcYGyABKAkSDwoHZmllbGQyOBgcIAEoBRIP", 

+            "CgdmaWVsZDI5GB0gASgJEg8KB2ZpZWxkMTYYECABKAkSDwoHZmllbGQyMhgW", 

+            "IAMoCRIPCgdmaWVsZDczGEkgAygFEhIKB2ZpZWxkMjAYFCABKAU6ATASDwoH", 

+            "ZmllbGQyNBgYIAEoCRI4CgdmaWVsZDMxGB8gASgLMicuYmVuY2htYXJrcy5T", 

+            "cGVlZE1lc3NhZ2UyR3JvdXBlZE1lc3NhZ2Ui3wEKG1NwZWVkTWVzc2FnZTJH", 

+            "cm91cGVkTWVzc2FnZRIOCgZmaWVsZDEYASABKAISDgoGZmllbGQyGAIgASgC", 

+            "EhEKBmZpZWxkMxgDIAEoAjoBMBIOCgZmaWVsZDQYBCABKAgSDgoGZmllbGQ1", 

+            "GAUgASgIEhQKBmZpZWxkNhgGIAEoCDoEdHJ1ZRIVCgZmaWVsZDcYByABKAg6", 

+            "BWZhbHNlEg4KBmZpZWxkOBgIIAEoAhIOCgZmaWVsZDkYCSABKAgSDwoHZmll", 

+            "bGQxMBgKIAEoAhIPCgdmaWVsZDExGAsgASgDQktCC0dvb2dsZVNwZWVkSAHC", 

+            "PjkKIUdvb2dsZS5Qcm90b2NvbEJ1ZmZlcnMuUHJvdG9CZW5jaBIUR29vZ2xl", 

+          "U3BlZWRQcm90b0ZpbGU="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_benchmarks_SpeedMessage1__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_benchmarks_SpeedMessage1__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1.Builder>(internal__static_benchmarks_SpeedMessage1__Descriptor,

+                new string[] { "Field1", "Field9", "Field18", "Field80", "Field81", "Field2", "Field3", "Field280", "Field6", "Field22", "Field4", "Field5", "Field59", "Field7", "Field16", "Field130", "Field12", "Field17", "Field13", "Field14", "Field104", "Field100", "Field101", "Field102", "Field103", "Field29", "Field30", "Field60", "Field271", "Field272", "Field150", "Field23", "Field24", "Field25", "Field15", "Field78", "Field67", "Field68", "Field128", "Field129", "Field131", });

+        internal__static_benchmarks_SpeedMessage1SubMessage__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_benchmarks_SpeedMessage1SubMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage.Builder>(internal__static_benchmarks_SpeedMessage1SubMessage__Descriptor,

+                new string[] { "Field1", "Field2", "Field3", "Field15", "Field12", "Field13", "Field14", "Field16", "Field19", "Field20", "Field28", "Field21", "Field22", "Field23", "Field206", "Field203", "Field204", "Field205", "Field207", "Field300", });

+        internal__static_benchmarks_SpeedMessage2__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_benchmarks_SpeedMessage2__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Builder>(internal__static_benchmarks_SpeedMessage2__Descriptor,

+                new string[] { "Field1", "Field3", "Field4", "Field30", "Field75", "Field6", "Field2", "Field21", "Field71", "Field25", "Field109", "Field210", "Field211", "Field212", "Field213", "Field216", "Field217", "Field218", "Field220", "Field221", "Field222", "Field63", "Group1", "Field128", "Field131", "Field127", "Field129", "Field130", "Field205", "Field206", });

+        internal__static_benchmarks_SpeedMessage2_Group1__Descriptor = internal__static_benchmarks_SpeedMessage2__Descriptor.NestedTypes[0];

+        internal__static_benchmarks_SpeedMessage2_Group1__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1.Builder>(internal__static_benchmarks_SpeedMessage2_Group1__Descriptor,

+                new string[] { "Field11", "Field26", "Field12", "Field13", "Field14", "Field15", "Field5", "Field27", "Field28", "Field29", "Field16", "Field22", "Field73", "Field20", "Field24", "Field31", });

+        internal__static_benchmarks_SpeedMessage2GroupedMessage__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_benchmarks_SpeedMessage2GroupedMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage.Builder>(internal__static_benchmarks_SpeedMessage2GroupedMessage__Descriptor,

+                new string[] { "Field1", "Field2", "Field3", "Field4", "Field5", "Field6", "Field7", "Field8", "Field9", "Field10", "Field11", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SpeedMessage1 : pb::GeneratedMessage<SpeedMessage1, SpeedMessage1.Builder> {

+    private SpeedMessage1() { }

+    private static readonly SpeedMessage1 defaultInstance = new SpeedMessage1().MakeReadOnly();

+    private static readonly string[] _speedMessage1FieldNames = new string[] { "field1", "field100", "field101", "field102", "field103", "field104", "field12", "field128", "field129", "field13", "field130", "field131", "field14", "field15", "field150", "field16", "field17", "field18", "field2", "field22", "field23", "field24", "field25", "field271", "field272", "field280", "field29", "field3", "field30", "field4", "field5", "field59", "field6", "field60", "field67", "field68", "field7", "field78", "field80", "field81", "field9" };

+    private static readonly uint[] _speedMessage1FieldTags = new uint[] { 10, 800, 808, 818, 826, 832, 96, 1024, 1034, 104, 1040, 1048, 112, 122, 1200, 128, 136, 146, 16, 176, 184, 192, 200, 2168, 2176, 2240, 232, 24, 240, 34, 41, 472, 48, 480, 536, 544, 58, 624, 640, 648, 74 };

+    public static SpeedMessage1 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SpeedMessage1 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SpeedMessage1 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage1__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage1, SpeedMessage1.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage1__FieldAccessorTable; }

+    }

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private string field1_ = "";

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public string Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field9FieldNumber = 9;

+    private bool hasField9;

+    private string field9_ = "";

+    public bool HasField9 {

+      get { return hasField9; }

+    }

+    public string Field9 {

+      get { return field9_; }

+    }

+    

+    public const int Field18FieldNumber = 18;

+    private bool hasField18;

+    private string field18_ = "";

+    public bool HasField18 {

+      get { return hasField18; }

+    }

+    public string Field18 {

+      get { return field18_; }

+    }

+    

+    public const int Field80FieldNumber = 80;

+    private bool hasField80;

+    private bool field80_;

+    public bool HasField80 {

+      get { return hasField80; }

+    }

+    public bool Field80 {

+      get { return field80_; }

+    }

+    

+    public const int Field81FieldNumber = 81;

+    private bool hasField81;

+    private bool field81_ = true;

+    public bool HasField81 {

+      get { return hasField81; }

+    }

+    public bool Field81 {

+      get { return field81_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private int field2_;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public int Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private int field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public int Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field280FieldNumber = 280;

+    private bool hasField280;

+    private int field280_;

+    public bool HasField280 {

+      get { return hasField280; }

+    }

+    public int Field280 {

+      get { return field280_; }

+    }

+    

+    public const int Field6FieldNumber = 6;

+    private bool hasField6;

+    private int field6_;

+    public bool HasField6 {

+      get { return hasField6; }

+    }

+    public int Field6 {

+      get { return field6_; }

+    }

+    

+    public const int Field22FieldNumber = 22;

+    private bool hasField22;

+    private long field22_;

+    public bool HasField22 {

+      get { return hasField22; }

+    }

+    public long Field22 {

+      get { return field22_; }

+    }

+    

+    public const int Field4FieldNumber = 4;

+    private bool hasField4;

+    private string field4_ = "";

+    public bool HasField4 {

+      get { return hasField4; }

+    }

+    public string Field4 {

+      get { return field4_; }

+    }

+    

+    public const int Field5FieldNumber = 5;

+    private pbc::PopsicleList<ulong> field5_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> Field5List {

+      get { return pbc::Lists.AsReadOnly(field5_); }

+    }

+    public int Field5Count {

+      get { return field5_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetField5(int index) {

+      return field5_[index];

+    }

+    

+    public const int Field59FieldNumber = 59;

+    private bool hasField59;

+    private bool field59_;

+    public bool HasField59 {

+      get { return hasField59; }

+    }

+    public bool Field59 {

+      get { return field59_; }

+    }

+    

+    public const int Field7FieldNumber = 7;

+    private bool hasField7;

+    private string field7_ = "";

+    public bool HasField7 {

+      get { return hasField7; }

+    }

+    public string Field7 {

+      get { return field7_; }

+    }

+    

+    public const int Field16FieldNumber = 16;

+    private bool hasField16;

+    private int field16_;

+    public bool HasField16 {

+      get { return hasField16; }

+    }

+    public int Field16 {

+      get { return field16_; }

+    }

+    

+    public const int Field130FieldNumber = 130;

+    private bool hasField130;

+    private int field130_;

+    public bool HasField130 {

+      get { return hasField130; }

+    }

+    public int Field130 {

+      get { return field130_; }

+    }

+    

+    public const int Field12FieldNumber = 12;

+    private bool hasField12;

+    private bool field12_ = true;

+    public bool HasField12 {

+      get { return hasField12; }

+    }

+    public bool Field12 {

+      get { return field12_; }

+    }

+    

+    public const int Field17FieldNumber = 17;

+    private bool hasField17;

+    private bool field17_ = true;

+    public bool HasField17 {

+      get { return hasField17; }

+    }

+    public bool Field17 {

+      get { return field17_; }

+    }

+    

+    public const int Field13FieldNumber = 13;

+    private bool hasField13;

+    private bool field13_ = true;

+    public bool HasField13 {

+      get { return hasField13; }

+    }

+    public bool Field13 {

+      get { return field13_; }

+    }

+    

+    public const int Field14FieldNumber = 14;

+    private bool hasField14;

+    private bool field14_ = true;

+    public bool HasField14 {

+      get { return hasField14; }

+    }

+    public bool Field14 {

+      get { return field14_; }

+    }

+    

+    public const int Field104FieldNumber = 104;

+    private bool hasField104;

+    private int field104_;

+    public bool HasField104 {

+      get { return hasField104; }

+    }

+    public int Field104 {

+      get { return field104_; }

+    }

+    

+    public const int Field100FieldNumber = 100;

+    private bool hasField100;

+    private int field100_;

+    public bool HasField100 {

+      get { return hasField100; }

+    }

+    public int Field100 {

+      get { return field100_; }

+    }

+    

+    public const int Field101FieldNumber = 101;

+    private bool hasField101;

+    private int field101_;

+    public bool HasField101 {

+      get { return hasField101; }

+    }

+    public int Field101 {

+      get { return field101_; }

+    }

+    

+    public const int Field102FieldNumber = 102;

+    private bool hasField102;

+    private string field102_ = "";

+    public bool HasField102 {

+      get { return hasField102; }

+    }

+    public string Field102 {

+      get { return field102_; }

+    }

+    

+    public const int Field103FieldNumber = 103;

+    private bool hasField103;

+    private string field103_ = "";

+    public bool HasField103 {

+      get { return hasField103; }

+    }

+    public string Field103 {

+      get { return field103_; }

+    }

+    

+    public const int Field29FieldNumber = 29;

+    private bool hasField29;

+    private int field29_;

+    public bool HasField29 {

+      get { return hasField29; }

+    }

+    public int Field29 {

+      get { return field29_; }

+    }

+    

+    public const int Field30FieldNumber = 30;

+    private bool hasField30;

+    private bool field30_;

+    public bool HasField30 {

+      get { return hasField30; }

+    }

+    public bool Field30 {

+      get { return field30_; }

+    }

+    

+    public const int Field60FieldNumber = 60;

+    private bool hasField60;

+    private int field60_ = -1;

+    public bool HasField60 {

+      get { return hasField60; }

+    }

+    public int Field60 {

+      get { return field60_; }

+    }

+    

+    public const int Field271FieldNumber = 271;

+    private bool hasField271;

+    private int field271_ = -1;

+    public bool HasField271 {

+      get { return hasField271; }

+    }

+    public int Field271 {

+      get { return field271_; }

+    }

+    

+    public const int Field272FieldNumber = 272;

+    private bool hasField272;

+    private int field272_ = -1;

+    public bool HasField272 {

+      get { return hasField272; }

+    }

+    public int Field272 {

+      get { return field272_; }

+    }

+    

+    public const int Field150FieldNumber = 150;

+    private bool hasField150;

+    private int field150_;

+    public bool HasField150 {

+      get { return hasField150; }

+    }

+    public int Field150 {

+      get { return field150_; }

+    }

+    

+    public const int Field23FieldNumber = 23;

+    private bool hasField23;

+    private int field23_;

+    public bool HasField23 {

+      get { return hasField23; }

+    }

+    public int Field23 {

+      get { return field23_; }

+    }

+    

+    public const int Field24FieldNumber = 24;

+    private bool hasField24;

+    private bool field24_;

+    public bool HasField24 {

+      get { return hasField24; }

+    }

+    public bool Field24 {

+      get { return field24_; }

+    }

+    

+    public const int Field25FieldNumber = 25;

+    private bool hasField25;

+    private int field25_;

+    public bool HasField25 {

+      get { return hasField25; }

+    }

+    public int Field25 {

+      get { return field25_; }

+    }

+    

+    public const int Field15FieldNumber = 15;

+    private bool hasField15;

+    private global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage field15_;

+    public bool HasField15 {

+      get { return hasField15; }

+    }

+    public global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage Field15 {

+      get { return field15_ ?? global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage.DefaultInstance; }

+    }

+    

+    public const int Field78FieldNumber = 78;

+    private bool hasField78;

+    private bool field78_;

+    public bool HasField78 {

+      get { return hasField78; }

+    }

+    public bool Field78 {

+      get { return field78_; }

+    }

+    

+    public const int Field67FieldNumber = 67;

+    private bool hasField67;

+    private int field67_;

+    public bool HasField67 {

+      get { return hasField67; }

+    }

+    public int Field67 {

+      get { return field67_; }

+    }

+    

+    public const int Field68FieldNumber = 68;

+    private bool hasField68;

+    private int field68_;

+    public bool HasField68 {

+      get { return hasField68; }

+    }

+    public int Field68 {

+      get { return field68_; }

+    }

+    

+    public const int Field128FieldNumber = 128;

+    private bool hasField128;

+    private int field128_;

+    public bool HasField128 {

+      get { return hasField128; }

+    }

+    public int Field128 {

+      get { return field128_; }

+    }

+    

+    public const int Field129FieldNumber = 129;

+    private bool hasField129;

+    private string field129_ = "xxxxxxxxxxxxxxxxxxxxx";

+    public bool HasField129 {

+      get { return hasField129; }

+    }

+    public string Field129 {

+      get { return field129_; }

+    }

+    

+    public const int Field131FieldNumber = 131;

+    private bool hasField131;

+    private int field131_;

+    public bool HasField131 {

+      get { return hasField131; }

+    }

+    public int Field131 {

+      get { return field131_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasField1) return false;

+        if (!hasField2) return false;

+        if (!hasField3) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _speedMessage1FieldNames;

+      if (hasField1) {

+        output.WriteString(1, field_names[0], Field1);

+      }

+      if (hasField2) {

+        output.WriteInt32(2, field_names[18], Field2);

+      }

+      if (hasField3) {

+        output.WriteInt32(3, field_names[27], Field3);

+      }

+      if (hasField4) {

+        output.WriteString(4, field_names[29], Field4);

+      }

+      if (field5_.Count > 0) {

+        output.WriteFixed64Array(5, field_names[30], field5_);

+      }

+      if (hasField6) {

+        output.WriteInt32(6, field_names[32], Field6);

+      }

+      if (hasField7) {

+        output.WriteString(7, field_names[36], Field7);

+      }

+      if (hasField9) {

+        output.WriteString(9, field_names[40], Field9);

+      }

+      if (hasField12) {

+        output.WriteBool(12, field_names[6], Field12);

+      }

+      if (hasField13) {

+        output.WriteBool(13, field_names[9], Field13);

+      }

+      if (hasField14) {

+        output.WriteBool(14, field_names[12], Field14);

+      }

+      if (hasField15) {

+        output.WriteMessage(15, field_names[13], Field15);

+      }

+      if (hasField16) {

+        output.WriteInt32(16, field_names[15], Field16);

+      }

+      if (hasField17) {

+        output.WriteBool(17, field_names[16], Field17);

+      }

+      if (hasField18) {

+        output.WriteString(18, field_names[17], Field18);

+      }

+      if (hasField22) {

+        output.WriteInt64(22, field_names[19], Field22);

+      }

+      if (hasField23) {

+        output.WriteInt32(23, field_names[20], Field23);

+      }

+      if (hasField24) {

+        output.WriteBool(24, field_names[21], Field24);

+      }

+      if (hasField25) {

+        output.WriteInt32(25, field_names[22], Field25);

+      }

+      if (hasField29) {

+        output.WriteInt32(29, field_names[26], Field29);

+      }

+      if (hasField30) {

+        output.WriteBool(30, field_names[28], Field30);

+      }

+      if (hasField59) {

+        output.WriteBool(59, field_names[31], Field59);

+      }

+      if (hasField60) {

+        output.WriteInt32(60, field_names[33], Field60);

+      }

+      if (hasField67) {

+        output.WriteInt32(67, field_names[34], Field67);

+      }

+      if (hasField68) {

+        output.WriteInt32(68, field_names[35], Field68);

+      }

+      if (hasField78) {

+        output.WriteBool(78, field_names[37], Field78);

+      }

+      if (hasField80) {

+        output.WriteBool(80, field_names[38], Field80);

+      }

+      if (hasField81) {

+        output.WriteBool(81, field_names[39], Field81);

+      }

+      if (hasField100) {

+        output.WriteInt32(100, field_names[1], Field100);

+      }

+      if (hasField101) {

+        output.WriteInt32(101, field_names[2], Field101);

+      }

+      if (hasField102) {

+        output.WriteString(102, field_names[3], Field102);

+      }

+      if (hasField103) {

+        output.WriteString(103, field_names[4], Field103);

+      }

+      if (hasField104) {

+        output.WriteInt32(104, field_names[5], Field104);

+      }

+      if (hasField128) {

+        output.WriteInt32(128, field_names[7], Field128);

+      }

+      if (hasField129) {

+        output.WriteString(129, field_names[8], Field129);

+      }

+      if (hasField130) {

+        output.WriteInt32(130, field_names[10], Field130);

+      }

+      if (hasField131) {

+        output.WriteInt32(131, field_names[11], Field131);

+      }

+      if (hasField150) {

+        output.WriteInt32(150, field_names[14], Field150);

+      }

+      if (hasField271) {

+        output.WriteInt32(271, field_names[23], Field271);

+      }

+      if (hasField272) {

+        output.WriteInt32(272, field_names[24], Field272);

+      }

+      if (hasField280) {

+        output.WriteInt32(280, field_names[25], Field280);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasField1) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Field1);

+      }

+      if (hasField9) {

+        size += pb::CodedOutputStream.ComputeStringSize(9, Field9);

+      }

+      if (hasField18) {

+        size += pb::CodedOutputStream.ComputeStringSize(18, Field18);

+      }

+      if (hasField80) {

+        size += pb::CodedOutputStream.ComputeBoolSize(80, Field80);

+      }

+      if (hasField81) {

+        size += pb::CodedOutputStream.ComputeBoolSize(81, Field81);

+      }

+      if (hasField2) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, Field2);

+      }

+      if (hasField3) {

+        size += pb::CodedOutputStream.ComputeInt32Size(3, Field3);

+      }

+      if (hasField280) {

+        size += pb::CodedOutputStream.ComputeInt32Size(280, Field280);

+      }

+      if (hasField6) {

+        size += pb::CodedOutputStream.ComputeInt32Size(6, Field6);

+      }

+      if (hasField22) {

+        size += pb::CodedOutputStream.ComputeInt64Size(22, Field22);

+      }

+      if (hasField4) {

+        size += pb::CodedOutputStream.ComputeStringSize(4, Field4);

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * field5_.Count;

+        size += dataSize;

+        size += 1 * field5_.Count;

+      }

+      if (hasField59) {

+        size += pb::CodedOutputStream.ComputeBoolSize(59, Field59);

+      }

+      if (hasField7) {

+        size += pb::CodedOutputStream.ComputeStringSize(7, Field7);

+      }

+      if (hasField16) {

+        size += pb::CodedOutputStream.ComputeInt32Size(16, Field16);

+      }

+      if (hasField130) {

+        size += pb::CodedOutputStream.ComputeInt32Size(130, Field130);

+      }

+      if (hasField12) {

+        size += pb::CodedOutputStream.ComputeBoolSize(12, Field12);

+      }

+      if (hasField17) {

+        size += pb::CodedOutputStream.ComputeBoolSize(17, Field17);

+      }

+      if (hasField13) {

+        size += pb::CodedOutputStream.ComputeBoolSize(13, Field13);

+      }

+      if (hasField14) {

+        size += pb::CodedOutputStream.ComputeBoolSize(14, Field14);

+      }

+      if (hasField104) {

+        size += pb::CodedOutputStream.ComputeInt32Size(104, Field104);

+      }

+      if (hasField100) {

+        size += pb::CodedOutputStream.ComputeInt32Size(100, Field100);

+      }

+      if (hasField101) {

+        size += pb::CodedOutputStream.ComputeInt32Size(101, Field101);

+      }

+      if (hasField102) {

+        size += pb::CodedOutputStream.ComputeStringSize(102, Field102);

+      }

+      if (hasField103) {

+        size += pb::CodedOutputStream.ComputeStringSize(103, Field103);

+      }

+      if (hasField29) {

+        size += pb::CodedOutputStream.ComputeInt32Size(29, Field29);

+      }

+      if (hasField30) {

+        size += pb::CodedOutputStream.ComputeBoolSize(30, Field30);

+      }

+      if (hasField60) {

+        size += pb::CodedOutputStream.ComputeInt32Size(60, Field60);

+      }

+      if (hasField271) {

+        size += pb::CodedOutputStream.ComputeInt32Size(271, Field271);

+      }

+      if (hasField272) {

+        size += pb::CodedOutputStream.ComputeInt32Size(272, Field272);

+      }

+      if (hasField150) {

+        size += pb::CodedOutputStream.ComputeInt32Size(150, Field150);

+      }

+      if (hasField23) {

+        size += pb::CodedOutputStream.ComputeInt32Size(23, Field23);

+      }

+      if (hasField24) {

+        size += pb::CodedOutputStream.ComputeBoolSize(24, Field24);

+      }

+      if (hasField25) {

+        size += pb::CodedOutputStream.ComputeInt32Size(25, Field25);

+      }

+      if (hasField15) {

+        size += pb::CodedOutputStream.ComputeMessageSize(15, Field15);

+      }

+      if (hasField78) {

+        size += pb::CodedOutputStream.ComputeBoolSize(78, Field78);

+      }

+      if (hasField67) {

+        size += pb::CodedOutputStream.ComputeInt32Size(67, Field67);

+      }

+      if (hasField68) {

+        size += pb::CodedOutputStream.ComputeInt32Size(68, Field68);

+      }

+      if (hasField128) {

+        size += pb::CodedOutputStream.ComputeInt32Size(128, Field128);

+      }

+      if (hasField129) {

+        size += pb::CodedOutputStream.ComputeStringSize(129, Field129);

+      }

+      if (hasField131) {

+        size += pb::CodedOutputStream.ComputeInt32Size(131, Field131);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SpeedMessage1 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SpeedMessage1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SpeedMessage1 MakeReadOnly() {

+      field5_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SpeedMessage1 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage1, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SpeedMessage1 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SpeedMessage1 result;

+      

+      private SpeedMessage1 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SpeedMessage1 original = result;

+          result = new SpeedMessage1();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SpeedMessage1 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1.Descriptor; }

+      }

+      

+      public override SpeedMessage1 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1.DefaultInstance; }

+      }

+      

+      public override SpeedMessage1 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SpeedMessage1) {

+          return MergeFrom((SpeedMessage1) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SpeedMessage1 other) {

+        if (other == global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasField1) {

+          Field1 = other.Field1;

+        }

+        if (other.HasField9) {

+          Field9 = other.Field9;

+        }

+        if (other.HasField18) {

+          Field18 = other.Field18;

+        }

+        if (other.HasField80) {

+          Field80 = other.Field80;

+        }

+        if (other.HasField81) {

+          Field81 = other.Field81;

+        }

+        if (other.HasField2) {

+          Field2 = other.Field2;

+        }

+        if (other.HasField3) {

+          Field3 = other.Field3;

+        }

+        if (other.HasField280) {

+          Field280 = other.Field280;

+        }

+        if (other.HasField6) {

+          Field6 = other.Field6;

+        }

+        if (other.HasField22) {

+          Field22 = other.Field22;

+        }

+        if (other.HasField4) {

+          Field4 = other.Field4;

+        }

+        if (other.field5_.Count != 0) {

+          result.field5_.Add(other.field5_);

+        }

+        if (other.HasField59) {

+          Field59 = other.Field59;

+        }

+        if (other.HasField7) {

+          Field7 = other.Field7;

+        }

+        if (other.HasField16) {

+          Field16 = other.Field16;

+        }

+        if (other.HasField130) {

+          Field130 = other.Field130;

+        }

+        if (other.HasField12) {

+          Field12 = other.Field12;

+        }

+        if (other.HasField17) {

+          Field17 = other.Field17;

+        }

+        if (other.HasField13) {

+          Field13 = other.Field13;

+        }

+        if (other.HasField14) {

+          Field14 = other.Field14;

+        }

+        if (other.HasField104) {

+          Field104 = other.Field104;

+        }

+        if (other.HasField100) {

+          Field100 = other.Field100;

+        }

+        if (other.HasField101) {

+          Field101 = other.Field101;

+        }

+        if (other.HasField102) {

+          Field102 = other.Field102;

+        }

+        if (other.HasField103) {

+          Field103 = other.Field103;

+        }

+        if (other.HasField29) {

+          Field29 = other.Field29;

+        }

+        if (other.HasField30) {

+          Field30 = other.Field30;

+        }

+        if (other.HasField60) {

+          Field60 = other.Field60;

+        }

+        if (other.HasField271) {

+          Field271 = other.Field271;

+        }

+        if (other.HasField272) {

+          Field272 = other.Field272;

+        }

+        if (other.HasField150) {

+          Field150 = other.Field150;

+        }

+        if (other.HasField23) {

+          Field23 = other.Field23;

+        }

+        if (other.HasField24) {

+          Field24 = other.Field24;

+        }

+        if (other.HasField25) {

+          Field25 = other.Field25;

+        }

+        if (other.HasField15) {

+          MergeField15(other.Field15);

+        }

+        if (other.HasField78) {

+          Field78 = other.Field78;

+        }

+        if (other.HasField67) {

+          Field67 = other.Field67;

+        }

+        if (other.HasField68) {

+          Field68 = other.Field68;

+        }

+        if (other.HasField128) {

+          Field128 = other.Field128;

+        }

+        if (other.HasField129) {

+          Field129 = other.Field129;

+        }

+        if (other.HasField131) {

+          Field131 = other.Field131;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_speedMessage1FieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _speedMessage1FieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasField1 = input.ReadString(ref result.field1_);

+              break;

+            }

+            case 16: {

+              result.hasField2 = input.ReadInt32(ref result.field2_);

+              break;

+            }

+            case 24: {

+              result.hasField3 = input.ReadInt32(ref result.field3_);

+              break;

+            }

+            case 34: {

+              result.hasField4 = input.ReadString(ref result.field4_);

+              break;

+            }

+            case 42:

+            case 41: {

+              input.ReadFixed64Array(tag, field_name, result.field5_);

+              break;

+            }

+            case 48: {

+              result.hasField6 = input.ReadInt32(ref result.field6_);

+              break;

+            }

+            case 58: {

+              result.hasField7 = input.ReadString(ref result.field7_);

+              break;

+            }

+            case 74: {

+              result.hasField9 = input.ReadString(ref result.field9_);

+              break;

+            }

+            case 96: {

+              result.hasField12 = input.ReadBool(ref result.field12_);

+              break;

+            }

+            case 104: {

+              result.hasField13 = input.ReadBool(ref result.field13_);

+              break;

+            }

+            case 112: {

+              result.hasField14 = input.ReadBool(ref result.field14_);

+              break;

+            }

+            case 122: {

+              global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage.Builder subBuilder = global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage.CreateBuilder();

+              if (result.hasField15) {

+                subBuilder.MergeFrom(Field15);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Field15 = subBuilder.BuildPartial();

+              break;

+            }

+            case 128: {

+              result.hasField16 = input.ReadInt32(ref result.field16_);

+              break;

+            }

+            case 136: {

+              result.hasField17 = input.ReadBool(ref result.field17_);

+              break;

+            }

+            case 146: {

+              result.hasField18 = input.ReadString(ref result.field18_);

+              break;

+            }

+            case 176: {

+              result.hasField22 = input.ReadInt64(ref result.field22_);

+              break;

+            }

+            case 184: {

+              result.hasField23 = input.ReadInt32(ref result.field23_);

+              break;

+            }

+            case 192: {

+              result.hasField24 = input.ReadBool(ref result.field24_);

+              break;

+            }

+            case 200: {

+              result.hasField25 = input.ReadInt32(ref result.field25_);

+              break;

+            }

+            case 232: {

+              result.hasField29 = input.ReadInt32(ref result.field29_);

+              break;

+            }

+            case 240: {

+              result.hasField30 = input.ReadBool(ref result.field30_);

+              break;

+            }

+            case 472: {

+              result.hasField59 = input.ReadBool(ref result.field59_);

+              break;

+            }

+            case 480: {

+              result.hasField60 = input.ReadInt32(ref result.field60_);

+              break;

+            }

+            case 536: {

+              result.hasField67 = input.ReadInt32(ref result.field67_);

+              break;

+            }

+            case 544: {

+              result.hasField68 = input.ReadInt32(ref result.field68_);

+              break;

+            }

+            case 624: {

+              result.hasField78 = input.ReadBool(ref result.field78_);

+              break;

+            }

+            case 640: {

+              result.hasField80 = input.ReadBool(ref result.field80_);

+              break;

+            }

+            case 648: {

+              result.hasField81 = input.ReadBool(ref result.field81_);

+              break;

+            }

+            case 800: {

+              result.hasField100 = input.ReadInt32(ref result.field100_);

+              break;

+            }

+            case 808: {

+              result.hasField101 = input.ReadInt32(ref result.field101_);

+              break;

+            }

+            case 818: {

+              result.hasField102 = input.ReadString(ref result.field102_);

+              break;

+            }

+            case 826: {

+              result.hasField103 = input.ReadString(ref result.field103_);

+              break;

+            }

+            case 832: {

+              result.hasField104 = input.ReadInt32(ref result.field104_);

+              break;

+            }

+            case 1024: {

+              result.hasField128 = input.ReadInt32(ref result.field128_);

+              break;

+            }

+            case 1034: {

+              result.hasField129 = input.ReadString(ref result.field129_);

+              break;

+            }

+            case 1040: {

+              result.hasField130 = input.ReadInt32(ref result.field130_);

+              break;

+            }

+            case 1048: {

+              result.hasField131 = input.ReadInt32(ref result.field131_);

+              break;

+            }

+            case 1200: {

+              result.hasField150 = input.ReadInt32(ref result.field150_);

+              break;

+            }

+            case 2168: {

+              result.hasField271 = input.ReadInt32(ref result.field271_);

+              break;

+            }

+            case 2176: {

+              result.hasField272 = input.ReadInt32(ref result.field272_);

+              break;

+            }

+            case 2240: {

+              result.hasField280 = input.ReadInt32(ref result.field280_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public string Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = "";

+        return this;

+      }

+      

+      public bool HasField9 {

+        get { return result.hasField9; }

+      }

+      public string Field9 {

+        get { return result.Field9; }

+        set { SetField9(value); }

+      }

+      public Builder SetField9(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField9 = true;

+        result.field9_ = value;

+        return this;

+      }

+      public Builder ClearField9() {

+        PrepareBuilder();

+        result.hasField9 = false;

+        result.field9_ = "";

+        return this;

+      }

+      

+      public bool HasField18 {

+        get { return result.hasField18; }

+      }

+      public string Field18 {

+        get { return result.Field18; }

+        set { SetField18(value); }

+      }

+      public Builder SetField18(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField18 = true;

+        result.field18_ = value;

+        return this;

+      }

+      public Builder ClearField18() {

+        PrepareBuilder();

+        result.hasField18 = false;

+        result.field18_ = "";

+        return this;

+      }

+      

+      public bool HasField80 {

+        get { return result.hasField80; }

+      }

+      public bool Field80 {

+        get { return result.Field80; }

+        set { SetField80(value); }

+      }

+      public Builder SetField80(bool value) {

+        PrepareBuilder();

+        result.hasField80 = true;

+        result.field80_ = value;

+        return this;

+      }

+      public Builder ClearField80() {

+        PrepareBuilder();

+        result.hasField80 = false;

+        result.field80_ = false;

+        return this;

+      }

+      

+      public bool HasField81 {

+        get { return result.hasField81; }

+      }

+      public bool Field81 {

+        get { return result.Field81; }

+        set { SetField81(value); }

+      }

+      public Builder SetField81(bool value) {

+        PrepareBuilder();

+        result.hasField81 = true;

+        result.field81_ = value;

+        return this;

+      }

+      public Builder ClearField81() {

+        PrepareBuilder();

+        result.hasField81 = false;

+        result.field81_ = true;

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public int Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(int value) {

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = 0;

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public int Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(int value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0;

+        return this;

+      }

+      

+      public bool HasField280 {

+        get { return result.hasField280; }

+      }

+      public int Field280 {

+        get { return result.Field280; }

+        set { SetField280(value); }

+      }

+      public Builder SetField280(int value) {

+        PrepareBuilder();

+        result.hasField280 = true;

+        result.field280_ = value;

+        return this;

+      }

+      public Builder ClearField280() {

+        PrepareBuilder();

+        result.hasField280 = false;

+        result.field280_ = 0;

+        return this;

+      }

+      

+      public bool HasField6 {

+        get { return result.hasField6; }

+      }

+      public int Field6 {

+        get { return result.Field6; }

+        set { SetField6(value); }

+      }

+      public Builder SetField6(int value) {

+        PrepareBuilder();

+        result.hasField6 = true;

+        result.field6_ = value;

+        return this;

+      }

+      public Builder ClearField6() {

+        PrepareBuilder();

+        result.hasField6 = false;

+        result.field6_ = 0;

+        return this;

+      }

+      

+      public bool HasField22 {

+        get { return result.hasField22; }

+      }

+      public long Field22 {

+        get { return result.Field22; }

+        set { SetField22(value); }

+      }

+      public Builder SetField22(long value) {

+        PrepareBuilder();

+        result.hasField22 = true;

+        result.field22_ = value;

+        return this;

+      }

+      public Builder ClearField22() {

+        PrepareBuilder();

+        result.hasField22 = false;

+        result.field22_ = 0L;

+        return this;

+      }

+      

+      public bool HasField4 {

+        get { return result.hasField4; }

+      }

+      public string Field4 {

+        get { return result.Field4; }

+        set { SetField4(value); }

+      }

+      public Builder SetField4(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField4 = true;

+        result.field4_ = value;

+        return this;

+      }

+      public Builder ClearField4() {

+        PrepareBuilder();

+        result.hasField4 = false;

+        result.field4_ = "";

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> Field5List {

+        get { return PrepareBuilder().field5_; }

+      }

+      public int Field5Count {

+        get { return result.Field5Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetField5(int index) {

+        return result.GetField5(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField5(int index, ulong value) {

+        PrepareBuilder();

+        result.field5_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddField5(ulong value) {

+        PrepareBuilder();

+        result.field5_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeField5(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.field5_.Add(values);

+        return this;

+      }

+      public Builder ClearField5() {

+        PrepareBuilder();

+        result.field5_.Clear();

+        return this;

+      }

+      

+      public bool HasField59 {

+        get { return result.hasField59; }

+      }

+      public bool Field59 {

+        get { return result.Field59; }

+        set { SetField59(value); }

+      }

+      public Builder SetField59(bool value) {

+        PrepareBuilder();

+        result.hasField59 = true;

+        result.field59_ = value;

+        return this;

+      }

+      public Builder ClearField59() {

+        PrepareBuilder();

+        result.hasField59 = false;

+        result.field59_ = false;

+        return this;

+      }

+      

+      public bool HasField7 {

+        get { return result.hasField7; }

+      }

+      public string Field7 {

+        get { return result.Field7; }

+        set { SetField7(value); }

+      }

+      public Builder SetField7(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField7 = true;

+        result.field7_ = value;

+        return this;

+      }

+      public Builder ClearField7() {

+        PrepareBuilder();

+        result.hasField7 = false;

+        result.field7_ = "";

+        return this;

+      }

+      

+      public bool HasField16 {

+        get { return result.hasField16; }

+      }

+      public int Field16 {

+        get { return result.Field16; }

+        set { SetField16(value); }

+      }

+      public Builder SetField16(int value) {

+        PrepareBuilder();

+        result.hasField16 = true;

+        result.field16_ = value;

+        return this;

+      }

+      public Builder ClearField16() {

+        PrepareBuilder();

+        result.hasField16 = false;

+        result.field16_ = 0;

+        return this;

+      }

+      

+      public bool HasField130 {

+        get { return result.hasField130; }

+      }

+      public int Field130 {

+        get { return result.Field130; }

+        set { SetField130(value); }

+      }

+      public Builder SetField130(int value) {

+        PrepareBuilder();

+        result.hasField130 = true;

+        result.field130_ = value;

+        return this;

+      }

+      public Builder ClearField130() {

+        PrepareBuilder();

+        result.hasField130 = false;

+        result.field130_ = 0;

+        return this;

+      }

+      

+      public bool HasField12 {

+        get { return result.hasField12; }

+      }

+      public bool Field12 {

+        get { return result.Field12; }

+        set { SetField12(value); }

+      }

+      public Builder SetField12(bool value) {

+        PrepareBuilder();

+        result.hasField12 = true;

+        result.field12_ = value;

+        return this;

+      }

+      public Builder ClearField12() {

+        PrepareBuilder();

+        result.hasField12 = false;

+        result.field12_ = true;

+        return this;

+      }

+      

+      public bool HasField17 {

+        get { return result.hasField17; }

+      }

+      public bool Field17 {

+        get { return result.Field17; }

+        set { SetField17(value); }

+      }

+      public Builder SetField17(bool value) {

+        PrepareBuilder();

+        result.hasField17 = true;

+        result.field17_ = value;

+        return this;

+      }

+      public Builder ClearField17() {

+        PrepareBuilder();

+        result.hasField17 = false;

+        result.field17_ = true;

+        return this;

+      }

+      

+      public bool HasField13 {

+        get { return result.hasField13; }

+      }

+      public bool Field13 {

+        get { return result.Field13; }

+        set { SetField13(value); }

+      }

+      public Builder SetField13(bool value) {

+        PrepareBuilder();

+        result.hasField13 = true;

+        result.field13_ = value;

+        return this;

+      }

+      public Builder ClearField13() {

+        PrepareBuilder();

+        result.hasField13 = false;

+        result.field13_ = true;

+        return this;

+      }

+      

+      public bool HasField14 {

+        get { return result.hasField14; }

+      }

+      public bool Field14 {

+        get { return result.Field14; }

+        set { SetField14(value); }

+      }

+      public Builder SetField14(bool value) {

+        PrepareBuilder();

+        result.hasField14 = true;

+        result.field14_ = value;

+        return this;

+      }

+      public Builder ClearField14() {

+        PrepareBuilder();

+        result.hasField14 = false;

+        result.field14_ = true;

+        return this;

+      }

+      

+      public bool HasField104 {

+        get { return result.hasField104; }

+      }

+      public int Field104 {

+        get { return result.Field104; }

+        set { SetField104(value); }

+      }

+      public Builder SetField104(int value) {

+        PrepareBuilder();

+        result.hasField104 = true;

+        result.field104_ = value;

+        return this;

+      }

+      public Builder ClearField104() {

+        PrepareBuilder();

+        result.hasField104 = false;

+        result.field104_ = 0;

+        return this;

+      }

+      

+      public bool HasField100 {

+        get { return result.hasField100; }

+      }

+      public int Field100 {

+        get { return result.Field100; }

+        set { SetField100(value); }

+      }

+      public Builder SetField100(int value) {

+        PrepareBuilder();

+        result.hasField100 = true;

+        result.field100_ = value;

+        return this;

+      }

+      public Builder ClearField100() {

+        PrepareBuilder();

+        result.hasField100 = false;

+        result.field100_ = 0;

+        return this;

+      }

+      

+      public bool HasField101 {

+        get { return result.hasField101; }

+      }

+      public int Field101 {

+        get { return result.Field101; }

+        set { SetField101(value); }

+      }

+      public Builder SetField101(int value) {

+        PrepareBuilder();

+        result.hasField101 = true;

+        result.field101_ = value;

+        return this;

+      }

+      public Builder ClearField101() {

+        PrepareBuilder();

+        result.hasField101 = false;

+        result.field101_ = 0;

+        return this;

+      }

+      

+      public bool HasField102 {

+        get { return result.hasField102; }

+      }

+      public string Field102 {

+        get { return result.Field102; }

+        set { SetField102(value); }

+      }

+      public Builder SetField102(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField102 = true;

+        result.field102_ = value;

+        return this;

+      }

+      public Builder ClearField102() {

+        PrepareBuilder();

+        result.hasField102 = false;

+        result.field102_ = "";

+        return this;

+      }

+      

+      public bool HasField103 {

+        get { return result.hasField103; }

+      }

+      public string Field103 {

+        get { return result.Field103; }

+        set { SetField103(value); }

+      }

+      public Builder SetField103(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField103 = true;

+        result.field103_ = value;

+        return this;

+      }

+      public Builder ClearField103() {

+        PrepareBuilder();

+        result.hasField103 = false;

+        result.field103_ = "";

+        return this;

+      }

+      

+      public bool HasField29 {

+        get { return result.hasField29; }

+      }

+      public int Field29 {

+        get { return result.Field29; }

+        set { SetField29(value); }

+      }

+      public Builder SetField29(int value) {

+        PrepareBuilder();

+        result.hasField29 = true;

+        result.field29_ = value;

+        return this;

+      }

+      public Builder ClearField29() {

+        PrepareBuilder();

+        result.hasField29 = false;

+        result.field29_ = 0;

+        return this;

+      }

+      

+      public bool HasField30 {

+        get { return result.hasField30; }

+      }

+      public bool Field30 {

+        get { return result.Field30; }

+        set { SetField30(value); }

+      }

+      public Builder SetField30(bool value) {

+        PrepareBuilder();

+        result.hasField30 = true;

+        result.field30_ = value;

+        return this;

+      }

+      public Builder ClearField30() {

+        PrepareBuilder();

+        result.hasField30 = false;

+        result.field30_ = false;

+        return this;

+      }

+      

+      public bool HasField60 {

+        get { return result.hasField60; }

+      }

+      public int Field60 {

+        get { return result.Field60; }

+        set { SetField60(value); }

+      }

+      public Builder SetField60(int value) {

+        PrepareBuilder();

+        result.hasField60 = true;

+        result.field60_ = value;

+        return this;

+      }

+      public Builder ClearField60() {

+        PrepareBuilder();

+        result.hasField60 = false;

+        result.field60_ = -1;

+        return this;

+      }

+      

+      public bool HasField271 {

+        get { return result.hasField271; }

+      }

+      public int Field271 {

+        get { return result.Field271; }

+        set { SetField271(value); }

+      }

+      public Builder SetField271(int value) {

+        PrepareBuilder();

+        result.hasField271 = true;

+        result.field271_ = value;

+        return this;

+      }

+      public Builder ClearField271() {

+        PrepareBuilder();

+        result.hasField271 = false;

+        result.field271_ = -1;

+        return this;

+      }

+      

+      public bool HasField272 {

+        get { return result.hasField272; }

+      }

+      public int Field272 {

+        get { return result.Field272; }

+        set { SetField272(value); }

+      }

+      public Builder SetField272(int value) {

+        PrepareBuilder();

+        result.hasField272 = true;

+        result.field272_ = value;

+        return this;

+      }

+      public Builder ClearField272() {

+        PrepareBuilder();

+        result.hasField272 = false;

+        result.field272_ = -1;

+        return this;

+      }

+      

+      public bool HasField150 {

+        get { return result.hasField150; }

+      }

+      public int Field150 {

+        get { return result.Field150; }

+        set { SetField150(value); }

+      }

+      public Builder SetField150(int value) {

+        PrepareBuilder();

+        result.hasField150 = true;

+        result.field150_ = value;

+        return this;

+      }

+      public Builder ClearField150() {

+        PrepareBuilder();

+        result.hasField150 = false;

+        result.field150_ = 0;

+        return this;

+      }

+      

+      public bool HasField23 {

+        get { return result.hasField23; }

+      }

+      public int Field23 {

+        get { return result.Field23; }

+        set { SetField23(value); }

+      }

+      public Builder SetField23(int value) {

+        PrepareBuilder();

+        result.hasField23 = true;

+        result.field23_ = value;

+        return this;

+      }

+      public Builder ClearField23() {

+        PrepareBuilder();

+        result.hasField23 = false;

+        result.field23_ = 0;

+        return this;

+      }

+      

+      public bool HasField24 {

+        get { return result.hasField24; }

+      }

+      public bool Field24 {

+        get { return result.Field24; }

+        set { SetField24(value); }

+      }

+      public Builder SetField24(bool value) {

+        PrepareBuilder();

+        result.hasField24 = true;

+        result.field24_ = value;

+        return this;

+      }

+      public Builder ClearField24() {

+        PrepareBuilder();

+        result.hasField24 = false;

+        result.field24_ = false;

+        return this;

+      }

+      

+      public bool HasField25 {

+        get { return result.hasField25; }

+      }

+      public int Field25 {

+        get { return result.Field25; }

+        set { SetField25(value); }

+      }

+      public Builder SetField25(int value) {

+        PrepareBuilder();

+        result.hasField25 = true;

+        result.field25_ = value;

+        return this;

+      }

+      public Builder ClearField25() {

+        PrepareBuilder();

+        result.hasField25 = false;

+        result.field25_ = 0;

+        return this;

+      }

+      

+      public bool HasField15 {

+       get { return result.hasField15; }

+      }

+      public global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage Field15 {

+        get { return result.Field15; }

+        set { SetField15(value); }

+      }

+      public Builder SetField15(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField15 = true;

+        result.field15_ = value;

+        return this;

+      }

+      public Builder SetField15(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasField15 = true;

+        result.field15_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeField15(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasField15 &&

+            result.field15_ != global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage.DefaultInstance) {

+            result.field15_ = global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage.CreateBuilder(result.field15_).MergeFrom(value).BuildPartial();

+        } else {

+          result.field15_ = value;

+        }

+        result.hasField15 = true;

+        return this;

+      }

+      public Builder ClearField15() {

+        PrepareBuilder();

+        result.hasField15 = false;

+        result.field15_ = null;

+        return this;

+      }

+      

+      public bool HasField78 {

+        get { return result.hasField78; }

+      }

+      public bool Field78 {

+        get { return result.Field78; }

+        set { SetField78(value); }

+      }

+      public Builder SetField78(bool value) {

+        PrepareBuilder();

+        result.hasField78 = true;

+        result.field78_ = value;

+        return this;

+      }

+      public Builder ClearField78() {

+        PrepareBuilder();

+        result.hasField78 = false;

+        result.field78_ = false;

+        return this;

+      }

+      

+      public bool HasField67 {

+        get { return result.hasField67; }

+      }

+      public int Field67 {

+        get { return result.Field67; }

+        set { SetField67(value); }

+      }

+      public Builder SetField67(int value) {

+        PrepareBuilder();

+        result.hasField67 = true;

+        result.field67_ = value;

+        return this;

+      }

+      public Builder ClearField67() {

+        PrepareBuilder();

+        result.hasField67 = false;

+        result.field67_ = 0;

+        return this;

+      }

+      

+      public bool HasField68 {

+        get { return result.hasField68; }

+      }

+      public int Field68 {

+        get { return result.Field68; }

+        set { SetField68(value); }

+      }

+      public Builder SetField68(int value) {

+        PrepareBuilder();

+        result.hasField68 = true;

+        result.field68_ = value;

+        return this;

+      }

+      public Builder ClearField68() {

+        PrepareBuilder();

+        result.hasField68 = false;

+        result.field68_ = 0;

+        return this;

+      }

+      

+      public bool HasField128 {

+        get { return result.hasField128; }

+      }

+      public int Field128 {

+        get { return result.Field128; }

+        set { SetField128(value); }

+      }

+      public Builder SetField128(int value) {

+        PrepareBuilder();

+        result.hasField128 = true;

+        result.field128_ = value;

+        return this;

+      }

+      public Builder ClearField128() {

+        PrepareBuilder();

+        result.hasField128 = false;

+        result.field128_ = 0;

+        return this;

+      }

+      

+      public bool HasField129 {

+        get { return result.hasField129; }

+      }

+      public string Field129 {

+        get { return result.Field129; }

+        set { SetField129(value); }

+      }

+      public Builder SetField129(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField129 = true;

+        result.field129_ = value;

+        return this;

+      }

+      public Builder ClearField129() {

+        PrepareBuilder();

+        result.hasField129 = false;

+        result.field129_ = "xxxxxxxxxxxxxxxxxxxxx";

+        return this;

+      }

+      

+      public bool HasField131 {

+        get { return result.hasField131; }

+      }

+      public int Field131 {

+        get { return result.Field131; }

+        set { SetField131(value); }

+      }

+      public Builder SetField131(int value) {

+        PrepareBuilder();

+        result.hasField131 = true;

+        result.field131_ = value;

+        return this;

+      }

+      public Builder ClearField131() {

+        PrepareBuilder();

+        result.hasField131 = false;

+        result.field131_ = 0;

+        return this;

+      }

+    }

+    static SpeedMessage1() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SpeedMessage1SubMessage : pb::GeneratedMessage<SpeedMessage1SubMessage, SpeedMessage1SubMessage.Builder> {

+    private SpeedMessage1SubMessage() { }

+    private static readonly SpeedMessage1SubMessage defaultInstance = new SpeedMessage1SubMessage().MakeReadOnly();

+    private static readonly string[] _speedMessage1SubMessageFieldNames = new string[] { "field1", "field12", "field13", "field14", "field15", "field16", "field19", "field2", "field20", "field203", "field204", "field205", "field206", "field207", "field21", "field22", "field23", "field28", "field3", "field300" };

+    private static readonly uint[] _speedMessage1SubMessageFieldTags = new uint[] { 8, 96, 104, 112, 122, 128, 152, 16, 160, 1629, 1632, 1642, 1648, 1656, 169, 176, 184, 224, 24, 2400 };

+    public static SpeedMessage1SubMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SpeedMessage1SubMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SpeedMessage1SubMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage1SubMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage1SubMessage, SpeedMessage1SubMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage1SubMessage__FieldAccessorTable; }

+    }

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private int field1_;

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public int Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private int field2_;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public int Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private int field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public int Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field15FieldNumber = 15;

+    private bool hasField15;

+    private string field15_ = "";

+    public bool HasField15 {

+      get { return hasField15; }

+    }

+    public string Field15 {

+      get { return field15_; }

+    }

+    

+    public const int Field12FieldNumber = 12;

+    private bool hasField12;

+    private bool field12_ = true;

+    public bool HasField12 {

+      get { return hasField12; }

+    }

+    public bool Field12 {

+      get { return field12_; }

+    }

+    

+    public const int Field13FieldNumber = 13;

+    private bool hasField13;

+    private long field13_;

+    public bool HasField13 {

+      get { return hasField13; }

+    }

+    public long Field13 {

+      get { return field13_; }

+    }

+    

+    public const int Field14FieldNumber = 14;

+    private bool hasField14;

+    private long field14_;

+    public bool HasField14 {

+      get { return hasField14; }

+    }

+    public long Field14 {

+      get { return field14_; }

+    }

+    

+    public const int Field16FieldNumber = 16;

+    private bool hasField16;

+    private int field16_;

+    public bool HasField16 {

+      get { return hasField16; }

+    }

+    public int Field16 {

+      get { return field16_; }

+    }

+    

+    public const int Field19FieldNumber = 19;

+    private bool hasField19;

+    private int field19_ = 2;

+    public bool HasField19 {

+      get { return hasField19; }

+    }

+    public int Field19 {

+      get { return field19_; }

+    }

+    

+    public const int Field20FieldNumber = 20;

+    private bool hasField20;

+    private bool field20_ = true;

+    public bool HasField20 {

+      get { return hasField20; }

+    }

+    public bool Field20 {

+      get { return field20_; }

+    }

+    

+    public const int Field28FieldNumber = 28;

+    private bool hasField28;

+    private bool field28_ = true;

+    public bool HasField28 {

+      get { return hasField28; }

+    }

+    public bool Field28 {

+      get { return field28_; }

+    }

+    

+    public const int Field21FieldNumber = 21;

+    private bool hasField21;

+    private ulong field21_;

+    public bool HasField21 {

+      get { return hasField21; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong Field21 {

+      get { return field21_; }

+    }

+    

+    public const int Field22FieldNumber = 22;

+    private bool hasField22;

+    private int field22_;

+    public bool HasField22 {

+      get { return hasField22; }

+    }

+    public int Field22 {

+      get { return field22_; }

+    }

+    

+    public const int Field23FieldNumber = 23;

+    private bool hasField23;

+    private bool field23_;

+    public bool HasField23 {

+      get { return hasField23; }

+    }

+    public bool Field23 {

+      get { return field23_; }

+    }

+    

+    public const int Field206FieldNumber = 206;

+    private bool hasField206;

+    private bool field206_;

+    public bool HasField206 {

+      get { return hasField206; }

+    }

+    public bool Field206 {

+      get { return field206_; }

+    }

+    

+    public const int Field203FieldNumber = 203;

+    private bool hasField203;

+    private uint field203_;

+    public bool HasField203 {

+      get { return hasField203; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint Field203 {

+      get { return field203_; }

+    }

+    

+    public const int Field204FieldNumber = 204;

+    private bool hasField204;

+    private int field204_;

+    public bool HasField204 {

+      get { return hasField204; }

+    }

+    public int Field204 {

+      get { return field204_; }

+    }

+    

+    public const int Field205FieldNumber = 205;

+    private bool hasField205;

+    private string field205_ = "";

+    public bool HasField205 {

+      get { return hasField205; }

+    }

+    public string Field205 {

+      get { return field205_; }

+    }

+    

+    public const int Field207FieldNumber = 207;

+    private bool hasField207;

+    private ulong field207_;

+    public bool HasField207 {

+      get { return hasField207; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong Field207 {

+      get { return field207_; }

+    }

+    

+    public const int Field300FieldNumber = 300;

+    private bool hasField300;

+    private ulong field300_;

+    public bool HasField300 {

+      get { return hasField300; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong Field300 {

+      get { return field300_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _speedMessage1SubMessageFieldNames;

+      if (hasField1) {

+        output.WriteInt32(1, field_names[0], Field1);

+      }

+      if (hasField2) {

+        output.WriteInt32(2, field_names[7], Field2);

+      }

+      if (hasField3) {

+        output.WriteInt32(3, field_names[18], Field3);

+      }

+      if (hasField12) {

+        output.WriteBool(12, field_names[1], Field12);

+      }

+      if (hasField13) {

+        output.WriteInt64(13, field_names[2], Field13);

+      }

+      if (hasField14) {

+        output.WriteInt64(14, field_names[3], Field14);

+      }

+      if (hasField15) {

+        output.WriteString(15, field_names[4], Field15);

+      }

+      if (hasField16) {

+        output.WriteInt32(16, field_names[5], Field16);

+      }

+      if (hasField19) {

+        output.WriteInt32(19, field_names[6], Field19);

+      }

+      if (hasField20) {

+        output.WriteBool(20, field_names[8], Field20);

+      }

+      if (hasField21) {

+        output.WriteFixed64(21, field_names[14], Field21);

+      }

+      if (hasField22) {

+        output.WriteInt32(22, field_names[15], Field22);

+      }

+      if (hasField23) {

+        output.WriteBool(23, field_names[16], Field23);

+      }

+      if (hasField28) {

+        output.WriteBool(28, field_names[17], Field28);

+      }

+      if (hasField203) {

+        output.WriteFixed32(203, field_names[9], Field203);

+      }

+      if (hasField204) {

+        output.WriteInt32(204, field_names[10], Field204);

+      }

+      if (hasField205) {

+        output.WriteString(205, field_names[11], Field205);

+      }

+      if (hasField206) {

+        output.WriteBool(206, field_names[12], Field206);

+      }

+      if (hasField207) {

+        output.WriteUInt64(207, field_names[13], Field207);

+      }

+      if (hasField300) {

+        output.WriteUInt64(300, field_names[19], Field300);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasField1) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, Field1);

+      }

+      if (hasField2) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, Field2);

+      }

+      if (hasField3) {

+        size += pb::CodedOutputStream.ComputeInt32Size(3, Field3);

+      }

+      if (hasField15) {

+        size += pb::CodedOutputStream.ComputeStringSize(15, Field15);

+      }

+      if (hasField12) {

+        size += pb::CodedOutputStream.ComputeBoolSize(12, Field12);

+      }

+      if (hasField13) {

+        size += pb::CodedOutputStream.ComputeInt64Size(13, Field13);

+      }

+      if (hasField14) {

+        size += pb::CodedOutputStream.ComputeInt64Size(14, Field14);

+      }

+      if (hasField16) {

+        size += pb::CodedOutputStream.ComputeInt32Size(16, Field16);

+      }

+      if (hasField19) {

+        size += pb::CodedOutputStream.ComputeInt32Size(19, Field19);

+      }

+      if (hasField20) {

+        size += pb::CodedOutputStream.ComputeBoolSize(20, Field20);

+      }

+      if (hasField28) {

+        size += pb::CodedOutputStream.ComputeBoolSize(28, Field28);

+      }

+      if (hasField21) {

+        size += pb::CodedOutputStream.ComputeFixed64Size(21, Field21);

+      }

+      if (hasField22) {

+        size += pb::CodedOutputStream.ComputeInt32Size(22, Field22);

+      }

+      if (hasField23) {

+        size += pb::CodedOutputStream.ComputeBoolSize(23, Field23);

+      }

+      if (hasField206) {

+        size += pb::CodedOutputStream.ComputeBoolSize(206, Field206);

+      }

+      if (hasField203) {

+        size += pb::CodedOutputStream.ComputeFixed32Size(203, Field203);

+      }

+      if (hasField204) {

+        size += pb::CodedOutputStream.ComputeInt32Size(204, Field204);

+      }

+      if (hasField205) {

+        size += pb::CodedOutputStream.ComputeStringSize(205, Field205);

+      }

+      if (hasField207) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(207, Field207);

+      }

+      if (hasField300) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(300, Field300);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SpeedMessage1SubMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SpeedMessage1SubMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SpeedMessage1SubMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage1SubMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SpeedMessage1SubMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SpeedMessage1SubMessage result;

+      

+      private SpeedMessage1SubMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SpeedMessage1SubMessage original = result;

+          result = new SpeedMessage1SubMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SpeedMessage1SubMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage.Descriptor; }

+      }

+      

+      public override SpeedMessage1SubMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage.DefaultInstance; }

+      }

+      

+      public override SpeedMessage1SubMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SpeedMessage1SubMessage) {

+          return MergeFrom((SpeedMessage1SubMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SpeedMessage1SubMessage other) {

+        if (other == global::Google.ProtocolBuffers.ProtoBench.SpeedMessage1SubMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasField1) {

+          Field1 = other.Field1;

+        }

+        if (other.HasField2) {

+          Field2 = other.Field2;

+        }

+        if (other.HasField3) {

+          Field3 = other.Field3;

+        }

+        if (other.HasField15) {

+          Field15 = other.Field15;

+        }

+        if (other.HasField12) {

+          Field12 = other.Field12;

+        }

+        if (other.HasField13) {

+          Field13 = other.Field13;

+        }

+        if (other.HasField14) {

+          Field14 = other.Field14;

+        }

+        if (other.HasField16) {

+          Field16 = other.Field16;

+        }

+        if (other.HasField19) {

+          Field19 = other.Field19;

+        }

+        if (other.HasField20) {

+          Field20 = other.Field20;

+        }

+        if (other.HasField28) {

+          Field28 = other.Field28;

+        }

+        if (other.HasField21) {

+          Field21 = other.Field21;

+        }

+        if (other.HasField22) {

+          Field22 = other.Field22;

+        }

+        if (other.HasField23) {

+          Field23 = other.Field23;

+        }

+        if (other.HasField206) {

+          Field206 = other.Field206;

+        }

+        if (other.HasField203) {

+          Field203 = other.Field203;

+        }

+        if (other.HasField204) {

+          Field204 = other.Field204;

+        }

+        if (other.HasField205) {

+          Field205 = other.Field205;

+        }

+        if (other.HasField207) {

+          Field207 = other.Field207;

+        }

+        if (other.HasField300) {

+          Field300 = other.Field300;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_speedMessage1SubMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _speedMessage1SubMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasField1 = input.ReadInt32(ref result.field1_);

+              break;

+            }

+            case 16: {

+              result.hasField2 = input.ReadInt32(ref result.field2_);

+              break;

+            }

+            case 24: {

+              result.hasField3 = input.ReadInt32(ref result.field3_);

+              break;

+            }

+            case 96: {

+              result.hasField12 = input.ReadBool(ref result.field12_);

+              break;

+            }

+            case 104: {

+              result.hasField13 = input.ReadInt64(ref result.field13_);

+              break;

+            }

+            case 112: {

+              result.hasField14 = input.ReadInt64(ref result.field14_);

+              break;

+            }

+            case 122: {

+              result.hasField15 = input.ReadString(ref result.field15_);

+              break;

+            }

+            case 128: {

+              result.hasField16 = input.ReadInt32(ref result.field16_);

+              break;

+            }

+            case 152: {

+              result.hasField19 = input.ReadInt32(ref result.field19_);

+              break;

+            }

+            case 160: {

+              result.hasField20 = input.ReadBool(ref result.field20_);

+              break;

+            }

+            case 169: {

+              result.hasField21 = input.ReadFixed64(ref result.field21_);

+              break;

+            }

+            case 176: {

+              result.hasField22 = input.ReadInt32(ref result.field22_);

+              break;

+            }

+            case 184: {

+              result.hasField23 = input.ReadBool(ref result.field23_);

+              break;

+            }

+            case 224: {

+              result.hasField28 = input.ReadBool(ref result.field28_);

+              break;

+            }

+            case 1629: {

+              result.hasField203 = input.ReadFixed32(ref result.field203_);

+              break;

+            }

+            case 1632: {

+              result.hasField204 = input.ReadInt32(ref result.field204_);

+              break;

+            }

+            case 1642: {

+              result.hasField205 = input.ReadString(ref result.field205_);

+              break;

+            }

+            case 1648: {

+              result.hasField206 = input.ReadBool(ref result.field206_);

+              break;

+            }

+            case 1656: {

+              result.hasField207 = input.ReadUInt64(ref result.field207_);

+              break;

+            }

+            case 2400: {

+              result.hasField300 = input.ReadUInt64(ref result.field300_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public int Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(int value) {

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = 0;

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public int Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(int value) {

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = 0;

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public int Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(int value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0;

+        return this;

+      }

+      

+      public bool HasField15 {

+        get { return result.hasField15; }

+      }

+      public string Field15 {

+        get { return result.Field15; }

+        set { SetField15(value); }

+      }

+      public Builder SetField15(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField15 = true;

+        result.field15_ = value;

+        return this;

+      }

+      public Builder ClearField15() {

+        PrepareBuilder();

+        result.hasField15 = false;

+        result.field15_ = "";

+        return this;

+      }

+      

+      public bool HasField12 {

+        get { return result.hasField12; }

+      }

+      public bool Field12 {

+        get { return result.Field12; }

+        set { SetField12(value); }

+      }

+      public Builder SetField12(bool value) {

+        PrepareBuilder();

+        result.hasField12 = true;

+        result.field12_ = value;

+        return this;

+      }

+      public Builder ClearField12() {

+        PrepareBuilder();

+        result.hasField12 = false;

+        result.field12_ = true;

+        return this;

+      }

+      

+      public bool HasField13 {

+        get { return result.hasField13; }

+      }

+      public long Field13 {

+        get { return result.Field13; }

+        set { SetField13(value); }

+      }

+      public Builder SetField13(long value) {

+        PrepareBuilder();

+        result.hasField13 = true;

+        result.field13_ = value;

+        return this;

+      }

+      public Builder ClearField13() {

+        PrepareBuilder();

+        result.hasField13 = false;

+        result.field13_ = 0L;

+        return this;

+      }

+      

+      public bool HasField14 {

+        get { return result.hasField14; }

+      }

+      public long Field14 {

+        get { return result.Field14; }

+        set { SetField14(value); }

+      }

+      public Builder SetField14(long value) {

+        PrepareBuilder();

+        result.hasField14 = true;

+        result.field14_ = value;

+        return this;

+      }

+      public Builder ClearField14() {

+        PrepareBuilder();

+        result.hasField14 = false;

+        result.field14_ = 0L;

+        return this;

+      }

+      

+      public bool HasField16 {

+        get { return result.hasField16; }

+      }

+      public int Field16 {

+        get { return result.Field16; }

+        set { SetField16(value); }

+      }

+      public Builder SetField16(int value) {

+        PrepareBuilder();

+        result.hasField16 = true;

+        result.field16_ = value;

+        return this;

+      }

+      public Builder ClearField16() {

+        PrepareBuilder();

+        result.hasField16 = false;

+        result.field16_ = 0;

+        return this;

+      }

+      

+      public bool HasField19 {

+        get { return result.hasField19; }

+      }

+      public int Field19 {

+        get { return result.Field19; }

+        set { SetField19(value); }

+      }

+      public Builder SetField19(int value) {

+        PrepareBuilder();

+        result.hasField19 = true;

+        result.field19_ = value;

+        return this;

+      }

+      public Builder ClearField19() {

+        PrepareBuilder();

+        result.hasField19 = false;

+        result.field19_ = 2;

+        return this;

+      }

+      

+      public bool HasField20 {

+        get { return result.hasField20; }

+      }

+      public bool Field20 {

+        get { return result.Field20; }

+        set { SetField20(value); }

+      }

+      public Builder SetField20(bool value) {

+        PrepareBuilder();

+        result.hasField20 = true;

+        result.field20_ = value;

+        return this;

+      }

+      public Builder ClearField20() {

+        PrepareBuilder();

+        result.hasField20 = false;

+        result.field20_ = true;

+        return this;

+      }

+      

+      public bool HasField28 {

+        get { return result.hasField28; }

+      }

+      public bool Field28 {

+        get { return result.Field28; }

+        set { SetField28(value); }

+      }

+      public Builder SetField28(bool value) {

+        PrepareBuilder();

+        result.hasField28 = true;

+        result.field28_ = value;

+        return this;

+      }

+      public Builder ClearField28() {

+        PrepareBuilder();

+        result.hasField28 = false;

+        result.field28_ = true;

+        return this;

+      }

+      

+      public bool HasField21 {

+        get { return result.hasField21; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong Field21 {

+        get { return result.Field21; }

+        set { SetField21(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField21(ulong value) {

+        PrepareBuilder();

+        result.hasField21 = true;

+        result.field21_ = value;

+        return this;

+      }

+      public Builder ClearField21() {

+        PrepareBuilder();

+        result.hasField21 = false;

+        result.field21_ = 0;

+        return this;

+      }

+      

+      public bool HasField22 {

+        get { return result.hasField22; }

+      }

+      public int Field22 {

+        get { return result.Field22; }

+        set { SetField22(value); }

+      }

+      public Builder SetField22(int value) {

+        PrepareBuilder();

+        result.hasField22 = true;

+        result.field22_ = value;

+        return this;

+      }

+      public Builder ClearField22() {

+        PrepareBuilder();

+        result.hasField22 = false;

+        result.field22_ = 0;

+        return this;

+      }

+      

+      public bool HasField23 {

+        get { return result.hasField23; }

+      }

+      public bool Field23 {

+        get { return result.Field23; }

+        set { SetField23(value); }

+      }

+      public Builder SetField23(bool value) {

+        PrepareBuilder();

+        result.hasField23 = true;

+        result.field23_ = value;

+        return this;

+      }

+      public Builder ClearField23() {

+        PrepareBuilder();

+        result.hasField23 = false;

+        result.field23_ = false;

+        return this;

+      }

+      

+      public bool HasField206 {

+        get { return result.hasField206; }

+      }

+      public bool Field206 {

+        get { return result.Field206; }

+        set { SetField206(value); }

+      }

+      public Builder SetField206(bool value) {

+        PrepareBuilder();

+        result.hasField206 = true;

+        result.field206_ = value;

+        return this;

+      }

+      public Builder ClearField206() {

+        PrepareBuilder();

+        result.hasField206 = false;

+        result.field206_ = false;

+        return this;

+      }

+      

+      public bool HasField203 {

+        get { return result.hasField203; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint Field203 {

+        get { return result.Field203; }

+        set { SetField203(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField203(uint value) {

+        PrepareBuilder();

+        result.hasField203 = true;

+        result.field203_ = value;

+        return this;

+      }

+      public Builder ClearField203() {

+        PrepareBuilder();

+        result.hasField203 = false;

+        result.field203_ = 0;

+        return this;

+      }

+      

+      public bool HasField204 {

+        get { return result.hasField204; }

+      }

+      public int Field204 {

+        get { return result.Field204; }

+        set { SetField204(value); }

+      }

+      public Builder SetField204(int value) {

+        PrepareBuilder();

+        result.hasField204 = true;

+        result.field204_ = value;

+        return this;

+      }

+      public Builder ClearField204() {

+        PrepareBuilder();

+        result.hasField204 = false;

+        result.field204_ = 0;

+        return this;

+      }

+      

+      public bool HasField205 {

+        get { return result.hasField205; }

+      }

+      public string Field205 {

+        get { return result.Field205; }

+        set { SetField205(value); }

+      }

+      public Builder SetField205(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField205 = true;

+        result.field205_ = value;

+        return this;

+      }

+      public Builder ClearField205() {

+        PrepareBuilder();

+        result.hasField205 = false;

+        result.field205_ = "";

+        return this;

+      }

+      

+      public bool HasField207 {

+        get { return result.hasField207; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong Field207 {

+        get { return result.Field207; }

+        set { SetField207(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField207(ulong value) {

+        PrepareBuilder();

+        result.hasField207 = true;

+        result.field207_ = value;

+        return this;

+      }

+      public Builder ClearField207() {

+        PrepareBuilder();

+        result.hasField207 = false;

+        result.field207_ = 0UL;

+        return this;

+      }

+      

+      public bool HasField300 {

+        get { return result.hasField300; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong Field300 {

+        get { return result.Field300; }

+        set { SetField300(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField300(ulong value) {

+        PrepareBuilder();

+        result.hasField300 = true;

+        result.field300_ = value;

+        return this;

+      }

+      public Builder ClearField300() {

+        PrepareBuilder();

+        result.hasField300 = false;

+        result.field300_ = 0UL;

+        return this;

+      }

+    }

+    static SpeedMessage1SubMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SpeedMessage2 : pb::GeneratedMessage<SpeedMessage2, SpeedMessage2.Builder> {

+    private SpeedMessage2() { }

+    private static readonly SpeedMessage2 defaultInstance = new SpeedMessage2().MakeReadOnly();

+    private static readonly string[] _speedMessage2FieldNames = new string[] { "field1", "field109", "field127", "field128", "field129", "field130", "field131", "field2", "field205", "field206", "field21", "field210", "field211", "field212", "field213", "field216", "field217", "field218", "field220", "field221", "field222", "field25", "field3", "field30", "field4", "field6", "field63", "field71", "field75", "group1" };

+    private static readonly uint[] _speedMessage2FieldTags = new uint[] { 10, 872, 1018, 1026, 1032, 1040, 1048, 18, 1640, 1648, 168, 1680, 1688, 1696, 1704, 1728, 1736, 1744, 1760, 1768, 1781, 205, 24, 240, 32, 50, 504, 568, 600, 83 };

+    public static SpeedMessage2 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SpeedMessage2 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SpeedMessage2 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage2__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage2, SpeedMessage2.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage2__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Group1 : pb::GeneratedMessage<Group1, Group1.Builder> {

+        private Group1() { }

+        private static readonly Group1 defaultInstance = new Group1().MakeReadOnly();

+        private static readonly string[] _group1FieldNames = new string[] { "field11", "field12", "field13", "field14", "field15", "field16", "field20", "field22", "field24", "field26", "field27", "field28", "field29", "field31", "field5", "field73" };

+        private static readonly uint[] _group1FieldTags = new uint[] { 93, 98, 106, 114, 120, 130, 160, 178, 194, 213, 218, 224, 234, 250, 40, 584 };

+        public static Group1 DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Group1 DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Group1 ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage2_Group1__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Group1, Group1.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage2_Group1__FieldAccessorTable; }

+        }

+        

+        public const int Field11FieldNumber = 11;

+        private bool hasField11;

+        private float field11_;

+        public bool HasField11 {

+          get { return hasField11; }

+        }

+        public float Field11 {

+          get { return field11_; }

+        }

+        

+        public const int Field26FieldNumber = 26;

+        private bool hasField26;

+        private float field26_;

+        public bool HasField26 {

+          get { return hasField26; }

+        }

+        public float Field26 {

+          get { return field26_; }

+        }

+        

+        public const int Field12FieldNumber = 12;

+        private bool hasField12;

+        private string field12_ = "";

+        public bool HasField12 {

+          get { return hasField12; }

+        }

+        public string Field12 {

+          get { return field12_; }

+        }

+        

+        public const int Field13FieldNumber = 13;

+        private bool hasField13;

+        private string field13_ = "";

+        public bool HasField13 {

+          get { return hasField13; }

+        }

+        public string Field13 {

+          get { return field13_; }

+        }

+        

+        public const int Field14FieldNumber = 14;

+        private pbc::PopsicleList<string> field14_ = new pbc::PopsicleList<string>();

+        public scg::IList<string> Field14List {

+          get { return pbc::Lists.AsReadOnly(field14_); }

+        }

+        public int Field14Count {

+          get { return field14_.Count; }

+        }

+        public string GetField14(int index) {

+          return field14_[index];

+        }

+        

+        public const int Field15FieldNumber = 15;

+        private bool hasField15;

+        private ulong field15_;

+        public bool HasField15 {

+          get { return hasField15; }

+        }

+        [global::System.CLSCompliant(false)]

+        public ulong Field15 {

+          get { return field15_; }

+        }

+        

+        public const int Field5FieldNumber = 5;

+        private bool hasField5;

+        private int field5_;

+        public bool HasField5 {

+          get { return hasField5; }

+        }

+        public int Field5 {

+          get { return field5_; }

+        }

+        

+        public const int Field27FieldNumber = 27;

+        private bool hasField27;

+        private string field27_ = "";

+        public bool HasField27 {

+          get { return hasField27; }

+        }

+        public string Field27 {

+          get { return field27_; }

+        }

+        

+        public const int Field28FieldNumber = 28;

+        private bool hasField28;

+        private int field28_;

+        public bool HasField28 {

+          get { return hasField28; }

+        }

+        public int Field28 {

+          get { return field28_; }

+        }

+        

+        public const int Field29FieldNumber = 29;

+        private bool hasField29;

+        private string field29_ = "";

+        public bool HasField29 {

+          get { return hasField29; }

+        }

+        public string Field29 {

+          get { return field29_; }

+        }

+        

+        public const int Field16FieldNumber = 16;

+        private bool hasField16;

+        private string field16_ = "";

+        public bool HasField16 {

+          get { return hasField16; }

+        }

+        public string Field16 {

+          get { return field16_; }

+        }

+        

+        public const int Field22FieldNumber = 22;

+        private pbc::PopsicleList<string> field22_ = new pbc::PopsicleList<string>();

+        public scg::IList<string> Field22List {

+          get { return pbc::Lists.AsReadOnly(field22_); }

+        }

+        public int Field22Count {

+          get { return field22_.Count; }

+        }

+        public string GetField22(int index) {

+          return field22_[index];

+        }

+        

+        public const int Field73FieldNumber = 73;

+        private pbc::PopsicleList<int> field73_ = new pbc::PopsicleList<int>();

+        public scg::IList<int> Field73List {

+          get { return pbc::Lists.AsReadOnly(field73_); }

+        }

+        public int Field73Count {

+          get { return field73_.Count; }

+        }

+        public int GetField73(int index) {

+          return field73_[index];

+        }

+        

+        public const int Field20FieldNumber = 20;

+        private bool hasField20;

+        private int field20_;

+        public bool HasField20 {

+          get { return hasField20; }

+        }

+        public int Field20 {

+          get { return field20_; }

+        }

+        

+        public const int Field24FieldNumber = 24;

+        private bool hasField24;

+        private string field24_ = "";

+        public bool HasField24 {

+          get { return hasField24; }

+        }

+        public string Field24 {

+          get { return field24_; }

+        }

+        

+        public const int Field31FieldNumber = 31;

+        private bool hasField31;

+        private global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage field31_;

+        public bool HasField31 {

+          get { return hasField31; }

+        }

+        public global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage Field31 {

+          get { return field31_ ?? global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage.DefaultInstance; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            if (!hasField11) return false;

+            if (!hasField15) return false;

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _group1FieldNames;

+          if (hasField5) {

+            output.WriteInt32(5, field_names[14], Field5);

+          }

+          if (hasField11) {

+            output.WriteFloat(11, field_names[0], Field11);

+          }

+          if (hasField12) {

+            output.WriteString(12, field_names[1], Field12);

+          }

+          if (hasField13) {

+            output.WriteString(13, field_names[2], Field13);

+          }

+          if (field14_.Count > 0) {

+            output.WriteStringArray(14, field_names[3], field14_);

+          }

+          if (hasField15) {

+            output.WriteUInt64(15, field_names[4], Field15);

+          }

+          if (hasField16) {

+            output.WriteString(16, field_names[5], Field16);

+          }

+          if (hasField20) {

+            output.WriteInt32(20, field_names[6], Field20);

+          }

+          if (field22_.Count > 0) {

+            output.WriteStringArray(22, field_names[7], field22_);

+          }

+          if (hasField24) {

+            output.WriteString(24, field_names[8], Field24);

+          }

+          if (hasField26) {

+            output.WriteFloat(26, field_names[9], Field26);

+          }

+          if (hasField27) {

+            output.WriteString(27, field_names[10], Field27);

+          }

+          if (hasField28) {

+            output.WriteInt32(28, field_names[11], Field28);

+          }

+          if (hasField29) {

+            output.WriteString(29, field_names[12], Field29);

+          }

+          if (hasField31) {

+            output.WriteMessage(31, field_names[13], Field31);

+          }

+          if (field73_.Count > 0) {

+            output.WriteInt32Array(73, field_names[15], field73_);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasField11) {

+            size += pb::CodedOutputStream.ComputeFloatSize(11, Field11);

+          }

+          if (hasField26) {

+            size += pb::CodedOutputStream.ComputeFloatSize(26, Field26);

+          }

+          if (hasField12) {

+            size += pb::CodedOutputStream.ComputeStringSize(12, Field12);

+          }

+          if (hasField13) {

+            size += pb::CodedOutputStream.ComputeStringSize(13, Field13);

+          }

+          {

+            int dataSize = 0;

+            foreach (string element in Field14List) {

+              dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+            }

+            size += dataSize;

+            size += 1 * field14_.Count;

+          }

+          if (hasField15) {

+            size += pb::CodedOutputStream.ComputeUInt64Size(15, Field15);

+          }

+          if (hasField5) {

+            size += pb::CodedOutputStream.ComputeInt32Size(5, Field5);

+          }

+          if (hasField27) {

+            size += pb::CodedOutputStream.ComputeStringSize(27, Field27);

+          }

+          if (hasField28) {

+            size += pb::CodedOutputStream.ComputeInt32Size(28, Field28);

+          }

+          if (hasField29) {

+            size += pb::CodedOutputStream.ComputeStringSize(29, Field29);

+          }

+          if (hasField16) {

+            size += pb::CodedOutputStream.ComputeStringSize(16, Field16);

+          }

+          {

+            int dataSize = 0;

+            foreach (string element in Field22List) {

+              dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+            }

+            size += dataSize;

+            size += 2 * field22_.Count;

+          }

+          {

+            int dataSize = 0;

+            foreach (int element in Field73List) {

+              dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+            }

+            size += dataSize;

+            size += 2 * field73_.Count;

+          }

+          if (hasField20) {

+            size += pb::CodedOutputStream.ComputeInt32Size(20, Field20);

+          }

+          if (hasField24) {

+            size += pb::CodedOutputStream.ComputeStringSize(24, Field24);

+          }

+          if (hasField31) {

+            size += pb::CodedOutputStream.ComputeMessageSize(31, Field31);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static Group1 ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Group1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Group1 ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Group1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Group1 ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Group1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Group1 ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Group1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Group1 ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Group1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Group1 MakeReadOnly() {

+          field14_.MakeReadOnly();

+          field22_.MakeReadOnly();

+          field73_.MakeReadOnly();

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Group1 prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Group1, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Group1 cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Group1 result;

+          

+          private Group1 PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Group1 original = result;

+              result = new Group1();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Group1 MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1.Descriptor; }

+          }

+          

+          public override Group1 DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1.DefaultInstance; }

+          }

+          

+          public override Group1 BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is Group1) {

+              return MergeFrom((Group1) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(Group1 other) {

+            if (other == global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasField11) {

+              Field11 = other.Field11;

+            }

+            if (other.HasField26) {

+              Field26 = other.Field26;

+            }

+            if (other.HasField12) {

+              Field12 = other.Field12;

+            }

+            if (other.HasField13) {

+              Field13 = other.Field13;

+            }

+            if (other.field14_.Count != 0) {

+              result.field14_.Add(other.field14_);

+            }

+            if (other.HasField15) {

+              Field15 = other.Field15;

+            }

+            if (other.HasField5) {

+              Field5 = other.Field5;

+            }

+            if (other.HasField27) {

+              Field27 = other.Field27;

+            }

+            if (other.HasField28) {

+              Field28 = other.Field28;

+            }

+            if (other.HasField29) {

+              Field29 = other.Field29;

+            }

+            if (other.HasField16) {

+              Field16 = other.Field16;

+            }

+            if (other.field22_.Count != 0) {

+              result.field22_.Add(other.field22_);

+            }

+            if (other.field73_.Count != 0) {

+              result.field73_.Add(other.field73_);

+            }

+            if (other.HasField20) {

+              Field20 = other.Field20;

+            }

+            if (other.HasField24) {

+              Field24 = other.Field24;

+            }

+            if (other.HasField31) {

+              MergeField31(other.Field31);

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_group1FieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _group1FieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 40: {

+                  result.hasField5 = input.ReadInt32(ref result.field5_);

+                  break;

+                }

+                case 93: {

+                  result.hasField11 = input.ReadFloat(ref result.field11_);

+                  break;

+                }

+                case 98: {

+                  result.hasField12 = input.ReadString(ref result.field12_);

+                  break;

+                }

+                case 106: {

+                  result.hasField13 = input.ReadString(ref result.field13_);

+                  break;

+                }

+                case 114: {

+                  input.ReadStringArray(tag, field_name, result.field14_);

+                  break;

+                }

+                case 120: {

+                  result.hasField15 = input.ReadUInt64(ref result.field15_);

+                  break;

+                }

+                case 130: {

+                  result.hasField16 = input.ReadString(ref result.field16_);

+                  break;

+                }

+                case 160: {

+                  result.hasField20 = input.ReadInt32(ref result.field20_);

+                  break;

+                }

+                case 178: {

+                  input.ReadStringArray(tag, field_name, result.field22_);

+                  break;

+                }

+                case 194: {

+                  result.hasField24 = input.ReadString(ref result.field24_);

+                  break;

+                }

+                case 213: {

+                  result.hasField26 = input.ReadFloat(ref result.field26_);

+                  break;

+                }

+                case 218: {

+                  result.hasField27 = input.ReadString(ref result.field27_);

+                  break;

+                }

+                case 224: {

+                  result.hasField28 = input.ReadInt32(ref result.field28_);

+                  break;

+                }

+                case 234: {

+                  result.hasField29 = input.ReadString(ref result.field29_);

+                  break;

+                }

+                case 250: {

+                  global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage.Builder subBuilder = global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage.CreateBuilder();

+                  if (result.hasField31) {

+                    subBuilder.MergeFrom(Field31);

+                  }

+                  input.ReadMessage(subBuilder, extensionRegistry);

+                  Field31 = subBuilder.BuildPartial();

+                  break;

+                }

+                case 586:

+                case 584: {

+                  input.ReadInt32Array(tag, field_name, result.field73_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasField11 {

+            get { return result.hasField11; }

+          }

+          public float Field11 {

+            get { return result.Field11; }

+            set { SetField11(value); }

+          }

+          public Builder SetField11(float value) {

+            PrepareBuilder();

+            result.hasField11 = true;

+            result.field11_ = value;

+            return this;

+          }

+          public Builder ClearField11() {

+            PrepareBuilder();

+            result.hasField11 = false;

+            result.field11_ = 0F;

+            return this;

+          }

+          

+          public bool HasField26 {

+            get { return result.hasField26; }

+          }

+          public float Field26 {

+            get { return result.Field26; }

+            set { SetField26(value); }

+          }

+          public Builder SetField26(float value) {

+            PrepareBuilder();

+            result.hasField26 = true;

+            result.field26_ = value;

+            return this;

+          }

+          public Builder ClearField26() {

+            PrepareBuilder();

+            result.hasField26 = false;

+            result.field26_ = 0F;

+            return this;

+          }

+          

+          public bool HasField12 {

+            get { return result.hasField12; }

+          }

+          public string Field12 {

+            get { return result.Field12; }

+            set { SetField12(value); }

+          }

+          public Builder SetField12(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField12 = true;

+            result.field12_ = value;

+            return this;

+          }

+          public Builder ClearField12() {

+            PrepareBuilder();

+            result.hasField12 = false;

+            result.field12_ = "";

+            return this;

+          }

+          

+          public bool HasField13 {

+            get { return result.hasField13; }

+          }

+          public string Field13 {

+            get { return result.Field13; }

+            set { SetField13(value); }

+          }

+          public Builder SetField13(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField13 = true;

+            result.field13_ = value;

+            return this;

+          }

+          public Builder ClearField13() {

+            PrepareBuilder();

+            result.hasField13 = false;

+            result.field13_ = "";

+            return this;

+          }

+          

+          public pbc::IPopsicleList<string> Field14List {

+            get { return PrepareBuilder().field14_; }

+          }

+          public int Field14Count {

+            get { return result.Field14Count; }

+          }

+          public string GetField14(int index) {

+            return result.GetField14(index);

+          }

+          public Builder SetField14(int index, string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field14_[index] = value;

+            return this;

+          }

+          public Builder AddField14(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field14_.Add(value);

+            return this;

+          }

+          public Builder AddRangeField14(scg::IEnumerable<string> values) {

+            PrepareBuilder();

+            result.field14_.Add(values);

+            return this;

+          }

+          public Builder ClearField14() {

+            PrepareBuilder();

+            result.field14_.Clear();

+            return this;

+          }

+          

+          public bool HasField15 {

+            get { return result.hasField15; }

+          }

+          [global::System.CLSCompliant(false)]

+          public ulong Field15 {

+            get { return result.Field15; }

+            set { SetField15(value); }

+          }

+          [global::System.CLSCompliant(false)]

+          public Builder SetField15(ulong value) {

+            PrepareBuilder();

+            result.hasField15 = true;

+            result.field15_ = value;

+            return this;

+          }

+          public Builder ClearField15() {

+            PrepareBuilder();

+            result.hasField15 = false;

+            result.field15_ = 0UL;

+            return this;

+          }

+          

+          public bool HasField5 {

+            get { return result.hasField5; }

+          }

+          public int Field5 {

+            get { return result.Field5; }

+            set { SetField5(value); }

+          }

+          public Builder SetField5(int value) {

+            PrepareBuilder();

+            result.hasField5 = true;

+            result.field5_ = value;

+            return this;

+          }

+          public Builder ClearField5() {

+            PrepareBuilder();

+            result.hasField5 = false;

+            result.field5_ = 0;

+            return this;

+          }

+          

+          public bool HasField27 {

+            get { return result.hasField27; }

+          }

+          public string Field27 {

+            get { return result.Field27; }

+            set { SetField27(value); }

+          }

+          public Builder SetField27(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField27 = true;

+            result.field27_ = value;

+            return this;

+          }

+          public Builder ClearField27() {

+            PrepareBuilder();

+            result.hasField27 = false;

+            result.field27_ = "";

+            return this;

+          }

+          

+          public bool HasField28 {

+            get { return result.hasField28; }

+          }

+          public int Field28 {

+            get { return result.Field28; }

+            set { SetField28(value); }

+          }

+          public Builder SetField28(int value) {

+            PrepareBuilder();

+            result.hasField28 = true;

+            result.field28_ = value;

+            return this;

+          }

+          public Builder ClearField28() {

+            PrepareBuilder();

+            result.hasField28 = false;

+            result.field28_ = 0;

+            return this;

+          }

+          

+          public bool HasField29 {

+            get { return result.hasField29; }

+          }

+          public string Field29 {

+            get { return result.Field29; }

+            set { SetField29(value); }

+          }

+          public Builder SetField29(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField29 = true;

+            result.field29_ = value;

+            return this;

+          }

+          public Builder ClearField29() {

+            PrepareBuilder();

+            result.hasField29 = false;

+            result.field29_ = "";

+            return this;

+          }

+          

+          public bool HasField16 {

+            get { return result.hasField16; }

+          }

+          public string Field16 {

+            get { return result.Field16; }

+            set { SetField16(value); }

+          }

+          public Builder SetField16(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField16 = true;

+            result.field16_ = value;

+            return this;

+          }

+          public Builder ClearField16() {

+            PrepareBuilder();

+            result.hasField16 = false;

+            result.field16_ = "";

+            return this;

+          }

+          

+          public pbc::IPopsicleList<string> Field22List {

+            get { return PrepareBuilder().field22_; }

+          }

+          public int Field22Count {

+            get { return result.Field22Count; }

+          }

+          public string GetField22(int index) {

+            return result.GetField22(index);

+          }

+          public Builder SetField22(int index, string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field22_[index] = value;

+            return this;

+          }

+          public Builder AddField22(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field22_.Add(value);

+            return this;

+          }

+          public Builder AddRangeField22(scg::IEnumerable<string> values) {

+            PrepareBuilder();

+            result.field22_.Add(values);

+            return this;

+          }

+          public Builder ClearField22() {

+            PrepareBuilder();

+            result.field22_.Clear();

+            return this;

+          }

+          

+          public pbc::IPopsicleList<int> Field73List {

+            get { return PrepareBuilder().field73_; }

+          }

+          public int Field73Count {

+            get { return result.Field73Count; }

+          }

+          public int GetField73(int index) {

+            return result.GetField73(index);

+          }

+          public Builder SetField73(int index, int value) {

+            PrepareBuilder();

+            result.field73_[index] = value;

+            return this;

+          }

+          public Builder AddField73(int value) {

+            PrepareBuilder();

+            result.field73_.Add(value);

+            return this;

+          }

+          public Builder AddRangeField73(scg::IEnumerable<int> values) {

+            PrepareBuilder();

+            result.field73_.Add(values);

+            return this;

+          }

+          public Builder ClearField73() {

+            PrepareBuilder();

+            result.field73_.Clear();

+            return this;

+          }

+          

+          public bool HasField20 {

+            get { return result.hasField20; }

+          }

+          public int Field20 {

+            get { return result.Field20; }

+            set { SetField20(value); }

+          }

+          public Builder SetField20(int value) {

+            PrepareBuilder();

+            result.hasField20 = true;

+            result.field20_ = value;

+            return this;

+          }

+          public Builder ClearField20() {

+            PrepareBuilder();

+            result.hasField20 = false;

+            result.field20_ = 0;

+            return this;

+          }

+          

+          public bool HasField24 {

+            get { return result.hasField24; }

+          }

+          public string Field24 {

+            get { return result.Field24; }

+            set { SetField24(value); }

+          }

+          public Builder SetField24(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField24 = true;

+            result.field24_ = value;

+            return this;

+          }

+          public Builder ClearField24() {

+            PrepareBuilder();

+            result.hasField24 = false;

+            result.field24_ = "";

+            return this;

+          }

+          

+          public bool HasField31 {

+           get { return result.hasField31; }

+          }

+          public global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage Field31 {

+            get { return result.Field31; }

+            set { SetField31(value); }

+          }

+          public Builder SetField31(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField31 = true;

+            result.field31_ = value;

+            return this;

+          }

+          public Builder SetField31(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage.Builder builderForValue) {

+            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+            PrepareBuilder();

+            result.hasField31 = true;

+            result.field31_ = builderForValue.Build();

+            return this;

+          }

+          public Builder MergeField31(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            if (result.hasField31 &&

+                result.field31_ != global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage.DefaultInstance) {

+                result.field31_ = global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage.CreateBuilder(result.field31_).MergeFrom(value).BuildPartial();

+            } else {

+              result.field31_ = value;

+            }

+            result.hasField31 = true;

+            return this;

+          }

+          public Builder ClearField31() {

+            PrepareBuilder();

+            result.hasField31 = false;

+            result.field31_ = null;

+            return this;

+          }

+        }

+        static Group1() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private string field1_ = "";

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public string Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private long field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public long Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field4FieldNumber = 4;

+    private bool hasField4;

+    private long field4_;

+    public bool HasField4 {

+      get { return hasField4; }

+    }

+    public long Field4 {

+      get { return field4_; }

+    }

+    

+    public const int Field30FieldNumber = 30;

+    private bool hasField30;

+    private long field30_;

+    public bool HasField30 {

+      get { return hasField30; }

+    }

+    public long Field30 {

+      get { return field30_; }

+    }

+    

+    public const int Field75FieldNumber = 75;

+    private bool hasField75;

+    private bool field75_;

+    public bool HasField75 {

+      get { return hasField75; }

+    }

+    public bool Field75 {

+      get { return field75_; }

+    }

+    

+    public const int Field6FieldNumber = 6;

+    private bool hasField6;

+    private string field6_ = "";

+    public bool HasField6 {

+      get { return hasField6; }

+    }

+    public string Field6 {

+      get { return field6_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private pb::ByteString field2_ = pb::ByteString.Empty;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public pb::ByteString Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field21FieldNumber = 21;

+    private bool hasField21;

+    private int field21_;

+    public bool HasField21 {

+      get { return hasField21; }

+    }

+    public int Field21 {

+      get { return field21_; }

+    }

+    

+    public const int Field71FieldNumber = 71;

+    private bool hasField71;

+    private int field71_;

+    public bool HasField71 {

+      get { return hasField71; }

+    }

+    public int Field71 {

+      get { return field71_; }

+    }

+    

+    public const int Field25FieldNumber = 25;

+    private bool hasField25;

+    private float field25_;

+    public bool HasField25 {

+      get { return hasField25; }

+    }

+    public float Field25 {

+      get { return field25_; }

+    }

+    

+    public const int Field109FieldNumber = 109;

+    private bool hasField109;

+    private int field109_;

+    public bool HasField109 {

+      get { return hasField109; }

+    }

+    public int Field109 {

+      get { return field109_; }

+    }

+    

+    public const int Field210FieldNumber = 210;

+    private bool hasField210;

+    private int field210_;

+    public bool HasField210 {

+      get { return hasField210; }

+    }

+    public int Field210 {

+      get { return field210_; }

+    }

+    

+    public const int Field211FieldNumber = 211;

+    private bool hasField211;

+    private int field211_;

+    public bool HasField211 {

+      get { return hasField211; }

+    }

+    public int Field211 {

+      get { return field211_; }

+    }

+    

+    public const int Field212FieldNumber = 212;

+    private bool hasField212;

+    private int field212_;

+    public bool HasField212 {

+      get { return hasField212; }

+    }

+    public int Field212 {

+      get { return field212_; }

+    }

+    

+    public const int Field213FieldNumber = 213;

+    private bool hasField213;

+    private int field213_;

+    public bool HasField213 {

+      get { return hasField213; }

+    }

+    public int Field213 {

+      get { return field213_; }

+    }

+    

+    public const int Field216FieldNumber = 216;

+    private bool hasField216;

+    private int field216_;

+    public bool HasField216 {

+      get { return hasField216; }

+    }

+    public int Field216 {

+      get { return field216_; }

+    }

+    

+    public const int Field217FieldNumber = 217;

+    private bool hasField217;

+    private int field217_;

+    public bool HasField217 {

+      get { return hasField217; }

+    }

+    public int Field217 {

+      get { return field217_; }

+    }

+    

+    public const int Field218FieldNumber = 218;

+    private bool hasField218;

+    private int field218_;

+    public bool HasField218 {

+      get { return hasField218; }

+    }

+    public int Field218 {

+      get { return field218_; }

+    }

+    

+    public const int Field220FieldNumber = 220;

+    private bool hasField220;

+    private int field220_;

+    public bool HasField220 {

+      get { return hasField220; }

+    }

+    public int Field220 {

+      get { return field220_; }

+    }

+    

+    public const int Field221FieldNumber = 221;

+    private bool hasField221;

+    private int field221_;

+    public bool HasField221 {

+      get { return hasField221; }

+    }

+    public int Field221 {

+      get { return field221_; }

+    }

+    

+    public const int Field222FieldNumber = 222;

+    private bool hasField222;

+    private float field222_;

+    public bool HasField222 {

+      get { return hasField222; }

+    }

+    public float Field222 {

+      get { return field222_; }

+    }

+    

+    public const int Field63FieldNumber = 63;

+    private bool hasField63;

+    private int field63_;

+    public bool HasField63 {

+      get { return hasField63; }

+    }

+    public int Field63 {

+      get { return field63_; }

+    }

+    

+    public const int Group1FieldNumber = 10;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1> group1_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1>();

+    public scg::IList<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1> Group1List {

+      get { return group1_; }

+    }

+    public int Group1Count {

+      get { return group1_.Count; }

+    }

+    public global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1 GetGroup1(int index) {

+      return group1_[index];

+    }

+    

+    public const int Field128FieldNumber = 128;

+    private pbc::PopsicleList<string> field128_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> Field128List {

+      get { return pbc::Lists.AsReadOnly(field128_); }

+    }

+    public int Field128Count {

+      get { return field128_.Count; }

+    }

+    public string GetField128(int index) {

+      return field128_[index];

+    }

+    

+    public const int Field131FieldNumber = 131;

+    private bool hasField131;

+    private long field131_;

+    public bool HasField131 {

+      get { return hasField131; }

+    }

+    public long Field131 {

+      get { return field131_; }

+    }

+    

+    public const int Field127FieldNumber = 127;

+    private pbc::PopsicleList<string> field127_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> Field127List {

+      get { return pbc::Lists.AsReadOnly(field127_); }

+    }

+    public int Field127Count {

+      get { return field127_.Count; }

+    }

+    public string GetField127(int index) {

+      return field127_[index];

+    }

+    

+    public const int Field129FieldNumber = 129;

+    private bool hasField129;

+    private int field129_;

+    public bool HasField129 {

+      get { return hasField129; }

+    }

+    public int Field129 {

+      get { return field129_; }

+    }

+    

+    public const int Field130FieldNumber = 130;

+    private pbc::PopsicleList<long> field130_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> Field130List {

+      get { return pbc::Lists.AsReadOnly(field130_); }

+    }

+    public int Field130Count {

+      get { return field130_.Count; }

+    }

+    public long GetField130(int index) {

+      return field130_[index];

+    }

+    

+    public const int Field205FieldNumber = 205;

+    private bool hasField205;

+    private bool field205_;

+    public bool HasField205 {

+      get { return hasField205; }

+    }

+    public bool Field205 {

+      get { return field205_; }

+    }

+    

+    public const int Field206FieldNumber = 206;

+    private bool hasField206;

+    private bool field206_;

+    public bool HasField206 {

+      get { return hasField206; }

+    }

+    public bool Field206 {

+      get { return field206_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _speedMessage2FieldNames;

+      if (hasField1) {

+        output.WriteString(1, field_names[0], Field1);

+      }

+      if (hasField2) {

+        output.WriteBytes(2, field_names[7], Field2);

+      }

+      if (hasField3) {

+        output.WriteInt64(3, field_names[22], Field3);

+      }

+      if (hasField4) {

+        output.WriteInt64(4, field_names[24], Field4);

+      }

+      if (hasField6) {

+        output.WriteString(6, field_names[25], Field6);

+      }

+      if (group1_.Count > 0) {

+        output.WriteGroupArray(10, field_names[29], group1_);

+      }

+      if (hasField21) {

+        output.WriteInt32(21, field_names[10], Field21);

+      }

+      if (hasField25) {

+        output.WriteFloat(25, field_names[21], Field25);

+      }

+      if (hasField30) {

+        output.WriteInt64(30, field_names[23], Field30);

+      }

+      if (hasField63) {

+        output.WriteInt32(63, field_names[26], Field63);

+      }

+      if (hasField71) {

+        output.WriteInt32(71, field_names[27], Field71);

+      }

+      if (hasField75) {

+        output.WriteBool(75, field_names[28], Field75);

+      }

+      if (hasField109) {

+        output.WriteInt32(109, field_names[1], Field109);

+      }

+      if (field127_.Count > 0) {

+        output.WriteStringArray(127, field_names[2], field127_);

+      }

+      if (field128_.Count > 0) {

+        output.WriteStringArray(128, field_names[3], field128_);

+      }

+      if (hasField129) {

+        output.WriteInt32(129, field_names[4], Field129);

+      }

+      if (field130_.Count > 0) {

+        output.WriteInt64Array(130, field_names[5], field130_);

+      }

+      if (hasField131) {

+        output.WriteInt64(131, field_names[6], Field131);

+      }

+      if (hasField205) {

+        output.WriteBool(205, field_names[8], Field205);

+      }

+      if (hasField206) {

+        output.WriteBool(206, field_names[9], Field206);

+      }

+      if (hasField210) {

+        output.WriteInt32(210, field_names[11], Field210);

+      }

+      if (hasField211) {

+        output.WriteInt32(211, field_names[12], Field211);

+      }

+      if (hasField212) {

+        output.WriteInt32(212, field_names[13], Field212);

+      }

+      if (hasField213) {

+        output.WriteInt32(213, field_names[14], Field213);

+      }

+      if (hasField216) {

+        output.WriteInt32(216, field_names[15], Field216);

+      }

+      if (hasField217) {

+        output.WriteInt32(217, field_names[16], Field217);

+      }

+      if (hasField218) {

+        output.WriteInt32(218, field_names[17], Field218);

+      }

+      if (hasField220) {

+        output.WriteInt32(220, field_names[18], Field220);

+      }

+      if (hasField221) {

+        output.WriteInt32(221, field_names[19], Field221);

+      }

+      if (hasField222) {

+        output.WriteFloat(222, field_names[20], Field222);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasField1) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Field1);

+      }

+      if (hasField3) {

+        size += pb::CodedOutputStream.ComputeInt64Size(3, Field3);

+      }

+      if (hasField4) {

+        size += pb::CodedOutputStream.ComputeInt64Size(4, Field4);

+      }

+      if (hasField30) {

+        size += pb::CodedOutputStream.ComputeInt64Size(30, Field30);

+      }

+      if (hasField75) {

+        size += pb::CodedOutputStream.ComputeBoolSize(75, Field75);

+      }

+      if (hasField6) {

+        size += pb::CodedOutputStream.ComputeStringSize(6, Field6);

+      }

+      if (hasField2) {

+        size += pb::CodedOutputStream.ComputeBytesSize(2, Field2);

+      }

+      if (hasField21) {

+        size += pb::CodedOutputStream.ComputeInt32Size(21, Field21);

+      }

+      if (hasField71) {

+        size += pb::CodedOutputStream.ComputeInt32Size(71, Field71);

+      }

+      if (hasField25) {

+        size += pb::CodedOutputStream.ComputeFloatSize(25, Field25);

+      }

+      if (hasField109) {

+        size += pb::CodedOutputStream.ComputeInt32Size(109, Field109);

+      }

+      if (hasField210) {

+        size += pb::CodedOutputStream.ComputeInt32Size(210, Field210);

+      }

+      if (hasField211) {

+        size += pb::CodedOutputStream.ComputeInt32Size(211, Field211);

+      }

+      if (hasField212) {

+        size += pb::CodedOutputStream.ComputeInt32Size(212, Field212);

+      }

+      if (hasField213) {

+        size += pb::CodedOutputStream.ComputeInt32Size(213, Field213);

+      }

+      if (hasField216) {

+        size += pb::CodedOutputStream.ComputeInt32Size(216, Field216);

+      }

+      if (hasField217) {

+        size += pb::CodedOutputStream.ComputeInt32Size(217, Field217);

+      }

+      if (hasField218) {

+        size += pb::CodedOutputStream.ComputeInt32Size(218, Field218);

+      }

+      if (hasField220) {

+        size += pb::CodedOutputStream.ComputeInt32Size(220, Field220);

+      }

+      if (hasField221) {

+        size += pb::CodedOutputStream.ComputeInt32Size(221, Field221);

+      }

+      if (hasField222) {

+        size += pb::CodedOutputStream.ComputeFloatSize(222, Field222);

+      }

+      if (hasField63) {

+        size += pb::CodedOutputStream.ComputeInt32Size(63, Field63);

+      }

+      foreach (global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1 element in Group1List) {

+        size += pb::CodedOutputStream.ComputeGroupSize(10, element);

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in Field128List) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * field128_.Count;

+      }

+      if (hasField131) {

+        size += pb::CodedOutputStream.ComputeInt64Size(131, Field131);

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in Field127List) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * field127_.Count;

+      }

+      if (hasField129) {

+        size += pb::CodedOutputStream.ComputeInt32Size(129, Field129);

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in Field130List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * field130_.Count;

+      }

+      if (hasField205) {

+        size += pb::CodedOutputStream.ComputeBoolSize(205, Field205);

+      }

+      if (hasField206) {

+        size += pb::CodedOutputStream.ComputeBoolSize(206, Field206);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SpeedMessage2 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SpeedMessage2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SpeedMessage2 MakeReadOnly() {

+      group1_.MakeReadOnly();

+      field128_.MakeReadOnly();

+      field127_.MakeReadOnly();

+      field130_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SpeedMessage2 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage2, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SpeedMessage2 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SpeedMessage2 result;

+      

+      private SpeedMessage2 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SpeedMessage2 original = result;

+          result = new SpeedMessage2();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SpeedMessage2 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Descriptor; }

+      }

+      

+      public override SpeedMessage2 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.DefaultInstance; }

+      }

+      

+      public override SpeedMessage2 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SpeedMessage2) {

+          return MergeFrom((SpeedMessage2) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SpeedMessage2 other) {

+        if (other == global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasField1) {

+          Field1 = other.Field1;

+        }

+        if (other.HasField3) {

+          Field3 = other.Field3;

+        }

+        if (other.HasField4) {

+          Field4 = other.Field4;

+        }

+        if (other.HasField30) {

+          Field30 = other.Field30;

+        }

+        if (other.HasField75) {

+          Field75 = other.Field75;

+        }

+        if (other.HasField6) {

+          Field6 = other.Field6;

+        }

+        if (other.HasField2) {

+          Field2 = other.Field2;

+        }

+        if (other.HasField21) {

+          Field21 = other.Field21;

+        }

+        if (other.HasField71) {

+          Field71 = other.Field71;

+        }

+        if (other.HasField25) {

+          Field25 = other.Field25;

+        }

+        if (other.HasField109) {

+          Field109 = other.Field109;

+        }

+        if (other.HasField210) {

+          Field210 = other.Field210;

+        }

+        if (other.HasField211) {

+          Field211 = other.Field211;

+        }

+        if (other.HasField212) {

+          Field212 = other.Field212;

+        }

+        if (other.HasField213) {

+          Field213 = other.Field213;

+        }

+        if (other.HasField216) {

+          Field216 = other.Field216;

+        }

+        if (other.HasField217) {

+          Field217 = other.Field217;

+        }

+        if (other.HasField218) {

+          Field218 = other.Field218;

+        }

+        if (other.HasField220) {

+          Field220 = other.Field220;

+        }

+        if (other.HasField221) {

+          Field221 = other.Field221;

+        }

+        if (other.HasField222) {

+          Field222 = other.Field222;

+        }

+        if (other.HasField63) {

+          Field63 = other.Field63;

+        }

+        if (other.group1_.Count != 0) {

+          result.group1_.Add(other.group1_);

+        }

+        if (other.field128_.Count != 0) {

+          result.field128_.Add(other.field128_);

+        }

+        if (other.HasField131) {

+          Field131 = other.Field131;

+        }

+        if (other.field127_.Count != 0) {

+          result.field127_.Add(other.field127_);

+        }

+        if (other.HasField129) {

+          Field129 = other.Field129;

+        }

+        if (other.field130_.Count != 0) {

+          result.field130_.Add(other.field130_);

+        }

+        if (other.HasField205) {

+          Field205 = other.Field205;

+        }

+        if (other.HasField206) {

+          Field206 = other.Field206;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_speedMessage2FieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _speedMessage2FieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasField1 = input.ReadString(ref result.field1_);

+              break;

+            }

+            case 18: {

+              result.hasField2 = input.ReadBytes(ref result.field2_);

+              break;

+            }

+            case 24: {

+              result.hasField3 = input.ReadInt64(ref result.field3_);

+              break;

+            }

+            case 32: {

+              result.hasField4 = input.ReadInt64(ref result.field4_);

+              break;

+            }

+            case 50: {

+              result.hasField6 = input.ReadString(ref result.field6_);

+              break;

+            }

+            case 83: {

+              input.ReadGroupArray(tag, field_name, result.group1_, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 168: {

+              result.hasField21 = input.ReadInt32(ref result.field21_);

+              break;

+            }

+            case 205: {

+              result.hasField25 = input.ReadFloat(ref result.field25_);

+              break;

+            }

+            case 240: {

+              result.hasField30 = input.ReadInt64(ref result.field30_);

+              break;

+            }

+            case 504: {

+              result.hasField63 = input.ReadInt32(ref result.field63_);

+              break;

+            }

+            case 568: {

+              result.hasField71 = input.ReadInt32(ref result.field71_);

+              break;

+            }

+            case 600: {

+              result.hasField75 = input.ReadBool(ref result.field75_);

+              break;

+            }

+            case 872: {

+              result.hasField109 = input.ReadInt32(ref result.field109_);

+              break;

+            }

+            case 1018: {

+              input.ReadStringArray(tag, field_name, result.field127_);

+              break;

+            }

+            case 1026: {

+              input.ReadStringArray(tag, field_name, result.field128_);

+              break;

+            }

+            case 1032: {

+              result.hasField129 = input.ReadInt32(ref result.field129_);

+              break;

+            }

+            case 1042:

+            case 1040: {

+              input.ReadInt64Array(tag, field_name, result.field130_);

+              break;

+            }

+            case 1048: {

+              result.hasField131 = input.ReadInt64(ref result.field131_);

+              break;

+            }

+            case 1640: {

+              result.hasField205 = input.ReadBool(ref result.field205_);

+              break;

+            }

+            case 1648: {

+              result.hasField206 = input.ReadBool(ref result.field206_);

+              break;

+            }

+            case 1680: {

+              result.hasField210 = input.ReadInt32(ref result.field210_);

+              break;

+            }

+            case 1688: {

+              result.hasField211 = input.ReadInt32(ref result.field211_);

+              break;

+            }

+            case 1696: {

+              result.hasField212 = input.ReadInt32(ref result.field212_);

+              break;

+            }

+            case 1704: {

+              result.hasField213 = input.ReadInt32(ref result.field213_);

+              break;

+            }

+            case 1728: {

+              result.hasField216 = input.ReadInt32(ref result.field216_);

+              break;

+            }

+            case 1736: {

+              result.hasField217 = input.ReadInt32(ref result.field217_);

+              break;

+            }

+            case 1744: {

+              result.hasField218 = input.ReadInt32(ref result.field218_);

+              break;

+            }

+            case 1760: {

+              result.hasField220 = input.ReadInt32(ref result.field220_);

+              break;

+            }

+            case 1768: {

+              result.hasField221 = input.ReadInt32(ref result.field221_);

+              break;

+            }

+            case 1781: {

+              result.hasField222 = input.ReadFloat(ref result.field222_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public string Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = "";

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public long Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(long value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0L;

+        return this;

+      }

+      

+      public bool HasField4 {

+        get { return result.hasField4; }

+      }

+      public long Field4 {

+        get { return result.Field4; }

+        set { SetField4(value); }

+      }

+      public Builder SetField4(long value) {

+        PrepareBuilder();

+        result.hasField4 = true;

+        result.field4_ = value;

+        return this;

+      }

+      public Builder ClearField4() {

+        PrepareBuilder();

+        result.hasField4 = false;

+        result.field4_ = 0L;

+        return this;

+      }

+      

+      public bool HasField30 {

+        get { return result.hasField30; }

+      }

+      public long Field30 {

+        get { return result.Field30; }

+        set { SetField30(value); }

+      }

+      public Builder SetField30(long value) {

+        PrepareBuilder();

+        result.hasField30 = true;

+        result.field30_ = value;

+        return this;

+      }

+      public Builder ClearField30() {

+        PrepareBuilder();

+        result.hasField30 = false;

+        result.field30_ = 0L;

+        return this;

+      }

+      

+      public bool HasField75 {

+        get { return result.hasField75; }

+      }

+      public bool Field75 {

+        get { return result.Field75; }

+        set { SetField75(value); }

+      }

+      public Builder SetField75(bool value) {

+        PrepareBuilder();

+        result.hasField75 = true;

+        result.field75_ = value;

+        return this;

+      }

+      public Builder ClearField75() {

+        PrepareBuilder();

+        result.hasField75 = false;

+        result.field75_ = false;

+        return this;

+      }

+      

+      public bool HasField6 {

+        get { return result.hasField6; }

+      }

+      public string Field6 {

+        get { return result.Field6; }

+        set { SetField6(value); }

+      }

+      public Builder SetField6(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField6 = true;

+        result.field6_ = value;

+        return this;

+      }

+      public Builder ClearField6() {

+        PrepareBuilder();

+        result.hasField6 = false;

+        result.field6_ = "";

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public pb::ByteString Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = pb::ByteString.Empty;

+        return this;

+      }

+      

+      public bool HasField21 {

+        get { return result.hasField21; }

+      }

+      public int Field21 {

+        get { return result.Field21; }

+        set { SetField21(value); }

+      }

+      public Builder SetField21(int value) {

+        PrepareBuilder();

+        result.hasField21 = true;

+        result.field21_ = value;

+        return this;

+      }

+      public Builder ClearField21() {

+        PrepareBuilder();

+        result.hasField21 = false;

+        result.field21_ = 0;

+        return this;

+      }

+      

+      public bool HasField71 {

+        get { return result.hasField71; }

+      }

+      public int Field71 {

+        get { return result.Field71; }

+        set { SetField71(value); }

+      }

+      public Builder SetField71(int value) {

+        PrepareBuilder();

+        result.hasField71 = true;

+        result.field71_ = value;

+        return this;

+      }

+      public Builder ClearField71() {

+        PrepareBuilder();

+        result.hasField71 = false;

+        result.field71_ = 0;

+        return this;

+      }

+      

+      public bool HasField25 {

+        get { return result.hasField25; }

+      }

+      public float Field25 {

+        get { return result.Field25; }

+        set { SetField25(value); }

+      }

+      public Builder SetField25(float value) {

+        PrepareBuilder();

+        result.hasField25 = true;

+        result.field25_ = value;

+        return this;

+      }

+      public Builder ClearField25() {

+        PrepareBuilder();

+        result.hasField25 = false;

+        result.field25_ = 0F;

+        return this;

+      }

+      

+      public bool HasField109 {

+        get { return result.hasField109; }

+      }

+      public int Field109 {

+        get { return result.Field109; }

+        set { SetField109(value); }

+      }

+      public Builder SetField109(int value) {

+        PrepareBuilder();

+        result.hasField109 = true;

+        result.field109_ = value;

+        return this;

+      }

+      public Builder ClearField109() {

+        PrepareBuilder();

+        result.hasField109 = false;

+        result.field109_ = 0;

+        return this;

+      }

+      

+      public bool HasField210 {

+        get { return result.hasField210; }

+      }

+      public int Field210 {

+        get { return result.Field210; }

+        set { SetField210(value); }

+      }

+      public Builder SetField210(int value) {

+        PrepareBuilder();

+        result.hasField210 = true;

+        result.field210_ = value;

+        return this;

+      }

+      public Builder ClearField210() {

+        PrepareBuilder();

+        result.hasField210 = false;

+        result.field210_ = 0;

+        return this;

+      }

+      

+      public bool HasField211 {

+        get { return result.hasField211; }

+      }

+      public int Field211 {

+        get { return result.Field211; }

+        set { SetField211(value); }

+      }

+      public Builder SetField211(int value) {

+        PrepareBuilder();

+        result.hasField211 = true;

+        result.field211_ = value;

+        return this;

+      }

+      public Builder ClearField211() {

+        PrepareBuilder();

+        result.hasField211 = false;

+        result.field211_ = 0;

+        return this;

+      }

+      

+      public bool HasField212 {

+        get { return result.hasField212; }

+      }

+      public int Field212 {

+        get { return result.Field212; }

+        set { SetField212(value); }

+      }

+      public Builder SetField212(int value) {

+        PrepareBuilder();

+        result.hasField212 = true;

+        result.field212_ = value;

+        return this;

+      }

+      public Builder ClearField212() {

+        PrepareBuilder();

+        result.hasField212 = false;

+        result.field212_ = 0;

+        return this;

+      }

+      

+      public bool HasField213 {

+        get { return result.hasField213; }

+      }

+      public int Field213 {

+        get { return result.Field213; }

+        set { SetField213(value); }

+      }

+      public Builder SetField213(int value) {

+        PrepareBuilder();

+        result.hasField213 = true;

+        result.field213_ = value;

+        return this;

+      }

+      public Builder ClearField213() {

+        PrepareBuilder();

+        result.hasField213 = false;

+        result.field213_ = 0;

+        return this;

+      }

+      

+      public bool HasField216 {

+        get { return result.hasField216; }

+      }

+      public int Field216 {

+        get { return result.Field216; }

+        set { SetField216(value); }

+      }

+      public Builder SetField216(int value) {

+        PrepareBuilder();

+        result.hasField216 = true;

+        result.field216_ = value;

+        return this;

+      }

+      public Builder ClearField216() {

+        PrepareBuilder();

+        result.hasField216 = false;

+        result.field216_ = 0;

+        return this;

+      }

+      

+      public bool HasField217 {

+        get { return result.hasField217; }

+      }

+      public int Field217 {

+        get { return result.Field217; }

+        set { SetField217(value); }

+      }

+      public Builder SetField217(int value) {

+        PrepareBuilder();

+        result.hasField217 = true;

+        result.field217_ = value;

+        return this;

+      }

+      public Builder ClearField217() {

+        PrepareBuilder();

+        result.hasField217 = false;

+        result.field217_ = 0;

+        return this;

+      }

+      

+      public bool HasField218 {

+        get { return result.hasField218; }

+      }

+      public int Field218 {

+        get { return result.Field218; }

+        set { SetField218(value); }

+      }

+      public Builder SetField218(int value) {

+        PrepareBuilder();

+        result.hasField218 = true;

+        result.field218_ = value;

+        return this;

+      }

+      public Builder ClearField218() {

+        PrepareBuilder();

+        result.hasField218 = false;

+        result.field218_ = 0;

+        return this;

+      }

+      

+      public bool HasField220 {

+        get { return result.hasField220; }

+      }

+      public int Field220 {

+        get { return result.Field220; }

+        set { SetField220(value); }

+      }

+      public Builder SetField220(int value) {

+        PrepareBuilder();

+        result.hasField220 = true;

+        result.field220_ = value;

+        return this;

+      }

+      public Builder ClearField220() {

+        PrepareBuilder();

+        result.hasField220 = false;

+        result.field220_ = 0;

+        return this;

+      }

+      

+      public bool HasField221 {

+        get { return result.hasField221; }

+      }

+      public int Field221 {

+        get { return result.Field221; }

+        set { SetField221(value); }

+      }

+      public Builder SetField221(int value) {

+        PrepareBuilder();

+        result.hasField221 = true;

+        result.field221_ = value;

+        return this;

+      }

+      public Builder ClearField221() {

+        PrepareBuilder();

+        result.hasField221 = false;

+        result.field221_ = 0;

+        return this;

+      }

+      

+      public bool HasField222 {

+        get { return result.hasField222; }

+      }

+      public float Field222 {

+        get { return result.Field222; }

+        set { SetField222(value); }

+      }

+      public Builder SetField222(float value) {

+        PrepareBuilder();

+        result.hasField222 = true;

+        result.field222_ = value;

+        return this;

+      }

+      public Builder ClearField222() {

+        PrepareBuilder();

+        result.hasField222 = false;

+        result.field222_ = 0F;

+        return this;

+      }

+      

+      public bool HasField63 {

+        get { return result.hasField63; }

+      }

+      public int Field63 {

+        get { return result.Field63; }

+        set { SetField63(value); }

+      }

+      public Builder SetField63(int value) {

+        PrepareBuilder();

+        result.hasField63 = true;

+        result.field63_ = value;

+        return this;

+      }

+      public Builder ClearField63() {

+        PrepareBuilder();

+        result.hasField63 = false;

+        result.field63_ = 0;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1> Group1List {

+        get { return PrepareBuilder().group1_; }

+      }

+      public int Group1Count {

+        get { return result.Group1Count; }

+      }

+      public global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1 GetGroup1(int index) {

+        return result.GetGroup1(index);

+      }

+      public Builder SetGroup1(int index, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.group1_[index] = value;

+        return this;

+      }

+      public Builder SetGroup1(int index, global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.group1_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddGroup1(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.group1_.Add(value);

+        return this;

+      }

+      public Builder AddGroup1(global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.group1_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeGroup1(scg::IEnumerable<global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2.Types.Group1> values) {

+        PrepareBuilder();

+        result.group1_.Add(values);

+        return this;

+      }

+      public Builder ClearGroup1() {

+        PrepareBuilder();

+        result.group1_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> Field128List {

+        get { return PrepareBuilder().field128_; }

+      }

+      public int Field128Count {

+        get { return result.Field128Count; }

+      }

+      public string GetField128(int index) {

+        return result.GetField128(index);

+      }

+      public Builder SetField128(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field128_[index] = value;

+        return this;

+      }

+      public Builder AddField128(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field128_.Add(value);

+        return this;

+      }

+      public Builder AddRangeField128(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.field128_.Add(values);

+        return this;

+      }

+      public Builder ClearField128() {

+        PrepareBuilder();

+        result.field128_.Clear();

+        return this;

+      }

+      

+      public bool HasField131 {

+        get { return result.hasField131; }

+      }

+      public long Field131 {

+        get { return result.Field131; }

+        set { SetField131(value); }

+      }

+      public Builder SetField131(long value) {

+        PrepareBuilder();

+        result.hasField131 = true;

+        result.field131_ = value;

+        return this;

+      }

+      public Builder ClearField131() {

+        PrepareBuilder();

+        result.hasField131 = false;

+        result.field131_ = 0L;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> Field127List {

+        get { return PrepareBuilder().field127_; }

+      }

+      public int Field127Count {

+        get { return result.Field127Count; }

+      }

+      public string GetField127(int index) {

+        return result.GetField127(index);

+      }

+      public Builder SetField127(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field127_[index] = value;

+        return this;

+      }

+      public Builder AddField127(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field127_.Add(value);

+        return this;

+      }

+      public Builder AddRangeField127(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.field127_.Add(values);

+        return this;

+      }

+      public Builder ClearField127() {

+        PrepareBuilder();

+        result.field127_.Clear();

+        return this;

+      }

+      

+      public bool HasField129 {

+        get { return result.hasField129; }

+      }

+      public int Field129 {

+        get { return result.Field129; }

+        set { SetField129(value); }

+      }

+      public Builder SetField129(int value) {

+        PrepareBuilder();

+        result.hasField129 = true;

+        result.field129_ = value;

+        return this;

+      }

+      public Builder ClearField129() {

+        PrepareBuilder();

+        result.hasField129 = false;

+        result.field129_ = 0;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> Field130List {

+        get { return PrepareBuilder().field130_; }

+      }

+      public int Field130Count {

+        get { return result.Field130Count; }

+      }

+      public long GetField130(int index) {

+        return result.GetField130(index);

+      }

+      public Builder SetField130(int index, long value) {

+        PrepareBuilder();

+        result.field130_[index] = value;

+        return this;

+      }

+      public Builder AddField130(long value) {

+        PrepareBuilder();

+        result.field130_.Add(value);

+        return this;

+      }

+      public Builder AddRangeField130(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.field130_.Add(values);

+        return this;

+      }

+      public Builder ClearField130() {

+        PrepareBuilder();

+        result.field130_.Clear();

+        return this;

+      }

+      

+      public bool HasField205 {

+        get { return result.hasField205; }

+      }

+      public bool Field205 {

+        get { return result.Field205; }

+        set { SetField205(value); }

+      }

+      public Builder SetField205(bool value) {

+        PrepareBuilder();

+        result.hasField205 = true;

+        result.field205_ = value;

+        return this;

+      }

+      public Builder ClearField205() {

+        PrepareBuilder();

+        result.hasField205 = false;

+        result.field205_ = false;

+        return this;

+      }

+      

+      public bool HasField206 {

+        get { return result.hasField206; }

+      }

+      public bool Field206 {

+        get { return result.Field206; }

+        set { SetField206(value); }

+      }

+      public Builder SetField206(bool value) {

+        PrepareBuilder();

+        result.hasField206 = true;

+        result.field206_ = value;

+        return this;

+      }

+      public Builder ClearField206() {

+        PrepareBuilder();

+        result.hasField206 = false;

+        result.field206_ = false;

+        return this;

+      }

+    }

+    static SpeedMessage2() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SpeedMessage2GroupedMessage : pb::GeneratedMessage<SpeedMessage2GroupedMessage, SpeedMessage2GroupedMessage.Builder> {

+    private SpeedMessage2GroupedMessage() { }

+    private static readonly SpeedMessage2GroupedMessage defaultInstance = new SpeedMessage2GroupedMessage().MakeReadOnly();

+    private static readonly string[] _speedMessage2GroupedMessageFieldNames = new string[] { "field1", "field10", "field11", "field2", "field3", "field4", "field5", "field6", "field7", "field8", "field9" };

+    private static readonly uint[] _speedMessage2GroupedMessageFieldTags = new uint[] { 13, 85, 88, 21, 29, 32, 40, 48, 56, 69, 72 };

+    public static SpeedMessage2GroupedMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SpeedMessage2GroupedMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SpeedMessage2GroupedMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage2GroupedMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage2GroupedMessage, SpeedMessage2GroupedMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.internal__static_benchmarks_SpeedMessage2GroupedMessage__FieldAccessorTable; }

+    }

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private float field1_;

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public float Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private float field2_;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public float Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private float field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public float Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field4FieldNumber = 4;

+    private bool hasField4;

+    private bool field4_;

+    public bool HasField4 {

+      get { return hasField4; }

+    }

+    public bool Field4 {

+      get { return field4_; }

+    }

+    

+    public const int Field5FieldNumber = 5;

+    private bool hasField5;

+    private bool field5_;

+    public bool HasField5 {

+      get { return hasField5; }

+    }

+    public bool Field5 {

+      get { return field5_; }

+    }

+    

+    public const int Field6FieldNumber = 6;

+    private bool hasField6;

+    private bool field6_ = true;

+    public bool HasField6 {

+      get { return hasField6; }

+    }

+    public bool Field6 {

+      get { return field6_; }

+    }

+    

+    public const int Field7FieldNumber = 7;

+    private bool hasField7;

+    private bool field7_;

+    public bool HasField7 {

+      get { return hasField7; }

+    }

+    public bool Field7 {

+      get { return field7_; }

+    }

+    

+    public const int Field8FieldNumber = 8;

+    private bool hasField8;

+    private float field8_;

+    public bool HasField8 {

+      get { return hasField8; }

+    }

+    public float Field8 {

+      get { return field8_; }

+    }

+    

+    public const int Field9FieldNumber = 9;

+    private bool hasField9;

+    private bool field9_;

+    public bool HasField9 {

+      get { return hasField9; }

+    }

+    public bool Field9 {

+      get { return field9_; }

+    }

+    

+    public const int Field10FieldNumber = 10;

+    private bool hasField10;

+    private float field10_;

+    public bool HasField10 {

+      get { return hasField10; }

+    }

+    public float Field10 {

+      get { return field10_; }

+    }

+    

+    public const int Field11FieldNumber = 11;

+    private bool hasField11;

+    private long field11_;

+    public bool HasField11 {

+      get { return hasField11; }

+    }

+    public long Field11 {

+      get { return field11_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _speedMessage2GroupedMessageFieldNames;

+      if (hasField1) {

+        output.WriteFloat(1, field_names[0], Field1);

+      }

+      if (hasField2) {

+        output.WriteFloat(2, field_names[3], Field2);

+      }

+      if (hasField3) {

+        output.WriteFloat(3, field_names[4], Field3);

+      }

+      if (hasField4) {

+        output.WriteBool(4, field_names[5], Field4);

+      }

+      if (hasField5) {

+        output.WriteBool(5, field_names[6], Field5);

+      }

+      if (hasField6) {

+        output.WriteBool(6, field_names[7], Field6);

+      }

+      if (hasField7) {

+        output.WriteBool(7, field_names[8], Field7);

+      }

+      if (hasField8) {

+        output.WriteFloat(8, field_names[9], Field8);

+      }

+      if (hasField9) {

+        output.WriteBool(9, field_names[10], Field9);

+      }

+      if (hasField10) {

+        output.WriteFloat(10, field_names[1], Field10);

+      }

+      if (hasField11) {

+        output.WriteInt64(11, field_names[2], Field11);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasField1) {

+        size += pb::CodedOutputStream.ComputeFloatSize(1, Field1);

+      }

+      if (hasField2) {

+        size += pb::CodedOutputStream.ComputeFloatSize(2, Field2);

+      }

+      if (hasField3) {

+        size += pb::CodedOutputStream.ComputeFloatSize(3, Field3);

+      }

+      if (hasField4) {

+        size += pb::CodedOutputStream.ComputeBoolSize(4, Field4);

+      }

+      if (hasField5) {

+        size += pb::CodedOutputStream.ComputeBoolSize(5, Field5);

+      }

+      if (hasField6) {

+        size += pb::CodedOutputStream.ComputeBoolSize(6, Field6);

+      }

+      if (hasField7) {

+        size += pb::CodedOutputStream.ComputeBoolSize(7, Field7);

+      }

+      if (hasField8) {

+        size += pb::CodedOutputStream.ComputeFloatSize(8, Field8);

+      }

+      if (hasField9) {

+        size += pb::CodedOutputStream.ComputeBoolSize(9, Field9);

+      }

+      if (hasField10) {

+        size += pb::CodedOutputStream.ComputeFloatSize(10, Field10);

+      }

+      if (hasField11) {

+        size += pb::CodedOutputStream.ComputeInt64Size(11, Field11);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SpeedMessage2GroupedMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SpeedMessage2GroupedMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage2GroupedMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SpeedMessage2GroupedMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SpeedMessage2GroupedMessage result;

+      

+      private SpeedMessage2GroupedMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SpeedMessage2GroupedMessage original = result;

+          result = new SpeedMessage2GroupedMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SpeedMessage2GroupedMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage.Descriptor; }

+      }

+      

+      public override SpeedMessage2GroupedMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage.DefaultInstance; }

+      }

+      

+      public override SpeedMessage2GroupedMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SpeedMessage2GroupedMessage) {

+          return MergeFrom((SpeedMessage2GroupedMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SpeedMessage2GroupedMessage other) {

+        if (other == global::Google.ProtocolBuffers.ProtoBench.SpeedMessage2GroupedMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasField1) {

+          Field1 = other.Field1;

+        }

+        if (other.HasField2) {

+          Field2 = other.Field2;

+        }

+        if (other.HasField3) {

+          Field3 = other.Field3;

+        }

+        if (other.HasField4) {

+          Field4 = other.Field4;

+        }

+        if (other.HasField5) {

+          Field5 = other.Field5;

+        }

+        if (other.HasField6) {

+          Field6 = other.Field6;

+        }

+        if (other.HasField7) {

+          Field7 = other.Field7;

+        }

+        if (other.HasField8) {

+          Field8 = other.Field8;

+        }

+        if (other.HasField9) {

+          Field9 = other.Field9;

+        }

+        if (other.HasField10) {

+          Field10 = other.Field10;

+        }

+        if (other.HasField11) {

+          Field11 = other.Field11;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_speedMessage2GroupedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _speedMessage2GroupedMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 13: {

+              result.hasField1 = input.ReadFloat(ref result.field1_);

+              break;

+            }

+            case 21: {

+              result.hasField2 = input.ReadFloat(ref result.field2_);

+              break;

+            }

+            case 29: {

+              result.hasField3 = input.ReadFloat(ref result.field3_);

+              break;

+            }

+            case 32: {

+              result.hasField4 = input.ReadBool(ref result.field4_);

+              break;

+            }

+            case 40: {

+              result.hasField5 = input.ReadBool(ref result.field5_);

+              break;

+            }

+            case 48: {

+              result.hasField6 = input.ReadBool(ref result.field6_);

+              break;

+            }

+            case 56: {

+              result.hasField7 = input.ReadBool(ref result.field7_);

+              break;

+            }

+            case 69: {

+              result.hasField8 = input.ReadFloat(ref result.field8_);

+              break;

+            }

+            case 72: {

+              result.hasField9 = input.ReadBool(ref result.field9_);

+              break;

+            }

+            case 85: {

+              result.hasField10 = input.ReadFloat(ref result.field10_);

+              break;

+            }

+            case 88: {

+              result.hasField11 = input.ReadInt64(ref result.field11_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public float Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(float value) {

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = 0F;

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public float Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(float value) {

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = 0F;

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public float Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(float value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0F;

+        return this;

+      }

+      

+      public bool HasField4 {

+        get { return result.hasField4; }

+      }

+      public bool Field4 {

+        get { return result.Field4; }

+        set { SetField4(value); }

+      }

+      public Builder SetField4(bool value) {

+        PrepareBuilder();

+        result.hasField4 = true;

+        result.field4_ = value;

+        return this;

+      }

+      public Builder ClearField4() {

+        PrepareBuilder();

+        result.hasField4 = false;

+        result.field4_ = false;

+        return this;

+      }

+      

+      public bool HasField5 {

+        get { return result.hasField5; }

+      }

+      public bool Field5 {

+        get { return result.Field5; }

+        set { SetField5(value); }

+      }

+      public Builder SetField5(bool value) {

+        PrepareBuilder();

+        result.hasField5 = true;

+        result.field5_ = value;

+        return this;

+      }

+      public Builder ClearField5() {

+        PrepareBuilder();

+        result.hasField5 = false;

+        result.field5_ = false;

+        return this;

+      }

+      

+      public bool HasField6 {

+        get { return result.hasField6; }

+      }

+      public bool Field6 {

+        get { return result.Field6; }

+        set { SetField6(value); }

+      }

+      public Builder SetField6(bool value) {

+        PrepareBuilder();

+        result.hasField6 = true;

+        result.field6_ = value;

+        return this;

+      }

+      public Builder ClearField6() {

+        PrepareBuilder();

+        result.hasField6 = false;

+        result.field6_ = true;

+        return this;

+      }

+      

+      public bool HasField7 {

+        get { return result.hasField7; }

+      }

+      public bool Field7 {

+        get { return result.Field7; }

+        set { SetField7(value); }

+      }

+      public Builder SetField7(bool value) {

+        PrepareBuilder();

+        result.hasField7 = true;

+        result.field7_ = value;

+        return this;

+      }

+      public Builder ClearField7() {

+        PrepareBuilder();

+        result.hasField7 = false;

+        result.field7_ = false;

+        return this;

+      }

+      

+      public bool HasField8 {

+        get { return result.hasField8; }

+      }

+      public float Field8 {

+        get { return result.Field8; }

+        set { SetField8(value); }

+      }

+      public Builder SetField8(float value) {

+        PrepareBuilder();

+        result.hasField8 = true;

+        result.field8_ = value;

+        return this;

+      }

+      public Builder ClearField8() {

+        PrepareBuilder();

+        result.hasField8 = false;

+        result.field8_ = 0F;

+        return this;

+      }

+      

+      public bool HasField9 {

+        get { return result.hasField9; }

+      }

+      public bool Field9 {

+        get { return result.Field9; }

+        set { SetField9(value); }

+      }

+      public Builder SetField9(bool value) {

+        PrepareBuilder();

+        result.hasField9 = true;

+        result.field9_ = value;

+        return this;

+      }

+      public Builder ClearField9() {

+        PrepareBuilder();

+        result.hasField9 = false;

+        result.field9_ = false;

+        return this;

+      }

+      

+      public bool HasField10 {

+        get { return result.hasField10; }

+      }

+      public float Field10 {

+        get { return result.Field10; }

+        set { SetField10(value); }

+      }

+      public Builder SetField10(float value) {

+        PrepareBuilder();

+        result.hasField10 = true;

+        result.field10_ = value;

+        return this;

+      }

+      public Builder ClearField10() {

+        PrepareBuilder();

+        result.hasField10 = false;

+        result.field10_ = 0F;

+        return this;

+      }

+      

+      public bool HasField11 {

+        get { return result.hasField11; }

+      }

+      public long Field11 {

+        get { return result.Field11; }

+        set { SetField11(value); }

+      }

+      public Builder SetField11(long value) {

+        PrepareBuilder();

+        result.hasField11 = true;

+        result.field11_ = value;

+        return this;

+      }

+      public Builder ClearField11() {

+        PrepareBuilder();

+        result.hasField11 = false;

+        result.field11_ = 0L;

+        return this;

+      }

+    }

+    static SpeedMessage2GroupedMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.ProtoBench.GoogleSpeedProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtoBench/TestProtos/UnitTestImportProtoFile.cs b/csharp/src/ProtoBench/TestProtos/UnitTestImportProtoFile.cs
new file mode 100644
index 0000000..4cae2b8
--- /dev/null
+++ b/csharp/src/ProtoBench/TestProtos/UnitTestImportProtoFile.cs
@@ -0,0 +1,346 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestImportProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_import_ImportMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ImportMessage, global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder> internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestImportProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CiVnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0LnByb3RvEhhwcm90", 

+            "b2J1Zl91bml0dGVzdF9pbXBvcnQaJGdvb2dsZS9wcm90b2J1Zi9jc2hhcnBf", 

+            "b3B0aW9ucy5wcm90byIaCg1JbXBvcnRNZXNzYWdlEgkKAWQYASABKAUqPAoK", 

+            "SW1wb3J0RW51bRIOCgpJTVBPUlRfRk9PEAcSDgoKSU1QT1JUX0JBUhAIEg4K", 

+            "CklNUE9SVF9CQVoQCUJbChhjb20uZ29vZ2xlLnByb3RvYnVmLnRlc3RIAcI+", 

+            "PAohR29vZ2xlLlByb3RvY29sQnVmZmVycy5UZXN0UHJvdG9zEhdVbml0VGVz", 

+          "dEltcG9ydFByb3RvRmlsZQ=="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_import_ImportMessage__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ImportMessage, global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder>(internal__static_protobuf_unittest_import_ImportMessage__Descriptor,

+                new string[] { "D", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum ImportEnum {

+    IMPORT_FOO = 7,

+    IMPORT_BAR = 8,

+    IMPORT_BAZ = 9,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ImportMessage : pb::GeneratedMessage<ImportMessage, ImportMessage.Builder> {

+    private ImportMessage() { }

+    private static readonly ImportMessage defaultInstance = new ImportMessage().MakeReadOnly();

+    private static readonly string[] _importMessageFieldNames = new string[] { "d" };

+    private static readonly uint[] _importMessageFieldTags = new uint[] { 8 };

+    public static ImportMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ImportMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ImportMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.internal__static_protobuf_unittest_import_ImportMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<ImportMessage, ImportMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable; }

+    }

+    

+    public const int DFieldNumber = 1;

+    private bool hasD;

+    private int d_;

+    public bool HasD {

+      get { return hasD; }

+    }

+    public int D {

+      get { return d_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _importMessageFieldNames;

+      if (hasD) {

+        output.WriteInt32(1, field_names[0], D);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasD) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, D);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static ImportMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ImportMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ImportMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ImportMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<ImportMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ImportMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ImportMessage result;

+      

+      private ImportMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ImportMessage original = result;

+          result = new ImportMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ImportMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ImportMessage.Descriptor; }

+      }

+      

+      public override ImportMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance; }

+      }

+      

+      public override ImportMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is ImportMessage) {

+          return MergeFrom((ImportMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ImportMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasD) {

+          D = other.D;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_importMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _importMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasD = input.ReadInt32(ref result.d_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasD {

+        get { return result.hasD; }

+      }

+      public int D {

+        get { return result.D; }

+        set { SetD(value); }

+      }

+      public Builder SetD(int value) {

+        PrepareBuilder();

+        result.hasD = true;

+        result.d_ = value;

+        return this;

+      }

+      public Builder ClearD() {

+        PrepareBuilder();

+        result.hasD = false;

+        result.d_ = 0;

+        return this;

+      }

+    }

+    static ImportMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtoBench/TestProtos/UnitTestProtoFile.cs b/csharp/src/ProtoBench/TestProtos/UnitTestProtoFile.cs
new file mode 100644
index 0000000..dd31c67
--- /dev/null
+++ b/csharp/src/ProtoBench/TestProtos/UnitTestProtoFile.cs
@@ -0,0 +1,21602 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalInt32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalInt64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalUint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalUint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSfixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSfixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFloatExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalDoubleExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalBoolExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalStringExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalBytesExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalGroupExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalNestedMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalForeignMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalImportMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalNestedEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalForeignEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalImportEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalStringPieceExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalCordExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedInt32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedInt64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedUint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedUint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSfixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSfixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFloatExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedDoubleExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedBoolExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedStringExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedBytesExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedGroupExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedNestedMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedForeignMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedImportMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedNestedEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedForeignEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedImportEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedStringPieceExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedCordExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultInt32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultInt64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultUint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultUint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSfixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSfixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFloatExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultDoubleExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultBoolExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultStringExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultBytesExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultNestedEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultForeignEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultImportEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultStringPieceExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultCordExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.MyExtensionString);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.MyExtensionInt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedInt32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedInt64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedUint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedUint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSfixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSfixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFloatExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedDoubleExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedBoolExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Test);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestRequired.Single);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestRequired.Multi);

+    }

+    #endregion

+    #region Extensions

+    public const int OptionalInt32ExtensionFieldNumber = 1;

+    public static pb::GeneratedExtensionBase<int> OptionalInt32Extension;

+    public const int OptionalInt64ExtensionFieldNumber = 2;

+    public static pb::GeneratedExtensionBase<long> OptionalInt64Extension;

+    public const int OptionalUint32ExtensionFieldNumber = 3;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> OptionalUint32Extension;

+    public const int OptionalUint64ExtensionFieldNumber = 4;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> OptionalUint64Extension;

+    public const int OptionalSint32ExtensionFieldNumber = 5;

+    public static pb::GeneratedExtensionBase<int> OptionalSint32Extension;

+    public const int OptionalSint64ExtensionFieldNumber = 6;

+    public static pb::GeneratedExtensionBase<long> OptionalSint64Extension;

+    public const int OptionalFixed32ExtensionFieldNumber = 7;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> OptionalFixed32Extension;

+    public const int OptionalFixed64ExtensionFieldNumber = 8;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> OptionalFixed64Extension;

+    public const int OptionalSfixed32ExtensionFieldNumber = 9;

+    public static pb::GeneratedExtensionBase<int> OptionalSfixed32Extension;

+    public const int OptionalSfixed64ExtensionFieldNumber = 10;

+    public static pb::GeneratedExtensionBase<long> OptionalSfixed64Extension;

+    public const int OptionalFloatExtensionFieldNumber = 11;

+    public static pb::GeneratedExtensionBase<float> OptionalFloatExtension;

+    public const int OptionalDoubleExtensionFieldNumber = 12;

+    public static pb::GeneratedExtensionBase<double> OptionalDoubleExtension;

+    public const int OptionalBoolExtensionFieldNumber = 13;

+    public static pb::GeneratedExtensionBase<bool> OptionalBoolExtension;

+    public const int OptionalStringExtensionFieldNumber = 14;

+    public static pb::GeneratedExtensionBase<string> OptionalStringExtension;

+    public const int OptionalBytesExtensionFieldNumber = 15;

+    public static pb::GeneratedExtensionBase<pb::ByteString> OptionalBytesExtension;

+    public const int OptionalGroupExtensionFieldNumber = 16;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension> OptionalGroupExtension;

+    public const int OptionalNestedMessageExtensionFieldNumber = 18;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> OptionalNestedMessageExtension;

+    public const int OptionalForeignMessageExtensionFieldNumber = 19;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> OptionalForeignMessageExtension;

+    public const int OptionalImportMessageExtensionFieldNumber = 20;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportMessage> OptionalImportMessageExtension;

+    public const int OptionalNestedEnumExtensionFieldNumber = 21;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> OptionalNestedEnumExtension;

+    public const int OptionalForeignEnumExtensionFieldNumber = 22;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> OptionalForeignEnumExtension;

+    public const int OptionalImportEnumExtensionFieldNumber = 23;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportEnum> OptionalImportEnumExtension;

+    public const int OptionalStringPieceExtensionFieldNumber = 24;

+    public static pb::GeneratedExtensionBase<string> OptionalStringPieceExtension;

+    public const int OptionalCordExtensionFieldNumber = 25;

+    public static pb::GeneratedExtensionBase<string> OptionalCordExtension;

+    public const int RepeatedInt32ExtensionFieldNumber = 31;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedInt32Extension;

+    public const int RepeatedInt64ExtensionFieldNumber = 32;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedInt64Extension;

+    public const int RepeatedUint32ExtensionFieldNumber = 33;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> RepeatedUint32Extension;

+    public const int RepeatedUint64ExtensionFieldNumber = 34;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> RepeatedUint64Extension;

+    public const int RepeatedSint32ExtensionFieldNumber = 35;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedSint32Extension;

+    public const int RepeatedSint64ExtensionFieldNumber = 36;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedSint64Extension;

+    public const int RepeatedFixed32ExtensionFieldNumber = 37;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> RepeatedFixed32Extension;

+    public const int RepeatedFixed64ExtensionFieldNumber = 38;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> RepeatedFixed64Extension;

+    public const int RepeatedSfixed32ExtensionFieldNumber = 39;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedSfixed32Extension;

+    public const int RepeatedSfixed64ExtensionFieldNumber = 40;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedSfixed64Extension;

+    public const int RepeatedFloatExtensionFieldNumber = 41;

+    public static pb::GeneratedExtensionBase<scg::IList<float>> RepeatedFloatExtension;

+    public const int RepeatedDoubleExtensionFieldNumber = 42;

+    public static pb::GeneratedExtensionBase<scg::IList<double>> RepeatedDoubleExtension;

+    public const int RepeatedBoolExtensionFieldNumber = 43;

+    public static pb::GeneratedExtensionBase<scg::IList<bool>> RepeatedBoolExtension;

+    public const int RepeatedStringExtensionFieldNumber = 44;

+    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedStringExtension;

+    public const int RepeatedBytesExtensionFieldNumber = 45;

+    public static pb::GeneratedExtensionBase<scg::IList<pb::ByteString>> RepeatedBytesExtension;

+    public const int RepeatedGroupExtensionFieldNumber = 46;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension>> RepeatedGroupExtension;

+    public const int RepeatedNestedMessageExtensionFieldNumber = 48;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>> RepeatedNestedMessageExtension;

+    public const int RepeatedForeignMessageExtensionFieldNumber = 49;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>> RepeatedForeignMessageExtension;

+    public const int RepeatedImportMessageExtensionFieldNumber = 50;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportMessage>> RepeatedImportMessageExtension;

+    public const int RepeatedNestedEnumExtensionFieldNumber = 51;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>> RepeatedNestedEnumExtension;

+    public const int RepeatedForeignEnumExtensionFieldNumber = 52;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>> RepeatedForeignEnumExtension;

+    public const int RepeatedImportEnumExtensionFieldNumber = 53;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportEnum>> RepeatedImportEnumExtension;

+    public const int RepeatedStringPieceExtensionFieldNumber = 54;

+    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedStringPieceExtension;

+    public const int RepeatedCordExtensionFieldNumber = 55;

+    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedCordExtension;

+    public const int DefaultInt32ExtensionFieldNumber = 61;

+    public static pb::GeneratedExtensionBase<int> DefaultInt32Extension;

+    public const int DefaultInt64ExtensionFieldNumber = 62;

+    public static pb::GeneratedExtensionBase<long> DefaultInt64Extension;

+    public const int DefaultUint32ExtensionFieldNumber = 63;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> DefaultUint32Extension;

+    public const int DefaultUint64ExtensionFieldNumber = 64;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> DefaultUint64Extension;

+    public const int DefaultSint32ExtensionFieldNumber = 65;

+    public static pb::GeneratedExtensionBase<int> DefaultSint32Extension;

+    public const int DefaultSint64ExtensionFieldNumber = 66;

+    public static pb::GeneratedExtensionBase<long> DefaultSint64Extension;

+    public const int DefaultFixed32ExtensionFieldNumber = 67;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> DefaultFixed32Extension;

+    public const int DefaultFixed64ExtensionFieldNumber = 68;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> DefaultFixed64Extension;

+    public const int DefaultSfixed32ExtensionFieldNumber = 69;

+    public static pb::GeneratedExtensionBase<int> DefaultSfixed32Extension;

+    public const int DefaultSfixed64ExtensionFieldNumber = 70;

+    public static pb::GeneratedExtensionBase<long> DefaultSfixed64Extension;

+    public const int DefaultFloatExtensionFieldNumber = 71;

+    public static pb::GeneratedExtensionBase<float> DefaultFloatExtension;

+    public const int DefaultDoubleExtensionFieldNumber = 72;

+    public static pb::GeneratedExtensionBase<double> DefaultDoubleExtension;

+    public const int DefaultBoolExtensionFieldNumber = 73;

+    public static pb::GeneratedExtensionBase<bool> DefaultBoolExtension;

+    public const int DefaultStringExtensionFieldNumber = 74;

+    public static pb::GeneratedExtensionBase<string> DefaultStringExtension;

+    public const int DefaultBytesExtensionFieldNumber = 75;

+    public static pb::GeneratedExtensionBase<pb::ByteString> DefaultBytesExtension;

+    public const int DefaultNestedEnumExtensionFieldNumber = 81;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> DefaultNestedEnumExtension;

+    public const int DefaultForeignEnumExtensionFieldNumber = 82;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> DefaultForeignEnumExtension;

+    public const int DefaultImportEnumExtensionFieldNumber = 83;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportEnum> DefaultImportEnumExtension;

+    public const int DefaultStringPieceExtensionFieldNumber = 84;

+    public static pb::GeneratedExtensionBase<string> DefaultStringPieceExtension;

+    public const int DefaultCordExtensionFieldNumber = 85;

+    public static pb::GeneratedExtensionBase<string> DefaultCordExtension;

+    public const int MyExtensionStringFieldNumber = 50;

+    public static pb::GeneratedExtensionBase<string> MyExtensionString;

+    public const int MyExtensionIntFieldNumber = 5;

+    public static pb::GeneratedExtensionBase<int> MyExtensionInt;

+    public const int PackedInt32ExtensionFieldNumber = 90;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedInt32Extension;

+    public const int PackedInt64ExtensionFieldNumber = 91;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedInt64Extension;

+    public const int PackedUint32ExtensionFieldNumber = 92;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> PackedUint32Extension;

+    public const int PackedUint64ExtensionFieldNumber = 93;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> PackedUint64Extension;

+    public const int PackedSint32ExtensionFieldNumber = 94;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedSint32Extension;

+    public const int PackedSint64ExtensionFieldNumber = 95;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedSint64Extension;

+    public const int PackedFixed32ExtensionFieldNumber = 96;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> PackedFixed32Extension;

+    public const int PackedFixed64ExtensionFieldNumber = 97;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> PackedFixed64Extension;

+    public const int PackedSfixed32ExtensionFieldNumber = 98;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedSfixed32Extension;

+    public const int PackedSfixed64ExtensionFieldNumber = 99;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedSfixed64Extension;

+    public const int PackedFloatExtensionFieldNumber = 100;

+    public static pb::GeneratedExtensionBase<scg::IList<float>> PackedFloatExtension;

+    public const int PackedDoubleExtensionFieldNumber = 101;

+    public static pb::GeneratedExtensionBase<scg::IList<double>> PackedDoubleExtension;

+    public const int PackedBoolExtensionFieldNumber = 102;

+    public static pb::GeneratedExtensionBase<scg::IList<bool>> PackedBoolExtension;

+    public const int PackedEnumExtensionFieldNumber = 103;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>> PackedEnumExtension;

+    #endregion

+    

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder> internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder> internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder> internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder> internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields, global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.Builder> internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ForeignMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder> internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllExtensions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllExtensions, global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.Builder> internal__static_protobuf_unittest_TestAllExtensions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.Builder> internal__static_protobuf_unittest_OptionalGroup_extension__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.Builder> internal__static_protobuf_unittest_RepeatedGroup_extension__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestNestedExtension__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedExtension, global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Builder> internal__static_protobuf_unittest_TestNestedExtension__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRequired__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequired, global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder> internal__static_protobuf_unittest_TestRequired__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRequiredForeign__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign, global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.Builder> internal__static_protobuf_unittest_TestRequiredForeign__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestForeignNested__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestForeignNested, global::Google.ProtocolBuffers.TestProtos.TestForeignNested.Builder> internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestEmptyMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.Builder> internal__static_protobuf_unittest_TestEmptyMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.Builder> internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges, global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.Builder> internal__static_protobuf_unittest_TestMultipleExtensionRanges__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber, global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.Builder> internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage, global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder> internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder> internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder> internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Builder> internal__static_protobuf_unittest_TestDupFieldNumber__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder> internal__static_protobuf_unittest_TestDupFieldNumber_Foo__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder> internal__static_protobuf_unittest_TestDupFieldNumber_Bar__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Builder> internal__static_protobuf_unittest_TestNestedMessageHasBits__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder> internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames, global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.Builder> internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestFieldOrderings__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings, global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Builder> internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues, global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Builder> internal__static_protobuf_unittest_TestExtremeDefaultValues__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_SparseEnumMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage, global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.Builder> internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OneString__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneString, global::Google.ProtocolBuffers.TestProtos.OneString.Builder> internal__static_protobuf_unittest_OneString__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OneBytes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneBytes, global::Google.ProtocolBuffers.TestProtos.OneBytes.Builder> internal__static_protobuf_unittest_OneBytes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestPackedTypes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedTypes, global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.Builder> internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes, global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.Builder> internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestPackedExtensions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions, global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.Builder> internal__static_protobuf_unittest_TestPackedExtensions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Builder> internal__static_protobuf_unittest_TestDynamicExtensions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder> internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes, global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.Builder> internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooRequest__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooRequest, global::Google.ProtocolBuffers.TestProtos.FooRequest.Builder> internal__static_protobuf_unittest_FooRequest__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooResponse__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooResponse, global::Google.ProtocolBuffers.TestProtos.FooResponse.Builder> internal__static_protobuf_unittest_FooResponse__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BarRequest__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarRequest, global::Google.ProtocolBuffers.TestProtos.BarRequest.Builder> internal__static_protobuf_unittest_BarRequest__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BarResponse__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarResponse, global::Google.ProtocolBuffers.TestProtos.BarResponse.Builder> internal__static_protobuf_unittest_BarResponse__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "Ch5nb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8SEXByb3RvYnVmX3Vu", 

+            "aXR0ZXN0GiRnb29nbGUvcHJvdG9idWYvY3NoYXJwX29wdGlvbnMucHJvdG8a", 

+            "JWdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnQucHJvdG8iuxUKDFRl", 

+            "c3RBbGxUeXBlcxIWCg5vcHRpb25hbF9pbnQzMhgBIAEoBRIWCg5vcHRpb25h", 

+            "bF9pbnQ2NBgCIAEoAxIXCg9vcHRpb25hbF91aW50MzIYAyABKA0SFwoPb3B0", 

+            "aW9uYWxfdWludDY0GAQgASgEEhcKD29wdGlvbmFsX3NpbnQzMhgFIAEoERIX", 

+            "Cg9vcHRpb25hbF9zaW50NjQYBiABKBISGAoQb3B0aW9uYWxfZml4ZWQzMhgH", 

+            "IAEoBxIYChBvcHRpb25hbF9maXhlZDY0GAggASgGEhkKEW9wdGlvbmFsX3Nm", 

+            "aXhlZDMyGAkgASgPEhkKEW9wdGlvbmFsX3NmaXhlZDY0GAogASgQEhYKDm9w", 

+            "dGlvbmFsX2Zsb2F0GAsgASgCEhcKD29wdGlvbmFsX2RvdWJsZRgMIAEoARIV", 

+            "Cg1vcHRpb25hbF9ib29sGA0gASgIEhcKD29wdGlvbmFsX3N0cmluZxgOIAEo", 

+            "CRIWCg5vcHRpb25hbF9ieXRlcxgPIAEoDBJECg1vcHRpb25hbGdyb3VwGBAg", 

+            "ASgKMi0ucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk9wdGlvbmFs", 

+            "R3JvdXASTgoXb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UYEiABKAsyLS5wcm90", 

+            "b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZRJDChhv", 

+            "cHRpb25hbF9mb3JlaWduX21lc3NhZ2UYEyABKAsyIS5wcm90b2J1Zl91bml0", 

+            "dGVzdC5Gb3JlaWduTWVzc2FnZRJIChdvcHRpb25hbF9pbXBvcnRfbWVzc2Fn", 

+            "ZRgUIAEoCzInLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRNZXNz", 

+            "YWdlEkgKFG9wdGlvbmFsX25lc3RlZF9lbnVtGBUgASgOMioucHJvdG9idWZf", 

+            "dW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0SPQoVb3B0aW9uYWxf", 

+            "Zm9yZWlnbl9lbnVtGBYgASgOMh4ucHJvdG9idWZfdW5pdHRlc3QuRm9yZWln", 

+            "bkVudW0SQgoUb3B0aW9uYWxfaW1wb3J0X2VudW0YFyABKA4yJC5wcm90b2J1", 

+            "Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0RW51bRIhChVvcHRpb25hbF9zdHJp", 

+            "bmdfcGllY2UYGCABKAlCAggCEhkKDW9wdGlvbmFsX2NvcmQYGSABKAlCAggB", 

+            "EhYKDnJlcGVhdGVkX2ludDMyGB8gAygFEhYKDnJlcGVhdGVkX2ludDY0GCAg", 

+            "AygDEhcKD3JlcGVhdGVkX3VpbnQzMhghIAMoDRIXCg9yZXBlYXRlZF91aW50", 

+            "NjQYIiADKAQSFwoPcmVwZWF0ZWRfc2ludDMyGCMgAygREhcKD3JlcGVhdGVk", 

+            "X3NpbnQ2NBgkIAMoEhIYChByZXBlYXRlZF9maXhlZDMyGCUgAygHEhgKEHJl", 

+            "cGVhdGVkX2ZpeGVkNjQYJiADKAYSGQoRcmVwZWF0ZWRfc2ZpeGVkMzIYJyAD", 

+            "KA8SGQoRcmVwZWF0ZWRfc2ZpeGVkNjQYKCADKBASFgoOcmVwZWF0ZWRfZmxv", 

+            "YXQYKSADKAISFwoPcmVwZWF0ZWRfZG91YmxlGCogAygBEhUKDXJlcGVhdGVk", 

+            "X2Jvb2wYKyADKAgSFwoPcmVwZWF0ZWRfc3RyaW5nGCwgAygJEhYKDnJlcGVh", 

+            "dGVkX2J5dGVzGC0gAygMEkQKDXJlcGVhdGVkZ3JvdXAYLiADKAoyLS5wcm90", 

+            "b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuUmVwZWF0ZWRHcm91cBJOChdy", 

+            "ZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZRgwIAMoCzItLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlEkMKGHJlcGVhdGVkX2Zv", 

+            "cmVpZ25fbWVzc2FnZRgxIAMoCzIhLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVp", 

+            "Z25NZXNzYWdlEkgKF3JlcGVhdGVkX2ltcG9ydF9tZXNzYWdlGDIgAygLMicu", 

+            "cHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1lc3NhZ2USSAoUcmVw", 

+            "ZWF0ZWRfbmVzdGVkX2VudW0YMyADKA4yKi5wcm90b2J1Zl91bml0dGVzdC5U", 

+            "ZXN0QWxsVHlwZXMuTmVzdGVkRW51bRI9ChVyZXBlYXRlZF9mb3JlaWduX2Vu", 

+            "dW0YNCADKA4yHi5wcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51bRJCChRy", 

+            "ZXBlYXRlZF9pbXBvcnRfZW51bRg1IAMoDjIkLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "X2ltcG9ydC5JbXBvcnRFbnVtEiEKFXJlcGVhdGVkX3N0cmluZ19waWVjZRg2", 

+            "IAMoCUICCAISGQoNcmVwZWF0ZWRfY29yZBg3IAMoCUICCAESGQoNZGVmYXVs", 

+            "dF9pbnQzMhg9IAEoBToCNDESGQoNZGVmYXVsdF9pbnQ2NBg+IAEoAzoCNDIS", 

+            "GgoOZGVmYXVsdF91aW50MzIYPyABKA06AjQzEhoKDmRlZmF1bHRfdWludDY0", 

+            "GEAgASgEOgI0NBIbCg5kZWZhdWx0X3NpbnQzMhhBIAEoEToDLTQ1EhoKDmRl", 

+            "ZmF1bHRfc2ludDY0GEIgASgSOgI0NhIbCg9kZWZhdWx0X2ZpeGVkMzIYQyAB", 

+            "KAc6AjQ3EhsKD2RlZmF1bHRfZml4ZWQ2NBhEIAEoBjoCNDgSHAoQZGVmYXVs", 

+            "dF9zZml4ZWQzMhhFIAEoDzoCNDkSHQoQZGVmYXVsdF9zZml4ZWQ2NBhGIAEo", 

+            "EDoDLTUwEhsKDWRlZmF1bHRfZmxvYXQYRyABKAI6BDUxLjUSHQoOZGVmYXVs", 

+            "dF9kb3VibGUYSCABKAE6BTUyMDAwEhoKDGRlZmF1bHRfYm9vbBhJIAEoCDoE", 

+            "dHJ1ZRIdCg5kZWZhdWx0X3N0cmluZxhKIAEoCToFaGVsbG8SHAoNZGVmYXVs", 

+            "dF9ieXRlcxhLIAEoDDoFd29ybGQSTAoTZGVmYXVsdF9uZXN0ZWRfZW51bRhR", 

+            "IAEoDjIqLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRF", 

+            "bnVtOgNCQVISSQoUZGVmYXVsdF9mb3JlaWduX2VudW0YUiABKA4yHi5wcm90", 

+            "b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51bToLRk9SRUlHTl9CQVISTQoTZGVm", 

+            "YXVsdF9pbXBvcnRfZW51bRhTIAEoDjIkLnByb3RvYnVmX3VuaXR0ZXN0X2lt", 

+            "cG9ydC5JbXBvcnRFbnVtOgpJTVBPUlRfQkFSEiUKFGRlZmF1bHRfc3RyaW5n", 

+            "X3BpZWNlGFQgASgJOgNhYmNCAggCEh0KDGRlZmF1bHRfY29yZBhVIAEoCToD", 

+            "MTIzQgIIARobCg1OZXN0ZWRNZXNzYWdlEgoKAmJiGAEgASgFGhoKDU9wdGlv", 

+            "bmFsR3JvdXASCQoBYRgRIAEoBRoaCg1SZXBlYXRlZEdyb3VwEgkKAWEYLyAB", 

+            "KAUiJwoKTmVzdGVkRW51bRIHCgNGT08QARIHCgNCQVIQAhIHCgNCQVoQAyI0", 

+            "ChRUZXN0RGVwcmVjYXRlZEZpZWxkcxIcChBkZXByZWNhdGVkX2ludDMyGAEg", 

+            "ASgFQgIYASIbCg5Gb3JlaWduTWVzc2FnZRIJCgFjGAEgASgFIh0KEVRlc3RB", 

+            "bGxFeHRlbnNpb25zKggIARCAgICAAiIkChdPcHRpb25hbEdyb3VwX2V4dGVu", 

+            "c2lvbhIJCgFhGBEgASgFIiQKF1JlcGVhdGVkR3JvdXBfZXh0ZW5zaW9uEgkK", 

+            "AWEYLyABKAUiUAoTVGVzdE5lc3RlZEV4dGVuc2lvbjI5CgR0ZXN0EiQucHJv", 

+            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMY6gcgASgJOgR0ZXN0", 

+            "ItUFCgxUZXN0UmVxdWlyZWQSCQoBYRgBIAIoBRIOCgZkdW1teTIYAiABKAUS", 

+            "CQoBYhgDIAIoBRIOCgZkdW1teTQYBCABKAUSDgoGZHVtbXk1GAUgASgFEg4K", 

+            "BmR1bW15NhgGIAEoBRIOCgZkdW1teTcYByABKAUSDgoGZHVtbXk4GAggASgF", 

+            "Eg4KBmR1bW15ORgJIAEoBRIPCgdkdW1teTEwGAogASgFEg8KB2R1bW15MTEY", 

+            "CyABKAUSDwoHZHVtbXkxMhgMIAEoBRIPCgdkdW1teTEzGA0gASgFEg8KB2R1", 

+            "bW15MTQYDiABKAUSDwoHZHVtbXkxNRgPIAEoBRIPCgdkdW1teTE2GBAgASgF", 

+            "Eg8KB2R1bW15MTcYESABKAUSDwoHZHVtbXkxOBgSIAEoBRIPCgdkdW1teTE5", 

+            "GBMgASgFEg8KB2R1bW15MjAYFCABKAUSDwoHZHVtbXkyMRgVIAEoBRIPCgdk", 

+            "dW1teTIyGBYgASgFEg8KB2R1bW15MjMYFyABKAUSDwoHZHVtbXkyNBgYIAEo", 

+            "BRIPCgdkdW1teTI1GBkgASgFEg8KB2R1bW15MjYYGiABKAUSDwoHZHVtbXky", 

+            "NxgbIAEoBRIPCgdkdW1teTI4GBwgASgFEg8KB2R1bW15MjkYHSABKAUSDwoH", 

+            "ZHVtbXkzMBgeIAEoBRIPCgdkdW1teTMxGB8gASgFEg8KB2R1bW15MzIYICAB", 

+            "KAUSCQoBYxghIAIoBTJWCgZzaW5nbGUSJC5wcm90b2J1Zl91bml0dGVzdC5U", 

+            "ZXN0QWxsRXh0ZW5zaW9ucxjoByABKAsyHy5wcm90b2J1Zl91bml0dGVzdC5U", 

+            "ZXN0UmVxdWlyZWQyVQoFbXVsdGkSJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxjpByADKAsyHy5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "UmVxdWlyZWQimgEKE1Rlc3RSZXF1aXJlZEZvcmVpZ24SOQoQb3B0aW9uYWxf", 

+            "bWVzc2FnZRgBIAEoCzIfLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RSZXF1aXJl", 

+            "ZBI5ChByZXBlYXRlZF9tZXNzYWdlGAIgAygLMh8ucHJvdG9idWZfdW5pdHRl", 

+            "c3QuVGVzdFJlcXVpcmVkEg0KBWR1bW15GAMgASgFIloKEVRlc3RGb3JlaWdu", 

+            "TmVzdGVkEkUKDmZvcmVpZ25fbmVzdGVkGAEgASgLMi0ucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UiEgoQVGVzdEVtcHR5", 

+            "TWVzc2FnZSIqCh5UZXN0RW1wdHlNZXNzYWdlV2l0aEV4dGVuc2lvbnMqCAgB", 

+            "EICAgIACIjcKG1Rlc3RNdWx0aXBsZUV4dGVuc2lvblJhbmdlcyoECCoQKyoG", 

+            "CK8gEJQhKgoIgIAEEICAgIACIjQKGFRlc3RSZWFsbHlMYXJnZVRhZ051bWJl", 

+            "chIJCgFhGAEgASgFEg0KAmJiGP///38gASgFIlUKFFRlc3RSZWN1cnNpdmVN", 

+            "ZXNzYWdlEjIKAWEYASABKAsyJy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UmVj", 

+            "dXJzaXZlTWVzc2FnZRIJCgFpGAIgASgFIksKFFRlc3RNdXR1YWxSZWN1cnNp", 

+            "b25BEjMKAmJiGAEgASgLMicucHJvdG9idWZfdW5pdHRlc3QuVGVzdE11dHVh", 

+            "bFJlY3Vyc2lvbkIiYgoUVGVzdE11dHVhbFJlY3Vyc2lvbkISMgoBYRgBIAEo", 

+            "CzInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNdXR1YWxSZWN1cnNpb25BEhYK", 

+            "Dm9wdGlvbmFsX2ludDMyGAIgASgFIrMBChJUZXN0RHVwRmllbGROdW1iZXIS", 

+            "CQoBYRgBIAEoBRI2CgNmb28YAiABKAoyKS5wcm90b2J1Zl91bml0dGVzdC5U", 

+            "ZXN0RHVwRmllbGROdW1iZXIuRm9vEjYKA2JhchgDIAEoCjIpLnByb3RvYnVm", 

+            "X3VuaXR0ZXN0LlRlc3REdXBGaWVsZE51bWJlci5CYXIaEAoDRm9vEgkKAWEY", 

+            "ASABKAUaEAoDQmFyEgkKAWEYASABKAUigAIKGFRlc3ROZXN0ZWRNZXNzYWdl", 

+            "SGFzQml0cxJaChdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZRgBIAEoCzI5LnBy", 

+            "b3RvYnVmX3VuaXR0ZXN0LlRlc3ROZXN0ZWRNZXNzYWdlSGFzQml0cy5OZXN0", 

+            "ZWRNZXNzYWdlGocBCg1OZXN0ZWRNZXNzYWdlEiQKHG5lc3RlZG1lc3NhZ2Vf", 

+            "cmVwZWF0ZWRfaW50MzIYASADKAUSUAolbmVzdGVkbWVzc2FnZV9yZXBlYXRl", 

+            "ZF9mb3JlaWdubWVzc2FnZRgCIAMoCzIhLnByb3RvYnVmX3VuaXR0ZXN0LkZv", 

+            "cmVpZ25NZXNzYWdlIuUDChdUZXN0Q2FtZWxDYXNlRmllbGROYW1lcxIWCg5Q", 

+            "cmltaXRpdmVGaWVsZBgBIAEoBRITCgtTdHJpbmdGaWVsZBgCIAEoCRIxCglF", 

+            "bnVtRmllbGQYAyABKA4yHi5wcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51", 

+            "bRI3CgxNZXNzYWdlRmllbGQYBCABKAsyIS5wcm90b2J1Zl91bml0dGVzdC5G", 

+            "b3JlaWduTWVzc2FnZRIcChBTdHJpbmdQaWVjZUZpZWxkGAUgASgJQgIIAhIV", 

+            "CglDb3JkRmllbGQYBiABKAlCAggBEh4KFlJlcGVhdGVkUHJpbWl0aXZlRmll", 

+            "bGQYByADKAUSGwoTUmVwZWF0ZWRTdHJpbmdGaWVsZBgIIAMoCRI5ChFSZXBl", 

+            "YXRlZEVudW1GaWVsZBgJIAMoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVp", 

+            "Z25FbnVtEj8KFFJlcGVhdGVkTWVzc2FnZUZpZWxkGAogAygLMiEucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuRm9yZWlnbk1lc3NhZ2USJAoYUmVwZWF0ZWRTdHJpbmdQ", 

+            "aWVjZUZpZWxkGAsgAygJQgIIAhIdChFSZXBlYXRlZENvcmRGaWVsZBgMIAMo", 

+            "CUICCAEiVQoSVGVzdEZpZWxkT3JkZXJpbmdzEhEKCW15X3N0cmluZxgLIAEo", 

+            "CRIOCgZteV9pbnQYASABKAMSEAoIbXlfZmxvYXQYZSABKAIqBAgCEAsqBAgM", 

+            "EGUiowUKGFRlc3RFeHRyZW1lRGVmYXVsdFZhbHVlcxI/Cg1lc2NhcGVkX2J5", 

+            "dGVzGAEgASgMOihcMDAwXDAwMVwwMDdcMDEwXDAxNFxuXHJcdFwwMTNcXFwn", 

+            "XCJcMzc2EiAKDGxhcmdlX3VpbnQzMhgCIAEoDToKNDI5NDk2NzI5NRIqCgxs", 

+            "YXJnZV91aW50NjQYAyABKAQ6FDE4NDQ2NzQ0MDczNzA5NTUxNjE1EiAKC3Nt", 

+            "YWxsX2ludDMyGAQgASgFOgstMjE0NzQ4MzY0NxIpCgtzbWFsbF9pbnQ2NBgF", 

+            "IAEoAzoULTkyMjMzNzIwMzY4NTQ3NzU4MDcSGAoLdXRmOF9zdHJpbmcYBiAB", 

+            "KAk6A+GItBIVCgp6ZXJvX2Zsb2F0GAcgASgCOgEwEhQKCW9uZV9mbG9hdBgI", 

+            "IAEoAjoBMRIYCgtzbWFsbF9mbG9hdBgJIAEoAjoDMS41Eh4KEm5lZ2F0aXZl", 

+            "X29uZV9mbG9hdBgKIAEoAjoCLTESHAoObmVnYXRpdmVfZmxvYXQYCyABKAI6", 

+            "BC0xLjUSGwoLbGFyZ2VfZmxvYXQYDCABKAI6BjJlKzAwOBIlChRzbWFsbF9u", 

+            "ZWdhdGl2ZV9mbG9hdBgNIAEoAjoHLThlLTAyOBIXCgppbmZfZG91YmxlGA4g", 

+            "ASgBOgNpbmYSHAoObmVnX2luZl9kb3VibGUYDyABKAE6BC1pbmYSFwoKbmFu", 

+            "X2RvdWJsZRgQIAEoAToDbmFuEhYKCWluZl9mbG9hdBgRIAEoAjoDaW5mEhsK", 

+            "DW5lZ19pbmZfZmxvYXQYEiABKAI6BC1pbmYSFgoJbmFuX2Zsb2F0GBMgASgC", 

+            "OgNuYW4SKwoMY3BwX3RyaWdyYXBoGBQgASgJOhU/ID8gPz8gPz8gPz8/ID8/", 

+            "LyA/Py0iSwoRU3BhcnNlRW51bU1lc3NhZ2USNgoLc3BhcnNlX2VudW0YASAB", 

+            "KA4yIS5wcm90b2J1Zl91bml0dGVzdC5UZXN0U3BhcnNlRW51bSIZCglPbmVT", 

+            "dHJpbmcSDAoEZGF0YRgBIAEoCSIYCghPbmVCeXRlcxIMCgRkYXRhGAEgASgM", 

+            "IqoDCg9UZXN0UGFja2VkVHlwZXMSGAoMcGFja2VkX2ludDMyGFogAygFQgIQ", 

+            "ARIYCgxwYWNrZWRfaW50NjQYWyADKANCAhABEhkKDXBhY2tlZF91aW50MzIY", 

+            "XCADKA1CAhABEhkKDXBhY2tlZF91aW50NjQYXSADKARCAhABEhkKDXBhY2tl", 

+            "ZF9zaW50MzIYXiADKBFCAhABEhkKDXBhY2tlZF9zaW50NjQYXyADKBJCAhAB", 

+            "EhoKDnBhY2tlZF9maXhlZDMyGGAgAygHQgIQARIaCg5wYWNrZWRfZml4ZWQ2", 

+            "NBhhIAMoBkICEAESGwoPcGFja2VkX3NmaXhlZDMyGGIgAygPQgIQARIbCg9w", 

+            "YWNrZWRfc2ZpeGVkNjQYYyADKBBCAhABEhgKDHBhY2tlZF9mbG9hdBhkIAMo", 

+            "AkICEAESGQoNcGFja2VkX2RvdWJsZRhlIAMoAUICEAESFwoLcGFja2VkX2Jv", 

+            "b2wYZiADKAhCAhABEjcKC3BhY2tlZF9lbnVtGGcgAygOMh4ucHJvdG9idWZf", 

+            "dW5pdHRlc3QuRm9yZWlnbkVudW1CAhABIsgDChFUZXN0VW5wYWNrZWRUeXBl", 

+            "cxIaCg51bnBhY2tlZF9pbnQzMhhaIAMoBUICEAASGgoOdW5wYWNrZWRfaW50", 

+            "NjQYWyADKANCAhAAEhsKD3VucGFja2VkX3VpbnQzMhhcIAMoDUICEAASGwoP", 

+            "dW5wYWNrZWRfdWludDY0GF0gAygEQgIQABIbCg91bnBhY2tlZF9zaW50MzIY", 

+            "XiADKBFCAhAAEhsKD3VucGFja2VkX3NpbnQ2NBhfIAMoEkICEAASHAoQdW5w", 

+            "YWNrZWRfZml4ZWQzMhhgIAMoB0ICEAASHAoQdW5wYWNrZWRfZml4ZWQ2NBhh", 

+            "IAMoBkICEAASHQoRdW5wYWNrZWRfc2ZpeGVkMzIYYiADKA9CAhAAEh0KEXVu", 

+            "cGFja2VkX3NmaXhlZDY0GGMgAygQQgIQABIaCg51bnBhY2tlZF9mbG9hdBhk", 

+            "IAMoAkICEAASGwoPdW5wYWNrZWRfZG91YmxlGGUgAygBQgIQABIZCg11bnBh", 

+            "Y2tlZF9ib29sGGYgAygIQgIQABI5Cg11bnBhY2tlZF9lbnVtGGcgAygOMh4u", 

+            "cHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbkVudW1CAhAAIiAKFFRlc3RQYWNr", 

+            "ZWRFeHRlbnNpb25zKggIARCAgICAAiKZBAoVVGVzdER5bmFtaWNFeHRlbnNp", 

+            "b25zEhkKEHNjYWxhcl9leHRlbnNpb24Y0A8gASgHEjcKDmVudW1fZXh0ZW5z", 

+            "aW9uGNEPIAEoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVtElkK", 

+            "FmR5bmFtaWNfZW51bV9leHRlbnNpb24Y0g8gASgOMjgucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdER5bmFtaWNFeHRlbnNpb25zLkR5bmFtaWNFbnVtVHlwZRI9", 

+            "ChFtZXNzYWdlX2V4dGVuc2lvbhjTDyABKAsyIS5wcm90b2J1Zl91bml0dGVz", 

+            "dC5Gb3JlaWduTWVzc2FnZRJfChlkeW5hbWljX21lc3NhZ2VfZXh0ZW5zaW9u", 

+            "GNQPIAEoCzI7LnByb3RvYnVmX3VuaXR0ZXN0LlRlc3REeW5hbWljRXh0ZW5z", 

+            "aW9ucy5EeW5hbWljTWVzc2FnZVR5cGUSGwoScmVwZWF0ZWRfZXh0ZW5zaW9u", 

+            "GNUPIAMoCRIdChBwYWNrZWRfZXh0ZW5zaW9uGNYPIAMoEUICEAEaLAoSRHlu", 

+            "YW1pY01lc3NhZ2VUeXBlEhYKDWR5bmFtaWNfZmllbGQYtBAgASgFIkcKD0R5", 

+            "bmFtaWNFbnVtVHlwZRIQCgtEWU5BTUlDX0ZPTxCYERIQCgtEWU5BTUlDX0JB", 

+            "UhCZERIQCgtEWU5BTUlDX0JBWhCaESLAAQojVGVzdFJlcGVhdGVkU2NhbGFy", 

+            "RGlmZmVyZW50VGFnU2l6ZXMSGAoQcmVwZWF0ZWRfZml4ZWQzMhgMIAMoBxIW", 

+            "Cg5yZXBlYXRlZF9pbnQzMhgNIAMoBRIZChByZXBlYXRlZF9maXhlZDY0GP4P", 

+            "IAMoBhIXCg5yZXBlYXRlZF9pbnQ2NBj/DyADKAMSGAoOcmVwZWF0ZWRfZmxv", 

+            "YXQY/v8PIAMoAhIZCg9yZXBlYXRlZF91aW50NjQY//8PIAMoBCIMCgpGb29S", 

+            "ZXF1ZXN0Ig0KC0Zvb1Jlc3BvbnNlIgwKCkJhclJlcXVlc3QiDQoLQmFyUmVz", 

+            "cG9uc2UqQAoLRm9yZWlnbkVudW0SDwoLRk9SRUlHTl9GT08QBBIPCgtGT1JF", 

+            "SUdOX0JBUhAFEg8KC0ZPUkVJR05fQkFaEAYqRwoUVGVzdEVudW1XaXRoRHVw", 

+            "VmFsdWUSCAoERk9PMRABEggKBEJBUjEQAhIHCgNCQVoQAxIICgRGT08yEAES", 

+            "CAoEQkFSMhACKokBCg5UZXN0U3BhcnNlRW51bRIMCghTUEFSU0VfQRB7Eg4K", 

+            "CFNQQVJTRV9CEKbnAxIPCghTUEFSU0VfQxCysYAGEhUKCFNQQVJTRV9EEPH/", 

+            "/////////wESFQoIU1BBUlNFX0UQtN78////////ARIMCghTUEFSU0VfRhAA", 

+            "EgwKCFNQQVJTRV9HEAIymQEKC1Rlc3RTZXJ2aWNlEkQKA0ZvbxIdLnByb3Rv", 

+            "YnVmX3VuaXR0ZXN0LkZvb1JlcXVlc3QaHi5wcm90b2J1Zl91bml0dGVzdC5G", 

+            "b29SZXNwb25zZRJECgNCYXISHS5wcm90b2J1Zl91bml0dGVzdC5CYXJSZXF1", 

+            "ZXN0Gh4ucHJvdG9idWZfdW5pdHRlc3QuQmFyUmVzcG9uc2U6RgoYb3B0aW9u", 

+            "YWxfaW50MzJfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFs", 

+            "bEV4dGVuc2lvbnMYASABKAU6RgoYb3B0aW9uYWxfaW50NjRfZXh0ZW5zaW9u", 

+            "EiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYAiABKAM6", 

+            "RwoZb3B0aW9uYWxfdWludDMyX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RBbGxFeHRlbnNpb25zGAMgASgNOkcKGW9wdGlvbmFsX3VpbnQ2", 

+            "NF9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5z", 

+            "aW9ucxgEIAEoBDpHChlvcHRpb25hbF9zaW50MzJfZXh0ZW5zaW9uEiQucHJv", 

+            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYBSABKBE6RwoZb3B0", 

+            "aW9uYWxfc2ludDY0X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 

+            "c3RBbGxFeHRlbnNpb25zGAYgASgSOkgKGm9wdGlvbmFsX2ZpeGVkMzJfZXh0", 

+            "ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMY", 

+            "ByABKAc6SAoab3B0aW9uYWxfZml4ZWQ2NF9leHRlbnNpb24SJC5wcm90b2J1", 

+            "Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgIIAEoBjpJChtvcHRpb25h", 

+            "bF9zZml4ZWQzMl9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxgJIAEoDzpJChtvcHRpb25hbF9zZml4ZWQ2NF9leHRl", 

+            "bnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgK", 

+            "IAEoEDpGChhvcHRpb25hbF9mbG9hdF9leHRlbnNpb24SJC5wcm90b2J1Zl91", 

+            "bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgLIAEoAjpHChlvcHRpb25hbF9k", 

+            "b3VibGVfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4", 

+            "dGVuc2lvbnMYDCABKAE6RQoXb3B0aW9uYWxfYm9vbF9leHRlbnNpb24SJC5w", 

+            "cm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgNIAEoCDpHChlv", 

+            "cHRpb25hbF9zdHJpbmdfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3Qu", 

+            "VGVzdEFsbEV4dGVuc2lvbnMYDiABKAk6RgoYb3B0aW9uYWxfYnl0ZXNfZXh0", 

+            "ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMY", 

+            "DyABKAw6cQoXb3B0aW9uYWxncm91cF9leHRlbnNpb24SJC5wcm90b2J1Zl91", 

+            "bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgQIAEoCjIqLnByb3RvYnVmX3Vu", 

+            "aXR0ZXN0Lk9wdGlvbmFsR3JvdXBfZXh0ZW5zaW9uOn4KIW9wdGlvbmFsX25l", 

+            "c3RlZF9tZXNzYWdlX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 

+            "c3RBbGxFeHRlbnNpb25zGBIgASgLMi0ucHJvdG9idWZfdW5pdHRlc3QuVGVz", 

+            "dEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2U6cwoib3B0aW9uYWxfZm9yZWlnbl9t", 

+            "ZXNzYWdlX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF", 

+            "eHRlbnNpb25zGBMgASgLMiEucHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbk1l", 

+            "c3NhZ2U6eAohb3B0aW9uYWxfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uEiQu", 

+            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYFCABKAsyJy5w", 

+            "cm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0TWVzc2FnZTp4Ch5vcHRp", 

+            "b25hbF9uZXN0ZWRfZW51bV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVz", 

+            "dC5UZXN0QWxsRXh0ZW5zaW9ucxgVIAEoDjIqLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "LlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtOm0KH29wdGlvbmFsX2ZvcmVpZ25f", 

+            "ZW51bV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0", 

+            "ZW5zaW9ucxgWIAEoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVt", 

+            "OnIKHm9wdGlvbmFsX2ltcG9ydF9lbnVtX2V4dGVuc2lvbhIkLnByb3RvYnVm", 

+            "X3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGBcgASgOMiQucHJvdG9idWZf", 

+            "dW5pdHRlc3RfaW1wb3J0LkltcG9ydEVudW06UQofb3B0aW9uYWxfc3RyaW5n", 

+            "X3BpZWNlX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF", 

+            "eHRlbnNpb25zGBggASgJQgIIAjpJChdvcHRpb25hbF9jb3JkX2V4dGVuc2lv", 

+            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGBkgASgJ", 

+            "QgIIATpGChhyZXBlYXRlZF9pbnQzMl9leHRlbnNpb24SJC5wcm90b2J1Zl91", 

+            "bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgfIAMoBTpGChhyZXBlYXRlZF9p", 

+            "bnQ2NF9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0", 

+            "ZW5zaW9ucxggIAMoAzpHChlyZXBlYXRlZF91aW50MzJfZXh0ZW5zaW9uEiQu", 

+            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYISADKA06RwoZ", 

+            "cmVwZWF0ZWRfdWludDY0X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "LlRlc3RBbGxFeHRlbnNpb25zGCIgAygEOkcKGXJlcGVhdGVkX3NpbnQzMl9l", 

+            "eHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9u", 

+            "cxgjIAMoETpHChlyZXBlYXRlZF9zaW50NjRfZXh0ZW5zaW9uEiQucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYJCADKBI6SAoacmVwZWF0", 

+            "ZWRfZml4ZWQzMl9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxglIAMoBzpIChpyZXBlYXRlZF9maXhlZDY0X2V4dGVu", 

+            "c2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGCYg", 

+            "AygGOkkKG3JlcGVhdGVkX3NmaXhlZDMyX2V4dGVuc2lvbhIkLnByb3RvYnVm", 

+            "X3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGCcgAygPOkkKG3JlcGVhdGVk", 

+            "X3NmaXhlZDY0X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RB", 

+            "bGxFeHRlbnNpb25zGCggAygQOkYKGHJlcGVhdGVkX2Zsb2F0X2V4dGVuc2lv", 

+            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGCkgAygC", 

+            "OkcKGXJlcGVhdGVkX2RvdWJsZV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0", 

+            "dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgqIAMoATpFChdyZXBlYXRlZF9ib29s", 

+            "X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNp", 

+            "b25zGCsgAygIOkcKGXJlcGVhdGVkX3N0cmluZ19leHRlbnNpb24SJC5wcm90", 

+            "b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgsIAMoCTpGChhyZXBl", 

+            "YXRlZF9ieXRlc19leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxgtIAMoDDpxChdyZXBlYXRlZGdyb3VwX2V4dGVuc2lv", 

+            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGC4gAygK", 

+            "MioucHJvdG9idWZfdW5pdHRlc3QuUmVwZWF0ZWRHcm91cF9leHRlbnNpb246", 

+            "fgohcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uEiQucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYMCADKAsyLS5wcm90b2J1", 

+            "Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZTpzCiJyZXBl", 

+            "YXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYMSADKAsyIS5wcm90b2J1Zl91bml0", 

+            "dGVzdC5Gb3JlaWduTWVzc2FnZTp4CiFyZXBlYXRlZF9pbXBvcnRfbWVzc2Fn", 

+            "ZV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5z", 

+            "aW9ucxgyIAMoCzInLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRN", 

+            "ZXNzYWdlOngKHnJlcGVhdGVkX25lc3RlZF9lbnVtX2V4dGVuc2lvbhIkLnBy", 

+            "b3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGDMgAygOMioucHJv", 

+            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW06bQofcmVw", 

+            "ZWF0ZWRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RBbGxFeHRlbnNpb25zGDQgAygOMh4ucHJvdG9idWZfdW5pdHRl", 

+            "c3QuRm9yZWlnbkVudW06cgoecmVwZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5z", 

+            "aW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYNSAD", 

+            "KA4yJC5wcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0RW51bTpRCh9y", 

+            "ZXBlYXRlZF9zdHJpbmdfcGllY2VfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYNiADKAlCAggCOkkKF3JlcGVhdGVk", 

+            "X2NvcmRfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4", 

+            "dGVuc2lvbnMYNyADKAlCAggBOkkKF2RlZmF1bHRfaW50MzJfZXh0ZW5zaW9u", 

+            "EiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYPSABKAU6", 

+            "AjQxOkkKF2RlZmF1bHRfaW50NjRfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYPiABKAM6AjQyOkoKGGRlZmF1bHRf", 

+            "dWludDMyX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF", 

+            "eHRlbnNpb25zGD8gASgNOgI0MzpKChhkZWZhdWx0X3VpbnQ2NF9leHRlbnNp", 

+            "b24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxhAIAEo", 

+            "BDoCNDQ6SwoYZGVmYXVsdF9zaW50MzJfZXh0ZW5zaW9uEiQucHJvdG9idWZf", 

+            "dW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYQSABKBE6Ay00NTpKChhkZWZh", 

+            "dWx0X3NpbnQ2NF9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxhCIAEoEjoCNDY6SwoZZGVmYXVsdF9maXhlZDMyX2V4", 

+            "dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25z", 

+            "GEMgASgHOgI0NzpLChlkZWZhdWx0X2ZpeGVkNjRfZXh0ZW5zaW9uEiQucHJv", 

+            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYRCABKAY6AjQ4OkwK", 

+            "GmRlZmF1bHRfc2ZpeGVkMzJfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRl", 

+            "c3QuVGVzdEFsbEV4dGVuc2lvbnMYRSABKA86AjQ5Ok0KGmRlZmF1bHRfc2Zp", 

+            "eGVkNjRfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4", 

+            "dGVuc2lvbnMYRiABKBA6Ay01MDpLChdkZWZhdWx0X2Zsb2F0X2V4dGVuc2lv", 

+            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGEcgASgC", 

+            "OgQ1MS41Ok0KGGRlZmF1bHRfZG91YmxlX2V4dGVuc2lvbhIkLnByb3RvYnVm", 

+            "X3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGEggASgBOgU1MjAwMDpKChZk", 

+            "ZWZhdWx0X2Jvb2xfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVz", 

+            "dEFsbEV4dGVuc2lvbnMYSSABKAg6BHRydWU6TQoYZGVmYXVsdF9zdHJpbmdf", 

+            "ZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lv", 

+            "bnMYSiABKAk6BWhlbGxvOkwKF2RlZmF1bHRfYnl0ZXNfZXh0ZW5zaW9uEiQu", 

+            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYSyABKAw6BXdv", 

+            "cmxkOnwKHWRlZmF1bHRfbmVzdGVkX2VudW1fZXh0ZW5zaW9uEiQucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYUSABKA4yKi5wcm90b2J1", 

+            "Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkRW51bToDQkFSOnkKHmRl", 

+            "ZmF1bHRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RBbGxFeHRlbnNpb25zGFIgASgOMh4ucHJvdG9idWZfdW5pdHRl", 

+            "c3QuRm9yZWlnbkVudW06C0ZPUkVJR05fQkFSOn0KHWRlZmF1bHRfaW1wb3J0", 

+            "X2VudW1fZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4", 

+            "dGVuc2lvbnMYUyABKA4yJC5wcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1w", 

+            "b3J0RW51bToKSU1QT1JUX0JBUjpVCh5kZWZhdWx0X3N0cmluZ19waWVjZV9l", 

+            "eHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9u", 

+            "cxhUIAEoCToDYWJjQgIIAjpNChZkZWZhdWx0X2NvcmRfZXh0ZW5zaW9uEiQu", 

+            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYVSABKAk6AzEy", 

+            "M0ICCAE6QgoTbXlfZXh0ZW5zaW9uX3N0cmluZxIlLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RGaWVsZE9yZGVyaW5ncxgyIAEoCTo/ChBteV9leHRlbnNpb25f", 

+            "aW50EiUucHJvdG9idWZfdW5pdHRlc3QuVGVzdEZpZWxkT3JkZXJpbmdzGAUg", 

+            "ASgFOksKFnBhY2tlZF9pbnQzMl9leHRlbnNpb24SJy5wcm90b2J1Zl91bml0", 

+            "dGVzdC5UZXN0UGFja2VkRXh0ZW5zaW9ucxhaIAMoBUICEAE6SwoWcGFja2Vk", 

+            "X2ludDY0X2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNr", 

+            "ZWRFeHRlbnNpb25zGFsgAygDQgIQATpMChdwYWNrZWRfdWludDMyX2V4dGVu", 

+            "c2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNrZWRFeHRlbnNpb25z", 

+            "GFwgAygNQgIQATpMChdwYWNrZWRfdWludDY0X2V4dGVuc2lvbhInLnByb3Rv", 

+            "YnVmX3VuaXR0ZXN0LlRlc3RQYWNrZWRFeHRlbnNpb25zGF0gAygEQgIQATpM", 

+            "ChdwYWNrZWRfc2ludDMyX2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "LlRlc3RQYWNrZWRFeHRlbnNpb25zGF4gAygRQgIQATpMChdwYWNrZWRfc2lu", 

+            "dDY0X2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNrZWRF", 

+            "eHRlbnNpb25zGF8gAygSQgIQATpNChhwYWNrZWRfZml4ZWQzMl9leHRlbnNp", 

+            "b24SJy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UGFja2VkRXh0ZW5zaW9ucxhg", 

+            "IAMoB0ICEAE6TQoYcGFja2VkX2ZpeGVkNjRfZXh0ZW5zaW9uEicucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMYYSADKAZCAhABOk4K", 

+            "GXBhY2tlZF9zZml4ZWQzMl9leHRlbnNpb24SJy5wcm90b2J1Zl91bml0dGVz", 

+            "dC5UZXN0UGFja2VkRXh0ZW5zaW9ucxhiIAMoD0ICEAE6TgoZcGFja2VkX3Nm", 

+            "aXhlZDY0X2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNr", 

+            "ZWRFeHRlbnNpb25zGGMgAygQQgIQATpLChZwYWNrZWRfZmxvYXRfZXh0ZW5z", 

+            "aW9uEicucHJvdG9idWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMY", 

+            "ZCADKAJCAhABOkwKF3BhY2tlZF9kb3VibGVfZXh0ZW5zaW9uEicucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMYZSADKAFCAhABOkoK", 

+            "FXBhY2tlZF9ib29sX2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 

+            "c3RQYWNrZWRFeHRlbnNpb25zGGYgAygIQgIQATpqChVwYWNrZWRfZW51bV9l", 

+            "eHRlbnNpb24SJy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UGFja2VkRXh0ZW5z", 

+            "aW9ucxhnIAMoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVtQgIQ", 

+            "AUJTQg1Vbml0dGVzdFByb3RvSAGAAQGIAQGQAQHCPjYKIUdvb2dsZS5Qcm90", 

+          "b2NvbEJ1ZmZlcnMuVGVzdFByb3RvcxIRVW5pdFRlc3RQcm90b0ZpbGU="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_TestAllTypes__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder>(internal__static_protobuf_unittest_TestAllTypes__Descriptor,

+                new string[] { "OptionalInt32", "OptionalInt64", "OptionalUint32", "OptionalUint64", "OptionalSint32", "OptionalSint64", "OptionalFixed32", "OptionalFixed64", "OptionalSfixed32", "OptionalSfixed64", "OptionalFloat", "OptionalDouble", "OptionalBool", "OptionalString", "OptionalBytes", "OptionalGroup", "OptionalNestedMessage", "OptionalForeignMessage", "OptionalImportMessage", "OptionalNestedEnum", "OptionalForeignEnum", "OptionalImportEnum", "OptionalStringPiece", "OptionalCord", "RepeatedInt32", "RepeatedInt64", "RepeatedUint32", "RepeatedUint64", "RepeatedSint32", "RepeatedSint64", "RepeatedFixed32", "RepeatedFixed64", "RepeatedSfixed32", "RepeatedSfixed64", "RepeatedFloat", "RepeatedDouble", "RepeatedBool", "RepeatedString", "RepeatedBytes", "RepeatedGroup", "RepeatedNestedMessage", "RepeatedForeignMessage", "RepeatedImportMessage", "RepeatedNestedEnum", "RepeatedForeignEnum", "RepeatedImportEnum", "RepeatedStringPiece", "RepeatedCord", "DefaultInt32", "DefaultInt64", "DefaultUint32", "DefaultUint64", "DefaultSint32", "DefaultSint64", "DefaultFixed32", "DefaultFixed64", "DefaultSfixed32", "DefaultSfixed64", "DefaultFloat", "DefaultDouble", "DefaultBool", "DefaultString", "DefaultBytes", "DefaultNestedEnum", "DefaultForeignEnum", "DefaultImportEnum", "DefaultStringPiece", "DefaultCord", });

+        internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder>(internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor,

+                new string[] { "Bb", });

+        internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[1];

+        internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder>(internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[2];

+        internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder>(internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields, global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.Builder>(internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor,

+                new string[] { "DeprecatedInt32", });

+        internal__static_protobuf_unittest_ForeignMessage__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder>(internal__static_protobuf_unittest_ForeignMessage__Descriptor,

+                new string[] { "C", });

+        internal__static_protobuf_unittest_TestAllExtensions__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_protobuf_unittest_TestAllExtensions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllExtensions, global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.Builder>(internal__static_protobuf_unittest_TestAllExtensions__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor = Descriptor.MessageTypes[4];

+        internal__static_protobuf_unittest_OptionalGroup_extension__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.Builder>(internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor = Descriptor.MessageTypes[5];

+        internal__static_protobuf_unittest_RepeatedGroup_extension__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.Builder>(internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestNestedExtension__Descriptor = Descriptor.MessageTypes[6];

+        internal__static_protobuf_unittest_TestNestedExtension__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedExtension, global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Builder>(internal__static_protobuf_unittest_TestNestedExtension__Descriptor,

+                new string[] { });

+        global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Test = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Descriptor.Extensions[0]);

+        internal__static_protobuf_unittest_TestRequired__Descriptor = Descriptor.MessageTypes[7];

+        internal__static_protobuf_unittest_TestRequired__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequired, global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder>(internal__static_protobuf_unittest_TestRequired__Descriptor,

+                new string[] { "A", "Dummy2", "B", "Dummy4", "Dummy5", "Dummy6", "Dummy7", "Dummy8", "Dummy9", "Dummy10", "Dummy11", "Dummy12", "Dummy13", "Dummy14", "Dummy15", "Dummy16", "Dummy17", "Dummy18", "Dummy19", "Dummy20", "Dummy21", "Dummy22", "Dummy23", "Dummy24", "Dummy25", "Dummy26", "Dummy27", "Dummy28", "Dummy29", "Dummy30", "Dummy31", "Dummy32", "C", });

+        global::Google.ProtocolBuffers.TestProtos.TestRequired.Single = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestRequired>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestRequired.Descriptor.Extensions[0]);

+        global::Google.ProtocolBuffers.TestProtos.TestRequired.Multi = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestRequired>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestRequired.Descriptor.Extensions[1]);

+        internal__static_protobuf_unittest_TestRequiredForeign__Descriptor = Descriptor.MessageTypes[8];

+        internal__static_protobuf_unittest_TestRequiredForeign__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign, global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.Builder>(internal__static_protobuf_unittest_TestRequiredForeign__Descriptor,

+                new string[] { "OptionalMessage", "RepeatedMessage", "Dummy", });

+        internal__static_protobuf_unittest_TestForeignNested__Descriptor = Descriptor.MessageTypes[9];

+        internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestForeignNested, global::Google.ProtocolBuffers.TestProtos.TestForeignNested.Builder>(internal__static_protobuf_unittest_TestForeignNested__Descriptor,

+                new string[] { "ForeignNested", });

+        internal__static_protobuf_unittest_TestEmptyMessage__Descriptor = Descriptor.MessageTypes[10];

+        internal__static_protobuf_unittest_TestEmptyMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.Builder>(internal__static_protobuf_unittest_TestEmptyMessage__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor = Descriptor.MessageTypes[11];

+        internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.Builder>(internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor = Descriptor.MessageTypes[12];

+        internal__static_protobuf_unittest_TestMultipleExtensionRanges__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges, global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.Builder>(internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor = Descriptor.MessageTypes[13];

+        internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber, global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.Builder>(internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor,

+                new string[] { "A", "Bb", });

+        internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor = Descriptor.MessageTypes[14];

+        internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage, global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder>(internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor,

+                new string[] { "A", "I", });

+        internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor = Descriptor.MessageTypes[15];

+        internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder>(internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor,

+                new string[] { "Bb", });

+        internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor = Descriptor.MessageTypes[16];

+        internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder>(internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor,

+                new string[] { "A", "OptionalInt32", });

+        internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor = Descriptor.MessageTypes[17];

+        internal__static_protobuf_unittest_TestDupFieldNumber__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Builder>(internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor,

+                new string[] { "A", "Foo", "Bar", });

+        internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor = internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_TestDupFieldNumber_Foo__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder>(internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor = internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor.NestedTypes[1];

+        internal__static_protobuf_unittest_TestDupFieldNumber_Bar__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder>(internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor = Descriptor.MessageTypes[18];

+        internal__static_protobuf_unittest_TestNestedMessageHasBits__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Builder>(internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor,

+                new string[] { "OptionalNestedMessage", });

+        internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder>(internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor,

+                new string[] { "NestedmessageRepeatedInt32", "NestedmessageRepeatedForeignmessage", });

+        internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor = Descriptor.MessageTypes[19];

+        internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames, global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.Builder>(internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor,

+                new string[] { "PrimitiveField", "StringField", "EnumField", "MessageField", "StringPieceField", "CordField", "RepeatedPrimitiveField", "RepeatedStringField", "RepeatedEnumField", "RepeatedMessageField", "RepeatedStringPieceField", "RepeatedCordField", });

+        internal__static_protobuf_unittest_TestFieldOrderings__Descriptor = Descriptor.MessageTypes[20];

+        internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings, global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Builder>(internal__static_protobuf_unittest_TestFieldOrderings__Descriptor,

+                new string[] { "MyString", "MyInt", "MyFloat", });

+        internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor = Descriptor.MessageTypes[21];

+        internal__static_protobuf_unittest_TestExtremeDefaultValues__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues, global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Builder>(internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor,

+                new string[] { "EscapedBytes", "LargeUint32", "LargeUint64", "SmallInt32", "SmallInt64", "Utf8String", "ZeroFloat", "OneFloat", "SmallFloat", "NegativeOneFloat", "NegativeFloat", "LargeFloat", "SmallNegativeFloat", "InfDouble", "NegInfDouble", "NanDouble", "InfFloat", "NegInfFloat", "NanFloat", "CppTrigraph", });

+        internal__static_protobuf_unittest_SparseEnumMessage__Descriptor = Descriptor.MessageTypes[22];

+        internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage, global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.Builder>(internal__static_protobuf_unittest_SparseEnumMessage__Descriptor,

+                new string[] { "SparseEnum", });

+        internal__static_protobuf_unittest_OneString__Descriptor = Descriptor.MessageTypes[23];

+        internal__static_protobuf_unittest_OneString__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneString, global::Google.ProtocolBuffers.TestProtos.OneString.Builder>(internal__static_protobuf_unittest_OneString__Descriptor,

+                new string[] { "Data", });

+        internal__static_protobuf_unittest_OneBytes__Descriptor = Descriptor.MessageTypes[24];

+        internal__static_protobuf_unittest_OneBytes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneBytes, global::Google.ProtocolBuffers.TestProtos.OneBytes.Builder>(internal__static_protobuf_unittest_OneBytes__Descriptor,

+                new string[] { "Data", });

+        internal__static_protobuf_unittest_TestPackedTypes__Descriptor = Descriptor.MessageTypes[25];

+        internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedTypes, global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.Builder>(internal__static_protobuf_unittest_TestPackedTypes__Descriptor,

+                new string[] { "PackedInt32", "PackedInt64", "PackedUint32", "PackedUint64", "PackedSint32", "PackedSint64", "PackedFixed32", "PackedFixed64", "PackedSfixed32", "PackedSfixed64", "PackedFloat", "PackedDouble", "PackedBool", "PackedEnum", });

+        internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor = Descriptor.MessageTypes[26];

+        internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes, global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.Builder>(internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor,

+                new string[] { "UnpackedInt32", "UnpackedInt64", "UnpackedUint32", "UnpackedUint64", "UnpackedSint32", "UnpackedSint64", "UnpackedFixed32", "UnpackedFixed64", "UnpackedSfixed32", "UnpackedSfixed64", "UnpackedFloat", "UnpackedDouble", "UnpackedBool", "UnpackedEnum", });

+        internal__static_protobuf_unittest_TestPackedExtensions__Descriptor = Descriptor.MessageTypes[27];

+        internal__static_protobuf_unittest_TestPackedExtensions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions, global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.Builder>(internal__static_protobuf_unittest_TestPackedExtensions__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor = Descriptor.MessageTypes[28];

+        internal__static_protobuf_unittest_TestDynamicExtensions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Builder>(internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor,

+                new string[] { "ScalarExtension", "EnumExtension", "DynamicEnumExtension", "MessageExtension", "DynamicMessageExtension", "RepeatedExtension", "PackedExtension", });

+        internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor = internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder>(internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor,

+                new string[] { "DynamicField", });

+        internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor = Descriptor.MessageTypes[29];

+        internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes, global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.Builder>(internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor,

+                new string[] { "RepeatedFixed32", "RepeatedInt32", "RepeatedFixed64", "RepeatedInt64", "RepeatedFloat", "RepeatedUint64", });

+        internal__static_protobuf_unittest_FooRequest__Descriptor = Descriptor.MessageTypes[30];

+        internal__static_protobuf_unittest_FooRequest__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooRequest, global::Google.ProtocolBuffers.TestProtos.FooRequest.Builder>(internal__static_protobuf_unittest_FooRequest__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_FooResponse__Descriptor = Descriptor.MessageTypes[31];

+        internal__static_protobuf_unittest_FooResponse__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooResponse, global::Google.ProtocolBuffers.TestProtos.FooResponse.Builder>(internal__static_protobuf_unittest_FooResponse__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_BarRequest__Descriptor = Descriptor.MessageTypes[32];

+        internal__static_protobuf_unittest_BarRequest__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarRequest, global::Google.ProtocolBuffers.TestProtos.BarRequest.Builder>(internal__static_protobuf_unittest_BarRequest__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_BarResponse__Descriptor = Descriptor.MessageTypes[33];

+        internal__static_protobuf_unittest_BarResponse__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarResponse, global::Google.ProtocolBuffers.TestProtos.BarResponse.Builder>(internal__static_protobuf_unittest_BarResponse__Descriptor,

+                new string[] { });

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalInt32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[0]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalInt64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[1]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalUint32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[2]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalUint64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[3]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSint32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[4]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSint64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[5]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFixed32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[6]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFixed64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[7]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSfixed32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[8]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSfixed64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[9]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFloatExtension = pb::GeneratedSingleExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[10]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalDoubleExtension = pb::GeneratedSingleExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[11]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalBoolExtension = pb::GeneratedSingleExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[12]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalStringExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[13]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalBytesExtension = pb::GeneratedSingleExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[14]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalGroupExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[15]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalNestedMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[16]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalForeignMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[17]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalImportMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[18]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalNestedEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[19]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalForeignEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[20]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalImportEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[21]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalStringPieceExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[22]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalCordExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[23]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedInt32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[24]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedInt64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[25]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedUint32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[26]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedUint64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[27]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSint32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[28]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSint64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[29]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFixed32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[30]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFixed64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[31]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSfixed32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[32]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSfixed64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[33]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFloatExtension = pb::GeneratedRepeatExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[34]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedDoubleExtension = pb::GeneratedRepeatExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[35]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedBoolExtension = pb::GeneratedRepeatExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[36]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedStringExtension = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[37]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedBytesExtension = pb::GeneratedRepeatExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[38]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedGroupExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[39]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedNestedMessageExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[40]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedForeignMessageExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[41]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedImportMessageExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ImportMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[42]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedNestedEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[43]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedForeignEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[44]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedImportEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[45]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedStringPieceExtension = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[46]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedCordExtension = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[47]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultInt32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[48]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultInt64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[49]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultUint32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[50]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultUint64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[51]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSint32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[52]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSint64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[53]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFixed32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[54]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFixed64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[55]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSfixed32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[56]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSfixed64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[57]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFloatExtension = pb::GeneratedSingleExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[58]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultDoubleExtension = pb::GeneratedSingleExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[59]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultBoolExtension = pb::GeneratedSingleExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[60]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultStringExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[61]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultBytesExtension = pb::GeneratedSingleExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[62]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultNestedEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[63]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultForeignEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[64]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultImportEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[65]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultStringPieceExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[66]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultCordExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[67]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.MyExtensionString = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[68]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.MyExtensionInt = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[69]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedInt32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[70]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedInt64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[71]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedUint32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[72]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedUint64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[73]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSint32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[74]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSint64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[75]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFixed32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[76]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFixed64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[77]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSfixed32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[78]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSfixed64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[79]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFloatExtension = pb::GeneratedRepeatExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[80]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedDoubleExtension = pb::GeneratedRepeatExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[81]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedBoolExtension = pb::GeneratedRepeatExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[82]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[83]);

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum ForeignEnum {

+    FOREIGN_FOO = 4,

+    FOREIGN_BAR = 5,

+    FOREIGN_BAZ = 6,

+  }

+  

+  public enum TestEnumWithDupValue {

+    FOO1 = 1,

+    BAR1 = 2,

+    BAZ = 3,

+    FOO2 = 1,

+    BAR2 = 2,

+  }

+  

+  public enum TestSparseEnum {

+    SPARSE_A = 123,

+    SPARSE_B = 62374,

+    SPARSE_C = 12589234,

+    SPARSE_D = -15,

+    SPARSE_E = -53452,

+    SPARSE_F = 0,

+    SPARSE_G = 2,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestAllTypes : pb::GeneratedMessage<TestAllTypes, TestAllTypes.Builder> {

+    private TestAllTypes() { }

+    private static readonly TestAllTypes defaultInstance = new TestAllTypes().MakeReadOnly();

+    private static readonly string[] _testAllTypesFieldNames = new string[] { "default_bool", "default_bytes", "default_cord", "default_double", "default_fixed32", "default_fixed64", "default_float", "default_foreign_enum", "default_import_enum", "default_int32", "default_int64", "default_nested_enum", "default_sfixed32", "default_sfixed64", "default_sint32", "default_sint64", "default_string", "default_string_piece", "default_uint32", "default_uint64", "optional_bool", "optional_bytes", "optional_cord", "optional_double", "optional_fixed32", "optional_fixed64", "optional_float", "optional_foreign_enum", "optional_foreign_message", "optional_import_enum", "optional_import_message", "optional_int32", "optional_int64", "optional_nested_enum", "optional_nested_message", "optional_sfixed32", "optional_sfixed64", "optional_sint32", "optional_sint64", "optional_string", "optional_string_piece", "optional_uint32", "optional_uint64", "optionalgroup", "repeated_bool", "repeated_bytes", "repeated_cord", "repeated_double", "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_foreign_enum", "repeated_foreign_message", "repeated_import_enum", "repeated_import_message", "repeated_int32", "repeated_int64", "repeated_nested_enum", "repeated_nested_message", "repeated_sfixed32", "repeated_sfixed64", "repeated_sint32", "repeated_sint64", "repeated_string", "repeated_string_piece", "repeated_uint32", "repeated_uint64", "repeatedgroup" };

+    private static readonly uint[] _testAllTypesFieldTags = new uint[] { 584, 602, 682, 577, 541, 545, 573, 656, 664, 488, 496, 648, 557, 561, 520, 528, 594, 674, 504, 512, 104, 122, 202, 97, 61, 65, 93, 176, 154, 184, 162, 8, 16, 168, 146, 77, 81, 40, 48, 114, 194, 24, 32, 131, 344, 362, 442, 337, 301, 305, 333, 416, 394, 424, 402, 248, 256, 408, 386, 317, 321, 280, 288, 354, 434, 264, 272, 371 };

+    public static TestAllTypes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestAllTypes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestAllTypes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestAllTypes, TestAllTypes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum NestedEnum {

+        FOO = 1,

+        BAR = 2,

+        BAZ = 3,

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {

+        private NestedMessage() { }

+        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();

+        private static readonly string[] _nestedMessageFieldNames = new string[] { "bb" };

+        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 8 };

+        public static NestedMessage DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override NestedMessage DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override NestedMessage ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable; }

+        }

+        

+        public const int BbFieldNumber = 1;

+        private bool hasBb;

+        private int bb_;

+        public bool HasBb {

+          get { return hasBb; }

+        }

+        public int Bb {

+          get { return bb_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _nestedMessageFieldNames;

+          if (hasBb) {

+            output.WriteInt32(1, field_names[0], Bb);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasBb) {

+            size += pb::CodedOutputStream.ComputeInt32Size(1, Bb);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static NestedMessage ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private NestedMessage MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(NestedMessage prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(NestedMessage cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private NestedMessage result;

+          

+          private NestedMessage PrepareBuilder() {

+            if (resultIsReadOnly) {

+              NestedMessage original = result;

+              result = new NestedMessage();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override NestedMessage MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Descriptor; }

+          }

+          

+          public override NestedMessage DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }

+          }

+          

+          public override NestedMessage BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is NestedMessage) {

+              return MergeFrom((NestedMessage) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(NestedMessage other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasBb) {

+              Bb = other.Bb;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _nestedMessageFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 8: {

+                  result.hasBb = input.ReadInt32(ref result.bb_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasBb {

+            get { return result.hasBb; }

+          }

+          public int Bb {

+            get { return result.Bb; }

+            set { SetBb(value); }

+          }

+          public Builder SetBb(int value) {

+            PrepareBuilder();

+            result.hasBb = true;

+            result.bb_ = value;

+            return this;

+          }

+          public Builder ClearBb() {

+            PrepareBuilder();

+            result.hasBb = false;

+            result.bb_ = 0;

+            return this;

+          }

+        }

+        static NestedMessage() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class OptionalGroup : pb::GeneratedMessage<OptionalGroup, OptionalGroup.Builder> {

+        private OptionalGroup() { }

+        private static readonly OptionalGroup defaultInstance = new OptionalGroup().MakeReadOnly();

+        private static readonly string[] _optionalGroupFieldNames = new string[] { "a" };

+        private static readonly uint[] _optionalGroupFieldTags = new uint[] { 136 };

+        public static OptionalGroup DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override OptionalGroup DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override OptionalGroup ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<OptionalGroup, OptionalGroup.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__FieldAccessorTable; }

+        }

+        

+        public const int AFieldNumber = 17;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _optionalGroupFieldNames;

+          if (hasA) {

+            output.WriteInt32(17, field_names[0], A);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(17, A);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static OptionalGroup ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private OptionalGroup MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(OptionalGroup prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<OptionalGroup, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(OptionalGroup cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private OptionalGroup result;

+          

+          private OptionalGroup PrepareBuilder() {

+            if (resultIsReadOnly) {

+              OptionalGroup original = result;

+              result = new OptionalGroup();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override OptionalGroup MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Descriptor; }

+          }

+          

+          public override OptionalGroup DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance; }

+          }

+          

+          public override OptionalGroup BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is OptionalGroup) {

+              return MergeFrom((OptionalGroup) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(OptionalGroup other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_optionalGroupFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _optionalGroupFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 136: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static OptionalGroup() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class RepeatedGroup : pb::GeneratedMessage<RepeatedGroup, RepeatedGroup.Builder> {

+        private RepeatedGroup() { }

+        private static readonly RepeatedGroup defaultInstance = new RepeatedGroup().MakeReadOnly();

+        private static readonly string[] _repeatedGroupFieldNames = new string[] { "a" };

+        private static readonly uint[] _repeatedGroupFieldTags = new uint[] { 376 };

+        public static RepeatedGroup DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override RepeatedGroup DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override RepeatedGroup ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<RepeatedGroup, RepeatedGroup.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__FieldAccessorTable; }

+        }

+        

+        public const int AFieldNumber = 47;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _repeatedGroupFieldNames;

+          if (hasA) {

+            output.WriteInt32(47, field_names[0], A);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(47, A);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static RepeatedGroup ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private RepeatedGroup MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(RepeatedGroup prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<RepeatedGroup, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(RepeatedGroup cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private RepeatedGroup result;

+          

+          private RepeatedGroup PrepareBuilder() {

+            if (resultIsReadOnly) {

+              RepeatedGroup original = result;

+              result = new RepeatedGroup();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override RepeatedGroup MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Descriptor; }

+          }

+          

+          public override RepeatedGroup DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.DefaultInstance; }

+          }

+          

+          public override RepeatedGroup BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is RepeatedGroup) {

+              return MergeFrom((RepeatedGroup) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(RepeatedGroup other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _repeatedGroupFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 376: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static RepeatedGroup() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int OptionalInt32FieldNumber = 1;

+    private bool hasOptionalInt32;

+    private int optionalInt32_;

+    public bool HasOptionalInt32 {

+      get { return hasOptionalInt32; }

+    }

+    public int OptionalInt32 {

+      get { return optionalInt32_; }

+    }

+    

+    public const int OptionalInt64FieldNumber = 2;

+    private bool hasOptionalInt64;

+    private long optionalInt64_;

+    public bool HasOptionalInt64 {

+      get { return hasOptionalInt64; }

+    }

+    public long OptionalInt64 {

+      get { return optionalInt64_; }

+    }

+    

+    public const int OptionalUint32FieldNumber = 3;

+    private bool hasOptionalUint32;

+    private uint optionalUint32_;

+    public bool HasOptionalUint32 {

+      get { return hasOptionalUint32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint OptionalUint32 {

+      get { return optionalUint32_; }

+    }

+    

+    public const int OptionalUint64FieldNumber = 4;

+    private bool hasOptionalUint64;

+    private ulong optionalUint64_;

+    public bool HasOptionalUint64 {

+      get { return hasOptionalUint64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong OptionalUint64 {

+      get { return optionalUint64_; }

+    }

+    

+    public const int OptionalSint32FieldNumber = 5;

+    private bool hasOptionalSint32;

+    private int optionalSint32_;

+    public bool HasOptionalSint32 {

+      get { return hasOptionalSint32; }

+    }

+    public int OptionalSint32 {

+      get { return optionalSint32_; }

+    }

+    

+    public const int OptionalSint64FieldNumber = 6;

+    private bool hasOptionalSint64;

+    private long optionalSint64_;

+    public bool HasOptionalSint64 {

+      get { return hasOptionalSint64; }

+    }

+    public long OptionalSint64 {

+      get { return optionalSint64_; }

+    }

+    

+    public const int OptionalFixed32FieldNumber = 7;

+    private bool hasOptionalFixed32;

+    private uint optionalFixed32_;

+    public bool HasOptionalFixed32 {

+      get { return hasOptionalFixed32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint OptionalFixed32 {

+      get { return optionalFixed32_; }

+    }

+    

+    public const int OptionalFixed64FieldNumber = 8;

+    private bool hasOptionalFixed64;

+    private ulong optionalFixed64_;

+    public bool HasOptionalFixed64 {

+      get { return hasOptionalFixed64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong OptionalFixed64 {

+      get { return optionalFixed64_; }

+    }

+    

+    public const int OptionalSfixed32FieldNumber = 9;

+    private bool hasOptionalSfixed32;

+    private int optionalSfixed32_;

+    public bool HasOptionalSfixed32 {

+      get { return hasOptionalSfixed32; }

+    }

+    public int OptionalSfixed32 {

+      get { return optionalSfixed32_; }

+    }

+    

+    public const int OptionalSfixed64FieldNumber = 10;

+    private bool hasOptionalSfixed64;

+    private long optionalSfixed64_;

+    public bool HasOptionalSfixed64 {

+      get { return hasOptionalSfixed64; }

+    }

+    public long OptionalSfixed64 {

+      get { return optionalSfixed64_; }

+    }

+    

+    public const int OptionalFloatFieldNumber = 11;

+    private bool hasOptionalFloat;

+    private float optionalFloat_;

+    public bool HasOptionalFloat {

+      get { return hasOptionalFloat; }

+    }

+    public float OptionalFloat {

+      get { return optionalFloat_; }

+    }

+    

+    public const int OptionalDoubleFieldNumber = 12;

+    private bool hasOptionalDouble;

+    private double optionalDouble_;

+    public bool HasOptionalDouble {

+      get { return hasOptionalDouble; }

+    }

+    public double OptionalDouble {

+      get { return optionalDouble_; }

+    }

+    

+    public const int OptionalBoolFieldNumber = 13;

+    private bool hasOptionalBool;

+    private bool optionalBool_;

+    public bool HasOptionalBool {

+      get { return hasOptionalBool; }

+    }

+    public bool OptionalBool {

+      get { return optionalBool_; }

+    }

+    

+    public const int OptionalStringFieldNumber = 14;

+    private bool hasOptionalString;

+    private string optionalString_ = "";

+    public bool HasOptionalString {

+      get { return hasOptionalString; }

+    }

+    public string OptionalString {

+      get { return optionalString_; }

+    }

+    

+    public const int OptionalBytesFieldNumber = 15;

+    private bool hasOptionalBytes;

+    private pb::ByteString optionalBytes_ = pb::ByteString.Empty;

+    public bool HasOptionalBytes {

+      get { return hasOptionalBytes; }

+    }

+    public pb::ByteString OptionalBytes {

+      get { return optionalBytes_; }

+    }

+    

+    public const int OptionalGroupFieldNumber = 16;

+    private bool hasOptionalGroup;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup optionalGroup_;

+    public bool HasOptionalGroup {

+      get { return hasOptionalGroup; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup OptionalGroup {

+      get { return optionalGroup_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance; }

+    }

+    

+    public const int OptionalNestedMessageFieldNumber = 18;

+    private bool hasOptionalNestedMessage;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage optionalNestedMessage_;

+    public bool HasOptionalNestedMessage {

+      get { return hasOptionalNestedMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage OptionalNestedMessage {

+      get { return optionalNestedMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }

+    }

+    

+    public const int OptionalForeignMessageFieldNumber = 19;

+    private bool hasOptionalForeignMessage;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage optionalForeignMessage_;

+    public bool HasOptionalForeignMessage {

+      get { return hasOptionalForeignMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage OptionalForeignMessage {

+      get { return optionalForeignMessage_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }

+    }

+    

+    public const int OptionalImportMessageFieldNumber = 20;

+    private bool hasOptionalImportMessage;

+    private global::Google.ProtocolBuffers.TestProtos.ImportMessage optionalImportMessage_;

+    public bool HasOptionalImportMessage {

+      get { return hasOptionalImportMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportMessage OptionalImportMessage {

+      get { return optionalImportMessage_ ?? global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance; }

+    }

+    

+    public const int OptionalNestedEnumFieldNumber = 21;

+    private bool hasOptionalNestedEnum;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.FOO;

+    public bool HasOptionalNestedEnum {

+      get { return hasOptionalNestedEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum OptionalNestedEnum {

+      get { return optionalNestedEnum_; }

+    }

+    

+    public const int OptionalForeignEnumFieldNumber = 22;

+    private bool hasOptionalForeignEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+    public bool HasOptionalForeignEnum {

+      get { return hasOptionalForeignEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum OptionalForeignEnum {

+      get { return optionalForeignEnum_; }

+    }

+    

+    public const int OptionalImportEnumFieldNumber = 23;

+    private bool hasOptionalImportEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ImportEnum optionalImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_FOO;

+    public bool HasOptionalImportEnum {

+      get { return hasOptionalImportEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportEnum OptionalImportEnum {

+      get { return optionalImportEnum_; }

+    }

+    

+    public const int OptionalStringPieceFieldNumber = 24;

+    private bool hasOptionalStringPiece;

+    private string optionalStringPiece_ = "";

+    public bool HasOptionalStringPiece {

+      get { return hasOptionalStringPiece; }

+    }

+    public string OptionalStringPiece {

+      get { return optionalStringPiece_; }

+    }

+    

+    public const int OptionalCordFieldNumber = 25;

+    private bool hasOptionalCord;

+    private string optionalCord_ = "";

+    public bool HasOptionalCord {

+      get { return hasOptionalCord; }

+    }

+    public string OptionalCord {

+      get { return optionalCord_; }

+    }

+    

+    public const int RepeatedInt32FieldNumber = 31;

+    private pbc::PopsicleList<int> repeatedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedInt32List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt32_); }

+    }

+    public int RepeatedInt32Count {

+      get { return repeatedInt32_.Count; }

+    }

+    public int GetRepeatedInt32(int index) {

+      return repeatedInt32_[index];

+    }

+    

+    public const int RepeatedInt64FieldNumber = 32;

+    private pbc::PopsicleList<long> repeatedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedInt64List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt64_); }

+    }

+    public int RepeatedInt64Count {

+      get { return repeatedInt64_.Count; }

+    }

+    public long GetRepeatedInt64(int index) {

+      return repeatedInt64_[index];

+    }

+    

+    public const int RepeatedUint32FieldNumber = 33;

+    private pbc::PopsicleList<uint> repeatedUint32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> RepeatedUint32List {

+      get { return pbc::Lists.AsReadOnly(repeatedUint32_); }

+    }

+    public int RepeatedUint32Count {

+      get { return repeatedUint32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetRepeatedUint32(int index) {

+      return repeatedUint32_[index];

+    }

+    

+    public const int RepeatedUint64FieldNumber = 34;

+    private pbc::PopsicleList<ulong> repeatedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedUint64List {

+      get { return pbc::Lists.AsReadOnly(repeatedUint64_); }

+    }

+    public int RepeatedUint64Count {

+      get { return repeatedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedUint64(int index) {

+      return repeatedUint64_[index];

+    }

+    

+    public const int RepeatedSint32FieldNumber = 35;

+    private pbc::PopsicleList<int> repeatedSint32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedSint32List {

+      get { return pbc::Lists.AsReadOnly(repeatedSint32_); }

+    }

+    public int RepeatedSint32Count {

+      get { return repeatedSint32_.Count; }

+    }

+    public int GetRepeatedSint32(int index) {

+      return repeatedSint32_[index];

+    }

+    

+    public const int RepeatedSint64FieldNumber = 36;

+    private pbc::PopsicleList<long> repeatedSint64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedSint64List {

+      get { return pbc::Lists.AsReadOnly(repeatedSint64_); }

+    }

+    public int RepeatedSint64Count {

+      get { return repeatedSint64_.Count; }

+    }

+    public long GetRepeatedSint64(int index) {

+      return repeatedSint64_[index];

+    }

+    

+    public const int RepeatedFixed32FieldNumber = 37;

+    private pbc::PopsicleList<uint> repeatedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> RepeatedFixed32List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed32_); }

+    }

+    public int RepeatedFixed32Count {

+      get { return repeatedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetRepeatedFixed32(int index) {

+      return repeatedFixed32_[index];

+    }

+    

+    public const int RepeatedFixed64FieldNumber = 38;

+    private pbc::PopsicleList<ulong> repeatedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedFixed64List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed64_); }

+    }

+    public int RepeatedFixed64Count {

+      get { return repeatedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedFixed64(int index) {

+      return repeatedFixed64_[index];

+    }

+    

+    public const int RepeatedSfixed32FieldNumber = 39;

+    private pbc::PopsicleList<int> repeatedSfixed32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedSfixed32List {

+      get { return pbc::Lists.AsReadOnly(repeatedSfixed32_); }

+    }

+    public int RepeatedSfixed32Count {

+      get { return repeatedSfixed32_.Count; }

+    }

+    public int GetRepeatedSfixed32(int index) {

+      return repeatedSfixed32_[index];

+    }

+    

+    public const int RepeatedSfixed64FieldNumber = 40;

+    private pbc::PopsicleList<long> repeatedSfixed64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedSfixed64List {

+      get { return pbc::Lists.AsReadOnly(repeatedSfixed64_); }

+    }

+    public int RepeatedSfixed64Count {

+      get { return repeatedSfixed64_.Count; }

+    }

+    public long GetRepeatedSfixed64(int index) {

+      return repeatedSfixed64_[index];

+    }

+    

+    public const int RepeatedFloatFieldNumber = 41;

+    private pbc::PopsicleList<float> repeatedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> RepeatedFloatList {

+      get { return pbc::Lists.AsReadOnly(repeatedFloat_); }

+    }

+    public int RepeatedFloatCount {

+      get { return repeatedFloat_.Count; }

+    }

+    public float GetRepeatedFloat(int index) {

+      return repeatedFloat_[index];

+    }

+    

+    public const int RepeatedDoubleFieldNumber = 42;

+    private pbc::PopsicleList<double> repeatedDouble_ = new pbc::PopsicleList<double>();

+    public scg::IList<double> RepeatedDoubleList {

+      get { return pbc::Lists.AsReadOnly(repeatedDouble_); }

+    }

+    public int RepeatedDoubleCount {

+      get { return repeatedDouble_.Count; }

+    }

+    public double GetRepeatedDouble(int index) {

+      return repeatedDouble_[index];

+    }

+    

+    public const int RepeatedBoolFieldNumber = 43;

+    private pbc::PopsicleList<bool> repeatedBool_ = new pbc::PopsicleList<bool>();

+    public scg::IList<bool> RepeatedBoolList {

+      get { return pbc::Lists.AsReadOnly(repeatedBool_); }

+    }

+    public int RepeatedBoolCount {

+      get { return repeatedBool_.Count; }

+    }

+    public bool GetRepeatedBool(int index) {

+      return repeatedBool_[index];

+    }

+    

+    public const int RepeatedStringFieldNumber = 44;

+    private pbc::PopsicleList<string> repeatedString_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringList {

+      get { return pbc::Lists.AsReadOnly(repeatedString_); }

+    }

+    public int RepeatedStringCount {

+      get { return repeatedString_.Count; }

+    }

+    public string GetRepeatedString(int index) {

+      return repeatedString_[index];

+    }

+    

+    public const int RepeatedBytesFieldNumber = 45;

+    private pbc::PopsicleList<pb::ByteString> repeatedBytes_ = new pbc::PopsicleList<pb::ByteString>();

+    public scg::IList<pb::ByteString> RepeatedBytesList {

+      get { return pbc::Lists.AsReadOnly(repeatedBytes_); }

+    }

+    public int RepeatedBytesCount {

+      get { return repeatedBytes_.Count; }

+    }

+    public pb::ByteString GetRepeatedBytes(int index) {

+      return repeatedBytes_[index];

+    }

+    

+    public const int RepeatedGroupFieldNumber = 46;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> repeatedGroup_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> RepeatedGroupList {

+      get { return repeatedGroup_; }

+    }

+    public int RepeatedGroupCount {

+      get { return repeatedGroup_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup GetRepeatedGroup(int index) {

+      return repeatedGroup_[index];

+    }

+    

+    public const int RepeatedNestedMessageFieldNumber = 48;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> repeatedNestedMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> RepeatedNestedMessageList {

+      get { return repeatedNestedMessage_; }

+    }

+    public int RepeatedNestedMessageCount {

+      get { return repeatedNestedMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage GetRepeatedNestedMessage(int index) {

+      return repeatedNestedMessage_[index];

+    }

+    

+    public const int RepeatedForeignMessageFieldNumber = 49;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> repeatedForeignMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedForeignMessageList {

+      get { return repeatedForeignMessage_; }

+    }

+    public int RepeatedForeignMessageCount {

+      get { return repeatedForeignMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedForeignMessage(int index) {

+      return repeatedForeignMessage_[index];

+    }

+    

+    public const int RepeatedImportMessageFieldNumber = 50;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessage> repeatedImportMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessage>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportMessage> RepeatedImportMessageList {

+      get { return repeatedImportMessage_; }

+    }

+    public int RepeatedImportMessageCount {

+      get { return repeatedImportMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportMessage GetRepeatedImportMessage(int index) {

+      return repeatedImportMessage_[index];

+    }

+    

+    public const int RepeatedNestedEnumFieldNumber = 51;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> repeatedNestedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> RepeatedNestedEnumList {

+      get { return pbc::Lists.AsReadOnly(repeatedNestedEnum_); }

+    }

+    public int RepeatedNestedEnumCount {

+      get { return repeatedNestedEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum GetRepeatedNestedEnum(int index) {

+      return repeatedNestedEnum_[index];

+    }

+    

+    public const int RepeatedForeignEnumFieldNumber = 52;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> repeatedForeignEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedForeignEnumList {

+      get { return pbc::Lists.AsReadOnly(repeatedForeignEnum_); }

+    }

+    public int RepeatedForeignEnumCount {

+      get { return repeatedForeignEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedForeignEnum(int index) {

+      return repeatedForeignEnum_[index];

+    }

+    

+    public const int RepeatedImportEnumFieldNumber = 53;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnum> repeatedImportEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportEnum> RepeatedImportEnumList {

+      get { return pbc::Lists.AsReadOnly(repeatedImportEnum_); }

+    }

+    public int RepeatedImportEnumCount {

+      get { return repeatedImportEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportEnum GetRepeatedImportEnum(int index) {

+      return repeatedImportEnum_[index];

+    }

+    

+    public const int RepeatedStringPieceFieldNumber = 54;

+    private pbc::PopsicleList<string> repeatedStringPiece_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringPieceList {

+      get { return pbc::Lists.AsReadOnly(repeatedStringPiece_); }

+    }

+    public int RepeatedStringPieceCount {

+      get { return repeatedStringPiece_.Count; }

+    }

+    public string GetRepeatedStringPiece(int index) {

+      return repeatedStringPiece_[index];

+    }

+    

+    public const int RepeatedCordFieldNumber = 55;

+    private pbc::PopsicleList<string> repeatedCord_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedCordList {

+      get { return pbc::Lists.AsReadOnly(repeatedCord_); }

+    }

+    public int RepeatedCordCount {

+      get { return repeatedCord_.Count; }

+    }

+    public string GetRepeatedCord(int index) {

+      return repeatedCord_[index];

+    }

+    

+    public const int DefaultInt32FieldNumber = 61;

+    private bool hasDefaultInt32;

+    private int defaultInt32_ = 41;

+    public bool HasDefaultInt32 {

+      get { return hasDefaultInt32; }

+    }

+    public int DefaultInt32 {

+      get { return defaultInt32_; }

+    }

+    

+    public const int DefaultInt64FieldNumber = 62;

+    private bool hasDefaultInt64;

+    private long defaultInt64_ = 42L;

+    public bool HasDefaultInt64 {

+      get { return hasDefaultInt64; }

+    }

+    public long DefaultInt64 {

+      get { return defaultInt64_; }

+    }

+    

+    public const int DefaultUint32FieldNumber = 63;

+    private bool hasDefaultUint32;

+    private uint defaultUint32_ = 43;

+    public bool HasDefaultUint32 {

+      get { return hasDefaultUint32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint DefaultUint32 {

+      get { return defaultUint32_; }

+    }

+    

+    public const int DefaultUint64FieldNumber = 64;

+    private bool hasDefaultUint64;

+    private ulong defaultUint64_ = 44UL;

+    public bool HasDefaultUint64 {

+      get { return hasDefaultUint64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong DefaultUint64 {

+      get { return defaultUint64_; }

+    }

+    

+    public const int DefaultSint32FieldNumber = 65;

+    private bool hasDefaultSint32;

+    private int defaultSint32_ = -45;

+    public bool HasDefaultSint32 {

+      get { return hasDefaultSint32; }

+    }

+    public int DefaultSint32 {

+      get { return defaultSint32_; }

+    }

+    

+    public const int DefaultSint64FieldNumber = 66;

+    private bool hasDefaultSint64;

+    private long defaultSint64_ = 46;

+    public bool HasDefaultSint64 {

+      get { return hasDefaultSint64; }

+    }

+    public long DefaultSint64 {

+      get { return defaultSint64_; }

+    }

+    

+    public const int DefaultFixed32FieldNumber = 67;

+    private bool hasDefaultFixed32;

+    private uint defaultFixed32_ = 47;

+    public bool HasDefaultFixed32 {

+      get { return hasDefaultFixed32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint DefaultFixed32 {

+      get { return defaultFixed32_; }

+    }

+    

+    public const int DefaultFixed64FieldNumber = 68;

+    private bool hasDefaultFixed64;

+    private ulong defaultFixed64_ = 48;

+    public bool HasDefaultFixed64 {

+      get { return hasDefaultFixed64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong DefaultFixed64 {

+      get { return defaultFixed64_; }

+    }

+    

+    public const int DefaultSfixed32FieldNumber = 69;

+    private bool hasDefaultSfixed32;

+    private int defaultSfixed32_ = 49;

+    public bool HasDefaultSfixed32 {

+      get { return hasDefaultSfixed32; }

+    }

+    public int DefaultSfixed32 {

+      get { return defaultSfixed32_; }

+    }

+    

+    public const int DefaultSfixed64FieldNumber = 70;

+    private bool hasDefaultSfixed64;

+    private long defaultSfixed64_ = -50;

+    public bool HasDefaultSfixed64 {

+      get { return hasDefaultSfixed64; }

+    }

+    public long DefaultSfixed64 {

+      get { return defaultSfixed64_; }

+    }

+    

+    public const int DefaultFloatFieldNumber = 71;

+    private bool hasDefaultFloat;

+    private float defaultFloat_ = 51.5F;

+    public bool HasDefaultFloat {

+      get { return hasDefaultFloat; }

+    }

+    public float DefaultFloat {

+      get { return defaultFloat_; }

+    }

+    

+    public const int DefaultDoubleFieldNumber = 72;

+    private bool hasDefaultDouble;

+    private double defaultDouble_ = 52000D;

+    public bool HasDefaultDouble {

+      get { return hasDefaultDouble; }

+    }

+    public double DefaultDouble {

+      get { return defaultDouble_; }

+    }

+    

+    public const int DefaultBoolFieldNumber = 73;

+    private bool hasDefaultBool;

+    private bool defaultBool_ = true;

+    public bool HasDefaultBool {

+      get { return hasDefaultBool; }

+    }

+    public bool DefaultBool {

+      get { return defaultBool_; }

+    }

+    

+    public const int DefaultStringFieldNumber = 74;

+    private bool hasDefaultString;

+    private string defaultString_ = "hello";

+    public bool HasDefaultString {

+      get { return hasDefaultString; }

+    }

+    public string DefaultString {

+      get { return defaultString_; }

+    }

+    

+    public const int DefaultBytesFieldNumber = 75;

+    private bool hasDefaultBytes;

+    private pb::ByteString defaultBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Descriptor.Fields[62].DefaultValue;

+    public bool HasDefaultBytes {

+      get { return hasDefaultBytes; }

+    }

+    public pb::ByteString DefaultBytes {

+      get { return defaultBytes_; }

+    }

+    

+    public const int DefaultNestedEnumFieldNumber = 81;

+    private bool hasDefaultNestedEnum;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum defaultNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.BAR;

+    public bool HasDefaultNestedEnum {

+      get { return hasDefaultNestedEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum DefaultNestedEnum {

+      get { return defaultNestedEnum_; }

+    }

+    

+    public const int DefaultForeignEnumFieldNumber = 82;

+    private bool hasDefaultForeignEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum defaultForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_BAR;

+    public bool HasDefaultForeignEnum {

+      get { return hasDefaultForeignEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum DefaultForeignEnum {

+      get { return defaultForeignEnum_; }

+    }

+    

+    public const int DefaultImportEnumFieldNumber = 83;

+    private bool hasDefaultImportEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ImportEnum defaultImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_BAR;

+    public bool HasDefaultImportEnum {

+      get { return hasDefaultImportEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportEnum DefaultImportEnum {

+      get { return defaultImportEnum_; }

+    }

+    

+    public const int DefaultStringPieceFieldNumber = 84;

+    private bool hasDefaultStringPiece;

+    private string defaultStringPiece_ = "abc";

+    public bool HasDefaultStringPiece {

+      get { return hasDefaultStringPiece; }

+    }

+    public string DefaultStringPiece {

+      get { return defaultStringPiece_; }

+    }

+    

+    public const int DefaultCordFieldNumber = 85;

+    private bool hasDefaultCord;

+    private string defaultCord_ = "123";

+    public bool HasDefaultCord {

+      get { return hasDefaultCord; }

+    }

+    public string DefaultCord {

+      get { return defaultCord_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testAllTypesFieldNames;

+      if (hasOptionalInt32) {

+        output.WriteInt32(1, field_names[31], OptionalInt32);

+      }

+      if (hasOptionalInt64) {

+        output.WriteInt64(2, field_names[32], OptionalInt64);

+      }

+      if (hasOptionalUint32) {

+        output.WriteUInt32(3, field_names[41], OptionalUint32);

+      }

+      if (hasOptionalUint64) {

+        output.WriteUInt64(4, field_names[42], OptionalUint64);

+      }

+      if (hasOptionalSint32) {

+        output.WriteSInt32(5, field_names[37], OptionalSint32);

+      }

+      if (hasOptionalSint64) {

+        output.WriteSInt64(6, field_names[38], OptionalSint64);

+      }

+      if (hasOptionalFixed32) {

+        output.WriteFixed32(7, field_names[24], OptionalFixed32);

+      }

+      if (hasOptionalFixed64) {

+        output.WriteFixed64(8, field_names[25], OptionalFixed64);

+      }

+      if (hasOptionalSfixed32) {

+        output.WriteSFixed32(9, field_names[35], OptionalSfixed32);

+      }

+      if (hasOptionalSfixed64) {

+        output.WriteSFixed64(10, field_names[36], OptionalSfixed64);

+      }

+      if (hasOptionalFloat) {

+        output.WriteFloat(11, field_names[26], OptionalFloat);

+      }

+      if (hasOptionalDouble) {

+        output.WriteDouble(12, field_names[23], OptionalDouble);

+      }

+      if (hasOptionalBool) {

+        output.WriteBool(13, field_names[20], OptionalBool);

+      }

+      if (hasOptionalString) {

+        output.WriteString(14, field_names[39], OptionalString);

+      }

+      if (hasOptionalBytes) {

+        output.WriteBytes(15, field_names[21], OptionalBytes);

+      }

+      if (hasOptionalGroup) {

+        output.WriteGroup(16, field_names[43], OptionalGroup);

+      }

+      if (hasOptionalNestedMessage) {

+        output.WriteMessage(18, field_names[34], OptionalNestedMessage);

+      }

+      if (hasOptionalForeignMessage) {

+        output.WriteMessage(19, field_names[28], OptionalForeignMessage);

+      }

+      if (hasOptionalImportMessage) {

+        output.WriteMessage(20, field_names[30], OptionalImportMessage);

+      }

+      if (hasOptionalNestedEnum) {

+        output.WriteEnum(21, field_names[33], (int) OptionalNestedEnum, OptionalNestedEnum);

+      }

+      if (hasOptionalForeignEnum) {

+        output.WriteEnum(22, field_names[27], (int) OptionalForeignEnum, OptionalForeignEnum);

+      }

+      if (hasOptionalImportEnum) {

+        output.WriteEnum(23, field_names[29], (int) OptionalImportEnum, OptionalImportEnum);

+      }

+      if (hasOptionalStringPiece) {

+        output.WriteString(24, field_names[40], OptionalStringPiece);

+      }

+      if (hasOptionalCord) {

+        output.WriteString(25, field_names[22], OptionalCord);

+      }

+      if (repeatedInt32_.Count > 0) {

+        output.WriteInt32Array(31, field_names[55], repeatedInt32_);

+      }

+      if (repeatedInt64_.Count > 0) {

+        output.WriteInt64Array(32, field_names[56], repeatedInt64_);

+      }

+      if (repeatedUint32_.Count > 0) {

+        output.WriteUInt32Array(33, field_names[65], repeatedUint32_);

+      }

+      if (repeatedUint64_.Count > 0) {

+        output.WriteUInt64Array(34, field_names[66], repeatedUint64_);

+      }

+      if (repeatedSint32_.Count > 0) {

+        output.WriteSInt32Array(35, field_names[61], repeatedSint32_);

+      }

+      if (repeatedSint64_.Count > 0) {

+        output.WriteSInt64Array(36, field_names[62], repeatedSint64_);

+      }

+      if (repeatedFixed32_.Count > 0) {

+        output.WriteFixed32Array(37, field_names[48], repeatedFixed32_);

+      }

+      if (repeatedFixed64_.Count > 0) {

+        output.WriteFixed64Array(38, field_names[49], repeatedFixed64_);

+      }

+      if (repeatedSfixed32_.Count > 0) {

+        output.WriteSFixed32Array(39, field_names[59], repeatedSfixed32_);

+      }

+      if (repeatedSfixed64_.Count > 0) {

+        output.WriteSFixed64Array(40, field_names[60], repeatedSfixed64_);

+      }

+      if (repeatedFloat_.Count > 0) {

+        output.WriteFloatArray(41, field_names[50], repeatedFloat_);

+      }

+      if (repeatedDouble_.Count > 0) {

+        output.WriteDoubleArray(42, field_names[47], repeatedDouble_);

+      }

+      if (repeatedBool_.Count > 0) {

+        output.WriteBoolArray(43, field_names[44], repeatedBool_);

+      }

+      if (repeatedString_.Count > 0) {

+        output.WriteStringArray(44, field_names[63], repeatedString_);

+      }

+      if (repeatedBytes_.Count > 0) {

+        output.WriteBytesArray(45, field_names[45], repeatedBytes_);

+      }

+      if (repeatedGroup_.Count > 0) {

+        output.WriteGroupArray(46, field_names[67], repeatedGroup_);

+      }

+      if (repeatedNestedMessage_.Count > 0) {

+        output.WriteMessageArray(48, field_names[58], repeatedNestedMessage_);

+      }

+      if (repeatedForeignMessage_.Count > 0) {

+        output.WriteMessageArray(49, field_names[52], repeatedForeignMessage_);

+      }

+      if (repeatedImportMessage_.Count > 0) {

+        output.WriteMessageArray(50, field_names[54], repeatedImportMessage_);

+      }

+      if (repeatedNestedEnum_.Count > 0) {

+        output.WriteEnumArray(51, field_names[57], repeatedNestedEnum_);

+      }

+      if (repeatedForeignEnum_.Count > 0) {

+        output.WriteEnumArray(52, field_names[51], repeatedForeignEnum_);

+      }

+      if (repeatedImportEnum_.Count > 0) {

+        output.WriteEnumArray(53, field_names[53], repeatedImportEnum_);

+      }

+      if (repeatedStringPiece_.Count > 0) {

+        output.WriteStringArray(54, field_names[64], repeatedStringPiece_);

+      }

+      if (repeatedCord_.Count > 0) {

+        output.WriteStringArray(55, field_names[46], repeatedCord_);

+      }

+      if (hasDefaultInt32) {

+        output.WriteInt32(61, field_names[9], DefaultInt32);

+      }

+      if (hasDefaultInt64) {

+        output.WriteInt64(62, field_names[10], DefaultInt64);

+      }

+      if (hasDefaultUint32) {

+        output.WriteUInt32(63, field_names[18], DefaultUint32);

+      }

+      if (hasDefaultUint64) {

+        output.WriteUInt64(64, field_names[19], DefaultUint64);

+      }

+      if (hasDefaultSint32) {

+        output.WriteSInt32(65, field_names[14], DefaultSint32);

+      }

+      if (hasDefaultSint64) {

+        output.WriteSInt64(66, field_names[15], DefaultSint64);

+      }

+      if (hasDefaultFixed32) {

+        output.WriteFixed32(67, field_names[4], DefaultFixed32);

+      }

+      if (hasDefaultFixed64) {

+        output.WriteFixed64(68, field_names[5], DefaultFixed64);

+      }

+      if (hasDefaultSfixed32) {

+        output.WriteSFixed32(69, field_names[12], DefaultSfixed32);

+      }

+      if (hasDefaultSfixed64) {

+        output.WriteSFixed64(70, field_names[13], DefaultSfixed64);

+      }

+      if (hasDefaultFloat) {

+        output.WriteFloat(71, field_names[6], DefaultFloat);

+      }

+      if (hasDefaultDouble) {

+        output.WriteDouble(72, field_names[3], DefaultDouble);

+      }

+      if (hasDefaultBool) {

+        output.WriteBool(73, field_names[0], DefaultBool);

+      }

+      if (hasDefaultString) {

+        output.WriteString(74, field_names[16], DefaultString);

+      }

+      if (hasDefaultBytes) {

+        output.WriteBytes(75, field_names[1], DefaultBytes);

+      }

+      if (hasDefaultNestedEnum) {

+        output.WriteEnum(81, field_names[11], (int) DefaultNestedEnum, DefaultNestedEnum);

+      }

+      if (hasDefaultForeignEnum) {

+        output.WriteEnum(82, field_names[7], (int) DefaultForeignEnum, DefaultForeignEnum);

+      }

+      if (hasDefaultImportEnum) {

+        output.WriteEnum(83, field_names[8], (int) DefaultImportEnum, DefaultImportEnum);

+      }

+      if (hasDefaultStringPiece) {

+        output.WriteString(84, field_names[17], DefaultStringPiece);

+      }

+      if (hasDefaultCord) {

+        output.WriteString(85, field_names[2], DefaultCord);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasOptionalInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, OptionalInt32);

+      }

+      if (hasOptionalInt64) {

+        size += pb::CodedOutputStream.ComputeInt64Size(2, OptionalInt64);

+      }

+      if (hasOptionalUint32) {

+        size += pb::CodedOutputStream.ComputeUInt32Size(3, OptionalUint32);

+      }

+      if (hasOptionalUint64) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(4, OptionalUint64);

+      }

+      if (hasOptionalSint32) {

+        size += pb::CodedOutputStream.ComputeSInt32Size(5, OptionalSint32);

+      }

+      if (hasOptionalSint64) {

+        size += pb::CodedOutputStream.ComputeSInt64Size(6, OptionalSint64);

+      }

+      if (hasOptionalFixed32) {

+        size += pb::CodedOutputStream.ComputeFixed32Size(7, OptionalFixed32);

+      }

+      if (hasOptionalFixed64) {

+        size += pb::CodedOutputStream.ComputeFixed64Size(8, OptionalFixed64);

+      }

+      if (hasOptionalSfixed32) {

+        size += pb::CodedOutputStream.ComputeSFixed32Size(9, OptionalSfixed32);

+      }

+      if (hasOptionalSfixed64) {

+        size += pb::CodedOutputStream.ComputeSFixed64Size(10, OptionalSfixed64);

+      }

+      if (hasOptionalFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(11, OptionalFloat);

+      }

+      if (hasOptionalDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(12, OptionalDouble);

+      }

+      if (hasOptionalBool) {

+        size += pb::CodedOutputStream.ComputeBoolSize(13, OptionalBool);

+      }

+      if (hasOptionalString) {

+        size += pb::CodedOutputStream.ComputeStringSize(14, OptionalString);

+      }

+      if (hasOptionalBytes) {

+        size += pb::CodedOutputStream.ComputeBytesSize(15, OptionalBytes);

+      }

+      if (hasOptionalGroup) {

+        size += pb::CodedOutputStream.ComputeGroupSize(16, OptionalGroup);

+      }

+      if (hasOptionalNestedMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(18, OptionalNestedMessage);

+      }

+      if (hasOptionalForeignMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(19, OptionalForeignMessage);

+      }

+      if (hasOptionalImportMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(20, OptionalImportMessage);

+      }

+      if (hasOptionalNestedEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(21, (int) OptionalNestedEnum);

+      }

+      if (hasOptionalForeignEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(22, (int) OptionalForeignEnum);

+      }

+      if (hasOptionalImportEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(23, (int) OptionalImportEnum);

+      }

+      if (hasOptionalStringPiece) {

+        size += pb::CodedOutputStream.ComputeStringSize(24, OptionalStringPiece);

+      }

+      if (hasOptionalCord) {

+        size += pb::CodedOutputStream.ComputeStringSize(25, OptionalCord);

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedInt32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in RepeatedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedInt64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (uint element in RepeatedUint32List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedUint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in RepeatedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedUint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedSint32List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedSint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in RepeatedSint64List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedSint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFixed32_.Count;

+        size += dataSize;

+        size += 2 * repeatedFixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedFixed64_.Count;

+        size += dataSize;

+        size += 2 * repeatedFixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedSfixed32_.Count;

+        size += dataSize;

+        size += 2 * repeatedSfixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedSfixed64_.Count;

+        size += dataSize;

+        size += 2 * repeatedSfixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFloat_.Count;

+        size += dataSize;

+        size += 2 * repeatedFloat_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedDouble_.Count;

+        size += dataSize;

+        size += 2 * repeatedDouble_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 1 * repeatedBool_.Count;

+        size += dataSize;

+        size += 2 * repeatedBool_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedString_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (pb::ByteString element in RepeatedBytesList) {

+          dataSize += pb::CodedOutputStream.ComputeBytesSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedBytes_.Count;

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup element in RepeatedGroupList) {

+        size += pb::CodedOutputStream.ComputeGroupSize(46, element);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage element in RepeatedNestedMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(48, element);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessage element in RepeatedForeignMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(49, element);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.ImportMessage element in RepeatedImportMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(50, element);

+      }

+      {

+        int dataSize = 0;

+        if (repeatedNestedEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum element in repeatedNestedEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * repeatedNestedEnum_.Count;

+        }

+      }

+      {

+        int dataSize = 0;

+        if (repeatedForeignEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in repeatedForeignEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * repeatedForeignEnum_.Count;

+        }

+      }

+      {

+        int dataSize = 0;

+        if (repeatedImportEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ImportEnum element in repeatedImportEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * repeatedImportEnum_.Count;

+        }

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringPieceList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedStringPiece_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedCordList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedCord_.Count;

+      }

+      if (hasDefaultInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(61, DefaultInt32);

+      }

+      if (hasDefaultInt64) {

+        size += pb::CodedOutputStream.ComputeInt64Size(62, DefaultInt64);

+      }

+      if (hasDefaultUint32) {

+        size += pb::CodedOutputStream.ComputeUInt32Size(63, DefaultUint32);

+      }

+      if (hasDefaultUint64) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(64, DefaultUint64);

+      }

+      if (hasDefaultSint32) {

+        size += pb::CodedOutputStream.ComputeSInt32Size(65, DefaultSint32);

+      }

+      if (hasDefaultSint64) {

+        size += pb::CodedOutputStream.ComputeSInt64Size(66, DefaultSint64);

+      }

+      if (hasDefaultFixed32) {

+        size += pb::CodedOutputStream.ComputeFixed32Size(67, DefaultFixed32);

+      }

+      if (hasDefaultFixed64) {

+        size += pb::CodedOutputStream.ComputeFixed64Size(68, DefaultFixed64);

+      }

+      if (hasDefaultSfixed32) {

+        size += pb::CodedOutputStream.ComputeSFixed32Size(69, DefaultSfixed32);

+      }

+      if (hasDefaultSfixed64) {

+        size += pb::CodedOutputStream.ComputeSFixed64Size(70, DefaultSfixed64);

+      }

+      if (hasDefaultFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(71, DefaultFloat);

+      }

+      if (hasDefaultDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(72, DefaultDouble);

+      }

+      if (hasDefaultBool) {

+        size += pb::CodedOutputStream.ComputeBoolSize(73, DefaultBool);

+      }

+      if (hasDefaultString) {

+        size += pb::CodedOutputStream.ComputeStringSize(74, DefaultString);

+      }

+      if (hasDefaultBytes) {

+        size += pb::CodedOutputStream.ComputeBytesSize(75, DefaultBytes);

+      }

+      if (hasDefaultNestedEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(81, (int) DefaultNestedEnum);

+      }

+      if (hasDefaultForeignEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(82, (int) DefaultForeignEnum);

+      }

+      if (hasDefaultImportEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(83, (int) DefaultImportEnum);

+      }

+      if (hasDefaultStringPiece) {

+        size += pb::CodedOutputStream.ComputeStringSize(84, DefaultStringPiece);

+      }

+      if (hasDefaultCord) {

+        size += pb::CodedOutputStream.ComputeStringSize(85, DefaultCord);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestAllTypes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllTypes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestAllTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestAllTypes MakeReadOnly() {

+      repeatedInt32_.MakeReadOnly();

+      repeatedInt64_.MakeReadOnly();

+      repeatedUint32_.MakeReadOnly();

+      repeatedUint64_.MakeReadOnly();

+      repeatedSint32_.MakeReadOnly();

+      repeatedSint64_.MakeReadOnly();

+      repeatedFixed32_.MakeReadOnly();

+      repeatedFixed64_.MakeReadOnly();

+      repeatedSfixed32_.MakeReadOnly();

+      repeatedSfixed64_.MakeReadOnly();

+      repeatedFloat_.MakeReadOnly();

+      repeatedDouble_.MakeReadOnly();

+      repeatedBool_.MakeReadOnly();

+      repeatedString_.MakeReadOnly();

+      repeatedBytes_.MakeReadOnly();

+      repeatedGroup_.MakeReadOnly();

+      repeatedNestedMessage_.MakeReadOnly();

+      repeatedForeignMessage_.MakeReadOnly();

+      repeatedImportMessage_.MakeReadOnly();

+      repeatedNestedEnum_.MakeReadOnly();

+      repeatedForeignEnum_.MakeReadOnly();

+      repeatedImportEnum_.MakeReadOnly();

+      repeatedStringPiece_.MakeReadOnly();

+      repeatedCord_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestAllTypes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestAllTypes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestAllTypes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestAllTypes result;

+      

+      private TestAllTypes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestAllTypes original = result;

+          result = new TestAllTypes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestAllTypes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Descriptor; }

+      }

+      

+      public override TestAllTypes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }

+      }

+      

+      public override TestAllTypes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestAllTypes) {

+          return MergeFrom((TestAllTypes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestAllTypes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasOptionalInt32) {

+          OptionalInt32 = other.OptionalInt32;

+        }

+        if (other.HasOptionalInt64) {

+          OptionalInt64 = other.OptionalInt64;

+        }

+        if (other.HasOptionalUint32) {

+          OptionalUint32 = other.OptionalUint32;

+        }

+        if (other.HasOptionalUint64) {

+          OptionalUint64 = other.OptionalUint64;

+        }

+        if (other.HasOptionalSint32) {

+          OptionalSint32 = other.OptionalSint32;

+        }

+        if (other.HasOptionalSint64) {

+          OptionalSint64 = other.OptionalSint64;

+        }

+        if (other.HasOptionalFixed32) {

+          OptionalFixed32 = other.OptionalFixed32;

+        }

+        if (other.HasOptionalFixed64) {

+          OptionalFixed64 = other.OptionalFixed64;

+        }

+        if (other.HasOptionalSfixed32) {

+          OptionalSfixed32 = other.OptionalSfixed32;

+        }

+        if (other.HasOptionalSfixed64) {

+          OptionalSfixed64 = other.OptionalSfixed64;

+        }

+        if (other.HasOptionalFloat) {

+          OptionalFloat = other.OptionalFloat;

+        }

+        if (other.HasOptionalDouble) {

+          OptionalDouble = other.OptionalDouble;

+        }

+        if (other.HasOptionalBool) {

+          OptionalBool = other.OptionalBool;

+        }

+        if (other.HasOptionalString) {

+          OptionalString = other.OptionalString;

+        }

+        if (other.HasOptionalBytes) {

+          OptionalBytes = other.OptionalBytes;

+        }

+        if (other.HasOptionalGroup) {

+          MergeOptionalGroup(other.OptionalGroup);

+        }

+        if (other.HasOptionalNestedMessage) {

+          MergeOptionalNestedMessage(other.OptionalNestedMessage);

+        }

+        if (other.HasOptionalForeignMessage) {

+          MergeOptionalForeignMessage(other.OptionalForeignMessage);

+        }

+        if (other.HasOptionalImportMessage) {

+          MergeOptionalImportMessage(other.OptionalImportMessage);

+        }

+        if (other.HasOptionalNestedEnum) {

+          OptionalNestedEnum = other.OptionalNestedEnum;

+        }

+        if (other.HasOptionalForeignEnum) {

+          OptionalForeignEnum = other.OptionalForeignEnum;

+        }

+        if (other.HasOptionalImportEnum) {

+          OptionalImportEnum = other.OptionalImportEnum;

+        }

+        if (other.HasOptionalStringPiece) {

+          OptionalStringPiece = other.OptionalStringPiece;

+        }

+        if (other.HasOptionalCord) {

+          OptionalCord = other.OptionalCord;

+        }

+        if (other.repeatedInt32_.Count != 0) {

+          result.repeatedInt32_.Add(other.repeatedInt32_);

+        }

+        if (other.repeatedInt64_.Count != 0) {

+          result.repeatedInt64_.Add(other.repeatedInt64_);

+        }

+        if (other.repeatedUint32_.Count != 0) {

+          result.repeatedUint32_.Add(other.repeatedUint32_);

+        }

+        if (other.repeatedUint64_.Count != 0) {

+          result.repeatedUint64_.Add(other.repeatedUint64_);

+        }

+        if (other.repeatedSint32_.Count != 0) {

+          result.repeatedSint32_.Add(other.repeatedSint32_);

+        }

+        if (other.repeatedSint64_.Count != 0) {

+          result.repeatedSint64_.Add(other.repeatedSint64_);

+        }

+        if (other.repeatedFixed32_.Count != 0) {

+          result.repeatedFixed32_.Add(other.repeatedFixed32_);

+        }

+        if (other.repeatedFixed64_.Count != 0) {

+          result.repeatedFixed64_.Add(other.repeatedFixed64_);

+        }

+        if (other.repeatedSfixed32_.Count != 0) {

+          result.repeatedSfixed32_.Add(other.repeatedSfixed32_);

+        }

+        if (other.repeatedSfixed64_.Count != 0) {

+          result.repeatedSfixed64_.Add(other.repeatedSfixed64_);

+        }

+        if (other.repeatedFloat_.Count != 0) {

+          result.repeatedFloat_.Add(other.repeatedFloat_);

+        }

+        if (other.repeatedDouble_.Count != 0) {

+          result.repeatedDouble_.Add(other.repeatedDouble_);

+        }

+        if (other.repeatedBool_.Count != 0) {

+          result.repeatedBool_.Add(other.repeatedBool_);

+        }

+        if (other.repeatedString_.Count != 0) {

+          result.repeatedString_.Add(other.repeatedString_);

+        }

+        if (other.repeatedBytes_.Count != 0) {

+          result.repeatedBytes_.Add(other.repeatedBytes_);

+        }

+        if (other.repeatedGroup_.Count != 0) {

+          result.repeatedGroup_.Add(other.repeatedGroup_);

+        }

+        if (other.repeatedNestedMessage_.Count != 0) {

+          result.repeatedNestedMessage_.Add(other.repeatedNestedMessage_);

+        }

+        if (other.repeatedForeignMessage_.Count != 0) {

+          result.repeatedForeignMessage_.Add(other.repeatedForeignMessage_);

+        }

+        if (other.repeatedImportMessage_.Count != 0) {

+          result.repeatedImportMessage_.Add(other.repeatedImportMessage_);

+        }

+        if (other.repeatedNestedEnum_.Count != 0) {

+          result.repeatedNestedEnum_.Add(other.repeatedNestedEnum_);

+        }

+        if (other.repeatedForeignEnum_.Count != 0) {

+          result.repeatedForeignEnum_.Add(other.repeatedForeignEnum_);

+        }

+        if (other.repeatedImportEnum_.Count != 0) {

+          result.repeatedImportEnum_.Add(other.repeatedImportEnum_);

+        }

+        if (other.repeatedStringPiece_.Count != 0) {

+          result.repeatedStringPiece_.Add(other.repeatedStringPiece_);

+        }

+        if (other.repeatedCord_.Count != 0) {

+          result.repeatedCord_.Add(other.repeatedCord_);

+        }

+        if (other.HasDefaultInt32) {

+          DefaultInt32 = other.DefaultInt32;

+        }

+        if (other.HasDefaultInt64) {

+          DefaultInt64 = other.DefaultInt64;

+        }

+        if (other.HasDefaultUint32) {

+          DefaultUint32 = other.DefaultUint32;

+        }

+        if (other.HasDefaultUint64) {

+          DefaultUint64 = other.DefaultUint64;

+        }

+        if (other.HasDefaultSint32) {

+          DefaultSint32 = other.DefaultSint32;

+        }

+        if (other.HasDefaultSint64) {

+          DefaultSint64 = other.DefaultSint64;

+        }

+        if (other.HasDefaultFixed32) {

+          DefaultFixed32 = other.DefaultFixed32;

+        }

+        if (other.HasDefaultFixed64) {

+          DefaultFixed64 = other.DefaultFixed64;

+        }

+        if (other.HasDefaultSfixed32) {

+          DefaultSfixed32 = other.DefaultSfixed32;

+        }

+        if (other.HasDefaultSfixed64) {

+          DefaultSfixed64 = other.DefaultSfixed64;

+        }

+        if (other.HasDefaultFloat) {

+          DefaultFloat = other.DefaultFloat;

+        }

+        if (other.HasDefaultDouble) {

+          DefaultDouble = other.DefaultDouble;

+        }

+        if (other.HasDefaultBool) {

+          DefaultBool = other.DefaultBool;

+        }

+        if (other.HasDefaultString) {

+          DefaultString = other.DefaultString;

+        }

+        if (other.HasDefaultBytes) {

+          DefaultBytes = other.DefaultBytes;

+        }

+        if (other.HasDefaultNestedEnum) {

+          DefaultNestedEnum = other.DefaultNestedEnum;

+        }

+        if (other.HasDefaultForeignEnum) {

+          DefaultForeignEnum = other.DefaultForeignEnum;

+        }

+        if (other.HasDefaultImportEnum) {

+          DefaultImportEnum = other.DefaultImportEnum;

+        }

+        if (other.HasDefaultStringPiece) {

+          DefaultStringPiece = other.DefaultStringPiece;

+        }

+        if (other.HasDefaultCord) {

+          DefaultCord = other.DefaultCord;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testAllTypesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testAllTypesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasOptionalInt32 = input.ReadInt32(ref result.optionalInt32_);

+              break;

+            }

+            case 16: {

+              result.hasOptionalInt64 = input.ReadInt64(ref result.optionalInt64_);

+              break;

+            }

+            case 24: {

+              result.hasOptionalUint32 = input.ReadUInt32(ref result.optionalUint32_);

+              break;

+            }

+            case 32: {

+              result.hasOptionalUint64 = input.ReadUInt64(ref result.optionalUint64_);

+              break;

+            }

+            case 40: {

+              result.hasOptionalSint32 = input.ReadSInt32(ref result.optionalSint32_);

+              break;

+            }

+            case 48: {

+              result.hasOptionalSint64 = input.ReadSInt64(ref result.optionalSint64_);

+              break;

+            }

+            case 61: {

+              result.hasOptionalFixed32 = input.ReadFixed32(ref result.optionalFixed32_);

+              break;

+            }

+            case 65: {

+              result.hasOptionalFixed64 = input.ReadFixed64(ref result.optionalFixed64_);

+              break;

+            }

+            case 77: {

+              result.hasOptionalSfixed32 = input.ReadSFixed32(ref result.optionalSfixed32_);

+              break;

+            }

+            case 81: {

+              result.hasOptionalSfixed64 = input.ReadSFixed64(ref result.optionalSfixed64_);

+              break;

+            }

+            case 93: {

+              result.hasOptionalFloat = input.ReadFloat(ref result.optionalFloat_);

+              break;

+            }

+            case 97: {

+              result.hasOptionalDouble = input.ReadDouble(ref result.optionalDouble_);

+              break;

+            }

+            case 104: {

+              result.hasOptionalBool = input.ReadBool(ref result.optionalBool_);

+              break;

+            }

+            case 114: {

+              result.hasOptionalString = input.ReadString(ref result.optionalString_);

+              break;

+            }

+            case 122: {

+              result.hasOptionalBytes = input.ReadBytes(ref result.optionalBytes_);

+              break;

+            }

+            case 131: {

+              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.CreateBuilder();

+              if (result.hasOptionalGroup) {

+                subBuilder.MergeFrom(OptionalGroup);

+              }

+              input.ReadGroup(16, subBuilder, extensionRegistry);

+              OptionalGroup = subBuilder.BuildPartial();

+              break;

+            }

+            case 146: {

+              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder();

+              if (result.hasOptionalNestedMessage) {

+                subBuilder.MergeFrom(OptionalNestedMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalNestedMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 154: {

+              global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder();

+              if (result.hasOptionalForeignMessage) {

+                subBuilder.MergeFrom(OptionalForeignMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalForeignMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 162: {

+              global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ImportMessage.CreateBuilder();

+              if (result.hasOptionalImportMessage) {

+                subBuilder.MergeFrom(OptionalImportMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalImportMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 168: {

+              object unknown;

+              if(input.ReadEnum(ref result.optionalNestedEnum_, out unknown)) {

+                result.hasOptionalNestedEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(21, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 176: {

+              object unknown;

+              if(input.ReadEnum(ref result.optionalForeignEnum_, out unknown)) {

+                result.hasOptionalForeignEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(22, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 184: {

+              object unknown;

+              if(input.ReadEnum(ref result.optionalImportEnum_, out unknown)) {

+                result.hasOptionalImportEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(23, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 194: {

+              result.hasOptionalStringPiece = input.ReadString(ref result.optionalStringPiece_);

+              break;

+            }

+            case 202: {

+              result.hasOptionalCord = input.ReadString(ref result.optionalCord_);

+              break;

+            }

+            case 250:

+            case 248: {

+              input.ReadInt32Array(tag, field_name, result.repeatedInt32_);

+              break;

+            }

+            case 258:

+            case 256: {

+              input.ReadInt64Array(tag, field_name, result.repeatedInt64_);

+              break;

+            }

+            case 266:

+            case 264: {

+              input.ReadUInt32Array(tag, field_name, result.repeatedUint32_);

+              break;

+            }

+            case 274:

+            case 272: {

+              input.ReadUInt64Array(tag, field_name, result.repeatedUint64_);

+              break;

+            }

+            case 282:

+            case 280: {

+              input.ReadSInt32Array(tag, field_name, result.repeatedSint32_);

+              break;

+            }

+            case 290:

+            case 288: {

+              input.ReadSInt64Array(tag, field_name, result.repeatedSint64_);

+              break;

+            }

+            case 298:

+            case 301: {

+              input.ReadFixed32Array(tag, field_name, result.repeatedFixed32_);

+              break;

+            }

+            case 306:

+            case 305: {

+              input.ReadFixed64Array(tag, field_name, result.repeatedFixed64_);

+              break;

+            }

+            case 314:

+            case 317: {

+              input.ReadSFixed32Array(tag, field_name, result.repeatedSfixed32_);

+              break;

+            }

+            case 322:

+            case 321: {

+              input.ReadSFixed64Array(tag, field_name, result.repeatedSfixed64_);

+              break;

+            }

+            case 330:

+            case 333: {

+              input.ReadFloatArray(tag, field_name, result.repeatedFloat_);

+              break;

+            }

+            case 338:

+            case 337: {

+              input.ReadDoubleArray(tag, field_name, result.repeatedDouble_);

+              break;

+            }

+            case 346:

+            case 344: {

+              input.ReadBoolArray(tag, field_name, result.repeatedBool_);

+              break;

+            }

+            case 354: {

+              input.ReadStringArray(tag, field_name, result.repeatedString_);

+              break;

+            }

+            case 362: {

+              input.ReadBytesArray(tag, field_name, result.repeatedBytes_);

+              break;

+            }

+            case 371: {

+              input.ReadGroupArray(tag, field_name, result.repeatedGroup_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 386: {

+              input.ReadMessageArray(tag, field_name, result.repeatedNestedMessage_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 394: {

+              input.ReadMessageArray(tag, field_name, result.repeatedForeignMessage_, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 402: {

+              input.ReadMessageArray(tag, field_name, result.repeatedImportMessage_, global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 410:

+            case 408: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>(tag, field_name, result.repeatedNestedEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(51, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 418:

+            case 416: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.repeatedForeignEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(52, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 426:

+            case 424: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ImportEnum>(tag, field_name, result.repeatedImportEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(53, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 434: {

+              input.ReadStringArray(tag, field_name, result.repeatedStringPiece_);

+              break;

+            }

+            case 442: {

+              input.ReadStringArray(tag, field_name, result.repeatedCord_);

+              break;

+            }

+            case 488: {

+              result.hasDefaultInt32 = input.ReadInt32(ref result.defaultInt32_);

+              break;

+            }

+            case 496: {

+              result.hasDefaultInt64 = input.ReadInt64(ref result.defaultInt64_);

+              break;

+            }

+            case 504: {

+              result.hasDefaultUint32 = input.ReadUInt32(ref result.defaultUint32_);

+              break;

+            }

+            case 512: {

+              result.hasDefaultUint64 = input.ReadUInt64(ref result.defaultUint64_);

+              break;

+            }

+            case 520: {

+              result.hasDefaultSint32 = input.ReadSInt32(ref result.defaultSint32_);

+              break;

+            }

+            case 528: {

+              result.hasDefaultSint64 = input.ReadSInt64(ref result.defaultSint64_);

+              break;

+            }

+            case 541: {

+              result.hasDefaultFixed32 = input.ReadFixed32(ref result.defaultFixed32_);

+              break;

+            }

+            case 545: {

+              result.hasDefaultFixed64 = input.ReadFixed64(ref result.defaultFixed64_);

+              break;

+            }

+            case 557: {

+              result.hasDefaultSfixed32 = input.ReadSFixed32(ref result.defaultSfixed32_);

+              break;

+            }

+            case 561: {

+              result.hasDefaultSfixed64 = input.ReadSFixed64(ref result.defaultSfixed64_);

+              break;

+            }

+            case 573: {

+              result.hasDefaultFloat = input.ReadFloat(ref result.defaultFloat_);

+              break;

+            }

+            case 577: {

+              result.hasDefaultDouble = input.ReadDouble(ref result.defaultDouble_);

+              break;

+            }

+            case 584: {

+              result.hasDefaultBool = input.ReadBool(ref result.defaultBool_);

+              break;

+            }

+            case 594: {

+              result.hasDefaultString = input.ReadString(ref result.defaultString_);

+              break;

+            }

+            case 602: {

+              result.hasDefaultBytes = input.ReadBytes(ref result.defaultBytes_);

+              break;

+            }

+            case 648: {

+              object unknown;

+              if(input.ReadEnum(ref result.defaultNestedEnum_, out unknown)) {

+                result.hasDefaultNestedEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(81, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 656: {

+              object unknown;

+              if(input.ReadEnum(ref result.defaultForeignEnum_, out unknown)) {

+                result.hasDefaultForeignEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(82, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 664: {

+              object unknown;

+              if(input.ReadEnum(ref result.defaultImportEnum_, out unknown)) {

+                result.hasDefaultImportEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(83, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 674: {

+              result.hasDefaultStringPiece = input.ReadString(ref result.defaultStringPiece_);

+              break;

+            }

+            case 682: {

+              result.hasDefaultCord = input.ReadString(ref result.defaultCord_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasOptionalInt32 {

+        get { return result.hasOptionalInt32; }

+      }

+      public int OptionalInt32 {

+        get { return result.OptionalInt32; }

+        set { SetOptionalInt32(value); }

+      }

+      public Builder SetOptionalInt32(int value) {

+        PrepareBuilder();

+        result.hasOptionalInt32 = true;

+        result.optionalInt32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalInt32() {

+        PrepareBuilder();

+        result.hasOptionalInt32 = false;

+        result.optionalInt32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalInt64 {

+        get { return result.hasOptionalInt64; }

+      }

+      public long OptionalInt64 {

+        get { return result.OptionalInt64; }

+        set { SetOptionalInt64(value); }

+      }

+      public Builder SetOptionalInt64(long value) {

+        PrepareBuilder();

+        result.hasOptionalInt64 = true;

+        result.optionalInt64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalInt64() {

+        PrepareBuilder();

+        result.hasOptionalInt64 = false;

+        result.optionalInt64_ = 0L;

+        return this;

+      }

+      

+      public bool HasOptionalUint32 {

+        get { return result.hasOptionalUint32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint OptionalUint32 {

+        get { return result.OptionalUint32; }

+        set { SetOptionalUint32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalUint32(uint value) {

+        PrepareBuilder();

+        result.hasOptionalUint32 = true;

+        result.optionalUint32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalUint32() {

+        PrepareBuilder();

+        result.hasOptionalUint32 = false;

+        result.optionalUint32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalUint64 {

+        get { return result.hasOptionalUint64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong OptionalUint64 {

+        get { return result.OptionalUint64; }

+        set { SetOptionalUint64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalUint64(ulong value) {

+        PrepareBuilder();

+        result.hasOptionalUint64 = true;

+        result.optionalUint64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalUint64() {

+        PrepareBuilder();

+        result.hasOptionalUint64 = false;

+        result.optionalUint64_ = 0UL;

+        return this;

+      }

+      

+      public bool HasOptionalSint32 {

+        get { return result.hasOptionalSint32; }

+      }

+      public int OptionalSint32 {

+        get { return result.OptionalSint32; }

+        set { SetOptionalSint32(value); }

+      }

+      public Builder SetOptionalSint32(int value) {

+        PrepareBuilder();

+        result.hasOptionalSint32 = true;

+        result.optionalSint32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSint32() {

+        PrepareBuilder();

+        result.hasOptionalSint32 = false;

+        result.optionalSint32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalSint64 {

+        get { return result.hasOptionalSint64; }

+      }

+      public long OptionalSint64 {

+        get { return result.OptionalSint64; }

+        set { SetOptionalSint64(value); }

+      }

+      public Builder SetOptionalSint64(long value) {

+        PrepareBuilder();

+        result.hasOptionalSint64 = true;

+        result.optionalSint64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSint64() {

+        PrepareBuilder();

+        result.hasOptionalSint64 = false;

+        result.optionalSint64_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalFixed32 {

+        get { return result.hasOptionalFixed32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint OptionalFixed32 {

+        get { return result.OptionalFixed32; }

+        set { SetOptionalFixed32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalFixed32(uint value) {

+        PrepareBuilder();

+        result.hasOptionalFixed32 = true;

+        result.optionalFixed32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalFixed32() {

+        PrepareBuilder();

+        result.hasOptionalFixed32 = false;

+        result.optionalFixed32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalFixed64 {

+        get { return result.hasOptionalFixed64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong OptionalFixed64 {

+        get { return result.OptionalFixed64; }

+        set { SetOptionalFixed64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalFixed64(ulong value) {

+        PrepareBuilder();

+        result.hasOptionalFixed64 = true;

+        result.optionalFixed64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalFixed64() {

+        PrepareBuilder();

+        result.hasOptionalFixed64 = false;

+        result.optionalFixed64_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalSfixed32 {

+        get { return result.hasOptionalSfixed32; }

+      }

+      public int OptionalSfixed32 {

+        get { return result.OptionalSfixed32; }

+        set { SetOptionalSfixed32(value); }

+      }

+      public Builder SetOptionalSfixed32(int value) {

+        PrepareBuilder();

+        result.hasOptionalSfixed32 = true;

+        result.optionalSfixed32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSfixed32() {

+        PrepareBuilder();

+        result.hasOptionalSfixed32 = false;

+        result.optionalSfixed32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalSfixed64 {

+        get { return result.hasOptionalSfixed64; }

+      }

+      public long OptionalSfixed64 {

+        get { return result.OptionalSfixed64; }

+        set { SetOptionalSfixed64(value); }

+      }

+      public Builder SetOptionalSfixed64(long value) {

+        PrepareBuilder();

+        result.hasOptionalSfixed64 = true;

+        result.optionalSfixed64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSfixed64() {

+        PrepareBuilder();

+        result.hasOptionalSfixed64 = false;

+        result.optionalSfixed64_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalFloat {

+        get { return result.hasOptionalFloat; }

+      }

+      public float OptionalFloat {

+        get { return result.OptionalFloat; }

+        set { SetOptionalFloat(value); }

+      }

+      public Builder SetOptionalFloat(float value) {

+        PrepareBuilder();

+        result.hasOptionalFloat = true;

+        result.optionalFloat_ = value;

+        return this;

+      }

+      public Builder ClearOptionalFloat() {

+        PrepareBuilder();

+        result.hasOptionalFloat = false;

+        result.optionalFloat_ = 0F;

+        return this;

+      }

+      

+      public bool HasOptionalDouble {

+        get { return result.hasOptionalDouble; }

+      }

+      public double OptionalDouble {

+        get { return result.OptionalDouble; }

+        set { SetOptionalDouble(value); }

+      }

+      public Builder SetOptionalDouble(double value) {

+        PrepareBuilder();

+        result.hasOptionalDouble = true;

+        result.optionalDouble_ = value;

+        return this;

+      }

+      public Builder ClearOptionalDouble() {

+        PrepareBuilder();

+        result.hasOptionalDouble = false;

+        result.optionalDouble_ = 0D;

+        return this;

+      }

+      

+      public bool HasOptionalBool {

+        get { return result.hasOptionalBool; }

+      }

+      public bool OptionalBool {

+        get { return result.OptionalBool; }

+        set { SetOptionalBool(value); }

+      }

+      public Builder SetOptionalBool(bool value) {

+        PrepareBuilder();

+        result.hasOptionalBool = true;

+        result.optionalBool_ = value;

+        return this;

+      }

+      public Builder ClearOptionalBool() {

+        PrepareBuilder();

+        result.hasOptionalBool = false;

+        result.optionalBool_ = false;

+        return this;

+      }

+      

+      public bool HasOptionalString {

+        get { return result.hasOptionalString; }

+      }

+      public string OptionalString {

+        get { return result.OptionalString; }

+        set { SetOptionalString(value); }

+      }

+      public Builder SetOptionalString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalString = true;

+        result.optionalString_ = value;

+        return this;

+      }

+      public Builder ClearOptionalString() {

+        PrepareBuilder();

+        result.hasOptionalString = false;

+        result.optionalString_ = "";

+        return this;

+      }

+      

+      public bool HasOptionalBytes {

+        get { return result.hasOptionalBytes; }

+      }

+      public pb::ByteString OptionalBytes {

+        get { return result.OptionalBytes; }

+        set { SetOptionalBytes(value); }

+      }

+      public Builder SetOptionalBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalBytes = true;

+        result.optionalBytes_ = value;

+        return this;

+      }

+      public Builder ClearOptionalBytes() {

+        PrepareBuilder();

+        result.hasOptionalBytes = false;

+        result.optionalBytes_ = pb::ByteString.Empty;

+        return this;

+      }

+      

+      public bool HasOptionalGroup {

+       get { return result.hasOptionalGroup; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup OptionalGroup {

+        get { return result.OptionalGroup; }

+        set { SetOptionalGroup(value); }

+      }

+      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalGroup = true;

+        result.optionalGroup_ = value;

+        return this;

+      }

+      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalGroup = true;

+        result.optionalGroup_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalGroup &&

+            result.optionalGroup_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance) {

+            result.optionalGroup_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.CreateBuilder(result.optionalGroup_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalGroup_ = value;

+        }

+        result.hasOptionalGroup = true;

+        return this;

+      }

+      public Builder ClearOptionalGroup() {

+        PrepareBuilder();

+        result.hasOptionalGroup = false;

+        result.optionalGroup_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalNestedMessage {

+       get { return result.hasOptionalNestedMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage OptionalNestedMessage {

+        get { return result.OptionalNestedMessage; }

+        set { SetOptionalNestedMessage(value); }

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalNestedMessage &&

+            result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) {

+            result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalNestedMessage_ = value;

+        }

+        result.hasOptionalNestedMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalNestedMessage() {

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = false;

+        result.optionalNestedMessage_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalForeignMessage {

+       get { return result.hasOptionalForeignMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage OptionalForeignMessage {

+        get { return result.OptionalForeignMessage; }

+        set { SetOptionalForeignMessage(value); }

+      }

+      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalForeignMessage = true;

+        result.optionalForeignMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalForeignMessage = true;

+        result.optionalForeignMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalForeignMessage &&

+            result.optionalForeignMessage_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {

+            result.optionalForeignMessage_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.optionalForeignMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalForeignMessage_ = value;

+        }

+        result.hasOptionalForeignMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalForeignMessage() {

+        PrepareBuilder();

+        result.hasOptionalForeignMessage = false;

+        result.optionalForeignMessage_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalImportMessage {

+       get { return result.hasOptionalImportMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportMessage OptionalImportMessage {

+        get { return result.OptionalImportMessage; }

+        set { SetOptionalImportMessage(value); }

+      }

+      public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalImportMessage = true;

+        result.optionalImportMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalImportMessage = true;

+        result.optionalImportMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalImportMessage &&

+            result.optionalImportMessage_ != global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance) {

+            result.optionalImportMessage_ = global::Google.ProtocolBuffers.TestProtos.ImportMessage.CreateBuilder(result.optionalImportMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalImportMessage_ = value;

+        }

+        result.hasOptionalImportMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalImportMessage() {

+        PrepareBuilder();

+        result.hasOptionalImportMessage = false;

+        result.optionalImportMessage_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalNestedEnum {

+       get { return result.hasOptionalNestedEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum OptionalNestedEnum {

+        get { return result.OptionalNestedEnum; }

+        set { SetOptionalNestedEnum(value); }

+      }

+      public Builder SetOptionalNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.hasOptionalNestedEnum = true;

+        result.optionalNestedEnum_ = value;

+        return this;

+      }

+      public Builder ClearOptionalNestedEnum() {

+        PrepareBuilder();

+        result.hasOptionalNestedEnum = false;

+        result.optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.FOO;

+        return this;

+      }

+      

+      public bool HasOptionalForeignEnum {

+       get { return result.hasOptionalForeignEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum OptionalForeignEnum {

+        get { return result.OptionalForeignEnum; }

+        set { SetOptionalForeignEnum(value); }

+      }

+      public Builder SetOptionalForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.hasOptionalForeignEnum = true;

+        result.optionalForeignEnum_ = value;

+        return this;

+      }

+      public Builder ClearOptionalForeignEnum() {

+        PrepareBuilder();

+        result.hasOptionalForeignEnum = false;

+        result.optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+        return this;

+      }

+      

+      public bool HasOptionalImportEnum {

+       get { return result.hasOptionalImportEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportEnum OptionalImportEnum {

+        get { return result.OptionalImportEnum; }

+        set { SetOptionalImportEnum(value); }

+      }

+      public Builder SetOptionalImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {

+        PrepareBuilder();

+        result.hasOptionalImportEnum = true;

+        result.optionalImportEnum_ = value;

+        return this;

+      }

+      public Builder ClearOptionalImportEnum() {

+        PrepareBuilder();

+        result.hasOptionalImportEnum = false;

+        result.optionalImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_FOO;

+        return this;

+      }

+      

+      public bool HasOptionalStringPiece {

+        get { return result.hasOptionalStringPiece; }

+      }

+      public string OptionalStringPiece {

+        get { return result.OptionalStringPiece; }

+        set { SetOptionalStringPiece(value); }

+      }

+      public Builder SetOptionalStringPiece(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalStringPiece = true;

+        result.optionalStringPiece_ = value;

+        return this;

+      }

+      public Builder ClearOptionalStringPiece() {

+        PrepareBuilder();

+        result.hasOptionalStringPiece = false;

+        result.optionalStringPiece_ = "";

+        return this;

+      }

+      

+      public bool HasOptionalCord {

+        get { return result.hasOptionalCord; }

+      }

+      public string OptionalCord {

+        get { return result.OptionalCord; }

+        set { SetOptionalCord(value); }

+      }

+      public Builder SetOptionalCord(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalCord = true;

+        result.optionalCord_ = value;

+        return this;

+      }

+      public Builder ClearOptionalCord() {

+        PrepareBuilder();

+        result.hasOptionalCord = false;

+        result.optionalCord_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedInt32List {

+        get { return PrepareBuilder().repeatedInt32_; }

+      }

+      public int RepeatedInt32Count {

+        get { return result.RepeatedInt32Count; }

+      }

+      public int GetRepeatedInt32(int index) {

+        return result.GetRepeatedInt32(index);

+      }

+      public Builder SetRepeatedInt32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt32(int value) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt32() {

+        PrepareBuilder();

+        result.repeatedInt32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedInt64List {

+        get { return PrepareBuilder().repeatedInt64_; }

+      }

+      public int RepeatedInt64Count {

+        get { return result.RepeatedInt64Count; }

+      }

+      public long GetRepeatedInt64(int index) {

+        return result.GetRepeatedInt64(index);

+      }

+      public Builder SetRepeatedInt64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt64(long value) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt64() {

+        PrepareBuilder();

+        result.repeatedInt64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> RepeatedUint32List {

+        get { return PrepareBuilder().repeatedUint32_; }

+      }

+      public int RepeatedUint32Count {

+        get { return result.RepeatedUint32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetRepeatedUint32(int index) {

+        return result.GetRepeatedUint32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedUint32(int index, uint value) {

+        PrepareBuilder();

+        result.repeatedUint32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedUint32(uint value) {

+        PrepareBuilder();

+        result.repeatedUint32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedUint32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.repeatedUint32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedUint32() {

+        PrepareBuilder();

+        result.repeatedUint32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedUint64List {

+        get { return PrepareBuilder().repeatedUint64_; }

+      }

+      public int RepeatedUint64Count {

+        get { return result.RepeatedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedUint64(int index) {

+        return result.GetRepeatedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedUint64(ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedUint64() {

+        PrepareBuilder();

+        result.repeatedUint64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedSint32List {

+        get { return PrepareBuilder().repeatedSint32_; }

+      }

+      public int RepeatedSint32Count {

+        get { return result.RepeatedSint32Count; }

+      }

+      public int GetRepeatedSint32(int index) {

+        return result.GetRepeatedSint32(index);

+      }

+      public Builder SetRepeatedSint32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedSint32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSint32(int value) {

+        PrepareBuilder();

+        result.repeatedSint32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSint32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedSint32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSint32() {

+        PrepareBuilder();

+        result.repeatedSint32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedSint64List {

+        get { return PrepareBuilder().repeatedSint64_; }

+      }

+      public int RepeatedSint64Count {

+        get { return result.RepeatedSint64Count; }

+      }

+      public long GetRepeatedSint64(int index) {

+        return result.GetRepeatedSint64(index);

+      }

+      public Builder SetRepeatedSint64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedSint64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSint64(long value) {

+        PrepareBuilder();

+        result.repeatedSint64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSint64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedSint64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSint64() {

+        PrepareBuilder();

+        result.repeatedSint64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> RepeatedFixed32List {

+        get { return PrepareBuilder().repeatedFixed32_; }

+      }

+      public int RepeatedFixed32Count {

+        get { return result.RepeatedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetRepeatedFixed32(int index) {

+        return result.GetRepeatedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed32(uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed32() {

+        PrepareBuilder();

+        result.repeatedFixed32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedFixed64List {

+        get { return PrepareBuilder().repeatedFixed64_; }

+      }

+      public int RepeatedFixed64Count {

+        get { return result.RepeatedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedFixed64(int index) {

+        return result.GetRepeatedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed64(ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed64() {

+        PrepareBuilder();

+        result.repeatedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedSfixed32List {

+        get { return PrepareBuilder().repeatedSfixed32_; }

+      }

+      public int RepeatedSfixed32Count {

+        get { return result.RepeatedSfixed32Count; }

+      }

+      public int GetRepeatedSfixed32(int index) {

+        return result.GetRepeatedSfixed32(index);

+      }

+      public Builder SetRepeatedSfixed32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedSfixed32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSfixed32(int value) {

+        PrepareBuilder();

+        result.repeatedSfixed32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSfixed32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedSfixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSfixed32() {

+        PrepareBuilder();

+        result.repeatedSfixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedSfixed64List {

+        get { return PrepareBuilder().repeatedSfixed64_; }

+      }

+      public int RepeatedSfixed64Count {

+        get { return result.RepeatedSfixed64Count; }

+      }

+      public long GetRepeatedSfixed64(int index) {

+        return result.GetRepeatedSfixed64(index);

+      }

+      public Builder SetRepeatedSfixed64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedSfixed64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSfixed64(long value) {

+        PrepareBuilder();

+        result.repeatedSfixed64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSfixed64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedSfixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSfixed64() {

+        PrepareBuilder();

+        result.repeatedSfixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> RepeatedFloatList {

+        get { return PrepareBuilder().repeatedFloat_; }

+      }

+      public int RepeatedFloatCount {

+        get { return result.RepeatedFloatCount; }

+      }

+      public float GetRepeatedFloat(int index) {

+        return result.GetRepeatedFloat(index);

+      }

+      public Builder SetRepeatedFloat(int index, float value) {

+        PrepareBuilder();

+        result.repeatedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedFloat(float value) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFloat() {

+        PrepareBuilder();

+        result.repeatedFloat_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<double> RepeatedDoubleList {

+        get { return PrepareBuilder().repeatedDouble_; }

+      }

+      public int RepeatedDoubleCount {

+        get { return result.RepeatedDoubleCount; }

+      }

+      public double GetRepeatedDouble(int index) {

+        return result.GetRepeatedDouble(index);

+      }

+      public Builder SetRepeatedDouble(int index, double value) {

+        PrepareBuilder();

+        result.repeatedDouble_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedDouble(double value) {

+        PrepareBuilder();

+        result.repeatedDouble_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedDouble(scg::IEnumerable<double> values) {

+        PrepareBuilder();

+        result.repeatedDouble_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedDouble() {

+        PrepareBuilder();

+        result.repeatedDouble_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<bool> RepeatedBoolList {

+        get { return PrepareBuilder().repeatedBool_; }

+      }

+      public int RepeatedBoolCount {

+        get { return result.RepeatedBoolCount; }

+      }

+      public bool GetRepeatedBool(int index) {

+        return result.GetRepeatedBool(index);

+      }

+      public Builder SetRepeatedBool(int index, bool value) {

+        PrepareBuilder();

+        result.repeatedBool_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedBool(bool value) {

+        PrepareBuilder();

+        result.repeatedBool_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedBool(scg::IEnumerable<bool> values) {

+        PrepareBuilder();

+        result.repeatedBool_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedBool() {

+        PrepareBuilder();

+        result.repeatedBool_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringList {

+        get { return PrepareBuilder().repeatedString_; }

+      }

+      public int RepeatedStringCount {

+        get { return result.RepeatedStringCount; }

+      }

+      public string GetRepeatedString(int index) {

+        return result.GetRepeatedString(index);

+      }

+      public Builder SetRepeatedString(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedString_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedString_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedString(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedString_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedString() {

+        PrepareBuilder();

+        result.repeatedString_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<pb::ByteString> RepeatedBytesList {

+        get { return PrepareBuilder().repeatedBytes_; }

+      }

+      public int RepeatedBytesCount {

+        get { return result.RepeatedBytesCount; }

+      }

+      public pb::ByteString GetRepeatedBytes(int index) {

+        return result.GetRepeatedBytes(index);

+      }

+      public Builder SetRepeatedBytes(int index, pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedBytes_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedBytes_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedBytes(scg::IEnumerable<pb::ByteString> values) {

+        PrepareBuilder();

+        result.repeatedBytes_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedBytes() {

+        PrepareBuilder();

+        result.repeatedBytes_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> RepeatedGroupList {

+        get { return PrepareBuilder().repeatedGroup_; }

+      }

+      public int RepeatedGroupCount {

+        get { return result.RepeatedGroupCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup GetRepeatedGroup(int index) {

+        return result.GetRepeatedGroup(index);

+      }

+      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedGroup_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedGroup_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedGroup_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedGroup_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedGroup(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> values) {

+        PrepareBuilder();

+        result.repeatedGroup_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedGroup() {

+        PrepareBuilder();

+        result.repeatedGroup_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> RepeatedNestedMessageList {

+        get { return PrepareBuilder().repeatedNestedMessage_; }

+      }

+      public int RepeatedNestedMessageCount {

+        get { return result.RepeatedNestedMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage GetRepeatedNestedMessage(int index) {

+        return result.GetRepeatedNestedMessage(index);

+      }

+      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedNestedMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedNestedMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedNestedMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> values) {

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedNestedMessage() {

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedForeignMessageList {

+        get { return PrepareBuilder().repeatedForeignMessage_; }

+      }

+      public int RepeatedForeignMessageCount {

+        get { return result.RepeatedForeignMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedForeignMessage(int index) {

+        return result.GetRepeatedForeignMessage(index);

+      }

+      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedForeignMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedForeignMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedForeignMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> values) {

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedForeignMessage() {

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessage> RepeatedImportMessageList {

+        get { return PrepareBuilder().repeatedImportMessage_; }

+      }

+      public int RepeatedImportMessageCount {

+        get { return result.RepeatedImportMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportMessage GetRepeatedImportMessage(int index) {

+        return result.GetRepeatedImportMessage(index);

+      }

+      public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedImportMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedImportMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedImportMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedImportMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedImportMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ImportMessage> values) {

+        PrepareBuilder();

+        result.repeatedImportMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedImportMessage() {

+        PrepareBuilder();

+        result.repeatedImportMessage_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> RepeatedNestedEnumList {

+        get { return PrepareBuilder().repeatedNestedEnum_; }

+      }

+      public int RepeatedNestedEnumCount {

+        get { return result.RepeatedNestedEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum GetRepeatedNestedEnum(int index) {

+        return result.GetRepeatedNestedEnum(index);

+      }

+      public Builder SetRepeatedNestedEnum(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.repeatedNestedEnum_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.repeatedNestedEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedNestedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> values) {

+        PrepareBuilder();

+        result.repeatedNestedEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedNestedEnum() {

+        PrepareBuilder();

+        result.repeatedNestedEnum_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedForeignEnumList {

+        get { return PrepareBuilder().repeatedForeignEnum_; }

+      }

+      public int RepeatedForeignEnumCount {

+        get { return result.RepeatedForeignEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedForeignEnum(int index) {

+        return result.GetRepeatedForeignEnum(index);

+      }

+      public Builder SetRepeatedForeignEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.repeatedForeignEnum_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.repeatedForeignEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedForeignEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {

+        PrepareBuilder();

+        result.repeatedForeignEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedForeignEnum() {

+        PrepareBuilder();

+        result.repeatedForeignEnum_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnum> RepeatedImportEnumList {

+        get { return PrepareBuilder().repeatedImportEnum_; }

+      }

+      public int RepeatedImportEnumCount {

+        get { return result.RepeatedImportEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportEnum GetRepeatedImportEnum(int index) {

+        return result.GetRepeatedImportEnum(index);

+      }

+      public Builder SetRepeatedImportEnum(int index, global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {

+        PrepareBuilder();

+        result.repeatedImportEnum_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {

+        PrepareBuilder();

+        result.repeatedImportEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedImportEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ImportEnum> values) {

+        PrepareBuilder();

+        result.repeatedImportEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedImportEnum() {

+        PrepareBuilder();

+        result.repeatedImportEnum_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringPieceList {

+        get { return PrepareBuilder().repeatedStringPiece_; }

+      }

+      public int RepeatedStringPieceCount {

+        get { return result.RepeatedStringPieceCount; }

+      }

+      public string GetRepeatedStringPiece(int index) {

+        return result.GetRepeatedStringPiece(index);

+      }

+      public Builder SetRepeatedStringPiece(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPiece_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedStringPiece(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPiece_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedStringPiece(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedStringPiece_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedStringPiece() {

+        PrepareBuilder();

+        result.repeatedStringPiece_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedCordList {

+        get { return PrepareBuilder().repeatedCord_; }

+      }

+      public int RepeatedCordCount {

+        get { return result.RepeatedCordCount; }

+      }

+      public string GetRepeatedCord(int index) {

+        return result.GetRepeatedCord(index);

+      }

+      public Builder SetRepeatedCord(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCord_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedCord(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCord_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedCord(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedCord_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedCord() {

+        PrepareBuilder();

+        result.repeatedCord_.Clear();

+        return this;

+      }

+      

+      public bool HasDefaultInt32 {

+        get { return result.hasDefaultInt32; }

+      }

+      public int DefaultInt32 {

+        get { return result.DefaultInt32; }

+        set { SetDefaultInt32(value); }

+      }

+      public Builder SetDefaultInt32(int value) {

+        PrepareBuilder();

+        result.hasDefaultInt32 = true;

+        result.defaultInt32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultInt32() {

+        PrepareBuilder();

+        result.hasDefaultInt32 = false;

+        result.defaultInt32_ = 41;

+        return this;

+      }

+      

+      public bool HasDefaultInt64 {

+        get { return result.hasDefaultInt64; }

+      }

+      public long DefaultInt64 {

+        get { return result.DefaultInt64; }

+        set { SetDefaultInt64(value); }

+      }

+      public Builder SetDefaultInt64(long value) {

+        PrepareBuilder();

+        result.hasDefaultInt64 = true;

+        result.defaultInt64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultInt64() {

+        PrepareBuilder();

+        result.hasDefaultInt64 = false;

+        result.defaultInt64_ = 42L;

+        return this;

+      }

+      

+      public bool HasDefaultUint32 {

+        get { return result.hasDefaultUint32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint DefaultUint32 {

+        get { return result.DefaultUint32; }

+        set { SetDefaultUint32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultUint32(uint value) {

+        PrepareBuilder();

+        result.hasDefaultUint32 = true;

+        result.defaultUint32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultUint32() {

+        PrepareBuilder();

+        result.hasDefaultUint32 = false;

+        result.defaultUint32_ = 43;

+        return this;

+      }

+      

+      public bool HasDefaultUint64 {

+        get { return result.hasDefaultUint64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong DefaultUint64 {

+        get { return result.DefaultUint64; }

+        set { SetDefaultUint64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultUint64(ulong value) {

+        PrepareBuilder();

+        result.hasDefaultUint64 = true;

+        result.defaultUint64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultUint64() {

+        PrepareBuilder();

+        result.hasDefaultUint64 = false;

+        result.defaultUint64_ = 44UL;

+        return this;

+      }

+      

+      public bool HasDefaultSint32 {

+        get { return result.hasDefaultSint32; }

+      }

+      public int DefaultSint32 {

+        get { return result.DefaultSint32; }

+        set { SetDefaultSint32(value); }

+      }

+      public Builder SetDefaultSint32(int value) {

+        PrepareBuilder();

+        result.hasDefaultSint32 = true;

+        result.defaultSint32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSint32() {

+        PrepareBuilder();

+        result.hasDefaultSint32 = false;

+        result.defaultSint32_ = -45;

+        return this;

+      }

+      

+      public bool HasDefaultSint64 {

+        get { return result.hasDefaultSint64; }

+      }

+      public long DefaultSint64 {

+        get { return result.DefaultSint64; }

+        set { SetDefaultSint64(value); }

+      }

+      public Builder SetDefaultSint64(long value) {

+        PrepareBuilder();

+        result.hasDefaultSint64 = true;

+        result.defaultSint64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSint64() {

+        PrepareBuilder();

+        result.hasDefaultSint64 = false;

+        result.defaultSint64_ = 46;

+        return this;

+      }

+      

+      public bool HasDefaultFixed32 {

+        get { return result.hasDefaultFixed32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint DefaultFixed32 {

+        get { return result.DefaultFixed32; }

+        set { SetDefaultFixed32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultFixed32(uint value) {

+        PrepareBuilder();

+        result.hasDefaultFixed32 = true;

+        result.defaultFixed32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultFixed32() {

+        PrepareBuilder();

+        result.hasDefaultFixed32 = false;

+        result.defaultFixed32_ = 47;

+        return this;

+      }

+      

+      public bool HasDefaultFixed64 {

+        get { return result.hasDefaultFixed64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong DefaultFixed64 {

+        get { return result.DefaultFixed64; }

+        set { SetDefaultFixed64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultFixed64(ulong value) {

+        PrepareBuilder();

+        result.hasDefaultFixed64 = true;

+        result.defaultFixed64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultFixed64() {

+        PrepareBuilder();

+        result.hasDefaultFixed64 = false;

+        result.defaultFixed64_ = 48;

+        return this;

+      }

+      

+      public bool HasDefaultSfixed32 {

+        get { return result.hasDefaultSfixed32; }

+      }

+      public int DefaultSfixed32 {

+        get { return result.DefaultSfixed32; }

+        set { SetDefaultSfixed32(value); }

+      }

+      public Builder SetDefaultSfixed32(int value) {

+        PrepareBuilder();

+        result.hasDefaultSfixed32 = true;

+        result.defaultSfixed32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSfixed32() {

+        PrepareBuilder();

+        result.hasDefaultSfixed32 = false;

+        result.defaultSfixed32_ = 49;

+        return this;

+      }

+      

+      public bool HasDefaultSfixed64 {

+        get { return result.hasDefaultSfixed64; }

+      }

+      public long DefaultSfixed64 {

+        get { return result.DefaultSfixed64; }

+        set { SetDefaultSfixed64(value); }

+      }

+      public Builder SetDefaultSfixed64(long value) {

+        PrepareBuilder();

+        result.hasDefaultSfixed64 = true;

+        result.defaultSfixed64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSfixed64() {

+        PrepareBuilder();

+        result.hasDefaultSfixed64 = false;

+        result.defaultSfixed64_ = -50;

+        return this;

+      }

+      

+      public bool HasDefaultFloat {

+        get { return result.hasDefaultFloat; }

+      }

+      public float DefaultFloat {

+        get { return result.DefaultFloat; }

+        set { SetDefaultFloat(value); }

+      }

+      public Builder SetDefaultFloat(float value) {

+        PrepareBuilder();

+        result.hasDefaultFloat = true;

+        result.defaultFloat_ = value;

+        return this;

+      }

+      public Builder ClearDefaultFloat() {

+        PrepareBuilder();

+        result.hasDefaultFloat = false;

+        result.defaultFloat_ = 51.5F;

+        return this;

+      }

+      

+      public bool HasDefaultDouble {

+        get { return result.hasDefaultDouble; }

+      }

+      public double DefaultDouble {

+        get { return result.DefaultDouble; }

+        set { SetDefaultDouble(value); }

+      }

+      public Builder SetDefaultDouble(double value) {

+        PrepareBuilder();

+        result.hasDefaultDouble = true;

+        result.defaultDouble_ = value;

+        return this;

+      }

+      public Builder ClearDefaultDouble() {

+        PrepareBuilder();

+        result.hasDefaultDouble = false;

+        result.defaultDouble_ = 52000D;

+        return this;

+      }

+      

+      public bool HasDefaultBool {

+        get { return result.hasDefaultBool; }

+      }

+      public bool DefaultBool {

+        get { return result.DefaultBool; }

+        set { SetDefaultBool(value); }

+      }

+      public Builder SetDefaultBool(bool value) {

+        PrepareBuilder();

+        result.hasDefaultBool = true;

+        result.defaultBool_ = value;

+        return this;

+      }

+      public Builder ClearDefaultBool() {

+        PrepareBuilder();

+        result.hasDefaultBool = false;

+        result.defaultBool_ = true;

+        return this;

+      }

+      

+      public bool HasDefaultString {

+        get { return result.hasDefaultString; }

+      }

+      public string DefaultString {

+        get { return result.DefaultString; }

+        set { SetDefaultString(value); }

+      }

+      public Builder SetDefaultString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultString = true;

+        result.defaultString_ = value;

+        return this;

+      }

+      public Builder ClearDefaultString() {

+        PrepareBuilder();

+        result.hasDefaultString = false;

+        result.defaultString_ = "hello";

+        return this;

+      }

+      

+      public bool HasDefaultBytes {

+        get { return result.hasDefaultBytes; }

+      }

+      public pb::ByteString DefaultBytes {

+        get { return result.DefaultBytes; }

+        set { SetDefaultBytes(value); }

+      }

+      public Builder SetDefaultBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultBytes = true;

+        result.defaultBytes_ = value;

+        return this;

+      }

+      public Builder ClearDefaultBytes() {

+        PrepareBuilder();

+        result.hasDefaultBytes = false;

+        result.defaultBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Descriptor.Fields[62].DefaultValue;

+        return this;

+      }

+      

+      public bool HasDefaultNestedEnum {

+       get { return result.hasDefaultNestedEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum DefaultNestedEnum {

+        get { return result.DefaultNestedEnum; }

+        set { SetDefaultNestedEnum(value); }

+      }

+      public Builder SetDefaultNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.hasDefaultNestedEnum = true;

+        result.defaultNestedEnum_ = value;

+        return this;

+      }

+      public Builder ClearDefaultNestedEnum() {

+        PrepareBuilder();

+        result.hasDefaultNestedEnum = false;

+        result.defaultNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.BAR;

+        return this;

+      }

+      

+      public bool HasDefaultForeignEnum {

+       get { return result.hasDefaultForeignEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum DefaultForeignEnum {

+        get { return result.DefaultForeignEnum; }

+        set { SetDefaultForeignEnum(value); }

+      }

+      public Builder SetDefaultForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.hasDefaultForeignEnum = true;

+        result.defaultForeignEnum_ = value;

+        return this;

+      }

+      public Builder ClearDefaultForeignEnum() {

+        PrepareBuilder();

+        result.hasDefaultForeignEnum = false;

+        result.defaultForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_BAR;

+        return this;

+      }

+      

+      public bool HasDefaultImportEnum {

+       get { return result.hasDefaultImportEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportEnum DefaultImportEnum {

+        get { return result.DefaultImportEnum; }

+        set { SetDefaultImportEnum(value); }

+      }

+      public Builder SetDefaultImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {

+        PrepareBuilder();

+        result.hasDefaultImportEnum = true;

+        result.defaultImportEnum_ = value;

+        return this;

+      }

+      public Builder ClearDefaultImportEnum() {

+        PrepareBuilder();

+        result.hasDefaultImportEnum = false;

+        result.defaultImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_BAR;

+        return this;

+      }

+      

+      public bool HasDefaultStringPiece {

+        get { return result.hasDefaultStringPiece; }

+      }

+      public string DefaultStringPiece {

+        get { return result.DefaultStringPiece; }

+        set { SetDefaultStringPiece(value); }

+      }

+      public Builder SetDefaultStringPiece(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultStringPiece = true;

+        result.defaultStringPiece_ = value;

+        return this;

+      }

+      public Builder ClearDefaultStringPiece() {

+        PrepareBuilder();

+        result.hasDefaultStringPiece = false;

+        result.defaultStringPiece_ = "abc";

+        return this;

+      }

+      

+      public bool HasDefaultCord {

+        get { return result.hasDefaultCord; }

+      }

+      public string DefaultCord {

+        get { return result.DefaultCord; }

+        set { SetDefaultCord(value); }

+      }

+      public Builder SetDefaultCord(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultCord = true;

+        result.defaultCord_ = value;

+        return this;

+      }

+      public Builder ClearDefaultCord() {

+        PrepareBuilder();

+        result.hasDefaultCord = false;

+        result.defaultCord_ = "123";

+        return this;

+      }

+    }

+    static TestAllTypes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestDeprecatedFields : pb::GeneratedMessage<TestDeprecatedFields, TestDeprecatedFields.Builder> {

+    private TestDeprecatedFields() { }

+    private static readonly TestDeprecatedFields defaultInstance = new TestDeprecatedFields().MakeReadOnly();

+    private static readonly string[] _testDeprecatedFieldsFieldNames = new string[] { "deprecated_int32" };

+    private static readonly uint[] _testDeprecatedFieldsFieldTags = new uint[] { 8 };

+    public static TestDeprecatedFields DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestDeprecatedFields DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestDeprecatedFields ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestDeprecatedFields, TestDeprecatedFields.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable; }

+    }

+    

+    public const int DeprecatedInt32FieldNumber = 1;

+    private bool hasDeprecatedInt32;

+    private int deprecatedInt32_;

+    [global::System.ObsoleteAttribute()]

+    public bool HasDeprecatedInt32 {

+      get { return hasDeprecatedInt32; }

+    }

+    [global::System.ObsoleteAttribute()]

+    public int DeprecatedInt32 {

+      get { return deprecatedInt32_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testDeprecatedFieldsFieldNames;

+      if (hasDeprecatedInt32) {

+        output.WriteInt32(1, field_names[0], DeprecatedInt32);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasDeprecatedInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, DeprecatedInt32);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestDeprecatedFields ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestDeprecatedFields MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestDeprecatedFields prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestDeprecatedFields, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestDeprecatedFields cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestDeprecatedFields result;

+      

+      private TestDeprecatedFields PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestDeprecatedFields original = result;

+          result = new TestDeprecatedFields();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestDeprecatedFields MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.Descriptor; }

+      }

+      

+      public override TestDeprecatedFields DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.DefaultInstance; }

+      }

+      

+      public override TestDeprecatedFields BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestDeprecatedFields) {

+          return MergeFrom((TestDeprecatedFields) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestDeprecatedFields other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasDeprecatedInt32) {

+          DeprecatedInt32 = other.DeprecatedInt32;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testDeprecatedFieldsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testDeprecatedFieldsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasDeprecatedInt32 = input.ReadInt32(ref result.deprecatedInt32_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      [global::System.ObsoleteAttribute()]

+      public bool HasDeprecatedInt32 {

+        get { return result.hasDeprecatedInt32; }

+      }

+      [global::System.ObsoleteAttribute()]

+      public int DeprecatedInt32 {

+        get { return result.DeprecatedInt32; }

+        set { SetDeprecatedInt32(value); }

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder SetDeprecatedInt32(int value) {

+        PrepareBuilder();

+        result.hasDeprecatedInt32 = true;

+        result.deprecatedInt32_ = value;

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder ClearDeprecatedInt32() {

+        PrepareBuilder();

+        result.hasDeprecatedInt32 = false;

+        result.deprecatedInt32_ = 0;

+        return this;

+      }

+    }

+    static TestDeprecatedFields() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ForeignMessage : pb::GeneratedMessage<ForeignMessage, ForeignMessage.Builder> {

+    private ForeignMessage() { }

+    private static readonly ForeignMessage defaultInstance = new ForeignMessage().MakeReadOnly();

+    private static readonly string[] _foreignMessageFieldNames = new string[] { "c" };

+    private static readonly uint[] _foreignMessageFieldTags = new uint[] { 8 };

+    public static ForeignMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ForeignMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ForeignMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_ForeignMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<ForeignMessage, ForeignMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable; }

+    }

+    

+    public const int CFieldNumber = 1;

+    private bool hasC;

+    private int c_;

+    public bool HasC {

+      get { return hasC; }

+    }

+    public int C {

+      get { return c_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _foreignMessageFieldNames;

+      if (hasC) {

+        output.WriteInt32(1, field_names[0], C);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasC) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, C);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static ForeignMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ForeignMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ForeignMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ForeignMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ForeignMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<ForeignMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ForeignMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ForeignMessage result;

+      

+      private ForeignMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ForeignMessage original = result;

+          result = new ForeignMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ForeignMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Descriptor; }

+      }

+      

+      public override ForeignMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }

+      }

+      

+      public override ForeignMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is ForeignMessage) {

+          return MergeFrom((ForeignMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ForeignMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasC) {

+          C = other.C;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_foreignMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _foreignMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasC = input.ReadInt32(ref result.c_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasC {

+        get { return result.hasC; }

+      }

+      public int C {

+        get { return result.C; }

+        set { SetC(value); }

+      }

+      public Builder SetC(int value) {

+        PrepareBuilder();

+        result.hasC = true;

+        result.c_ = value;

+        return this;

+      }

+      public Builder ClearC() {

+        PrepareBuilder();

+        result.hasC = false;

+        result.c_ = 0;

+        return this;

+      }

+    }

+    static ForeignMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestAllExtensions : pb::ExtendableMessage<TestAllExtensions, TestAllExtensions.Builder> {

+    private TestAllExtensions() { }

+    private static readonly TestAllExtensions defaultInstance = new TestAllExtensions().MakeReadOnly();

+    private static readonly string[] _testAllExtensionsFieldNames = new string[] {  };

+    private static readonly uint[] _testAllExtensionsFieldTags = new uint[] {  };

+    public static TestAllExtensions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestAllExtensions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestAllExtensions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllExtensions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestAllExtensions, TestAllExtensions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllExtensions__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testAllExtensionsFieldNames;

+      pb::ExtendableMessage<TestAllExtensions, TestAllExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestAllExtensions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllExtensions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestAllExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestAllExtensions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestAllExtensions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestAllExtensions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestAllExtensions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestAllExtensions result;

+      

+      private TestAllExtensions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestAllExtensions original = result;

+          result = new TestAllExtensions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestAllExtensions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.Descriptor; }

+      }

+      

+      public override TestAllExtensions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.DefaultInstance; }

+      }

+      

+      public override TestAllExtensions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestAllExtensions) {

+          return MergeFrom((TestAllExtensions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestAllExtensions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testAllExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testAllExtensionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestAllExtensions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class OptionalGroup_extension : pb::GeneratedMessage<OptionalGroup_extension, OptionalGroup_extension.Builder> {

+    private OptionalGroup_extension() { }

+    private static readonly OptionalGroup_extension defaultInstance = new OptionalGroup_extension().MakeReadOnly();

+    private static readonly string[] _optionalGroupExtensionFieldNames = new string[] { "a" };

+    private static readonly uint[] _optionalGroupExtensionFieldTags = new uint[] { 136 };

+    public static OptionalGroup_extension DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override OptionalGroup_extension DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override OptionalGroup_extension ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<OptionalGroup_extension, OptionalGroup_extension.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OptionalGroup_extension__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 17;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _optionalGroupExtensionFieldNames;

+      if (hasA) {

+        output.WriteInt32(17, field_names[0], A);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(17, A);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static OptionalGroup_extension ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private OptionalGroup_extension MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(OptionalGroup_extension prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<OptionalGroup_extension, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(OptionalGroup_extension cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private OptionalGroup_extension result;

+      

+      private OptionalGroup_extension PrepareBuilder() {

+        if (resultIsReadOnly) {

+          OptionalGroup_extension original = result;

+          result = new OptionalGroup_extension();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override OptionalGroup_extension MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.Descriptor; }

+      }

+      

+      public override OptionalGroup_extension DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.DefaultInstance; }

+      }

+      

+      public override OptionalGroup_extension BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is OptionalGroup_extension) {

+          return MergeFrom((OptionalGroup_extension) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(OptionalGroup_extension other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_optionalGroupExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _optionalGroupExtensionFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 136: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+    }

+    static OptionalGroup_extension() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class RepeatedGroup_extension : pb::GeneratedMessage<RepeatedGroup_extension, RepeatedGroup_extension.Builder> {

+    private RepeatedGroup_extension() { }

+    private static readonly RepeatedGroup_extension defaultInstance = new RepeatedGroup_extension().MakeReadOnly();

+    private static readonly string[] _repeatedGroupExtensionFieldNames = new string[] { "a" };

+    private static readonly uint[] _repeatedGroupExtensionFieldTags = new uint[] { 376 };

+    public static RepeatedGroup_extension DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override RepeatedGroup_extension DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override RepeatedGroup_extension ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<RepeatedGroup_extension, RepeatedGroup_extension.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_RepeatedGroup_extension__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 47;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _repeatedGroupExtensionFieldNames;

+      if (hasA) {

+        output.WriteInt32(47, field_names[0], A);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(47, A);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static RepeatedGroup_extension ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private RepeatedGroup_extension MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(RepeatedGroup_extension prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<RepeatedGroup_extension, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(RepeatedGroup_extension cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private RepeatedGroup_extension result;

+      

+      private RepeatedGroup_extension PrepareBuilder() {

+        if (resultIsReadOnly) {

+          RepeatedGroup_extension original = result;

+          result = new RepeatedGroup_extension();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override RepeatedGroup_extension MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.Descriptor; }

+      }

+      

+      public override RepeatedGroup_extension DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.DefaultInstance; }

+      }

+      

+      public override RepeatedGroup_extension BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is RepeatedGroup_extension) {

+          return MergeFrom((RepeatedGroup_extension) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(RepeatedGroup_extension other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _repeatedGroupExtensionFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 376: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+    }

+    static RepeatedGroup_extension() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestNestedExtension : pb::GeneratedMessage<TestNestedExtension, TestNestedExtension.Builder> {

+    private TestNestedExtension() { }

+    private static readonly TestNestedExtension defaultInstance = new TestNestedExtension().MakeReadOnly();

+    private static readonly string[] _testNestedExtensionFieldNames = new string[] {  };

+    private static readonly uint[] _testNestedExtensionFieldTags = new uint[] {  };

+    public static TestNestedExtension DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestNestedExtension DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestNestedExtension ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedExtension__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestNestedExtension, TestNestedExtension.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedExtension__FieldAccessorTable; }

+    }

+    

+    public const int TestFieldNumber = 1002;

+    public static pb::GeneratedExtensionBase<string> Test;

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testNestedExtensionFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestNestedExtension ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedExtension ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestNestedExtension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestNestedExtension MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestNestedExtension prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestNestedExtension, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestNestedExtension cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestNestedExtension result;

+      

+      private TestNestedExtension PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestNestedExtension original = result;

+          result = new TestNestedExtension();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestNestedExtension MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Descriptor; }

+      }

+      

+      public override TestNestedExtension DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.DefaultInstance; }

+      }

+      

+      public override TestNestedExtension BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestNestedExtension) {

+          return MergeFrom((TestNestedExtension) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestNestedExtension other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testNestedExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testNestedExtensionFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestNestedExtension() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRequired : pb::GeneratedMessage<TestRequired, TestRequired.Builder> {

+    private TestRequired() { }

+    private static readonly TestRequired defaultInstance = new TestRequired().MakeReadOnly();

+    private static readonly string[] _testRequiredFieldNames = new string[] { "a", "b", "c", "dummy10", "dummy11", "dummy12", "dummy13", "dummy14", "dummy15", "dummy16", "dummy17", "dummy18", "dummy19", "dummy2", "dummy20", "dummy21", "dummy22", "dummy23", "dummy24", "dummy25", "dummy26", "dummy27", "dummy28", "dummy29", "dummy30", "dummy31", "dummy32", "dummy4", "dummy5", "dummy6", "dummy7", "dummy8", "dummy9" };

+    private static readonly uint[] _testRequiredFieldTags = new uint[] { 8, 24, 264, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 16, 160, 168, 176, 184, 192, 200, 208, 216, 224, 232, 240, 248, 256, 32, 40, 48, 56, 64, 72 };

+    public static TestRequired DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRequired DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRequired ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRequired__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestRequired, TestRequired.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRequired__FieldAccessorTable; }

+    }

+    

+    public const int SingleFieldNumber = 1000;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestRequired> Single;

+    public const int MultiFieldNumber = 1001;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestRequired>> Multi;

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public const int Dummy2FieldNumber = 2;

+    private bool hasDummy2;

+    private int dummy2_;

+    public bool HasDummy2 {

+      get { return hasDummy2; }

+    }

+    public int Dummy2 {

+      get { return dummy2_; }

+    }

+    

+    public const int BFieldNumber = 3;

+    private bool hasB;

+    private int b_;

+    public bool HasB {

+      get { return hasB; }

+    }

+    public int B {

+      get { return b_; }

+    }

+    

+    public const int Dummy4FieldNumber = 4;

+    private bool hasDummy4;

+    private int dummy4_;

+    public bool HasDummy4 {

+      get { return hasDummy4; }

+    }

+    public int Dummy4 {

+      get { return dummy4_; }

+    }

+    

+    public const int Dummy5FieldNumber = 5;

+    private bool hasDummy5;

+    private int dummy5_;

+    public bool HasDummy5 {

+      get { return hasDummy5; }

+    }

+    public int Dummy5 {

+      get { return dummy5_; }

+    }

+    

+    public const int Dummy6FieldNumber = 6;

+    private bool hasDummy6;

+    private int dummy6_;

+    public bool HasDummy6 {

+      get { return hasDummy6; }

+    }

+    public int Dummy6 {

+      get { return dummy6_; }

+    }

+    

+    public const int Dummy7FieldNumber = 7;

+    private bool hasDummy7;

+    private int dummy7_;

+    public bool HasDummy7 {

+      get { return hasDummy7; }

+    }

+    public int Dummy7 {

+      get { return dummy7_; }

+    }

+    

+    public const int Dummy8FieldNumber = 8;

+    private bool hasDummy8;

+    private int dummy8_;

+    public bool HasDummy8 {

+      get { return hasDummy8; }

+    }

+    public int Dummy8 {

+      get { return dummy8_; }

+    }

+    

+    public const int Dummy9FieldNumber = 9;

+    private bool hasDummy9;

+    private int dummy9_;

+    public bool HasDummy9 {

+      get { return hasDummy9; }

+    }

+    public int Dummy9 {

+      get { return dummy9_; }

+    }

+    

+    public const int Dummy10FieldNumber = 10;

+    private bool hasDummy10;

+    private int dummy10_;

+    public bool HasDummy10 {

+      get { return hasDummy10; }

+    }

+    public int Dummy10 {

+      get { return dummy10_; }

+    }

+    

+    public const int Dummy11FieldNumber = 11;

+    private bool hasDummy11;

+    private int dummy11_;

+    public bool HasDummy11 {

+      get { return hasDummy11; }

+    }

+    public int Dummy11 {

+      get { return dummy11_; }

+    }

+    

+    public const int Dummy12FieldNumber = 12;

+    private bool hasDummy12;

+    private int dummy12_;

+    public bool HasDummy12 {

+      get { return hasDummy12; }

+    }

+    public int Dummy12 {

+      get { return dummy12_; }

+    }

+    

+    public const int Dummy13FieldNumber = 13;

+    private bool hasDummy13;

+    private int dummy13_;

+    public bool HasDummy13 {

+      get { return hasDummy13; }

+    }

+    public int Dummy13 {

+      get { return dummy13_; }

+    }

+    

+    public const int Dummy14FieldNumber = 14;

+    private bool hasDummy14;

+    private int dummy14_;

+    public bool HasDummy14 {

+      get { return hasDummy14; }

+    }

+    public int Dummy14 {

+      get { return dummy14_; }

+    }

+    

+    public const int Dummy15FieldNumber = 15;

+    private bool hasDummy15;

+    private int dummy15_;

+    public bool HasDummy15 {

+      get { return hasDummy15; }

+    }

+    public int Dummy15 {

+      get { return dummy15_; }

+    }

+    

+    public const int Dummy16FieldNumber = 16;

+    private bool hasDummy16;

+    private int dummy16_;

+    public bool HasDummy16 {

+      get { return hasDummy16; }

+    }

+    public int Dummy16 {

+      get { return dummy16_; }

+    }

+    

+    public const int Dummy17FieldNumber = 17;

+    private bool hasDummy17;

+    private int dummy17_;

+    public bool HasDummy17 {

+      get { return hasDummy17; }

+    }

+    public int Dummy17 {

+      get { return dummy17_; }

+    }

+    

+    public const int Dummy18FieldNumber = 18;

+    private bool hasDummy18;

+    private int dummy18_;

+    public bool HasDummy18 {

+      get { return hasDummy18; }

+    }

+    public int Dummy18 {

+      get { return dummy18_; }

+    }

+    

+    public const int Dummy19FieldNumber = 19;

+    private bool hasDummy19;

+    private int dummy19_;

+    public bool HasDummy19 {

+      get { return hasDummy19; }

+    }

+    public int Dummy19 {

+      get { return dummy19_; }

+    }

+    

+    public const int Dummy20FieldNumber = 20;

+    private bool hasDummy20;

+    private int dummy20_;

+    public bool HasDummy20 {

+      get { return hasDummy20; }

+    }

+    public int Dummy20 {

+      get { return dummy20_; }

+    }

+    

+    public const int Dummy21FieldNumber = 21;

+    private bool hasDummy21;

+    private int dummy21_;

+    public bool HasDummy21 {

+      get { return hasDummy21; }

+    }

+    public int Dummy21 {

+      get { return dummy21_; }

+    }

+    

+    public const int Dummy22FieldNumber = 22;

+    private bool hasDummy22;

+    private int dummy22_;

+    public bool HasDummy22 {

+      get { return hasDummy22; }

+    }

+    public int Dummy22 {

+      get { return dummy22_; }

+    }

+    

+    public const int Dummy23FieldNumber = 23;

+    private bool hasDummy23;

+    private int dummy23_;

+    public bool HasDummy23 {

+      get { return hasDummy23; }

+    }

+    public int Dummy23 {

+      get { return dummy23_; }

+    }

+    

+    public const int Dummy24FieldNumber = 24;

+    private bool hasDummy24;

+    private int dummy24_;

+    public bool HasDummy24 {

+      get { return hasDummy24; }

+    }

+    public int Dummy24 {

+      get { return dummy24_; }

+    }

+    

+    public const int Dummy25FieldNumber = 25;

+    private bool hasDummy25;

+    private int dummy25_;

+    public bool HasDummy25 {

+      get { return hasDummy25; }

+    }

+    public int Dummy25 {

+      get { return dummy25_; }

+    }

+    

+    public const int Dummy26FieldNumber = 26;

+    private bool hasDummy26;

+    private int dummy26_;

+    public bool HasDummy26 {

+      get { return hasDummy26; }

+    }

+    public int Dummy26 {

+      get { return dummy26_; }

+    }

+    

+    public const int Dummy27FieldNumber = 27;

+    private bool hasDummy27;

+    private int dummy27_;

+    public bool HasDummy27 {

+      get { return hasDummy27; }

+    }

+    public int Dummy27 {

+      get { return dummy27_; }

+    }

+    

+    public const int Dummy28FieldNumber = 28;

+    private bool hasDummy28;

+    private int dummy28_;

+    public bool HasDummy28 {

+      get { return hasDummy28; }

+    }

+    public int Dummy28 {

+      get { return dummy28_; }

+    }

+    

+    public const int Dummy29FieldNumber = 29;

+    private bool hasDummy29;

+    private int dummy29_;

+    public bool HasDummy29 {

+      get { return hasDummy29; }

+    }

+    public int Dummy29 {

+      get { return dummy29_; }

+    }

+    

+    public const int Dummy30FieldNumber = 30;

+    private bool hasDummy30;

+    private int dummy30_;

+    public bool HasDummy30 {

+      get { return hasDummy30; }

+    }

+    public int Dummy30 {

+      get { return dummy30_; }

+    }

+    

+    public const int Dummy31FieldNumber = 31;

+    private bool hasDummy31;

+    private int dummy31_;

+    public bool HasDummy31 {

+      get { return hasDummy31; }

+    }

+    public int Dummy31 {

+      get { return dummy31_; }

+    }

+    

+    public const int Dummy32FieldNumber = 32;

+    private bool hasDummy32;

+    private int dummy32_;

+    public bool HasDummy32 {

+      get { return hasDummy32; }

+    }

+    public int Dummy32 {

+      get { return dummy32_; }

+    }

+    

+    public const int CFieldNumber = 33;

+    private bool hasC;

+    private int c_;

+    public bool HasC {

+      get { return hasC; }

+    }

+    public int C {

+      get { return c_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasA) return false;

+        if (!hasB) return false;

+        if (!hasC) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testRequiredFieldNames;

+      if (hasA) {

+        output.WriteInt32(1, field_names[0], A);

+      }

+      if (hasDummy2) {

+        output.WriteInt32(2, field_names[13], Dummy2);

+      }

+      if (hasB) {

+        output.WriteInt32(3, field_names[1], B);

+      }

+      if (hasDummy4) {

+        output.WriteInt32(4, field_names[27], Dummy4);

+      }

+      if (hasDummy5) {

+        output.WriteInt32(5, field_names[28], Dummy5);

+      }

+      if (hasDummy6) {

+        output.WriteInt32(6, field_names[29], Dummy6);

+      }

+      if (hasDummy7) {

+        output.WriteInt32(7, field_names[30], Dummy7);

+      }

+      if (hasDummy8) {

+        output.WriteInt32(8, field_names[31], Dummy8);

+      }

+      if (hasDummy9) {

+        output.WriteInt32(9, field_names[32], Dummy9);

+      }

+      if (hasDummy10) {

+        output.WriteInt32(10, field_names[3], Dummy10);

+      }

+      if (hasDummy11) {

+        output.WriteInt32(11, field_names[4], Dummy11);

+      }

+      if (hasDummy12) {

+        output.WriteInt32(12, field_names[5], Dummy12);

+      }

+      if (hasDummy13) {

+        output.WriteInt32(13, field_names[6], Dummy13);

+      }

+      if (hasDummy14) {

+        output.WriteInt32(14, field_names[7], Dummy14);

+      }

+      if (hasDummy15) {

+        output.WriteInt32(15, field_names[8], Dummy15);

+      }

+      if (hasDummy16) {

+        output.WriteInt32(16, field_names[9], Dummy16);

+      }

+      if (hasDummy17) {

+        output.WriteInt32(17, field_names[10], Dummy17);

+      }

+      if (hasDummy18) {

+        output.WriteInt32(18, field_names[11], Dummy18);

+      }

+      if (hasDummy19) {

+        output.WriteInt32(19, field_names[12], Dummy19);

+      }

+      if (hasDummy20) {

+        output.WriteInt32(20, field_names[14], Dummy20);

+      }

+      if (hasDummy21) {

+        output.WriteInt32(21, field_names[15], Dummy21);

+      }

+      if (hasDummy22) {

+        output.WriteInt32(22, field_names[16], Dummy22);

+      }

+      if (hasDummy23) {

+        output.WriteInt32(23, field_names[17], Dummy23);

+      }

+      if (hasDummy24) {

+        output.WriteInt32(24, field_names[18], Dummy24);

+      }

+      if (hasDummy25) {

+        output.WriteInt32(25, field_names[19], Dummy25);

+      }

+      if (hasDummy26) {

+        output.WriteInt32(26, field_names[20], Dummy26);

+      }

+      if (hasDummy27) {

+        output.WriteInt32(27, field_names[21], Dummy27);

+      }

+      if (hasDummy28) {

+        output.WriteInt32(28, field_names[22], Dummy28);

+      }

+      if (hasDummy29) {

+        output.WriteInt32(29, field_names[23], Dummy29);

+      }

+      if (hasDummy30) {

+        output.WriteInt32(30, field_names[24], Dummy30);

+      }

+      if (hasDummy31) {

+        output.WriteInt32(31, field_names[25], Dummy31);

+      }

+      if (hasDummy32) {

+        output.WriteInt32(32, field_names[26], Dummy32);

+      }

+      if (hasC) {

+        output.WriteInt32(33, field_names[2], C);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+      }

+      if (hasDummy2) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, Dummy2);

+      }

+      if (hasB) {

+        size += pb::CodedOutputStream.ComputeInt32Size(3, B);

+      }

+      if (hasDummy4) {

+        size += pb::CodedOutputStream.ComputeInt32Size(4, Dummy4);

+      }

+      if (hasDummy5) {

+        size += pb::CodedOutputStream.ComputeInt32Size(5, Dummy5);

+      }

+      if (hasDummy6) {

+        size += pb::CodedOutputStream.ComputeInt32Size(6, Dummy6);

+      }

+      if (hasDummy7) {

+        size += pb::CodedOutputStream.ComputeInt32Size(7, Dummy7);

+      }

+      if (hasDummy8) {

+        size += pb::CodedOutputStream.ComputeInt32Size(8, Dummy8);

+      }

+      if (hasDummy9) {

+        size += pb::CodedOutputStream.ComputeInt32Size(9, Dummy9);

+      }

+      if (hasDummy10) {

+        size += pb::CodedOutputStream.ComputeInt32Size(10, Dummy10);

+      }

+      if (hasDummy11) {

+        size += pb::CodedOutputStream.ComputeInt32Size(11, Dummy11);

+      }

+      if (hasDummy12) {

+        size += pb::CodedOutputStream.ComputeInt32Size(12, Dummy12);

+      }

+      if (hasDummy13) {

+        size += pb::CodedOutputStream.ComputeInt32Size(13, Dummy13);

+      }

+      if (hasDummy14) {

+        size += pb::CodedOutputStream.ComputeInt32Size(14, Dummy14);

+      }

+      if (hasDummy15) {

+        size += pb::CodedOutputStream.ComputeInt32Size(15, Dummy15);

+      }

+      if (hasDummy16) {

+        size += pb::CodedOutputStream.ComputeInt32Size(16, Dummy16);

+      }

+      if (hasDummy17) {

+        size += pb::CodedOutputStream.ComputeInt32Size(17, Dummy17);

+      }

+      if (hasDummy18) {

+        size += pb::CodedOutputStream.ComputeInt32Size(18, Dummy18);

+      }

+      if (hasDummy19) {

+        size += pb::CodedOutputStream.ComputeInt32Size(19, Dummy19);

+      }

+      if (hasDummy20) {

+        size += pb::CodedOutputStream.ComputeInt32Size(20, Dummy20);

+      }

+      if (hasDummy21) {

+        size += pb::CodedOutputStream.ComputeInt32Size(21, Dummy21);

+      }

+      if (hasDummy22) {

+        size += pb::CodedOutputStream.ComputeInt32Size(22, Dummy22);

+      }

+      if (hasDummy23) {

+        size += pb::CodedOutputStream.ComputeInt32Size(23, Dummy23);

+      }

+      if (hasDummy24) {

+        size += pb::CodedOutputStream.ComputeInt32Size(24, Dummy24);

+      }

+      if (hasDummy25) {

+        size += pb::CodedOutputStream.ComputeInt32Size(25, Dummy25);

+      }

+      if (hasDummy26) {

+        size += pb::CodedOutputStream.ComputeInt32Size(26, Dummy26);

+      }

+      if (hasDummy27) {

+        size += pb::CodedOutputStream.ComputeInt32Size(27, Dummy27);

+      }

+      if (hasDummy28) {

+        size += pb::CodedOutputStream.ComputeInt32Size(28, Dummy28);

+      }

+      if (hasDummy29) {

+        size += pb::CodedOutputStream.ComputeInt32Size(29, Dummy29);

+      }

+      if (hasDummy30) {

+        size += pb::CodedOutputStream.ComputeInt32Size(30, Dummy30);

+      }

+      if (hasDummy31) {

+        size += pb::CodedOutputStream.ComputeInt32Size(31, Dummy31);

+      }

+      if (hasDummy32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(32, Dummy32);

+      }

+      if (hasC) {

+        size += pb::CodedOutputStream.ComputeInt32Size(33, C);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestRequired ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequired ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRequired ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRequired ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRequired MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRequired prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestRequired, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRequired cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRequired result;

+      

+      private TestRequired PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRequired original = result;

+          result = new TestRequired();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRequired MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequired.Descriptor; }

+      }

+      

+      public override TestRequired DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance; }

+      }

+      

+      public override TestRequired BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestRequired) {

+          return MergeFrom((TestRequired) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestRequired other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        if (other.HasDummy2) {

+          Dummy2 = other.Dummy2;

+        }

+        if (other.HasB) {

+          B = other.B;

+        }

+        if (other.HasDummy4) {

+          Dummy4 = other.Dummy4;

+        }

+        if (other.HasDummy5) {

+          Dummy5 = other.Dummy5;

+        }

+        if (other.HasDummy6) {

+          Dummy6 = other.Dummy6;

+        }

+        if (other.HasDummy7) {

+          Dummy7 = other.Dummy7;

+        }

+        if (other.HasDummy8) {

+          Dummy8 = other.Dummy8;

+        }

+        if (other.HasDummy9) {

+          Dummy9 = other.Dummy9;

+        }

+        if (other.HasDummy10) {

+          Dummy10 = other.Dummy10;

+        }

+        if (other.HasDummy11) {

+          Dummy11 = other.Dummy11;

+        }

+        if (other.HasDummy12) {

+          Dummy12 = other.Dummy12;

+        }

+        if (other.HasDummy13) {

+          Dummy13 = other.Dummy13;

+        }

+        if (other.HasDummy14) {

+          Dummy14 = other.Dummy14;

+        }

+        if (other.HasDummy15) {

+          Dummy15 = other.Dummy15;

+        }

+        if (other.HasDummy16) {

+          Dummy16 = other.Dummy16;

+        }

+        if (other.HasDummy17) {

+          Dummy17 = other.Dummy17;

+        }

+        if (other.HasDummy18) {

+          Dummy18 = other.Dummy18;

+        }

+        if (other.HasDummy19) {

+          Dummy19 = other.Dummy19;

+        }

+        if (other.HasDummy20) {

+          Dummy20 = other.Dummy20;

+        }

+        if (other.HasDummy21) {

+          Dummy21 = other.Dummy21;

+        }

+        if (other.HasDummy22) {

+          Dummy22 = other.Dummy22;

+        }

+        if (other.HasDummy23) {

+          Dummy23 = other.Dummy23;

+        }

+        if (other.HasDummy24) {

+          Dummy24 = other.Dummy24;

+        }

+        if (other.HasDummy25) {

+          Dummy25 = other.Dummy25;

+        }

+        if (other.HasDummy26) {

+          Dummy26 = other.Dummy26;

+        }

+        if (other.HasDummy27) {

+          Dummy27 = other.Dummy27;

+        }

+        if (other.HasDummy28) {

+          Dummy28 = other.Dummy28;

+        }

+        if (other.HasDummy29) {

+          Dummy29 = other.Dummy29;

+        }

+        if (other.HasDummy30) {

+          Dummy30 = other.Dummy30;

+        }

+        if (other.HasDummy31) {

+          Dummy31 = other.Dummy31;

+        }

+        if (other.HasDummy32) {

+          Dummy32 = other.Dummy32;

+        }

+        if (other.HasC) {

+          C = other.C;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testRequiredFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testRequiredFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+            case 16: {

+              result.hasDummy2 = input.ReadInt32(ref result.dummy2_);

+              break;

+            }

+            case 24: {

+              result.hasB = input.ReadInt32(ref result.b_);

+              break;

+            }

+            case 32: {

+              result.hasDummy4 = input.ReadInt32(ref result.dummy4_);

+              break;

+            }

+            case 40: {

+              result.hasDummy5 = input.ReadInt32(ref result.dummy5_);

+              break;

+            }

+            case 48: {

+              result.hasDummy6 = input.ReadInt32(ref result.dummy6_);

+              break;

+            }

+            case 56: {

+              result.hasDummy7 = input.ReadInt32(ref result.dummy7_);

+              break;

+            }

+            case 64: {

+              result.hasDummy8 = input.ReadInt32(ref result.dummy8_);

+              break;

+            }

+            case 72: {

+              result.hasDummy9 = input.ReadInt32(ref result.dummy9_);

+              break;

+            }

+            case 80: {

+              result.hasDummy10 = input.ReadInt32(ref result.dummy10_);

+              break;

+            }

+            case 88: {

+              result.hasDummy11 = input.ReadInt32(ref result.dummy11_);

+              break;

+            }

+            case 96: {

+              result.hasDummy12 = input.ReadInt32(ref result.dummy12_);

+              break;

+            }

+            case 104: {

+              result.hasDummy13 = input.ReadInt32(ref result.dummy13_);

+              break;

+            }

+            case 112: {

+              result.hasDummy14 = input.ReadInt32(ref result.dummy14_);

+              break;

+            }

+            case 120: {

+              result.hasDummy15 = input.ReadInt32(ref result.dummy15_);

+              break;

+            }

+            case 128: {

+              result.hasDummy16 = input.ReadInt32(ref result.dummy16_);

+              break;

+            }

+            case 136: {

+              result.hasDummy17 = input.ReadInt32(ref result.dummy17_);

+              break;

+            }

+            case 144: {

+              result.hasDummy18 = input.ReadInt32(ref result.dummy18_);

+              break;

+            }

+            case 152: {

+              result.hasDummy19 = input.ReadInt32(ref result.dummy19_);

+              break;

+            }

+            case 160: {

+              result.hasDummy20 = input.ReadInt32(ref result.dummy20_);

+              break;

+            }

+            case 168: {

+              result.hasDummy21 = input.ReadInt32(ref result.dummy21_);

+              break;

+            }

+            case 176: {

+              result.hasDummy22 = input.ReadInt32(ref result.dummy22_);

+              break;

+            }

+            case 184: {

+              result.hasDummy23 = input.ReadInt32(ref result.dummy23_);

+              break;

+            }

+            case 192: {

+              result.hasDummy24 = input.ReadInt32(ref result.dummy24_);

+              break;

+            }

+            case 200: {

+              result.hasDummy25 = input.ReadInt32(ref result.dummy25_);

+              break;

+            }

+            case 208: {

+              result.hasDummy26 = input.ReadInt32(ref result.dummy26_);

+              break;

+            }

+            case 216: {

+              result.hasDummy27 = input.ReadInt32(ref result.dummy27_);

+              break;

+            }

+            case 224: {

+              result.hasDummy28 = input.ReadInt32(ref result.dummy28_);

+              break;

+            }

+            case 232: {

+              result.hasDummy29 = input.ReadInt32(ref result.dummy29_);

+              break;

+            }

+            case 240: {

+              result.hasDummy30 = input.ReadInt32(ref result.dummy30_);

+              break;

+            }

+            case 248: {

+              result.hasDummy31 = input.ReadInt32(ref result.dummy31_);

+              break;

+            }

+            case 256: {

+              result.hasDummy32 = input.ReadInt32(ref result.dummy32_);

+              break;

+            }

+            case 264: {

+              result.hasC = input.ReadInt32(ref result.c_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy2 {

+        get { return result.hasDummy2; }

+      }

+      public int Dummy2 {

+        get { return result.Dummy2; }

+        set { SetDummy2(value); }

+      }

+      public Builder SetDummy2(int value) {

+        PrepareBuilder();

+        result.hasDummy2 = true;

+        result.dummy2_ = value;

+        return this;

+      }

+      public Builder ClearDummy2() {

+        PrepareBuilder();

+        result.hasDummy2 = false;

+        result.dummy2_ = 0;

+        return this;

+      }

+      

+      public bool HasB {

+        get { return result.hasB; }

+      }

+      public int B {

+        get { return result.B; }

+        set { SetB(value); }

+      }

+      public Builder SetB(int value) {

+        PrepareBuilder();

+        result.hasB = true;

+        result.b_ = value;

+        return this;

+      }

+      public Builder ClearB() {

+        PrepareBuilder();

+        result.hasB = false;

+        result.b_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy4 {

+        get { return result.hasDummy4; }

+      }

+      public int Dummy4 {

+        get { return result.Dummy4; }

+        set { SetDummy4(value); }

+      }

+      public Builder SetDummy4(int value) {

+        PrepareBuilder();

+        result.hasDummy4 = true;

+        result.dummy4_ = value;

+        return this;

+      }

+      public Builder ClearDummy4() {

+        PrepareBuilder();

+        result.hasDummy4 = false;

+        result.dummy4_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy5 {

+        get { return result.hasDummy5; }

+      }

+      public int Dummy5 {

+        get { return result.Dummy5; }

+        set { SetDummy5(value); }

+      }

+      public Builder SetDummy5(int value) {

+        PrepareBuilder();

+        result.hasDummy5 = true;

+        result.dummy5_ = value;

+        return this;

+      }

+      public Builder ClearDummy5() {

+        PrepareBuilder();

+        result.hasDummy5 = false;

+        result.dummy5_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy6 {

+        get { return result.hasDummy6; }

+      }

+      public int Dummy6 {

+        get { return result.Dummy6; }

+        set { SetDummy6(value); }

+      }

+      public Builder SetDummy6(int value) {

+        PrepareBuilder();

+        result.hasDummy6 = true;

+        result.dummy6_ = value;

+        return this;

+      }

+      public Builder ClearDummy6() {

+        PrepareBuilder();

+        result.hasDummy6 = false;

+        result.dummy6_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy7 {

+        get { return result.hasDummy7; }

+      }

+      public int Dummy7 {

+        get { return result.Dummy7; }

+        set { SetDummy7(value); }

+      }

+      public Builder SetDummy7(int value) {

+        PrepareBuilder();

+        result.hasDummy7 = true;

+        result.dummy7_ = value;

+        return this;

+      }

+      public Builder ClearDummy7() {

+        PrepareBuilder();

+        result.hasDummy7 = false;

+        result.dummy7_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy8 {

+        get { return result.hasDummy8; }

+      }

+      public int Dummy8 {

+        get { return result.Dummy8; }

+        set { SetDummy8(value); }

+      }

+      public Builder SetDummy8(int value) {

+        PrepareBuilder();

+        result.hasDummy8 = true;

+        result.dummy8_ = value;

+        return this;

+      }

+      public Builder ClearDummy8() {

+        PrepareBuilder();

+        result.hasDummy8 = false;

+        result.dummy8_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy9 {

+        get { return result.hasDummy9; }

+      }

+      public int Dummy9 {

+        get { return result.Dummy9; }

+        set { SetDummy9(value); }

+      }

+      public Builder SetDummy9(int value) {

+        PrepareBuilder();

+        result.hasDummy9 = true;

+        result.dummy9_ = value;

+        return this;

+      }

+      public Builder ClearDummy9() {

+        PrepareBuilder();

+        result.hasDummy9 = false;

+        result.dummy9_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy10 {

+        get { return result.hasDummy10; }

+      }

+      public int Dummy10 {

+        get { return result.Dummy10; }

+        set { SetDummy10(value); }

+      }

+      public Builder SetDummy10(int value) {

+        PrepareBuilder();

+        result.hasDummy10 = true;

+        result.dummy10_ = value;

+        return this;

+      }

+      public Builder ClearDummy10() {

+        PrepareBuilder();

+        result.hasDummy10 = false;

+        result.dummy10_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy11 {

+        get { return result.hasDummy11; }

+      }

+      public int Dummy11 {

+        get { return result.Dummy11; }

+        set { SetDummy11(value); }

+      }

+      public Builder SetDummy11(int value) {

+        PrepareBuilder();

+        result.hasDummy11 = true;

+        result.dummy11_ = value;

+        return this;

+      }

+      public Builder ClearDummy11() {

+        PrepareBuilder();

+        result.hasDummy11 = false;

+        result.dummy11_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy12 {

+        get { return result.hasDummy12; }

+      }

+      public int Dummy12 {

+        get { return result.Dummy12; }

+        set { SetDummy12(value); }

+      }

+      public Builder SetDummy12(int value) {

+        PrepareBuilder();

+        result.hasDummy12 = true;

+        result.dummy12_ = value;

+        return this;

+      }

+      public Builder ClearDummy12() {

+        PrepareBuilder();

+        result.hasDummy12 = false;

+        result.dummy12_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy13 {

+        get { return result.hasDummy13; }

+      }

+      public int Dummy13 {

+        get { return result.Dummy13; }

+        set { SetDummy13(value); }

+      }

+      public Builder SetDummy13(int value) {

+        PrepareBuilder();

+        result.hasDummy13 = true;

+        result.dummy13_ = value;

+        return this;

+      }

+      public Builder ClearDummy13() {

+        PrepareBuilder();

+        result.hasDummy13 = false;

+        result.dummy13_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy14 {

+        get { return result.hasDummy14; }

+      }

+      public int Dummy14 {

+        get { return result.Dummy14; }

+        set { SetDummy14(value); }

+      }

+      public Builder SetDummy14(int value) {

+        PrepareBuilder();

+        result.hasDummy14 = true;

+        result.dummy14_ = value;

+        return this;

+      }

+      public Builder ClearDummy14() {

+        PrepareBuilder();

+        result.hasDummy14 = false;

+        result.dummy14_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy15 {

+        get { return result.hasDummy15; }

+      }

+      public int Dummy15 {

+        get { return result.Dummy15; }

+        set { SetDummy15(value); }

+      }

+      public Builder SetDummy15(int value) {

+        PrepareBuilder();

+        result.hasDummy15 = true;

+        result.dummy15_ = value;

+        return this;

+      }

+      public Builder ClearDummy15() {

+        PrepareBuilder();

+        result.hasDummy15 = false;

+        result.dummy15_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy16 {

+        get { return result.hasDummy16; }

+      }

+      public int Dummy16 {

+        get { return result.Dummy16; }

+        set { SetDummy16(value); }

+      }

+      public Builder SetDummy16(int value) {

+        PrepareBuilder();

+        result.hasDummy16 = true;

+        result.dummy16_ = value;

+        return this;

+      }

+      public Builder ClearDummy16() {

+        PrepareBuilder();

+        result.hasDummy16 = false;

+        result.dummy16_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy17 {

+        get { return result.hasDummy17; }

+      }

+      public int Dummy17 {

+        get { return result.Dummy17; }

+        set { SetDummy17(value); }

+      }

+      public Builder SetDummy17(int value) {

+        PrepareBuilder();

+        result.hasDummy17 = true;

+        result.dummy17_ = value;

+        return this;

+      }

+      public Builder ClearDummy17() {

+        PrepareBuilder();

+        result.hasDummy17 = false;

+        result.dummy17_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy18 {

+        get { return result.hasDummy18; }

+      }

+      public int Dummy18 {

+        get { return result.Dummy18; }

+        set { SetDummy18(value); }

+      }

+      public Builder SetDummy18(int value) {

+        PrepareBuilder();

+        result.hasDummy18 = true;

+        result.dummy18_ = value;

+        return this;

+      }

+      public Builder ClearDummy18() {

+        PrepareBuilder();

+        result.hasDummy18 = false;

+        result.dummy18_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy19 {

+        get { return result.hasDummy19; }

+      }

+      public int Dummy19 {

+        get { return result.Dummy19; }

+        set { SetDummy19(value); }

+      }

+      public Builder SetDummy19(int value) {

+        PrepareBuilder();

+        result.hasDummy19 = true;

+        result.dummy19_ = value;

+        return this;

+      }

+      public Builder ClearDummy19() {

+        PrepareBuilder();

+        result.hasDummy19 = false;

+        result.dummy19_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy20 {

+        get { return result.hasDummy20; }

+      }

+      public int Dummy20 {

+        get { return result.Dummy20; }

+        set { SetDummy20(value); }

+      }

+      public Builder SetDummy20(int value) {

+        PrepareBuilder();

+        result.hasDummy20 = true;

+        result.dummy20_ = value;

+        return this;

+      }

+      public Builder ClearDummy20() {

+        PrepareBuilder();

+        result.hasDummy20 = false;

+        result.dummy20_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy21 {

+        get { return result.hasDummy21; }

+      }

+      public int Dummy21 {

+        get { return result.Dummy21; }

+        set { SetDummy21(value); }

+      }

+      public Builder SetDummy21(int value) {

+        PrepareBuilder();

+        result.hasDummy21 = true;

+        result.dummy21_ = value;

+        return this;

+      }

+      public Builder ClearDummy21() {

+        PrepareBuilder();

+        result.hasDummy21 = false;

+        result.dummy21_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy22 {

+        get { return result.hasDummy22; }

+      }

+      public int Dummy22 {

+        get { return result.Dummy22; }

+        set { SetDummy22(value); }

+      }

+      public Builder SetDummy22(int value) {

+        PrepareBuilder();

+        result.hasDummy22 = true;

+        result.dummy22_ = value;

+        return this;

+      }

+      public Builder ClearDummy22() {

+        PrepareBuilder();

+        result.hasDummy22 = false;

+        result.dummy22_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy23 {

+        get { return result.hasDummy23; }

+      }

+      public int Dummy23 {

+        get { return result.Dummy23; }

+        set { SetDummy23(value); }

+      }

+      public Builder SetDummy23(int value) {

+        PrepareBuilder();

+        result.hasDummy23 = true;

+        result.dummy23_ = value;

+        return this;

+      }

+      public Builder ClearDummy23() {

+        PrepareBuilder();

+        result.hasDummy23 = false;

+        result.dummy23_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy24 {

+        get { return result.hasDummy24; }

+      }

+      public int Dummy24 {

+        get { return result.Dummy24; }

+        set { SetDummy24(value); }

+      }

+      public Builder SetDummy24(int value) {

+        PrepareBuilder();

+        result.hasDummy24 = true;

+        result.dummy24_ = value;

+        return this;

+      }

+      public Builder ClearDummy24() {

+        PrepareBuilder();

+        result.hasDummy24 = false;

+        result.dummy24_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy25 {

+        get { return result.hasDummy25; }

+      }

+      public int Dummy25 {

+        get { return result.Dummy25; }

+        set { SetDummy25(value); }

+      }

+      public Builder SetDummy25(int value) {

+        PrepareBuilder();

+        result.hasDummy25 = true;

+        result.dummy25_ = value;

+        return this;

+      }

+      public Builder ClearDummy25() {

+        PrepareBuilder();

+        result.hasDummy25 = false;

+        result.dummy25_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy26 {

+        get { return result.hasDummy26; }

+      }

+      public int Dummy26 {

+        get { return result.Dummy26; }

+        set { SetDummy26(value); }

+      }

+      public Builder SetDummy26(int value) {

+        PrepareBuilder();

+        result.hasDummy26 = true;

+        result.dummy26_ = value;

+        return this;

+      }

+      public Builder ClearDummy26() {

+        PrepareBuilder();

+        result.hasDummy26 = false;

+        result.dummy26_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy27 {

+        get { return result.hasDummy27; }

+      }

+      public int Dummy27 {

+        get { return result.Dummy27; }

+        set { SetDummy27(value); }

+      }

+      public Builder SetDummy27(int value) {

+        PrepareBuilder();

+        result.hasDummy27 = true;

+        result.dummy27_ = value;

+        return this;

+      }

+      public Builder ClearDummy27() {

+        PrepareBuilder();

+        result.hasDummy27 = false;

+        result.dummy27_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy28 {

+        get { return result.hasDummy28; }

+      }

+      public int Dummy28 {

+        get { return result.Dummy28; }

+        set { SetDummy28(value); }

+      }

+      public Builder SetDummy28(int value) {

+        PrepareBuilder();

+        result.hasDummy28 = true;

+        result.dummy28_ = value;

+        return this;

+      }

+      public Builder ClearDummy28() {

+        PrepareBuilder();

+        result.hasDummy28 = false;

+        result.dummy28_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy29 {

+        get { return result.hasDummy29; }

+      }

+      public int Dummy29 {

+        get { return result.Dummy29; }

+        set { SetDummy29(value); }

+      }

+      public Builder SetDummy29(int value) {

+        PrepareBuilder();

+        result.hasDummy29 = true;

+        result.dummy29_ = value;

+        return this;

+      }

+      public Builder ClearDummy29() {

+        PrepareBuilder();

+        result.hasDummy29 = false;

+        result.dummy29_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy30 {

+        get { return result.hasDummy30; }

+      }

+      public int Dummy30 {

+        get { return result.Dummy30; }

+        set { SetDummy30(value); }

+      }

+      public Builder SetDummy30(int value) {

+        PrepareBuilder();

+        result.hasDummy30 = true;

+        result.dummy30_ = value;

+        return this;

+      }

+      public Builder ClearDummy30() {

+        PrepareBuilder();

+        result.hasDummy30 = false;

+        result.dummy30_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy31 {

+        get { return result.hasDummy31; }

+      }

+      public int Dummy31 {

+        get { return result.Dummy31; }

+        set { SetDummy31(value); }

+      }

+      public Builder SetDummy31(int value) {

+        PrepareBuilder();

+        result.hasDummy31 = true;

+        result.dummy31_ = value;

+        return this;

+      }

+      public Builder ClearDummy31() {

+        PrepareBuilder();

+        result.hasDummy31 = false;

+        result.dummy31_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy32 {

+        get { return result.hasDummy32; }

+      }

+      public int Dummy32 {

+        get { return result.Dummy32; }

+        set { SetDummy32(value); }

+      }

+      public Builder SetDummy32(int value) {

+        PrepareBuilder();

+        result.hasDummy32 = true;

+        result.dummy32_ = value;

+        return this;

+      }

+      public Builder ClearDummy32() {

+        PrepareBuilder();

+        result.hasDummy32 = false;

+        result.dummy32_ = 0;

+        return this;

+      }

+      

+      public bool HasC {

+        get { return result.hasC; }

+      }

+      public int C {

+        get { return result.C; }

+        set { SetC(value); }

+      }

+      public Builder SetC(int value) {

+        PrepareBuilder();

+        result.hasC = true;

+        result.c_ = value;

+        return this;

+      }

+      public Builder ClearC() {

+        PrepareBuilder();

+        result.hasC = false;

+        result.c_ = 0;

+        return this;

+      }

+    }

+    static TestRequired() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRequiredForeign : pb::GeneratedMessage<TestRequiredForeign, TestRequiredForeign.Builder> {

+    private TestRequiredForeign() { }

+    private static readonly TestRequiredForeign defaultInstance = new TestRequiredForeign().MakeReadOnly();

+    private static readonly string[] _testRequiredForeignFieldNames = new string[] { "dummy", "optional_message", "repeated_message" };

+    private static readonly uint[] _testRequiredForeignFieldTags = new uint[] { 24, 10, 18 };

+    public static TestRequiredForeign DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRequiredForeign DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRequiredForeign ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRequiredForeign__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestRequiredForeign, TestRequiredForeign.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRequiredForeign__FieldAccessorTable; }

+    }

+    

+    public const int OptionalMessageFieldNumber = 1;

+    private bool hasOptionalMessage;

+    private global::Google.ProtocolBuffers.TestProtos.TestRequired optionalMessage_;

+    public bool HasOptionalMessage {

+      get { return hasOptionalMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestRequired OptionalMessage {

+      get { return optionalMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance; }

+    }

+    

+    public const int RepeatedMessageFieldNumber = 2;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestRequired> repeatedMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestRequired>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestRequired> RepeatedMessageList {

+      get { return repeatedMessage_; }

+    }

+    public int RepeatedMessageCount {

+      get { return repeatedMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestRequired GetRepeatedMessage(int index) {

+      return repeatedMessage_[index];

+    }

+    

+    public const int DummyFieldNumber = 3;

+    private bool hasDummy;

+    private int dummy_;

+    public bool HasDummy {

+      get { return hasDummy; }

+    }

+    public int Dummy {

+      get { return dummy_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (HasOptionalMessage) {

+          if (!OptionalMessage.IsInitialized) return false;

+        }

+        foreach (global::Google.ProtocolBuffers.TestProtos.TestRequired element in RepeatedMessageList) {

+          if (!element.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testRequiredForeignFieldNames;

+      if (hasOptionalMessage) {

+        output.WriteMessage(1, field_names[1], OptionalMessage);

+      }

+      if (repeatedMessage_.Count > 0) {

+        output.WriteMessageArray(2, field_names[2], repeatedMessage_);

+      }

+      if (hasDummy) {

+        output.WriteInt32(3, field_names[0], Dummy);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasOptionalMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, OptionalMessage);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestRequired element in RepeatedMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2, element);

+      }

+      if (hasDummy) {

+        size += pb::CodedOutputStream.ComputeInt32Size(3, Dummy);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestRequiredForeign ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRequiredForeign ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRequiredForeign MakeReadOnly() {

+      repeatedMessage_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRequiredForeign prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestRequiredForeign, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRequiredForeign cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRequiredForeign result;

+      

+      private TestRequiredForeign PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRequiredForeign original = result;

+          result = new TestRequiredForeign();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRequiredForeign MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.Descriptor; }

+      }

+      

+      public override TestRequiredForeign DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.DefaultInstance; }

+      }

+      

+      public override TestRequiredForeign BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestRequiredForeign) {

+          return MergeFrom((TestRequiredForeign) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestRequiredForeign other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasOptionalMessage) {

+          MergeOptionalMessage(other.OptionalMessage);

+        }

+        if (other.repeatedMessage_.Count != 0) {

+          result.repeatedMessage_.Add(other.repeatedMessage_);

+        }

+        if (other.HasDummy) {

+          Dummy = other.Dummy;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testRequiredForeignFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testRequiredForeignFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestRequired.CreateBuilder();

+              if (result.hasOptionalMessage) {

+                subBuilder.MergeFrom(OptionalMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 18: {

+              input.ReadMessageArray(tag, field_name, result.repeatedMessage_, global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 24: {

+              result.hasDummy = input.ReadInt32(ref result.dummy_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasOptionalMessage {

+       get { return result.hasOptionalMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestRequired OptionalMessage {

+        get { return result.OptionalMessage; }

+        set { SetOptionalMessage(value); }

+      }

+      public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalMessage = true;

+        result.optionalMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalMessage = true;

+        result.optionalMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalMessage &&

+            result.optionalMessage_ != global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance) {

+            result.optionalMessage_ = global::Google.ProtocolBuffers.TestProtos.TestRequired.CreateBuilder(result.optionalMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalMessage_ = value;

+        }

+        result.hasOptionalMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalMessage() {

+        PrepareBuilder();

+        result.hasOptionalMessage = false;

+        result.optionalMessage_ = null;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestRequired> RepeatedMessageList {

+        get { return PrepareBuilder().repeatedMessage_; }

+      }

+      public int RepeatedMessageCount {

+        get { return result.RepeatedMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestRequired GetRepeatedMessage(int index) {

+        return result.GetRepeatedMessage(index);

+      }

+      public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestRequired value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestRequired> values) {

+        PrepareBuilder();

+        result.repeatedMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedMessage() {

+        PrepareBuilder();

+        result.repeatedMessage_.Clear();

+        return this;

+      }

+      

+      public bool HasDummy {

+        get { return result.hasDummy; }

+      }

+      public int Dummy {

+        get { return result.Dummy; }

+        set { SetDummy(value); }

+      }

+      public Builder SetDummy(int value) {

+        PrepareBuilder();

+        result.hasDummy = true;

+        result.dummy_ = value;

+        return this;

+      }

+      public Builder ClearDummy() {

+        PrepareBuilder();

+        result.hasDummy = false;

+        result.dummy_ = 0;

+        return this;

+      }

+    }

+    static TestRequiredForeign() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestForeignNested : pb::GeneratedMessage<TestForeignNested, TestForeignNested.Builder> {

+    private TestForeignNested() { }

+    private static readonly TestForeignNested defaultInstance = new TestForeignNested().MakeReadOnly();

+    private static readonly string[] _testForeignNestedFieldNames = new string[] { "foreign_nested" };

+    private static readonly uint[] _testForeignNestedFieldTags = new uint[] { 10 };

+    public static TestForeignNested DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestForeignNested DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestForeignNested ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestForeignNested__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestForeignNested, TestForeignNested.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable; }

+    }

+    

+    public const int ForeignNestedFieldNumber = 1;

+    private bool hasForeignNested;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage foreignNested_;

+    public bool HasForeignNested {

+      get { return hasForeignNested; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage ForeignNested {

+      get { return foreignNested_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testForeignNestedFieldNames;

+      if (hasForeignNested) {

+        output.WriteMessage(1, field_names[0], ForeignNested);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasForeignNested) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, ForeignNested);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestForeignNested ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestForeignNested ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestForeignNested ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestForeignNested MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestForeignNested prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestForeignNested, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestForeignNested cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestForeignNested result;

+      

+      private TestForeignNested PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestForeignNested original = result;

+          result = new TestForeignNested();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestForeignNested MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestForeignNested.Descriptor; }

+      }

+      

+      public override TestForeignNested DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestForeignNested.DefaultInstance; }

+      }

+      

+      public override TestForeignNested BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestForeignNested) {

+          return MergeFrom((TestForeignNested) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestForeignNested other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestForeignNested.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasForeignNested) {

+          MergeForeignNested(other.ForeignNested);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testForeignNestedFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testForeignNestedFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder();

+              if (result.hasForeignNested) {

+                subBuilder.MergeFrom(ForeignNested);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              ForeignNested = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasForeignNested {

+       get { return result.hasForeignNested; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage ForeignNested {

+        get { return result.ForeignNested; }

+        set { SetForeignNested(value); }

+      }

+      public Builder SetForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasForeignNested = true;

+        result.foreignNested_ = value;

+        return this;

+      }

+      public Builder SetForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasForeignNested = true;

+        result.foreignNested_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasForeignNested &&

+            result.foreignNested_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) {

+            result.foreignNested_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder(result.foreignNested_).MergeFrom(value).BuildPartial();

+        } else {

+          result.foreignNested_ = value;

+        }

+        result.hasForeignNested = true;

+        return this;

+      }

+      public Builder ClearForeignNested() {

+        PrepareBuilder();

+        result.hasForeignNested = false;

+        result.foreignNested_ = null;

+        return this;

+      }

+    }

+    static TestForeignNested() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestEmptyMessage : pb::GeneratedMessage<TestEmptyMessage, TestEmptyMessage.Builder> {

+    private TestEmptyMessage() { }

+    private static readonly TestEmptyMessage defaultInstance = new TestEmptyMessage().MakeReadOnly();

+    private static readonly string[] _testEmptyMessageFieldNames = new string[] {  };

+    private static readonly uint[] _testEmptyMessageFieldTags = new uint[] {  };

+    public static TestEmptyMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestEmptyMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestEmptyMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestEmptyMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestEmptyMessage, TestEmptyMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestEmptyMessage__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testEmptyMessageFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestEmptyMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestEmptyMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestEmptyMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestEmptyMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestEmptyMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestEmptyMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestEmptyMessage result;

+      

+      private TestEmptyMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestEmptyMessage original = result;

+          result = new TestEmptyMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestEmptyMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.Descriptor; }

+      }

+      

+      public override TestEmptyMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.DefaultInstance; }

+      }

+      

+      public override TestEmptyMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestEmptyMessage) {

+          return MergeFrom((TestEmptyMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestEmptyMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testEmptyMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testEmptyMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestEmptyMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestEmptyMessageWithExtensions : pb::ExtendableMessage<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder> {

+    private TestEmptyMessageWithExtensions() { }

+    private static readonly TestEmptyMessageWithExtensions defaultInstance = new TestEmptyMessageWithExtensions().MakeReadOnly();

+    private static readonly string[] _testEmptyMessageWithExtensionsFieldNames = new string[] {  };

+    private static readonly uint[] _testEmptyMessageWithExtensionsFieldTags = new uint[] {  };

+    public static TestEmptyMessageWithExtensions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestEmptyMessageWithExtensions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestEmptyMessageWithExtensions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testEmptyMessageWithExtensionsFieldNames;

+      pb::ExtendableMessage<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestEmptyMessageWithExtensions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestEmptyMessageWithExtensions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestEmptyMessageWithExtensions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestEmptyMessageWithExtensions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestEmptyMessageWithExtensions result;

+      

+      private TestEmptyMessageWithExtensions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestEmptyMessageWithExtensions original = result;

+          result = new TestEmptyMessageWithExtensions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestEmptyMessageWithExtensions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.Descriptor; }

+      }

+      

+      public override TestEmptyMessageWithExtensions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.DefaultInstance; }

+      }

+      

+      public override TestEmptyMessageWithExtensions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestEmptyMessageWithExtensions) {

+          return MergeFrom((TestEmptyMessageWithExtensions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestEmptyMessageWithExtensions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testEmptyMessageWithExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testEmptyMessageWithExtensionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestEmptyMessageWithExtensions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMultipleExtensionRanges : pb::ExtendableMessage<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder> {

+    private TestMultipleExtensionRanges() { }

+    private static readonly TestMultipleExtensionRanges defaultInstance = new TestMultipleExtensionRanges().MakeReadOnly();

+    private static readonly string[] _testMultipleExtensionRangesFieldNames = new string[] {  };

+    private static readonly uint[] _testMultipleExtensionRangesFieldTags = new uint[] {  };

+    public static TestMultipleExtensionRanges DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMultipleExtensionRanges DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMultipleExtensionRanges ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMultipleExtensionRanges__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMultipleExtensionRangesFieldNames;

+      pb::ExtendableMessage<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(43, output);

+      extensionWriter.WriteUntil(4244, output);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMultipleExtensionRanges ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMultipleExtensionRanges MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMultipleExtensionRanges prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestMultipleExtensionRanges, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMultipleExtensionRanges cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMultipleExtensionRanges result;

+      

+      private TestMultipleExtensionRanges PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMultipleExtensionRanges original = result;

+          result = new TestMultipleExtensionRanges();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMultipleExtensionRanges MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.Descriptor; }

+      }

+      

+      public override TestMultipleExtensionRanges DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.DefaultInstance; }

+      }

+      

+      public override TestMultipleExtensionRanges BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMultipleExtensionRanges) {

+          return MergeFrom((TestMultipleExtensionRanges) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMultipleExtensionRanges other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMultipleExtensionRangesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMultipleExtensionRangesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestMultipleExtensionRanges() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestReallyLargeTagNumber : pb::GeneratedMessage<TestReallyLargeTagNumber, TestReallyLargeTagNumber.Builder> {

+    private TestReallyLargeTagNumber() { }

+    private static readonly TestReallyLargeTagNumber defaultInstance = new TestReallyLargeTagNumber().MakeReadOnly();

+    private static readonly string[] _testReallyLargeTagNumberFieldNames = new string[] { "a", "bb" };

+    private static readonly uint[] _testReallyLargeTagNumberFieldTags = new uint[] { 8, 2147483640 };

+    public static TestReallyLargeTagNumber DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestReallyLargeTagNumber DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestReallyLargeTagNumber ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestReallyLargeTagNumber, TestReallyLargeTagNumber.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public const int BbFieldNumber = 268435455;

+    private bool hasBb;

+    private int bb_;

+    public bool HasBb {

+      get { return hasBb; }

+    }

+    public int Bb {

+      get { return bb_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testReallyLargeTagNumberFieldNames;

+      if (hasA) {

+        output.WriteInt32(1, field_names[0], A);

+      }

+      if (hasBb) {

+        output.WriteInt32(268435455, field_names[1], Bb);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+      }

+      if (hasBb) {

+        size += pb::CodedOutputStream.ComputeInt32Size(268435455, Bb);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestReallyLargeTagNumber ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestReallyLargeTagNumber MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestReallyLargeTagNumber prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestReallyLargeTagNumber, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestReallyLargeTagNumber cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestReallyLargeTagNumber result;

+      

+      private TestReallyLargeTagNumber PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestReallyLargeTagNumber original = result;

+          result = new TestReallyLargeTagNumber();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestReallyLargeTagNumber MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.Descriptor; }

+      }

+      

+      public override TestReallyLargeTagNumber DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.DefaultInstance; }

+      }

+      

+      public override TestReallyLargeTagNumber BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestReallyLargeTagNumber) {

+          return MergeFrom((TestReallyLargeTagNumber) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestReallyLargeTagNumber other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        if (other.HasBb) {

+          Bb = other.Bb;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testReallyLargeTagNumberFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testReallyLargeTagNumberFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+            case 2147483640: {

+              result.hasBb = input.ReadInt32(ref result.bb_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+      

+      public bool HasBb {

+        get { return result.hasBb; }

+      }

+      public int Bb {

+        get { return result.Bb; }

+        set { SetBb(value); }

+      }

+      public Builder SetBb(int value) {

+        PrepareBuilder();

+        result.hasBb = true;

+        result.bb_ = value;

+        return this;

+      }

+      public Builder ClearBb() {

+        PrepareBuilder();

+        result.hasBb = false;

+        result.bb_ = 0;

+        return this;

+      }

+    }

+    static TestReallyLargeTagNumber() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRecursiveMessage : pb::GeneratedMessage<TestRecursiveMessage, TestRecursiveMessage.Builder> {

+    private TestRecursiveMessage() { }

+    private static readonly TestRecursiveMessage defaultInstance = new TestRecursiveMessage().MakeReadOnly();

+    private static readonly string[] _testRecursiveMessageFieldNames = new string[] { "a", "i" };

+    private static readonly uint[] _testRecursiveMessageFieldTags = new uint[] { 10, 16 };

+    public static TestRecursiveMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRecursiveMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRecursiveMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestRecursiveMessage, TestRecursiveMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage A {

+      get { return a_ ?? global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance; }

+    }

+    

+    public const int IFieldNumber = 2;

+    private bool hasI;

+    private int i_;

+    public bool HasI {

+      get { return hasI; }

+    }

+    public int I {

+      get { return i_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testRecursiveMessageFieldNames;

+      if (hasA) {

+        output.WriteMessage(1, field_names[0], A);

+      }

+      if (hasI) {

+        output.WriteInt32(2, field_names[1], I);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, A);

+      }

+      if (hasI) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, I);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestRecursiveMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRecursiveMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRecursiveMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestRecursiveMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRecursiveMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRecursiveMessage result;

+      

+      private TestRecursiveMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRecursiveMessage original = result;

+          result = new TestRecursiveMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRecursiveMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Descriptor; }

+      }

+      

+      public override TestRecursiveMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance; }

+      }

+      

+      public override TestRecursiveMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestRecursiveMessage) {

+          return MergeFrom((TestRecursiveMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestRecursiveMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          MergeA(other.A);

+        }

+        if (other.HasI) {

+          I = other.I;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testRecursiveMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testRecursiveMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.CreateBuilder();

+              if (result.hasA) {

+                subBuilder.MergeFrom(A);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              A = subBuilder.BuildPartial();

+              break;

+            }

+            case 16: {

+              result.hasI = input.ReadInt32(ref result.i_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+       get { return result.hasA; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasA &&

+            result.a_ != global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance) {

+            result.a_ = global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.CreateBuilder(result.a_).MergeFrom(value).BuildPartial();

+        } else {

+          result.a_ = value;

+        }

+        result.hasA = true;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = null;

+        return this;

+      }

+      

+      public bool HasI {

+        get { return result.hasI; }

+      }

+      public int I {

+        get { return result.I; }

+        set { SetI(value); }

+      }

+      public Builder SetI(int value) {

+        PrepareBuilder();

+        result.hasI = true;

+        result.i_ = value;

+        return this;

+      }

+      public Builder ClearI() {

+        PrepareBuilder();

+        result.hasI = false;

+        result.i_ = 0;

+        return this;

+      }

+    }

+    static TestRecursiveMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMutualRecursionA : pb::GeneratedMessage<TestMutualRecursionA, TestMutualRecursionA.Builder> {

+    private TestMutualRecursionA() { }

+    private static readonly TestMutualRecursionA defaultInstance = new TestMutualRecursionA().MakeReadOnly();

+    private static readonly string[] _testMutualRecursionAFieldNames = new string[] { "bb" };

+    private static readonly uint[] _testMutualRecursionAFieldTags = new uint[] { 10 };

+    public static TestMutualRecursionA DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMutualRecursionA DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMutualRecursionA ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMutualRecursionA, TestMutualRecursionA.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable; }

+    }

+    

+    public const int BbFieldNumber = 1;

+    private bool hasBb;

+    private global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB bb_;

+    public bool HasBb {

+      get { return hasBb; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB Bb {

+      get { return bb_ ?? global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMutualRecursionAFieldNames;

+      if (hasBb) {

+        output.WriteMessage(1, field_names[0], Bb);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasBb) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, Bb);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMutualRecursionA ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMutualRecursionA MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMutualRecursionA prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestMutualRecursionA, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMutualRecursionA cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMutualRecursionA result;

+      

+      private TestMutualRecursionA PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMutualRecursionA original = result;

+          result = new TestMutualRecursionA();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMutualRecursionA MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Descriptor; }

+      }

+      

+      public override TestMutualRecursionA DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance; }

+      }

+      

+      public override TestMutualRecursionA BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMutualRecursionA) {

+          return MergeFrom((TestMutualRecursionA) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMutualRecursionA other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasBb) {

+          MergeBb(other.Bb);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMutualRecursionAFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMutualRecursionAFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.CreateBuilder();

+              if (result.hasBb) {

+                subBuilder.MergeFrom(Bb);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Bb = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasBb {

+       get { return result.hasBb; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB Bb {

+        get { return result.Bb; }

+        set { SetBb(value); }

+      }

+      public Builder SetBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasBb = true;

+        result.bb_ = value;

+        return this;

+      }

+      public Builder SetBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasBb = true;

+        result.bb_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasBb &&

+            result.bb_ != global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance) {

+            result.bb_ = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.CreateBuilder(result.bb_).MergeFrom(value).BuildPartial();

+        } else {

+          result.bb_ = value;

+        }

+        result.hasBb = true;

+        return this;

+      }

+      public Builder ClearBb() {

+        PrepareBuilder();

+        result.hasBb = false;

+        result.bb_ = null;

+        return this;

+      }

+    }

+    static TestMutualRecursionA() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMutualRecursionB : pb::GeneratedMessage<TestMutualRecursionB, TestMutualRecursionB.Builder> {

+    private TestMutualRecursionB() { }

+    private static readonly TestMutualRecursionB defaultInstance = new TestMutualRecursionB().MakeReadOnly();

+    private static readonly string[] _testMutualRecursionBFieldNames = new string[] { "a", "optional_int32" };

+    private static readonly uint[] _testMutualRecursionBFieldTags = new uint[] { 10, 16 };

+    public static TestMutualRecursionB DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMutualRecursionB DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMutualRecursionB ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMutualRecursionB, TestMutualRecursionB.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA A {

+      get { return a_ ?? global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance; }

+    }

+    

+    public const int OptionalInt32FieldNumber = 2;

+    private bool hasOptionalInt32;

+    private int optionalInt32_;

+    public bool HasOptionalInt32 {

+      get { return hasOptionalInt32; }

+    }

+    public int OptionalInt32 {

+      get { return optionalInt32_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMutualRecursionBFieldNames;

+      if (hasA) {

+        output.WriteMessage(1, field_names[0], A);

+      }

+      if (hasOptionalInt32) {

+        output.WriteInt32(2, field_names[1], OptionalInt32);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, A);

+      }

+      if (hasOptionalInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, OptionalInt32);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMutualRecursionB ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMutualRecursionB MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMutualRecursionB prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestMutualRecursionB, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMutualRecursionB cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMutualRecursionB result;

+      

+      private TestMutualRecursionB PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMutualRecursionB original = result;

+          result = new TestMutualRecursionB();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMutualRecursionB MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Descriptor; }

+      }

+      

+      public override TestMutualRecursionB DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance; }

+      }

+      

+      public override TestMutualRecursionB BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMutualRecursionB) {

+          return MergeFrom((TestMutualRecursionB) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMutualRecursionB other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          MergeA(other.A);

+        }

+        if (other.HasOptionalInt32) {

+          OptionalInt32 = other.OptionalInt32;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMutualRecursionBFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMutualRecursionBFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.CreateBuilder();

+              if (result.hasA) {

+                subBuilder.MergeFrom(A);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              A = subBuilder.BuildPartial();

+              break;

+            }

+            case 16: {

+              result.hasOptionalInt32 = input.ReadInt32(ref result.optionalInt32_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+       get { return result.hasA; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasA &&

+            result.a_ != global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance) {

+            result.a_ = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.CreateBuilder(result.a_).MergeFrom(value).BuildPartial();

+        } else {

+          result.a_ = value;

+        }

+        result.hasA = true;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalInt32 {

+        get { return result.hasOptionalInt32; }

+      }

+      public int OptionalInt32 {

+        get { return result.OptionalInt32; }

+        set { SetOptionalInt32(value); }

+      }

+      public Builder SetOptionalInt32(int value) {

+        PrepareBuilder();

+        result.hasOptionalInt32 = true;

+        result.optionalInt32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalInt32() {

+        PrepareBuilder();

+        result.hasOptionalInt32 = false;

+        result.optionalInt32_ = 0;

+        return this;

+      }

+    }

+    static TestMutualRecursionB() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestDupFieldNumber : pb::GeneratedMessage<TestDupFieldNumber, TestDupFieldNumber.Builder> {

+    private TestDupFieldNumber() { }

+    private static readonly TestDupFieldNumber defaultInstance = new TestDupFieldNumber().MakeReadOnly();

+    private static readonly string[] _testDupFieldNumberFieldNames = new string[] { "a", "bar", "foo" };

+    private static readonly uint[] _testDupFieldNumberFieldTags = new uint[] { 8, 27, 19 };

+    public static TestDupFieldNumber DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestDupFieldNumber DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestDupFieldNumber ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestDupFieldNumber, TestDupFieldNumber.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Foo : pb::GeneratedMessage<Foo, Foo.Builder> {

+        private Foo() { }

+        private static readonly Foo defaultInstance = new Foo().MakeReadOnly();

+        private static readonly string[] _fooFieldNames = new string[] { "a" };

+        private static readonly uint[] _fooFieldTags = new uint[] { 8 };

+        public static Foo DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Foo DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Foo ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Foo, Foo.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber_Foo__FieldAccessorTable; }

+        }

+        

+        public const int AFieldNumber = 1;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _fooFieldNames;

+          if (hasA) {

+            output.WriteInt32(1, field_names[0], A);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static Foo ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Foo ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Foo ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Foo ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Foo ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Foo ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Foo ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Foo ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Foo ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Foo ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Foo MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Foo prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Foo, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Foo cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Foo result;

+          

+          private Foo PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Foo original = result;

+              result = new Foo();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Foo MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Descriptor; }

+          }

+          

+          public override Foo DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance; }

+          }

+          

+          public override Foo BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is Foo) {

+              return MergeFrom((Foo) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(Foo other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_fooFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _fooFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 8: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static Foo() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Bar : pb::GeneratedMessage<Bar, Bar.Builder> {

+        private Bar() { }

+        private static readonly Bar defaultInstance = new Bar().MakeReadOnly();

+        private static readonly string[] _barFieldNames = new string[] { "a" };

+        private static readonly uint[] _barFieldTags = new uint[] { 8 };

+        public static Bar DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Bar DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Bar ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Bar, Bar.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber_Bar__FieldAccessorTable; }

+        }

+        

+        public const int AFieldNumber = 1;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _barFieldNames;

+          if (hasA) {

+            output.WriteInt32(1, field_names[0], A);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static Bar ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Bar ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Bar ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Bar ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Bar ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Bar ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Bar ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Bar ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Bar ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Bar ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Bar MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Bar prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Bar, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Bar cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Bar result;

+          

+          private Bar PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Bar original = result;

+              result = new Bar();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Bar MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Descriptor; }

+          }

+          

+          public override Bar DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance; }

+          }

+          

+          public override Bar BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is Bar) {

+              return MergeFrom((Bar) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(Bar other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_barFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _barFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 8: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static Bar() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public const int FooFieldNumber = 2;

+    private bool hasFoo;

+    private global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo foo_;

+    public bool HasFoo {

+      get { return hasFoo; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo Foo {

+      get { return foo_ ?? global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance; }

+    }

+    

+    public const int BarFieldNumber = 3;

+    private bool hasBar;

+    private global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar bar_;

+    public bool HasBar {

+      get { return hasBar; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar Bar {

+      get { return bar_ ?? global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testDupFieldNumberFieldNames;

+      if (hasA) {

+        output.WriteInt32(1, field_names[0], A);

+      }

+      if (hasFoo) {

+        output.WriteGroup(2, field_names[2], Foo);

+      }

+      if (hasBar) {

+        output.WriteGroup(3, field_names[1], Bar);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+      }

+      if (hasFoo) {

+        size += pb::CodedOutputStream.ComputeGroupSize(2, Foo);

+      }

+      if (hasBar) {

+        size += pb::CodedOutputStream.ComputeGroupSize(3, Bar);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestDupFieldNumber ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestDupFieldNumber MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestDupFieldNumber prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestDupFieldNumber, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestDupFieldNumber cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestDupFieldNumber result;

+      

+      private TestDupFieldNumber PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestDupFieldNumber original = result;

+          result = new TestDupFieldNumber();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestDupFieldNumber MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Descriptor; }

+      }

+      

+      public override TestDupFieldNumber DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.DefaultInstance; }

+      }

+      

+      public override TestDupFieldNumber BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestDupFieldNumber) {

+          return MergeFrom((TestDupFieldNumber) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestDupFieldNumber other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        if (other.HasFoo) {

+          MergeFoo(other.Foo);

+        }

+        if (other.HasBar) {

+          MergeBar(other.Bar);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testDupFieldNumberFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testDupFieldNumberFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+            case 19: {

+              global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.CreateBuilder();

+              if (result.hasFoo) {

+                subBuilder.MergeFrom(Foo);

+              }

+              input.ReadGroup(2, subBuilder, extensionRegistry);

+              Foo = subBuilder.BuildPartial();

+              break;

+            }

+            case 27: {

+              global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.CreateBuilder();

+              if (result.hasBar) {

+                subBuilder.MergeFrom(Bar);

+              }

+              input.ReadGroup(3, subBuilder, extensionRegistry);

+              Bar = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+      

+      public bool HasFoo {

+       get { return result.hasFoo; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo Foo {

+        get { return result.Foo; }

+        set { SetFoo(value); }

+      }

+      public Builder SetFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasFoo = true;

+        result.foo_ = value;

+        return this;

+      }

+      public Builder SetFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasFoo = true;

+        result.foo_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasFoo &&

+            result.foo_ != global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance) {

+            result.foo_ = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.CreateBuilder(result.foo_).MergeFrom(value).BuildPartial();

+        } else {

+          result.foo_ = value;

+        }

+        result.hasFoo = true;

+        return this;

+      }

+      public Builder ClearFoo() {

+        PrepareBuilder();

+        result.hasFoo = false;

+        result.foo_ = null;

+        return this;

+      }

+      

+      public bool HasBar {

+       get { return result.hasBar; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar Bar {

+        get { return result.Bar; }

+        set { SetBar(value); }

+      }

+      public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasBar = true;

+        result.bar_ = value;

+        return this;

+      }

+      public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasBar = true;

+        result.bar_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasBar &&

+            result.bar_ != global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance) {

+            result.bar_ = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.CreateBuilder(result.bar_).MergeFrom(value).BuildPartial();

+        } else {

+          result.bar_ = value;

+        }

+        result.hasBar = true;

+        return this;

+      }

+      public Builder ClearBar() {

+        PrepareBuilder();

+        result.hasBar = false;

+        result.bar_ = null;

+        return this;

+      }

+    }

+    static TestDupFieldNumber() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestNestedMessageHasBits : pb::GeneratedMessage<TestNestedMessageHasBits, TestNestedMessageHasBits.Builder> {

+    private TestNestedMessageHasBits() { }

+    private static readonly TestNestedMessageHasBits defaultInstance = new TestNestedMessageHasBits().MakeReadOnly();

+    private static readonly string[] _testNestedMessageHasBitsFieldNames = new string[] { "optional_nested_message" };

+    private static readonly uint[] _testNestedMessageHasBitsFieldTags = new uint[] { 10 };

+    public static TestNestedMessageHasBits DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestNestedMessageHasBits DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestNestedMessageHasBits ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestNestedMessageHasBits, TestNestedMessageHasBits.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedMessageHasBits__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {

+        private NestedMessage() { }

+        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();

+        private static readonly string[] _nestedMessageFieldNames = new string[] { "nestedmessage_repeated_foreignmessage", "nestedmessage_repeated_int32" };

+        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 18, 8 };

+        public static NestedMessage DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override NestedMessage DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override NestedMessage ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__FieldAccessorTable; }

+        }

+        

+        public const int NestedmessageRepeatedInt32FieldNumber = 1;

+        private pbc::PopsicleList<int> nestedmessageRepeatedInt32_ = new pbc::PopsicleList<int>();

+        public scg::IList<int> NestedmessageRepeatedInt32List {

+          get { return pbc::Lists.AsReadOnly(nestedmessageRepeatedInt32_); }

+        }

+        public int NestedmessageRepeatedInt32Count {

+          get { return nestedmessageRepeatedInt32_.Count; }

+        }

+        public int GetNestedmessageRepeatedInt32(int index) {

+          return nestedmessageRepeatedInt32_[index];

+        }

+        

+        public const int NestedmessageRepeatedForeignmessageFieldNumber = 2;

+        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> nestedmessageRepeatedForeignmessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>();

+        public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> NestedmessageRepeatedForeignmessageList {

+          get { return nestedmessageRepeatedForeignmessage_; }

+        }

+        public int NestedmessageRepeatedForeignmessageCount {

+          get { return nestedmessageRepeatedForeignmessage_.Count; }

+        }

+        public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetNestedmessageRepeatedForeignmessage(int index) {

+          return nestedmessageRepeatedForeignmessage_[index];

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _nestedMessageFieldNames;

+          if (nestedmessageRepeatedInt32_.Count > 0) {

+            output.WriteInt32Array(1, field_names[1], nestedmessageRepeatedInt32_);

+          }

+          if (nestedmessageRepeatedForeignmessage_.Count > 0) {

+            output.WriteMessageArray(2, field_names[0], nestedmessageRepeatedForeignmessage_);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          {

+            int dataSize = 0;

+            foreach (int element in NestedmessageRepeatedInt32List) {

+              dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+            }

+            size += dataSize;

+            size += 1 * nestedmessageRepeatedInt32_.Count;

+          }

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessage element in NestedmessageRepeatedForeignmessageList) {

+            size += pb::CodedOutputStream.ComputeMessageSize(2, element);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static NestedMessage ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private NestedMessage MakeReadOnly() {

+          nestedmessageRepeatedInt32_.MakeReadOnly();

+          nestedmessageRepeatedForeignmessage_.MakeReadOnly();

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(NestedMessage prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(NestedMessage cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private NestedMessage result;

+          

+          private NestedMessage PrepareBuilder() {

+            if (resultIsReadOnly) {

+              NestedMessage original = result;

+              result = new NestedMessage();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override NestedMessage MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Descriptor; }

+          }

+          

+          public override NestedMessage DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance; }

+          }

+          

+          public override NestedMessage BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is NestedMessage) {

+              return MergeFrom((NestedMessage) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(NestedMessage other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.nestedmessageRepeatedInt32_.Count != 0) {

+              result.nestedmessageRepeatedInt32_.Add(other.nestedmessageRepeatedInt32_);

+            }

+            if (other.nestedmessageRepeatedForeignmessage_.Count != 0) {

+              result.nestedmessageRepeatedForeignmessage_.Add(other.nestedmessageRepeatedForeignmessage_);

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _nestedMessageFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 10:

+                case 8: {

+                  input.ReadInt32Array(tag, field_name, result.nestedmessageRepeatedInt32_);

+                  break;

+                }

+                case 18: {

+                  input.ReadMessageArray(tag, field_name, result.nestedmessageRepeatedForeignmessage_, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance, extensionRegistry);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public pbc::IPopsicleList<int> NestedmessageRepeatedInt32List {

+            get { return PrepareBuilder().nestedmessageRepeatedInt32_; }

+          }

+          public int NestedmessageRepeatedInt32Count {

+            get { return result.NestedmessageRepeatedInt32Count; }

+          }

+          public int GetNestedmessageRepeatedInt32(int index) {

+            return result.GetNestedmessageRepeatedInt32(index);

+          }

+          public Builder SetNestedmessageRepeatedInt32(int index, int value) {

+            PrepareBuilder();

+            result.nestedmessageRepeatedInt32_[index] = value;

+            return this;

+          }

+          public Builder AddNestedmessageRepeatedInt32(int value) {

+            PrepareBuilder();

+            result.nestedmessageRepeatedInt32_.Add(value);

+            return this;

+          }

+          public Builder AddRangeNestedmessageRepeatedInt32(scg::IEnumerable<int> values) {

+            PrepareBuilder();

+            result.nestedmessageRepeatedInt32_.Add(values);

+            return this;

+          }

+          public Builder ClearNestedmessageRepeatedInt32() {

+            PrepareBuilder();

+            result.nestedmessageRepeatedInt32_.Clear();

+            return this;

+          }

+          

+          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> NestedmessageRepeatedForeignmessageList {

+            get { return PrepareBuilder().nestedmessageRepeatedForeignmessage_; }

+          }

+          public int NestedmessageRepeatedForeignmessageCount {

+            get { return result.NestedmessageRepeatedForeignmessageCount; }

+          }

+          public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetNestedmessageRepeatedForeignmessage(int index) {

+            return result.GetNestedmessageRepeatedForeignmessage(index);

+          }

+          public Builder SetNestedmessageRepeatedForeignmessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_[index] = value;

+            return this;

+          }

+          public Builder SetNestedmessageRepeatedForeignmessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_[index] = builderForValue.Build();

+            return this;

+          }

+          public Builder AddNestedmessageRepeatedForeignmessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_.Add(value);

+            return this;

+          }

+          public Builder AddNestedmessageRepeatedForeignmessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_.Add(builderForValue.Build());

+            return this;

+          }

+          public Builder AddRangeNestedmessageRepeatedForeignmessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> values) {

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_.Add(values);

+            return this;

+          }

+          public Builder ClearNestedmessageRepeatedForeignmessage() {

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_.Clear();

+            return this;

+          }

+        }

+        static NestedMessage() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int OptionalNestedMessageFieldNumber = 1;

+    private bool hasOptionalNestedMessage;

+    private global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage optionalNestedMessage_;

+    public bool HasOptionalNestedMessage {

+      get { return hasOptionalNestedMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage OptionalNestedMessage {

+      get { return optionalNestedMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testNestedMessageHasBitsFieldNames;

+      if (hasOptionalNestedMessage) {

+        output.WriteMessage(1, field_names[0], OptionalNestedMessage);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasOptionalNestedMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, OptionalNestedMessage);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestNestedMessageHasBits ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestNestedMessageHasBits MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestNestedMessageHasBits prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestNestedMessageHasBits, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestNestedMessageHasBits cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestNestedMessageHasBits result;

+      

+      private TestNestedMessageHasBits PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestNestedMessageHasBits original = result;

+          result = new TestNestedMessageHasBits();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestNestedMessageHasBits MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Descriptor; }

+      }

+      

+      public override TestNestedMessageHasBits DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.DefaultInstance; }

+      }

+      

+      public override TestNestedMessageHasBits BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestNestedMessageHasBits) {

+          return MergeFrom((TestNestedMessageHasBits) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestNestedMessageHasBits other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasOptionalNestedMessage) {

+          MergeOptionalNestedMessage(other.OptionalNestedMessage);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testNestedMessageHasBitsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testNestedMessageHasBitsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.CreateBuilder();

+              if (result.hasOptionalNestedMessage) {

+                subBuilder.MergeFrom(OptionalNestedMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalNestedMessage = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasOptionalNestedMessage {

+       get { return result.hasOptionalNestedMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage OptionalNestedMessage {

+        get { return result.OptionalNestedMessage; }

+        set { SetOptionalNestedMessage(value); }

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalNestedMessage &&

+            result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance) {

+            result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalNestedMessage_ = value;

+        }

+        result.hasOptionalNestedMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalNestedMessage() {

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = false;

+        result.optionalNestedMessage_ = null;

+        return this;

+      }

+    }

+    static TestNestedMessageHasBits() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestCamelCaseFieldNames : pb::GeneratedMessage<TestCamelCaseFieldNames, TestCamelCaseFieldNames.Builder> {

+    private TestCamelCaseFieldNames() { }

+    private static readonly TestCamelCaseFieldNames defaultInstance = new TestCamelCaseFieldNames().MakeReadOnly();

+    private static readonly string[] _testCamelCaseFieldNamesFieldNames = new string[] { "CordField", "EnumField", "MessageField", "PrimitiveField", "RepeatedCordField", "RepeatedEnumField", "RepeatedMessageField", "RepeatedPrimitiveField", "RepeatedStringField", "RepeatedStringPieceField", "StringField", "StringPieceField" };

+    private static readonly uint[] _testCamelCaseFieldNamesFieldTags = new uint[] { 50, 24, 34, 8, 98, 72, 82, 56, 66, 90, 18, 42 };

+    public static TestCamelCaseFieldNames DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestCamelCaseFieldNames DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestCamelCaseFieldNames ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestCamelCaseFieldNames, TestCamelCaseFieldNames.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable; }

+    }

+    

+    public const int PrimitiveFieldFieldNumber = 1;

+    private bool hasPrimitiveField;

+    private int primitiveField_;

+    public bool HasPrimitiveField {

+      get { return hasPrimitiveField; }

+    }

+    public int PrimitiveField {

+      get { return primitiveField_; }

+    }

+    

+    public const int StringFieldFieldNumber = 2;

+    private bool hasStringField;

+    private string stringField_ = "";

+    public bool HasStringField {

+      get { return hasStringField; }

+    }

+    public string StringField {

+      get { return stringField_; }

+    }

+    

+    public const int EnumFieldFieldNumber = 3;

+    private bool hasEnumField;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum enumField_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+    public bool HasEnumField {

+      get { return hasEnumField; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumField {

+      get { return enumField_; }

+    }

+    

+    public const int MessageFieldFieldNumber = 4;

+    private bool hasMessageField;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage messageField_;

+    public bool HasMessageField {

+      get { return hasMessageField; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageField {

+      get { return messageField_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }

+    }

+    

+    public const int StringPieceFieldFieldNumber = 5;

+    private bool hasStringPieceField;

+    private string stringPieceField_ = "";

+    public bool HasStringPieceField {

+      get { return hasStringPieceField; }

+    }

+    public string StringPieceField {

+      get { return stringPieceField_; }

+    }

+    

+    public const int CordFieldFieldNumber = 6;

+    private bool hasCordField;

+    private string cordField_ = "";

+    public bool HasCordField {

+      get { return hasCordField; }

+    }

+    public string CordField {

+      get { return cordField_; }

+    }

+    

+    public const int RepeatedPrimitiveFieldFieldNumber = 7;

+    private pbc::PopsicleList<int> repeatedPrimitiveField_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedPrimitiveFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedPrimitiveField_); }

+    }

+    public int RepeatedPrimitiveFieldCount {

+      get { return repeatedPrimitiveField_.Count; }

+    }

+    public int GetRepeatedPrimitiveField(int index) {

+      return repeatedPrimitiveField_[index];

+    }

+    

+    public const int RepeatedStringFieldFieldNumber = 8;

+    private pbc::PopsicleList<string> repeatedStringField_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedStringField_); }

+    }

+    public int RepeatedStringFieldCount {

+      get { return repeatedStringField_.Count; }

+    }

+    public string GetRepeatedStringField(int index) {

+      return repeatedStringField_[index];

+    }

+    

+    public const int RepeatedEnumFieldFieldNumber = 9;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> repeatedEnumField_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedEnumFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedEnumField_); }

+    }

+    public int RepeatedEnumFieldCount {

+      get { return repeatedEnumField_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedEnumField(int index) {

+      return repeatedEnumField_[index];

+    }

+    

+    public const int RepeatedMessageFieldFieldNumber = 10;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> repeatedMessageField_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedMessageFieldList {

+      get { return repeatedMessageField_; }

+    }

+    public int RepeatedMessageFieldCount {

+      get { return repeatedMessageField_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedMessageField(int index) {

+      return repeatedMessageField_[index];

+    }

+    

+    public const int RepeatedStringPieceFieldFieldNumber = 11;

+    private pbc::PopsicleList<string> repeatedStringPieceField_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringPieceFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedStringPieceField_); }

+    }

+    public int RepeatedStringPieceFieldCount {

+      get { return repeatedStringPieceField_.Count; }

+    }

+    public string GetRepeatedStringPieceField(int index) {

+      return repeatedStringPieceField_[index];

+    }

+    

+    public const int RepeatedCordFieldFieldNumber = 12;

+    private pbc::PopsicleList<string> repeatedCordField_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedCordFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedCordField_); }

+    }

+    public int RepeatedCordFieldCount {

+      get { return repeatedCordField_.Count; }

+    }

+    public string GetRepeatedCordField(int index) {

+      return repeatedCordField_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testCamelCaseFieldNamesFieldNames;

+      if (hasPrimitiveField) {

+        output.WriteInt32(1, field_names[3], PrimitiveField);

+      }

+      if (hasStringField) {

+        output.WriteString(2, field_names[10], StringField);

+      }

+      if (hasEnumField) {

+        output.WriteEnum(3, field_names[1], (int) EnumField, EnumField);

+      }

+      if (hasMessageField) {

+        output.WriteMessage(4, field_names[2], MessageField);

+      }

+      if (hasStringPieceField) {

+        output.WriteString(5, field_names[11], StringPieceField);

+      }

+      if (hasCordField) {

+        output.WriteString(6, field_names[0], CordField);

+      }

+      if (repeatedPrimitiveField_.Count > 0) {

+        output.WriteInt32Array(7, field_names[7], repeatedPrimitiveField_);

+      }

+      if (repeatedStringField_.Count > 0) {

+        output.WriteStringArray(8, field_names[8], repeatedStringField_);

+      }

+      if (repeatedEnumField_.Count > 0) {

+        output.WriteEnumArray(9, field_names[5], repeatedEnumField_);

+      }

+      if (repeatedMessageField_.Count > 0) {

+        output.WriteMessageArray(10, field_names[6], repeatedMessageField_);

+      }

+      if (repeatedStringPieceField_.Count > 0) {

+        output.WriteStringArray(11, field_names[9], repeatedStringPieceField_);

+      }

+      if (repeatedCordField_.Count > 0) {

+        output.WriteStringArray(12, field_names[4], repeatedCordField_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasPrimitiveField) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, PrimitiveField);

+      }

+      if (hasStringField) {

+        size += pb::CodedOutputStream.ComputeStringSize(2, StringField);

+      }

+      if (hasEnumField) {

+        size += pb::CodedOutputStream.ComputeEnumSize(3, (int) EnumField);

+      }

+      if (hasMessageField) {

+        size += pb::CodedOutputStream.ComputeMessageSize(4, MessageField);

+      }

+      if (hasStringPieceField) {

+        size += pb::CodedOutputStream.ComputeStringSize(5, StringPieceField);

+      }

+      if (hasCordField) {

+        size += pb::CodedOutputStream.ComputeStringSize(6, CordField);

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedPrimitiveFieldList) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedPrimitiveField_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringFieldList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedStringField_.Count;

+      }

+      {

+        int dataSize = 0;

+        if (repeatedEnumField_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in repeatedEnumField_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 1 * repeatedEnumField_.Count;

+        }

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessage element in RepeatedMessageFieldList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(10, element);

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringPieceFieldList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedStringPieceField_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedCordFieldList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedCordField_.Count;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestCamelCaseFieldNames ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestCamelCaseFieldNames MakeReadOnly() {

+      repeatedPrimitiveField_.MakeReadOnly();

+      repeatedStringField_.MakeReadOnly();

+      repeatedEnumField_.MakeReadOnly();

+      repeatedMessageField_.MakeReadOnly();

+      repeatedStringPieceField_.MakeReadOnly();

+      repeatedCordField_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestCamelCaseFieldNames prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestCamelCaseFieldNames, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestCamelCaseFieldNames cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestCamelCaseFieldNames result;

+      

+      private TestCamelCaseFieldNames PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestCamelCaseFieldNames original = result;

+          result = new TestCamelCaseFieldNames();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestCamelCaseFieldNames MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.Descriptor; }

+      }

+      

+      public override TestCamelCaseFieldNames DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.DefaultInstance; }

+      }

+      

+      public override TestCamelCaseFieldNames BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestCamelCaseFieldNames) {

+          return MergeFrom((TestCamelCaseFieldNames) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestCamelCaseFieldNames other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasPrimitiveField) {

+          PrimitiveField = other.PrimitiveField;

+        }

+        if (other.HasStringField) {

+          StringField = other.StringField;

+        }

+        if (other.HasEnumField) {

+          EnumField = other.EnumField;

+        }

+        if (other.HasMessageField) {

+          MergeMessageField(other.MessageField);

+        }

+        if (other.HasStringPieceField) {

+          StringPieceField = other.StringPieceField;

+        }

+        if (other.HasCordField) {

+          CordField = other.CordField;

+        }

+        if (other.repeatedPrimitiveField_.Count != 0) {

+          result.repeatedPrimitiveField_.Add(other.repeatedPrimitiveField_);

+        }

+        if (other.repeatedStringField_.Count != 0) {

+          result.repeatedStringField_.Add(other.repeatedStringField_);

+        }

+        if (other.repeatedEnumField_.Count != 0) {

+          result.repeatedEnumField_.Add(other.repeatedEnumField_);

+        }

+        if (other.repeatedMessageField_.Count != 0) {

+          result.repeatedMessageField_.Add(other.repeatedMessageField_);

+        }

+        if (other.repeatedStringPieceField_.Count != 0) {

+          result.repeatedStringPieceField_.Add(other.repeatedStringPieceField_);

+        }

+        if (other.repeatedCordField_.Count != 0) {

+          result.repeatedCordField_.Add(other.repeatedCordField_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testCamelCaseFieldNamesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testCamelCaseFieldNamesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasPrimitiveField = input.ReadInt32(ref result.primitiveField_);

+              break;

+            }

+            case 18: {

+              result.hasStringField = input.ReadString(ref result.stringField_);

+              break;

+            }

+            case 24: {

+              object unknown;

+              if(input.ReadEnum(ref result.enumField_, out unknown)) {

+                result.hasEnumField = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(3, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 34: {

+              global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder();

+              if (result.hasMessageField) {

+                subBuilder.MergeFrom(MessageField);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              MessageField = subBuilder.BuildPartial();

+              break;

+            }

+            case 42: {

+              result.hasStringPieceField = input.ReadString(ref result.stringPieceField_);

+              break;

+            }

+            case 50: {

+              result.hasCordField = input.ReadString(ref result.cordField_);

+              break;

+            }

+            case 58:

+            case 56: {

+              input.ReadInt32Array(tag, field_name, result.repeatedPrimitiveField_);

+              break;

+            }

+            case 66: {

+              input.ReadStringArray(tag, field_name, result.repeatedStringField_);

+              break;

+            }

+            case 74:

+            case 72: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.repeatedEnumField_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(9, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 82: {

+              input.ReadMessageArray(tag, field_name, result.repeatedMessageField_, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 90: {

+              input.ReadStringArray(tag, field_name, result.repeatedStringPieceField_);

+              break;

+            }

+            case 98: {

+              input.ReadStringArray(tag, field_name, result.repeatedCordField_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasPrimitiveField {

+        get { return result.hasPrimitiveField; }

+      }

+      public int PrimitiveField {

+        get { return result.PrimitiveField; }

+        set { SetPrimitiveField(value); }

+      }

+      public Builder SetPrimitiveField(int value) {

+        PrepareBuilder();

+        result.hasPrimitiveField = true;

+        result.primitiveField_ = value;

+        return this;

+      }

+      public Builder ClearPrimitiveField() {

+        PrepareBuilder();

+        result.hasPrimitiveField = false;

+        result.primitiveField_ = 0;

+        return this;

+      }

+      

+      public bool HasStringField {

+        get { return result.hasStringField; }

+      }

+      public string StringField {

+        get { return result.StringField; }

+        set { SetStringField(value); }

+      }

+      public Builder SetStringField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasStringField = true;

+        result.stringField_ = value;

+        return this;

+      }

+      public Builder ClearStringField() {

+        PrepareBuilder();

+        result.hasStringField = false;

+        result.stringField_ = "";

+        return this;

+      }

+      

+      public bool HasEnumField {

+       get { return result.hasEnumField; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumField {

+        get { return result.EnumField; }

+        set { SetEnumField(value); }

+      }

+      public Builder SetEnumField(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.hasEnumField = true;

+        result.enumField_ = value;

+        return this;

+      }

+      public Builder ClearEnumField() {

+        PrepareBuilder();

+        result.hasEnumField = false;

+        result.enumField_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+        return this;

+      }

+      

+      public bool HasMessageField {

+       get { return result.hasMessageField; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageField {

+        get { return result.MessageField; }

+        set { SetMessageField(value); }

+      }

+      public Builder SetMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMessageField = true;

+        result.messageField_ = value;

+        return this;

+      }

+      public Builder SetMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasMessageField = true;

+        result.messageField_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasMessageField &&

+            result.messageField_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {

+            result.messageField_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.messageField_).MergeFrom(value).BuildPartial();

+        } else {

+          result.messageField_ = value;

+        }

+        result.hasMessageField = true;

+        return this;

+      }

+      public Builder ClearMessageField() {

+        PrepareBuilder();

+        result.hasMessageField = false;

+        result.messageField_ = null;

+        return this;

+      }

+      

+      public bool HasStringPieceField {

+        get { return result.hasStringPieceField; }

+      }

+      public string StringPieceField {

+        get { return result.StringPieceField; }

+        set { SetStringPieceField(value); }

+      }

+      public Builder SetStringPieceField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasStringPieceField = true;

+        result.stringPieceField_ = value;

+        return this;

+      }

+      public Builder ClearStringPieceField() {

+        PrepareBuilder();

+        result.hasStringPieceField = false;

+        result.stringPieceField_ = "";

+        return this;

+      }

+      

+      public bool HasCordField {

+        get { return result.hasCordField; }

+      }

+      public string CordField {

+        get { return result.CordField; }

+        set { SetCordField(value); }

+      }

+      public Builder SetCordField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasCordField = true;

+        result.cordField_ = value;

+        return this;

+      }

+      public Builder ClearCordField() {

+        PrepareBuilder();

+        result.hasCordField = false;

+        result.cordField_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedPrimitiveFieldList {

+        get { return PrepareBuilder().repeatedPrimitiveField_; }

+      }

+      public int RepeatedPrimitiveFieldCount {

+        get { return result.RepeatedPrimitiveFieldCount; }

+      }

+      public int GetRepeatedPrimitiveField(int index) {

+        return result.GetRepeatedPrimitiveField(index);

+      }

+      public Builder SetRepeatedPrimitiveField(int index, int value) {

+        PrepareBuilder();

+        result.repeatedPrimitiveField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedPrimitiveField(int value) {

+        PrepareBuilder();

+        result.repeatedPrimitiveField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedPrimitiveField(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedPrimitiveField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedPrimitiveField() {

+        PrepareBuilder();

+        result.repeatedPrimitiveField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringFieldList {

+        get { return PrepareBuilder().repeatedStringField_; }

+      }

+      public int RepeatedStringFieldCount {

+        get { return result.RepeatedStringFieldCount; }

+      }

+      public string GetRepeatedStringField(int index) {

+        return result.GetRepeatedStringField(index);

+      }

+      public Builder SetRepeatedStringField(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedStringField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedStringField(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedStringField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedStringField() {

+        PrepareBuilder();

+        result.repeatedStringField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedEnumFieldList {

+        get { return PrepareBuilder().repeatedEnumField_; }

+      }

+      public int RepeatedEnumFieldCount {

+        get { return result.RepeatedEnumFieldCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedEnumField(int index) {

+        return result.GetRepeatedEnumField(index);

+      }

+      public Builder SetRepeatedEnumField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.repeatedEnumField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedEnumField(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.repeatedEnumField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedEnumField(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {

+        PrepareBuilder();

+        result.repeatedEnumField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedEnumField() {

+        PrepareBuilder();

+        result.repeatedEnumField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedMessageFieldList {

+        get { return PrepareBuilder().repeatedMessageField_; }

+      }

+      public int RepeatedMessageFieldCount {

+        get { return result.RepeatedMessageFieldCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedMessageField(int index) {

+        return result.GetRepeatedMessageField(index);

+      }

+      public Builder SetRepeatedMessageField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessageField_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedMessageField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessageField_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessageField_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessageField_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedMessageField(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> values) {

+        PrepareBuilder();

+        result.repeatedMessageField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedMessageField() {

+        PrepareBuilder();

+        result.repeatedMessageField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringPieceFieldList {

+        get { return PrepareBuilder().repeatedStringPieceField_; }

+      }

+      public int RepeatedStringPieceFieldCount {

+        get { return result.RepeatedStringPieceFieldCount; }

+      }

+      public string GetRepeatedStringPieceField(int index) {

+        return result.GetRepeatedStringPieceField(index);

+      }

+      public Builder SetRepeatedStringPieceField(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPieceField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedStringPieceField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPieceField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedStringPieceField(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedStringPieceField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedStringPieceField() {

+        PrepareBuilder();

+        result.repeatedStringPieceField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedCordFieldList {

+        get { return PrepareBuilder().repeatedCordField_; }

+      }

+      public int RepeatedCordFieldCount {

+        get { return result.RepeatedCordFieldCount; }

+      }

+      public string GetRepeatedCordField(int index) {

+        return result.GetRepeatedCordField(index);

+      }

+      public Builder SetRepeatedCordField(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCordField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedCordField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCordField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedCordField(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedCordField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedCordField() {

+        PrepareBuilder();

+        result.repeatedCordField_.Clear();

+        return this;

+      }

+    }

+    static TestCamelCaseFieldNames() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestFieldOrderings : pb::ExtendableMessage<TestFieldOrderings, TestFieldOrderings.Builder> {

+    private TestFieldOrderings() { }

+    private static readonly TestFieldOrderings defaultInstance = new TestFieldOrderings().MakeReadOnly();

+    private static readonly string[] _testFieldOrderingsFieldNames = new string[] { "my_float", "my_int", "my_string" };

+    private static readonly uint[] _testFieldOrderingsFieldTags = new uint[] { 813, 8, 90 };

+    public static TestFieldOrderings DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestFieldOrderings DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestFieldOrderings ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestFieldOrderings__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestFieldOrderings, TestFieldOrderings.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable; }

+    }

+    

+    public const int MyStringFieldNumber = 11;

+    private bool hasMyString;

+    private string myString_ = "";

+    public bool HasMyString {

+      get { return hasMyString; }

+    }

+    public string MyString {

+      get { return myString_; }

+    }

+    

+    public const int MyIntFieldNumber = 1;

+    private bool hasMyInt;

+    private long myInt_;

+    public bool HasMyInt {

+      get { return hasMyInt; }

+    }

+    public long MyInt {

+      get { return myInt_; }

+    }

+    

+    public const int MyFloatFieldNumber = 101;

+    private bool hasMyFloat;

+    private float myFloat_;

+    public bool HasMyFloat {

+      get { return hasMyFloat; }

+    }

+    public float MyFloat {

+      get { return myFloat_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testFieldOrderingsFieldNames;

+      pb::ExtendableMessage<TestFieldOrderings, TestFieldOrderings.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (hasMyInt) {

+        output.WriteInt64(1, field_names[1], MyInt);

+      }

+      extensionWriter.WriteUntil(11, output);

+      if (hasMyString) {

+        output.WriteString(11, field_names[2], MyString);

+      }

+      extensionWriter.WriteUntil(101, output);

+      if (hasMyFloat) {

+        output.WriteFloat(101, field_names[0], MyFloat);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasMyString) {

+        size += pb::CodedOutputStream.ComputeStringSize(11, MyString);

+      }

+      if (hasMyInt) {

+        size += pb::CodedOutputStream.ComputeInt64Size(1, MyInt);

+      }

+      if (hasMyFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(101, MyFloat);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestFieldOrderings ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestFieldOrderings ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestFieldOrderings MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestFieldOrderings prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestFieldOrderings, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestFieldOrderings cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestFieldOrderings result;

+      

+      private TestFieldOrderings PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestFieldOrderings original = result;

+          result = new TestFieldOrderings();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestFieldOrderings MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Descriptor; }

+      }

+      

+      public override TestFieldOrderings DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.DefaultInstance; }

+      }

+      

+      public override TestFieldOrderings BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestFieldOrderings) {

+          return MergeFrom((TestFieldOrderings) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestFieldOrderings other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasMyString) {

+          MyString = other.MyString;

+        }

+        if (other.HasMyInt) {

+          MyInt = other.MyInt;

+        }

+        if (other.HasMyFloat) {

+          MyFloat = other.MyFloat;

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testFieldOrderingsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testFieldOrderingsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasMyInt = input.ReadInt64(ref result.myInt_);

+              break;

+            }

+            case 90: {

+              result.hasMyString = input.ReadString(ref result.myString_);

+              break;

+            }

+            case 813: {

+              result.hasMyFloat = input.ReadFloat(ref result.myFloat_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasMyString {

+        get { return result.hasMyString; }

+      }

+      public string MyString {

+        get { return result.MyString; }

+        set { SetMyString(value); }

+      }

+      public Builder SetMyString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMyString = true;

+        result.myString_ = value;

+        return this;

+      }

+      public Builder ClearMyString() {

+        PrepareBuilder();

+        result.hasMyString = false;

+        result.myString_ = "";

+        return this;

+      }

+      

+      public bool HasMyInt {

+        get { return result.hasMyInt; }

+      }

+      public long MyInt {

+        get { return result.MyInt; }

+        set { SetMyInt(value); }

+      }

+      public Builder SetMyInt(long value) {

+        PrepareBuilder();

+        result.hasMyInt = true;

+        result.myInt_ = value;

+        return this;

+      }

+      public Builder ClearMyInt() {

+        PrepareBuilder();

+        result.hasMyInt = false;

+        result.myInt_ = 0L;

+        return this;

+      }

+      

+      public bool HasMyFloat {

+        get { return result.hasMyFloat; }

+      }

+      public float MyFloat {

+        get { return result.MyFloat; }

+        set { SetMyFloat(value); }

+      }

+      public Builder SetMyFloat(float value) {

+        PrepareBuilder();

+        result.hasMyFloat = true;

+        result.myFloat_ = value;

+        return this;

+      }

+      public Builder ClearMyFloat() {

+        PrepareBuilder();

+        result.hasMyFloat = false;

+        result.myFloat_ = 0F;

+        return this;

+      }

+    }

+    static TestFieldOrderings() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestExtremeDefaultValues : pb::GeneratedMessage<TestExtremeDefaultValues, TestExtremeDefaultValues.Builder> {

+    private TestExtremeDefaultValues() { }

+    private static readonly TestExtremeDefaultValues defaultInstance = new TestExtremeDefaultValues().MakeReadOnly();

+    private static readonly string[] _testExtremeDefaultValuesFieldNames = new string[] { "cpp_trigraph", "escaped_bytes", "inf_double", "inf_float", "large_float", "large_uint32", "large_uint64", "nan_double", "nan_float", "neg_inf_double", "neg_inf_float", "negative_float", "negative_one_float", "one_float", "small_float", "small_int32", "small_int64", "small_negative_float", "utf8_string", "zero_float" };

+    private static readonly uint[] _testExtremeDefaultValuesFieldTags = new uint[] { 162, 10, 113, 141, 101, 16, 24, 129, 157, 121, 149, 93, 85, 69, 77, 32, 40, 109, 50, 61 };

+    public static TestExtremeDefaultValues DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestExtremeDefaultValues DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestExtremeDefaultValues ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestExtremeDefaultValues, TestExtremeDefaultValues.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestExtremeDefaultValues__FieldAccessorTable; }

+    }

+    

+    public const int EscapedBytesFieldNumber = 1;

+    private bool hasEscapedBytes;

+    private pb::ByteString escapedBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[0].DefaultValue;

+    public bool HasEscapedBytes {

+      get { return hasEscapedBytes; }

+    }

+    public pb::ByteString EscapedBytes {

+      get { return escapedBytes_; }

+    }

+    

+    public const int LargeUint32FieldNumber = 2;

+    private bool hasLargeUint32;

+    private uint largeUint32_ = 4294967295;

+    public bool HasLargeUint32 {

+      get { return hasLargeUint32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint LargeUint32 {

+      get { return largeUint32_; }

+    }

+    

+    public const int LargeUint64FieldNumber = 3;

+    private bool hasLargeUint64;

+    private ulong largeUint64_ = 18446744073709551615UL;

+    public bool HasLargeUint64 {

+      get { return hasLargeUint64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong LargeUint64 {

+      get { return largeUint64_; }

+    }

+    

+    public const int SmallInt32FieldNumber = 4;

+    private bool hasSmallInt32;

+    private int smallInt32_ = -2147483647;

+    public bool HasSmallInt32 {

+      get { return hasSmallInt32; }

+    }

+    public int SmallInt32 {

+      get { return smallInt32_; }

+    }

+    

+    public const int SmallInt64FieldNumber = 5;

+    private bool hasSmallInt64;

+    private long smallInt64_ = -9223372036854775807L;

+    public bool HasSmallInt64 {

+      get { return hasSmallInt64; }

+    }

+    public long SmallInt64 {

+      get { return smallInt64_; }

+    }

+    

+    public const int Utf8StringFieldNumber = 6;

+    private bool hasUtf8String;

+    private string utf8String_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[5].DefaultValue;

+    public bool HasUtf8String {

+      get { return hasUtf8String; }

+    }

+    public string Utf8String {

+      get { return utf8String_; }

+    }

+    

+    public const int ZeroFloatFieldNumber = 7;

+    private bool hasZeroFloat;

+    private float zeroFloat_;

+    public bool HasZeroFloat {

+      get { return hasZeroFloat; }

+    }

+    public float ZeroFloat {

+      get { return zeroFloat_; }

+    }

+    

+    public const int OneFloatFieldNumber = 8;

+    private bool hasOneFloat;

+    private float oneFloat_ = 1F;

+    public bool HasOneFloat {

+      get { return hasOneFloat; }

+    }

+    public float OneFloat {

+      get { return oneFloat_; }

+    }

+    

+    public const int SmallFloatFieldNumber = 9;

+    private bool hasSmallFloat;

+    private float smallFloat_ = 1.5F;

+    public bool HasSmallFloat {

+      get { return hasSmallFloat; }

+    }

+    public float SmallFloat {

+      get { return smallFloat_; }

+    }

+    

+    public const int NegativeOneFloatFieldNumber = 10;

+    private bool hasNegativeOneFloat;

+    private float negativeOneFloat_ = -1F;

+    public bool HasNegativeOneFloat {

+      get { return hasNegativeOneFloat; }

+    }

+    public float NegativeOneFloat {

+      get { return negativeOneFloat_; }

+    }

+    

+    public const int NegativeFloatFieldNumber = 11;

+    private bool hasNegativeFloat;

+    private float negativeFloat_ = -1.5F;

+    public bool HasNegativeFloat {

+      get { return hasNegativeFloat; }

+    }

+    public float NegativeFloat {

+      get { return negativeFloat_; }

+    }

+    

+    public const int LargeFloatFieldNumber = 12;

+    private bool hasLargeFloat;

+    private float largeFloat_ = 2E+08F;

+    public bool HasLargeFloat {

+      get { return hasLargeFloat; }

+    }

+    public float LargeFloat {

+      get { return largeFloat_; }

+    }

+    

+    public const int SmallNegativeFloatFieldNumber = 13;

+    private bool hasSmallNegativeFloat;

+    private float smallNegativeFloat_ = -8E-28F;

+    public bool HasSmallNegativeFloat {

+      get { return hasSmallNegativeFloat; }

+    }

+    public float SmallNegativeFloat {

+      get { return smallNegativeFloat_; }

+    }

+    

+    public const int InfDoubleFieldNumber = 14;

+    private bool hasInfDouble;

+    private double infDouble_ = double.PositiveInfinity;

+    public bool HasInfDouble {

+      get { return hasInfDouble; }

+    }

+    public double InfDouble {

+      get { return infDouble_; }

+    }

+    

+    public const int NegInfDoubleFieldNumber = 15;

+    private bool hasNegInfDouble;

+    private double negInfDouble_ = double.NegativeInfinity;

+    public bool HasNegInfDouble {

+      get { return hasNegInfDouble; }

+    }

+    public double NegInfDouble {

+      get { return negInfDouble_; }

+    }

+    

+    public const int NanDoubleFieldNumber = 16;

+    private bool hasNanDouble;

+    private double nanDouble_ = double.NaN;

+    public bool HasNanDouble {

+      get { return hasNanDouble; }

+    }

+    public double NanDouble {

+      get { return nanDouble_; }

+    }

+    

+    public const int InfFloatFieldNumber = 17;

+    private bool hasInfFloat;

+    private float infFloat_ = float.PositiveInfinity;

+    public bool HasInfFloat {

+      get { return hasInfFloat; }

+    }

+    public float InfFloat {

+      get { return infFloat_; }

+    }

+    

+    public const int NegInfFloatFieldNumber = 18;

+    private bool hasNegInfFloat;

+    private float negInfFloat_ = float.NegativeInfinity;

+    public bool HasNegInfFloat {

+      get { return hasNegInfFloat; }

+    }

+    public float NegInfFloat {

+      get { return negInfFloat_; }

+    }

+    

+    public const int NanFloatFieldNumber = 19;

+    private bool hasNanFloat;

+    private float nanFloat_ = float.NaN;

+    public bool HasNanFloat {

+      get { return hasNanFloat; }

+    }

+    public float NanFloat {

+      get { return nanFloat_; }

+    }

+    

+    public const int CppTrigraphFieldNumber = 20;

+    private bool hasCppTrigraph;

+    private string cppTrigraph_ = "? ? ?? ?? ??? ??/ ??-";

+    public bool HasCppTrigraph {

+      get { return hasCppTrigraph; }

+    }

+    public string CppTrigraph {

+      get { return cppTrigraph_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testExtremeDefaultValuesFieldNames;

+      if (hasEscapedBytes) {

+        output.WriteBytes(1, field_names[1], EscapedBytes);

+      }

+      if (hasLargeUint32) {

+        output.WriteUInt32(2, field_names[5], LargeUint32);

+      }

+      if (hasLargeUint64) {

+        output.WriteUInt64(3, field_names[6], LargeUint64);

+      }

+      if (hasSmallInt32) {

+        output.WriteInt32(4, field_names[15], SmallInt32);

+      }

+      if (hasSmallInt64) {

+        output.WriteInt64(5, field_names[16], SmallInt64);

+      }

+      if (hasUtf8String) {

+        output.WriteString(6, field_names[18], Utf8String);

+      }

+      if (hasZeroFloat) {

+        output.WriteFloat(7, field_names[19], ZeroFloat);

+      }

+      if (hasOneFloat) {

+        output.WriteFloat(8, field_names[13], OneFloat);

+      }

+      if (hasSmallFloat) {

+        output.WriteFloat(9, field_names[14], SmallFloat);

+      }

+      if (hasNegativeOneFloat) {

+        output.WriteFloat(10, field_names[12], NegativeOneFloat);

+      }

+      if (hasNegativeFloat) {

+        output.WriteFloat(11, field_names[11], NegativeFloat);

+      }

+      if (hasLargeFloat) {

+        output.WriteFloat(12, field_names[4], LargeFloat);

+      }

+      if (hasSmallNegativeFloat) {

+        output.WriteFloat(13, field_names[17], SmallNegativeFloat);

+      }

+      if (hasInfDouble) {

+        output.WriteDouble(14, field_names[2], InfDouble);

+      }

+      if (hasNegInfDouble) {

+        output.WriteDouble(15, field_names[9], NegInfDouble);

+      }

+      if (hasNanDouble) {

+        output.WriteDouble(16, field_names[7], NanDouble);

+      }

+      if (hasInfFloat) {

+        output.WriteFloat(17, field_names[3], InfFloat);

+      }

+      if (hasNegInfFloat) {

+        output.WriteFloat(18, field_names[10], NegInfFloat);

+      }

+      if (hasNanFloat) {

+        output.WriteFloat(19, field_names[8], NanFloat);

+      }

+      if (hasCppTrigraph) {

+        output.WriteString(20, field_names[0], CppTrigraph);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasEscapedBytes) {

+        size += pb::CodedOutputStream.ComputeBytesSize(1, EscapedBytes);

+      }

+      if (hasLargeUint32) {

+        size += pb::CodedOutputStream.ComputeUInt32Size(2, LargeUint32);

+      }

+      if (hasLargeUint64) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(3, LargeUint64);

+      }

+      if (hasSmallInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(4, SmallInt32);

+      }

+      if (hasSmallInt64) {

+        size += pb::CodedOutputStream.ComputeInt64Size(5, SmallInt64);

+      }

+      if (hasUtf8String) {

+        size += pb::CodedOutputStream.ComputeStringSize(6, Utf8String);

+      }

+      if (hasZeroFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(7, ZeroFloat);

+      }

+      if (hasOneFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(8, OneFloat);

+      }

+      if (hasSmallFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(9, SmallFloat);

+      }

+      if (hasNegativeOneFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(10, NegativeOneFloat);

+      }

+      if (hasNegativeFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(11, NegativeFloat);

+      }

+      if (hasLargeFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(12, LargeFloat);

+      }

+      if (hasSmallNegativeFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(13, SmallNegativeFloat);

+      }

+      if (hasInfDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(14, InfDouble);

+      }

+      if (hasNegInfDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(15, NegInfDouble);

+      }

+      if (hasNanDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(16, NanDouble);

+      }

+      if (hasInfFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(17, InfFloat);

+      }

+      if (hasNegInfFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(18, NegInfFloat);

+      }

+      if (hasNanFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(19, NanFloat);

+      }

+      if (hasCppTrigraph) {

+        size += pb::CodedOutputStream.ComputeStringSize(20, CppTrigraph);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestExtremeDefaultValues ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestExtremeDefaultValues MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestExtremeDefaultValues prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestExtremeDefaultValues, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestExtremeDefaultValues cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestExtremeDefaultValues result;

+      

+      private TestExtremeDefaultValues PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestExtremeDefaultValues original = result;

+          result = new TestExtremeDefaultValues();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestExtremeDefaultValues MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor; }

+      }

+      

+      public override TestExtremeDefaultValues DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.DefaultInstance; }

+      }

+      

+      public override TestExtremeDefaultValues BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestExtremeDefaultValues) {

+          return MergeFrom((TestExtremeDefaultValues) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestExtremeDefaultValues other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasEscapedBytes) {

+          EscapedBytes = other.EscapedBytes;

+        }

+        if (other.HasLargeUint32) {

+          LargeUint32 = other.LargeUint32;

+        }

+        if (other.HasLargeUint64) {

+          LargeUint64 = other.LargeUint64;

+        }

+        if (other.HasSmallInt32) {

+          SmallInt32 = other.SmallInt32;

+        }

+        if (other.HasSmallInt64) {

+          SmallInt64 = other.SmallInt64;

+        }

+        if (other.HasUtf8String) {

+          Utf8String = other.Utf8String;

+        }

+        if (other.HasZeroFloat) {

+          ZeroFloat = other.ZeroFloat;

+        }

+        if (other.HasOneFloat) {

+          OneFloat = other.OneFloat;

+        }

+        if (other.HasSmallFloat) {

+          SmallFloat = other.SmallFloat;

+        }

+        if (other.HasNegativeOneFloat) {

+          NegativeOneFloat = other.NegativeOneFloat;

+        }

+        if (other.HasNegativeFloat) {

+          NegativeFloat = other.NegativeFloat;

+        }

+        if (other.HasLargeFloat) {

+          LargeFloat = other.LargeFloat;

+        }

+        if (other.HasSmallNegativeFloat) {

+          SmallNegativeFloat = other.SmallNegativeFloat;

+        }

+        if (other.HasInfDouble) {

+          InfDouble = other.InfDouble;

+        }

+        if (other.HasNegInfDouble) {

+          NegInfDouble = other.NegInfDouble;

+        }

+        if (other.HasNanDouble) {

+          NanDouble = other.NanDouble;

+        }

+        if (other.HasInfFloat) {

+          InfFloat = other.InfFloat;

+        }

+        if (other.HasNegInfFloat) {

+          NegInfFloat = other.NegInfFloat;

+        }

+        if (other.HasNanFloat) {

+          NanFloat = other.NanFloat;

+        }

+        if (other.HasCppTrigraph) {

+          CppTrigraph = other.CppTrigraph;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testExtremeDefaultValuesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testExtremeDefaultValuesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasEscapedBytes = input.ReadBytes(ref result.escapedBytes_);

+              break;

+            }

+            case 16: {

+              result.hasLargeUint32 = input.ReadUInt32(ref result.largeUint32_);

+              break;

+            }

+            case 24: {

+              result.hasLargeUint64 = input.ReadUInt64(ref result.largeUint64_);

+              break;

+            }

+            case 32: {

+              result.hasSmallInt32 = input.ReadInt32(ref result.smallInt32_);

+              break;

+            }

+            case 40: {

+              result.hasSmallInt64 = input.ReadInt64(ref result.smallInt64_);

+              break;

+            }

+            case 50: {

+              result.hasUtf8String = input.ReadString(ref result.utf8String_);

+              break;

+            }

+            case 61: {

+              result.hasZeroFloat = input.ReadFloat(ref result.zeroFloat_);

+              break;

+            }

+            case 69: {

+              result.hasOneFloat = input.ReadFloat(ref result.oneFloat_);

+              break;

+            }

+            case 77: {

+              result.hasSmallFloat = input.ReadFloat(ref result.smallFloat_);

+              break;

+            }

+            case 85: {

+              result.hasNegativeOneFloat = input.ReadFloat(ref result.negativeOneFloat_);

+              break;

+            }

+            case 93: {

+              result.hasNegativeFloat = input.ReadFloat(ref result.negativeFloat_);

+              break;

+            }

+            case 101: {

+              result.hasLargeFloat = input.ReadFloat(ref result.largeFloat_);

+              break;

+            }

+            case 109: {

+              result.hasSmallNegativeFloat = input.ReadFloat(ref result.smallNegativeFloat_);

+              break;

+            }

+            case 113: {

+              result.hasInfDouble = input.ReadDouble(ref result.infDouble_);

+              break;

+            }

+            case 121: {

+              result.hasNegInfDouble = input.ReadDouble(ref result.negInfDouble_);

+              break;

+            }

+            case 129: {

+              result.hasNanDouble = input.ReadDouble(ref result.nanDouble_);

+              break;

+            }

+            case 141: {

+              result.hasInfFloat = input.ReadFloat(ref result.infFloat_);

+              break;

+            }

+            case 149: {

+              result.hasNegInfFloat = input.ReadFloat(ref result.negInfFloat_);

+              break;

+            }

+            case 157: {

+              result.hasNanFloat = input.ReadFloat(ref result.nanFloat_);

+              break;

+            }

+            case 162: {

+              result.hasCppTrigraph = input.ReadString(ref result.cppTrigraph_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasEscapedBytes {

+        get { return result.hasEscapedBytes; }

+      }

+      public pb::ByteString EscapedBytes {

+        get { return result.EscapedBytes; }

+        set { SetEscapedBytes(value); }

+      }

+      public Builder SetEscapedBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasEscapedBytes = true;

+        result.escapedBytes_ = value;

+        return this;

+      }

+      public Builder ClearEscapedBytes() {

+        PrepareBuilder();

+        result.hasEscapedBytes = false;

+        result.escapedBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[0].DefaultValue;

+        return this;

+      }

+      

+      public bool HasLargeUint32 {

+        get { return result.hasLargeUint32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint LargeUint32 {

+        get { return result.LargeUint32; }

+        set { SetLargeUint32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetLargeUint32(uint value) {

+        PrepareBuilder();

+        result.hasLargeUint32 = true;

+        result.largeUint32_ = value;

+        return this;

+      }

+      public Builder ClearLargeUint32() {

+        PrepareBuilder();

+        result.hasLargeUint32 = false;

+        result.largeUint32_ = 4294967295;

+        return this;

+      }

+      

+      public bool HasLargeUint64 {

+        get { return result.hasLargeUint64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong LargeUint64 {

+        get { return result.LargeUint64; }

+        set { SetLargeUint64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetLargeUint64(ulong value) {

+        PrepareBuilder();

+        result.hasLargeUint64 = true;

+        result.largeUint64_ = value;

+        return this;

+      }

+      public Builder ClearLargeUint64() {

+        PrepareBuilder();

+        result.hasLargeUint64 = false;

+        result.largeUint64_ = 18446744073709551615UL;

+        return this;

+      }

+      

+      public bool HasSmallInt32 {

+        get { return result.hasSmallInt32; }

+      }

+      public int SmallInt32 {

+        get { return result.SmallInt32; }

+        set { SetSmallInt32(value); }

+      }

+      public Builder SetSmallInt32(int value) {

+        PrepareBuilder();

+        result.hasSmallInt32 = true;

+        result.smallInt32_ = value;

+        return this;

+      }

+      public Builder ClearSmallInt32() {

+        PrepareBuilder();

+        result.hasSmallInt32 = false;

+        result.smallInt32_ = -2147483647;

+        return this;

+      }

+      

+      public bool HasSmallInt64 {

+        get { return result.hasSmallInt64; }

+      }

+      public long SmallInt64 {

+        get { return result.SmallInt64; }

+        set { SetSmallInt64(value); }

+      }

+      public Builder SetSmallInt64(long value) {

+        PrepareBuilder();

+        result.hasSmallInt64 = true;

+        result.smallInt64_ = value;

+        return this;

+      }

+      public Builder ClearSmallInt64() {

+        PrepareBuilder();

+        result.hasSmallInt64 = false;

+        result.smallInt64_ = -9223372036854775807L;

+        return this;

+      }

+      

+      public bool HasUtf8String {

+        get { return result.hasUtf8String; }

+      }

+      public string Utf8String {

+        get { return result.Utf8String; }

+        set { SetUtf8String(value); }

+      }

+      public Builder SetUtf8String(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasUtf8String = true;

+        result.utf8String_ = value;

+        return this;

+      }

+      public Builder ClearUtf8String() {

+        PrepareBuilder();

+        result.hasUtf8String = false;

+        result.utf8String_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[5].DefaultValue;

+        return this;

+      }

+      

+      public bool HasZeroFloat {

+        get { return result.hasZeroFloat; }

+      }

+      public float ZeroFloat {

+        get { return result.ZeroFloat; }

+        set { SetZeroFloat(value); }

+      }

+      public Builder SetZeroFloat(float value) {

+        PrepareBuilder();

+        result.hasZeroFloat = true;

+        result.zeroFloat_ = value;

+        return this;

+      }

+      public Builder ClearZeroFloat() {

+        PrepareBuilder();

+        result.hasZeroFloat = false;

+        result.zeroFloat_ = 0F;

+        return this;

+      }

+      

+      public bool HasOneFloat {

+        get { return result.hasOneFloat; }

+      }

+      public float OneFloat {

+        get { return result.OneFloat; }

+        set { SetOneFloat(value); }

+      }

+      public Builder SetOneFloat(float value) {

+        PrepareBuilder();

+        result.hasOneFloat = true;

+        result.oneFloat_ = value;

+        return this;

+      }

+      public Builder ClearOneFloat() {

+        PrepareBuilder();

+        result.hasOneFloat = false;

+        result.oneFloat_ = 1F;

+        return this;

+      }

+      

+      public bool HasSmallFloat {

+        get { return result.hasSmallFloat; }

+      }

+      public float SmallFloat {

+        get { return result.SmallFloat; }

+        set { SetSmallFloat(value); }

+      }

+      public Builder SetSmallFloat(float value) {

+        PrepareBuilder();

+        result.hasSmallFloat = true;

+        result.smallFloat_ = value;

+        return this;

+      }

+      public Builder ClearSmallFloat() {

+        PrepareBuilder();

+        result.hasSmallFloat = false;

+        result.smallFloat_ = 1.5F;

+        return this;

+      }

+      

+      public bool HasNegativeOneFloat {

+        get { return result.hasNegativeOneFloat; }

+      }

+      public float NegativeOneFloat {

+        get { return result.NegativeOneFloat; }

+        set { SetNegativeOneFloat(value); }

+      }

+      public Builder SetNegativeOneFloat(float value) {

+        PrepareBuilder();

+        result.hasNegativeOneFloat = true;

+        result.negativeOneFloat_ = value;

+        return this;

+      }

+      public Builder ClearNegativeOneFloat() {

+        PrepareBuilder();

+        result.hasNegativeOneFloat = false;

+        result.negativeOneFloat_ = -1F;

+        return this;

+      }

+      

+      public bool HasNegativeFloat {

+        get { return result.hasNegativeFloat; }

+      }

+      public float NegativeFloat {

+        get { return result.NegativeFloat; }

+        set { SetNegativeFloat(value); }

+      }

+      public Builder SetNegativeFloat(float value) {

+        PrepareBuilder();

+        result.hasNegativeFloat = true;

+        result.negativeFloat_ = value;

+        return this;

+      }

+      public Builder ClearNegativeFloat() {

+        PrepareBuilder();

+        result.hasNegativeFloat = false;

+        result.negativeFloat_ = -1.5F;

+        return this;

+      }

+      

+      public bool HasLargeFloat {

+        get { return result.hasLargeFloat; }

+      }

+      public float LargeFloat {

+        get { return result.LargeFloat; }

+        set { SetLargeFloat(value); }

+      }

+      public Builder SetLargeFloat(float value) {

+        PrepareBuilder();

+        result.hasLargeFloat = true;

+        result.largeFloat_ = value;

+        return this;

+      }

+      public Builder ClearLargeFloat() {

+        PrepareBuilder();

+        result.hasLargeFloat = false;

+        result.largeFloat_ = 2E+08F;

+        return this;

+      }

+      

+      public bool HasSmallNegativeFloat {

+        get { return result.hasSmallNegativeFloat; }

+      }

+      public float SmallNegativeFloat {

+        get { return result.SmallNegativeFloat; }

+        set { SetSmallNegativeFloat(value); }

+      }

+      public Builder SetSmallNegativeFloat(float value) {

+        PrepareBuilder();

+        result.hasSmallNegativeFloat = true;

+        result.smallNegativeFloat_ = value;

+        return this;

+      }

+      public Builder ClearSmallNegativeFloat() {

+        PrepareBuilder();

+        result.hasSmallNegativeFloat = false;

+        result.smallNegativeFloat_ = -8E-28F;

+        return this;

+      }

+      

+      public bool HasInfDouble {

+        get { return result.hasInfDouble; }

+      }

+      public double InfDouble {

+        get { return result.InfDouble; }

+        set { SetInfDouble(value); }

+      }

+      public Builder SetInfDouble(double value) {

+        PrepareBuilder();

+        result.hasInfDouble = true;

+        result.infDouble_ = value;

+        return this;

+      }

+      public Builder ClearInfDouble() {

+        PrepareBuilder();

+        result.hasInfDouble = false;

+        result.infDouble_ = double.PositiveInfinity;

+        return this;

+      }

+      

+      public bool HasNegInfDouble {

+        get { return result.hasNegInfDouble; }

+      }

+      public double NegInfDouble {

+        get { return result.NegInfDouble; }

+        set { SetNegInfDouble(value); }

+      }

+      public Builder SetNegInfDouble(double value) {

+        PrepareBuilder();

+        result.hasNegInfDouble = true;

+        result.negInfDouble_ = value;

+        return this;

+      }

+      public Builder ClearNegInfDouble() {

+        PrepareBuilder();

+        result.hasNegInfDouble = false;

+        result.negInfDouble_ = double.NegativeInfinity;

+        return this;

+      }

+      

+      public bool HasNanDouble {

+        get { return result.hasNanDouble; }

+      }

+      public double NanDouble {

+        get { return result.NanDouble; }

+        set { SetNanDouble(value); }

+      }

+      public Builder SetNanDouble(double value) {

+        PrepareBuilder();

+        result.hasNanDouble = true;

+        result.nanDouble_ = value;

+        return this;

+      }

+      public Builder ClearNanDouble() {

+        PrepareBuilder();

+        result.hasNanDouble = false;

+        result.nanDouble_ = double.NaN;

+        return this;

+      }

+      

+      public bool HasInfFloat {

+        get { return result.hasInfFloat; }

+      }

+      public float InfFloat {

+        get { return result.InfFloat; }

+        set { SetInfFloat(value); }

+      }

+      public Builder SetInfFloat(float value) {

+        PrepareBuilder();

+        result.hasInfFloat = true;

+        result.infFloat_ = value;

+        return this;

+      }

+      public Builder ClearInfFloat() {

+        PrepareBuilder();

+        result.hasInfFloat = false;

+        result.infFloat_ = float.PositiveInfinity;

+        return this;

+      }

+      

+      public bool HasNegInfFloat {

+        get { return result.hasNegInfFloat; }

+      }

+      public float NegInfFloat {

+        get { return result.NegInfFloat; }

+        set { SetNegInfFloat(value); }

+      }

+      public Builder SetNegInfFloat(float value) {

+        PrepareBuilder();

+        result.hasNegInfFloat = true;

+        result.negInfFloat_ = value;

+        return this;

+      }

+      public Builder ClearNegInfFloat() {

+        PrepareBuilder();

+        result.hasNegInfFloat = false;

+        result.negInfFloat_ = float.NegativeInfinity;

+        return this;

+      }

+      

+      public bool HasNanFloat {

+        get { return result.hasNanFloat; }

+      }

+      public float NanFloat {

+        get { return result.NanFloat; }

+        set { SetNanFloat(value); }

+      }

+      public Builder SetNanFloat(float value) {

+        PrepareBuilder();

+        result.hasNanFloat = true;

+        result.nanFloat_ = value;

+        return this;

+      }

+      public Builder ClearNanFloat() {

+        PrepareBuilder();

+        result.hasNanFloat = false;

+        result.nanFloat_ = float.NaN;

+        return this;

+      }

+      

+      public bool HasCppTrigraph {

+        get { return result.hasCppTrigraph; }

+      }

+      public string CppTrigraph {

+        get { return result.CppTrigraph; }

+        set { SetCppTrigraph(value); }

+      }

+      public Builder SetCppTrigraph(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasCppTrigraph = true;

+        result.cppTrigraph_ = value;

+        return this;

+      }

+      public Builder ClearCppTrigraph() {

+        PrepareBuilder();

+        result.hasCppTrigraph = false;

+        result.cppTrigraph_ = "? ? ?? ?? ??? ??/ ??-";

+        return this;

+      }

+    }

+    static TestExtremeDefaultValues() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SparseEnumMessage : pb::GeneratedMessage<SparseEnumMessage, SparseEnumMessage.Builder> {

+    private SparseEnumMessage() { }

+    private static readonly SparseEnumMessage defaultInstance = new SparseEnumMessage().MakeReadOnly();

+    private static readonly string[] _sparseEnumMessageFieldNames = new string[] { "sparse_enum" };

+    private static readonly uint[] _sparseEnumMessageFieldTags = new uint[] { 8 };

+    public static SparseEnumMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SparseEnumMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SparseEnumMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_SparseEnumMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SparseEnumMessage, SparseEnumMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable; }

+    }

+    

+    public const int SparseEnumFieldNumber = 1;

+    private bool hasSparseEnum;

+    private global::Google.ProtocolBuffers.TestProtos.TestSparseEnum sparseEnum_ = global::Google.ProtocolBuffers.TestProtos.TestSparseEnum.SPARSE_A;

+    public bool HasSparseEnum {

+      get { return hasSparseEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestSparseEnum SparseEnum {

+      get { return sparseEnum_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _sparseEnumMessageFieldNames;

+      if (hasSparseEnum) {

+        output.WriteEnum(1, field_names[0], (int) SparseEnum, SparseEnum);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasSparseEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(1, (int) SparseEnum);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SparseEnumMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SparseEnumMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SparseEnumMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SparseEnumMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SparseEnumMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SparseEnumMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SparseEnumMessage result;

+      

+      private SparseEnumMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SparseEnumMessage original = result;

+          result = new SparseEnumMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SparseEnumMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.Descriptor; }

+      }

+      

+      public override SparseEnumMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.DefaultInstance; }

+      }

+      

+      public override SparseEnumMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SparseEnumMessage) {

+          return MergeFrom((SparseEnumMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SparseEnumMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasSparseEnum) {

+          SparseEnum = other.SparseEnum;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_sparseEnumMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _sparseEnumMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              object unknown;

+              if(input.ReadEnum(ref result.sparseEnum_, out unknown)) {

+                result.hasSparseEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(1, (ulong)(int)unknown);

+              }

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasSparseEnum {

+       get { return result.hasSparseEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestSparseEnum SparseEnum {

+        get { return result.SparseEnum; }

+        set { SetSparseEnum(value); }

+      }

+      public Builder SetSparseEnum(global::Google.ProtocolBuffers.TestProtos.TestSparseEnum value) {

+        PrepareBuilder();

+        result.hasSparseEnum = true;

+        result.sparseEnum_ = value;

+        return this;

+      }

+      public Builder ClearSparseEnum() {

+        PrepareBuilder();

+        result.hasSparseEnum = false;

+        result.sparseEnum_ = global::Google.ProtocolBuffers.TestProtos.TestSparseEnum.SPARSE_A;

+        return this;

+      }

+    }

+    static SparseEnumMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class OneString : pb::GeneratedMessage<OneString, OneString.Builder> {

+    private OneString() { }

+    private static readonly OneString defaultInstance = new OneString().MakeReadOnly();

+    private static readonly string[] _oneStringFieldNames = new string[] { "data" };

+    private static readonly uint[] _oneStringFieldTags = new uint[] { 10 };

+    public static OneString DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override OneString DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override OneString ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OneString__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<OneString, OneString.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OneString__FieldAccessorTable; }

+    }

+    

+    public const int DataFieldNumber = 1;

+    private bool hasData;

+    private string data_ = "";

+    public bool HasData {

+      get { return hasData; }

+    }

+    public string Data {

+      get { return data_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _oneStringFieldNames;

+      if (hasData) {

+        output.WriteString(1, field_names[0], Data);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasData) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Data);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static OneString ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OneString ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OneString ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OneString ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OneString ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OneString ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static OneString ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static OneString ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static OneString ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OneString ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private OneString MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(OneString prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<OneString, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(OneString cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private OneString result;

+      

+      private OneString PrepareBuilder() {

+        if (resultIsReadOnly) {

+          OneString original = result;

+          result = new OneString();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override OneString MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OneString.Descriptor; }

+      }

+      

+      public override OneString DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OneString.DefaultInstance; }

+      }

+      

+      public override OneString BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is OneString) {

+          return MergeFrom((OneString) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(OneString other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.OneString.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasData) {

+          Data = other.Data;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_oneStringFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _oneStringFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasData = input.ReadString(ref result.data_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasData {

+        get { return result.hasData; }

+      }

+      public string Data {

+        get { return result.Data; }

+        set { SetData(value); }

+      }

+      public Builder SetData(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasData = true;

+        result.data_ = value;

+        return this;

+      }

+      public Builder ClearData() {

+        PrepareBuilder();

+        result.hasData = false;

+        result.data_ = "";

+        return this;

+      }

+    }

+    static OneString() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class OneBytes : pb::GeneratedMessage<OneBytes, OneBytes.Builder> {

+    private OneBytes() { }

+    private static readonly OneBytes defaultInstance = new OneBytes().MakeReadOnly();

+    private static readonly string[] _oneBytesFieldNames = new string[] { "data" };

+    private static readonly uint[] _oneBytesFieldTags = new uint[] { 10 };

+    public static OneBytes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override OneBytes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override OneBytes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OneBytes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<OneBytes, OneBytes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OneBytes__FieldAccessorTable; }

+    }

+    

+    public const int DataFieldNumber = 1;

+    private bool hasData;

+    private pb::ByteString data_ = pb::ByteString.Empty;

+    public bool HasData {

+      get { return hasData; }

+    }

+    public pb::ByteString Data {

+      get { return data_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _oneBytesFieldNames;

+      if (hasData) {

+        output.WriteBytes(1, field_names[0], Data);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasData) {

+        size += pb::CodedOutputStream.ComputeBytesSize(1, Data);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static OneBytes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static OneBytes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static OneBytes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static OneBytes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private OneBytes MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(OneBytes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<OneBytes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(OneBytes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private OneBytes result;

+      

+      private OneBytes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          OneBytes original = result;

+          result = new OneBytes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override OneBytes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OneBytes.Descriptor; }

+      }

+      

+      public override OneBytes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OneBytes.DefaultInstance; }

+      }

+      

+      public override OneBytes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is OneBytes) {

+          return MergeFrom((OneBytes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(OneBytes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.OneBytes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasData) {

+          Data = other.Data;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_oneBytesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _oneBytesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasData = input.ReadBytes(ref result.data_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasData {

+        get { return result.hasData; }

+      }

+      public pb::ByteString Data {

+        get { return result.Data; }

+        set { SetData(value); }

+      }

+      public Builder SetData(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasData = true;

+        result.data_ = value;

+        return this;

+      }

+      public Builder ClearData() {

+        PrepareBuilder();

+        result.hasData = false;

+        result.data_ = pb::ByteString.Empty;

+        return this;

+      }

+    }

+    static OneBytes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestPackedTypes : pb::GeneratedMessage<TestPackedTypes, TestPackedTypes.Builder> {

+    private TestPackedTypes() { }

+    private static readonly TestPackedTypes defaultInstance = new TestPackedTypes().MakeReadOnly();

+    private static readonly string[] _testPackedTypesFieldNames = new string[] { "packed_bool", "packed_double", "packed_enum", "packed_fixed32", "packed_fixed64", "packed_float", "packed_int32", "packed_int64", "packed_sfixed32", "packed_sfixed64", "packed_sint32", "packed_sint64", "packed_uint32", "packed_uint64" };

+    private static readonly uint[] _testPackedTypesFieldTags = new uint[] { 818, 810, 826, 770, 778, 802, 722, 730, 786, 794, 754, 762, 738, 746 };

+    public static TestPackedTypes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestPackedTypes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestPackedTypes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestPackedTypes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestPackedTypes, TestPackedTypes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable; }

+    }

+    

+    public const int PackedInt32FieldNumber = 90;

+    private int packedInt32MemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedInt32List {

+      get { return pbc::Lists.AsReadOnly(packedInt32_); }

+    }

+    public int PackedInt32Count {

+      get { return packedInt32_.Count; }

+    }

+    public int GetPackedInt32(int index) {

+      return packedInt32_[index];

+    }

+    

+    public const int PackedInt64FieldNumber = 91;

+    private int packedInt64MemoizedSerializedSize;

+    private pbc::PopsicleList<long> packedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> PackedInt64List {

+      get { return pbc::Lists.AsReadOnly(packedInt64_); }

+    }

+    public int PackedInt64Count {

+      get { return packedInt64_.Count; }

+    }

+    public long GetPackedInt64(int index) {

+      return packedInt64_[index];

+    }

+    

+    public const int PackedUint32FieldNumber = 92;

+    private int packedUint32MemoizedSerializedSize;

+    private pbc::PopsicleList<uint> packedUint32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> PackedUint32List {

+      get { return pbc::Lists.AsReadOnly(packedUint32_); }

+    }

+    public int PackedUint32Count {

+      get { return packedUint32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetPackedUint32(int index) {

+      return packedUint32_[index];

+    }

+    

+    public const int PackedUint64FieldNumber = 93;

+    private int packedUint64MemoizedSerializedSize;

+    private pbc::PopsicleList<ulong> packedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> PackedUint64List {

+      get { return pbc::Lists.AsReadOnly(packedUint64_); }

+    }

+    public int PackedUint64Count {

+      get { return packedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetPackedUint64(int index) {

+      return packedUint64_[index];

+    }

+    

+    public const int PackedSint32FieldNumber = 94;

+    private int packedSint32MemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedSint32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedSint32List {

+      get { return pbc::Lists.AsReadOnly(packedSint32_); }

+    }

+    public int PackedSint32Count {

+      get { return packedSint32_.Count; }

+    }

+    public int GetPackedSint32(int index) {

+      return packedSint32_[index];

+    }

+    

+    public const int PackedSint64FieldNumber = 95;

+    private int packedSint64MemoizedSerializedSize;

+    private pbc::PopsicleList<long> packedSint64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> PackedSint64List {

+      get { return pbc::Lists.AsReadOnly(packedSint64_); }

+    }

+    public int PackedSint64Count {

+      get { return packedSint64_.Count; }

+    }

+    public long GetPackedSint64(int index) {

+      return packedSint64_[index];

+    }

+    

+    public const int PackedFixed32FieldNumber = 96;

+    private int packedFixed32MemoizedSerializedSize;

+    private pbc::PopsicleList<uint> packedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> PackedFixed32List {

+      get { return pbc::Lists.AsReadOnly(packedFixed32_); }

+    }

+    public int PackedFixed32Count {

+      get { return packedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetPackedFixed32(int index) {

+      return packedFixed32_[index];

+    }

+    

+    public const int PackedFixed64FieldNumber = 97;

+    private int packedFixed64MemoizedSerializedSize;

+    private pbc::PopsicleList<ulong> packedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> PackedFixed64List {

+      get { return pbc::Lists.AsReadOnly(packedFixed64_); }

+    }

+    public int PackedFixed64Count {

+      get { return packedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetPackedFixed64(int index) {

+      return packedFixed64_[index];

+    }

+    

+    public const int PackedSfixed32FieldNumber = 98;

+    private int packedSfixed32MemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedSfixed32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedSfixed32List {

+      get { return pbc::Lists.AsReadOnly(packedSfixed32_); }

+    }

+    public int PackedSfixed32Count {

+      get { return packedSfixed32_.Count; }

+    }

+    public int GetPackedSfixed32(int index) {

+      return packedSfixed32_[index];

+    }

+    

+    public const int PackedSfixed64FieldNumber = 99;

+    private int packedSfixed64MemoizedSerializedSize;

+    private pbc::PopsicleList<long> packedSfixed64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> PackedSfixed64List {

+      get { return pbc::Lists.AsReadOnly(packedSfixed64_); }

+    }

+    public int PackedSfixed64Count {

+      get { return packedSfixed64_.Count; }

+    }

+    public long GetPackedSfixed64(int index) {

+      return packedSfixed64_[index];

+    }

+    

+    public const int PackedFloatFieldNumber = 100;

+    private int packedFloatMemoizedSerializedSize;

+    private pbc::PopsicleList<float> packedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> PackedFloatList {

+      get { return pbc::Lists.AsReadOnly(packedFloat_); }

+    }

+    public int PackedFloatCount {

+      get { return packedFloat_.Count; }

+    }

+    public float GetPackedFloat(int index) {

+      return packedFloat_[index];

+    }

+    

+    public const int PackedDoubleFieldNumber = 101;

+    private int packedDoubleMemoizedSerializedSize;

+    private pbc::PopsicleList<double> packedDouble_ = new pbc::PopsicleList<double>();

+    public scg::IList<double> PackedDoubleList {

+      get { return pbc::Lists.AsReadOnly(packedDouble_); }

+    }

+    public int PackedDoubleCount {

+      get { return packedDouble_.Count; }

+    }

+    public double GetPackedDouble(int index) {

+      return packedDouble_[index];

+    }

+    

+    public const int PackedBoolFieldNumber = 102;

+    private int packedBoolMemoizedSerializedSize;

+    private pbc::PopsicleList<bool> packedBool_ = new pbc::PopsicleList<bool>();

+    public scg::IList<bool> PackedBoolList {

+      get { return pbc::Lists.AsReadOnly(packedBool_); }

+    }

+    public int PackedBoolCount {

+      get { return packedBool_.Count; }

+    }

+    public bool GetPackedBool(int index) {

+      return packedBool_[index];

+    }

+    

+    public const int PackedEnumFieldNumber = 103;

+    private int packedEnumMemoizedSerializedSize;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> packedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> PackedEnumList {

+      get { return pbc::Lists.AsReadOnly(packedEnum_); }

+    }

+    public int PackedEnumCount {

+      get { return packedEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetPackedEnum(int index) {

+      return packedEnum_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testPackedTypesFieldNames;

+      if (packedInt32_.Count > 0) {

+        output.WritePackedInt32Array(90, field_names[6], packedInt32MemoizedSerializedSize, packedInt32_);

+      }

+      if (packedInt64_.Count > 0) {

+        output.WritePackedInt64Array(91, field_names[7], packedInt64MemoizedSerializedSize, packedInt64_);

+      }

+      if (packedUint32_.Count > 0) {

+        output.WritePackedUInt32Array(92, field_names[12], packedUint32MemoizedSerializedSize, packedUint32_);

+      }

+      if (packedUint64_.Count > 0) {

+        output.WritePackedUInt64Array(93, field_names[13], packedUint64MemoizedSerializedSize, packedUint64_);

+      }

+      if (packedSint32_.Count > 0) {

+        output.WritePackedSInt32Array(94, field_names[10], packedSint32MemoizedSerializedSize, packedSint32_);

+      }

+      if (packedSint64_.Count > 0) {

+        output.WritePackedSInt64Array(95, field_names[11], packedSint64MemoizedSerializedSize, packedSint64_);

+      }

+      if (packedFixed32_.Count > 0) {

+        output.WritePackedFixed32Array(96, field_names[3], packedFixed32MemoizedSerializedSize, packedFixed32_);

+      }

+      if (packedFixed64_.Count > 0) {

+        output.WritePackedFixed64Array(97, field_names[4], packedFixed64MemoizedSerializedSize, packedFixed64_);

+      }

+      if (packedSfixed32_.Count > 0) {

+        output.WritePackedSFixed32Array(98, field_names[8], packedSfixed32MemoizedSerializedSize, packedSfixed32_);

+      }

+      if (packedSfixed64_.Count > 0) {

+        output.WritePackedSFixed64Array(99, field_names[9], packedSfixed64MemoizedSerializedSize, packedSfixed64_);

+      }

+      if (packedFloat_.Count > 0) {

+        output.WritePackedFloatArray(100, field_names[5], packedFloatMemoizedSerializedSize, packedFloat_);

+      }

+      if (packedDouble_.Count > 0) {

+        output.WritePackedDoubleArray(101, field_names[1], packedDoubleMemoizedSerializedSize, packedDouble_);

+      }

+      if (packedBool_.Count > 0) {

+        output.WritePackedBoolArray(102, field_names[0], packedBoolMemoizedSerializedSize, packedBool_);

+      }

+      if (packedEnum_.Count > 0) {

+        output.WritePackedEnumArray(103, field_names[2], packedEnumMemoizedSerializedSize, packedEnum_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        foreach (int element in PackedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedInt32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedInt32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in PackedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedInt64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedInt64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (uint element in PackedUint32List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedUint32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedUint32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in PackedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedUint64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedUint64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in PackedSint32List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedSint32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSint32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in PackedSint64List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedSint64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSint64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * packedFixed32_.Count;

+        size += dataSize;

+        if (packedFixed32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedFixed32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * packedFixed64_.Count;

+        size += dataSize;

+        if (packedFixed64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedFixed64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * packedSfixed32_.Count;

+        size += dataSize;

+        if (packedSfixed32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSfixed32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * packedSfixed64_.Count;

+        size += dataSize;

+        if (packedSfixed64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSfixed64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * packedFloat_.Count;

+        size += dataSize;

+        if (packedFloat_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedFloatMemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * packedDouble_.Count;

+        size += dataSize;

+        if (packedDouble_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedDoubleMemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 1 * packedBool_.Count;

+        size += dataSize;

+        if (packedBool_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedBoolMemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        if (packedEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in packedEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2;

+          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);

+        }

+        packedEnumMemoizedSerializedSize = dataSize;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestPackedTypes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedTypes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestPackedTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestPackedTypes MakeReadOnly() {

+      packedInt32_.MakeReadOnly();

+      packedInt64_.MakeReadOnly();

+      packedUint32_.MakeReadOnly();

+      packedUint64_.MakeReadOnly();

+      packedSint32_.MakeReadOnly();

+      packedSint64_.MakeReadOnly();

+      packedFixed32_.MakeReadOnly();

+      packedFixed64_.MakeReadOnly();

+      packedSfixed32_.MakeReadOnly();

+      packedSfixed64_.MakeReadOnly();

+      packedFloat_.MakeReadOnly();

+      packedDouble_.MakeReadOnly();

+      packedBool_.MakeReadOnly();

+      packedEnum_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestPackedTypes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestPackedTypes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestPackedTypes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestPackedTypes result;

+      

+      private TestPackedTypes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestPackedTypes original = result;

+          result = new TestPackedTypes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestPackedTypes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.Descriptor; }

+      }

+      

+      public override TestPackedTypes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.DefaultInstance; }

+      }

+      

+      public override TestPackedTypes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestPackedTypes) {

+          return MergeFrom((TestPackedTypes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestPackedTypes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.packedInt32_.Count != 0) {

+          result.packedInt32_.Add(other.packedInt32_);

+        }

+        if (other.packedInt64_.Count != 0) {

+          result.packedInt64_.Add(other.packedInt64_);

+        }

+        if (other.packedUint32_.Count != 0) {

+          result.packedUint32_.Add(other.packedUint32_);

+        }

+        if (other.packedUint64_.Count != 0) {

+          result.packedUint64_.Add(other.packedUint64_);

+        }

+        if (other.packedSint32_.Count != 0) {

+          result.packedSint32_.Add(other.packedSint32_);

+        }

+        if (other.packedSint64_.Count != 0) {

+          result.packedSint64_.Add(other.packedSint64_);

+        }

+        if (other.packedFixed32_.Count != 0) {

+          result.packedFixed32_.Add(other.packedFixed32_);

+        }

+        if (other.packedFixed64_.Count != 0) {

+          result.packedFixed64_.Add(other.packedFixed64_);

+        }

+        if (other.packedSfixed32_.Count != 0) {

+          result.packedSfixed32_.Add(other.packedSfixed32_);

+        }

+        if (other.packedSfixed64_.Count != 0) {

+          result.packedSfixed64_.Add(other.packedSfixed64_);

+        }

+        if (other.packedFloat_.Count != 0) {

+          result.packedFloat_.Add(other.packedFloat_);

+        }

+        if (other.packedDouble_.Count != 0) {

+          result.packedDouble_.Add(other.packedDouble_);

+        }

+        if (other.packedBool_.Count != 0) {

+          result.packedBool_.Add(other.packedBool_);

+        }

+        if (other.packedEnum_.Count != 0) {

+          result.packedEnum_.Add(other.packedEnum_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testPackedTypesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testPackedTypesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 722:

+            case 720: {

+              input.ReadInt32Array(tag, field_name, result.packedInt32_);

+              break;

+            }

+            case 730:

+            case 728: {

+              input.ReadInt64Array(tag, field_name, result.packedInt64_);

+              break;

+            }

+            case 738:

+            case 736: {

+              input.ReadUInt32Array(tag, field_name, result.packedUint32_);

+              break;

+            }

+            case 746:

+            case 744: {

+              input.ReadUInt64Array(tag, field_name, result.packedUint64_);

+              break;

+            }

+            case 754:

+            case 752: {

+              input.ReadSInt32Array(tag, field_name, result.packedSint32_);

+              break;

+            }

+            case 762:

+            case 760: {

+              input.ReadSInt64Array(tag, field_name, result.packedSint64_);

+              break;

+            }

+            case 770:

+            case 773: {

+              input.ReadFixed32Array(tag, field_name, result.packedFixed32_);

+              break;

+            }

+            case 778:

+            case 777: {

+              input.ReadFixed64Array(tag, field_name, result.packedFixed64_);

+              break;

+            }

+            case 786:

+            case 789: {

+              input.ReadSFixed32Array(tag, field_name, result.packedSfixed32_);

+              break;

+            }

+            case 794:

+            case 793: {

+              input.ReadSFixed64Array(tag, field_name, result.packedSfixed64_);

+              break;

+            }

+            case 802:

+            case 805: {

+              input.ReadFloatArray(tag, field_name, result.packedFloat_);

+              break;

+            }

+            case 810:

+            case 809: {

+              input.ReadDoubleArray(tag, field_name, result.packedDouble_);

+              break;

+            }

+            case 818:

+            case 816: {

+              input.ReadBoolArray(tag, field_name, result.packedBool_);

+              break;

+            }

+            case 826:

+            case 824: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.packedEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(103, (ulong)(int)rawValue);

+              }

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<int> PackedInt32List {

+        get { return PrepareBuilder().packedInt32_; }

+      }

+      public int PackedInt32Count {

+        get { return result.PackedInt32Count; }

+      }

+      public int GetPackedInt32(int index) {

+        return result.GetPackedInt32(index);

+      }

+      public Builder SetPackedInt32(int index, int value) {

+        PrepareBuilder();

+        result.packedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddPackedInt32(int value) {

+        PrepareBuilder();

+        result.packedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedInt32() {

+        PrepareBuilder();

+        result.packedInt32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> PackedInt64List {

+        get { return PrepareBuilder().packedInt64_; }

+      }

+      public int PackedInt64Count {

+        get { return result.PackedInt64Count; }

+      }

+      public long GetPackedInt64(int index) {

+        return result.GetPackedInt64(index);

+      }

+      public Builder SetPackedInt64(int index, long value) {

+        PrepareBuilder();

+        result.packedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddPackedInt64(long value) {

+        PrepareBuilder();

+        result.packedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.packedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedInt64() {

+        PrepareBuilder();

+        result.packedInt64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> PackedUint32List {

+        get { return PrepareBuilder().packedUint32_; }

+      }

+      public int PackedUint32Count {

+        get { return result.PackedUint32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetPackedUint32(int index) {

+        return result.GetPackedUint32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedUint32(int index, uint value) {

+        PrepareBuilder();

+        result.packedUint32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedUint32(uint value) {

+        PrepareBuilder();

+        result.packedUint32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedUint32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.packedUint32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedUint32() {

+        PrepareBuilder();

+        result.packedUint32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> PackedUint64List {

+        get { return PrepareBuilder().packedUint64_; }

+      }

+      public int PackedUint64Count {

+        get { return result.PackedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetPackedUint64(int index) {

+        return result.GetPackedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.packedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedUint64(ulong value) {

+        PrepareBuilder();

+        result.packedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.packedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedUint64() {

+        PrepareBuilder();

+        result.packedUint64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> PackedSint32List {

+        get { return PrepareBuilder().packedSint32_; }

+      }

+      public int PackedSint32Count {

+        get { return result.PackedSint32Count; }

+      }

+      public int GetPackedSint32(int index) {

+        return result.GetPackedSint32(index);

+      }

+      public Builder SetPackedSint32(int index, int value) {

+        PrepareBuilder();

+        result.packedSint32_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSint32(int value) {

+        PrepareBuilder();

+        result.packedSint32_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSint32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedSint32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSint32() {

+        PrepareBuilder();

+        result.packedSint32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> PackedSint64List {

+        get { return PrepareBuilder().packedSint64_; }

+      }

+      public int PackedSint64Count {

+        get { return result.PackedSint64Count; }

+      }

+      public long GetPackedSint64(int index) {

+        return result.GetPackedSint64(index);

+      }

+      public Builder SetPackedSint64(int index, long value) {

+        PrepareBuilder();

+        result.packedSint64_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSint64(long value) {

+        PrepareBuilder();

+        result.packedSint64_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSint64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.packedSint64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSint64() {

+        PrepareBuilder();

+        result.packedSint64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> PackedFixed32List {

+        get { return PrepareBuilder().packedFixed32_; }

+      }

+      public int PackedFixed32Count {

+        get { return result.PackedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetPackedFixed32(int index) {

+        return result.GetPackedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.packedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedFixed32(uint value) {

+        PrepareBuilder();

+        result.packedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.packedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedFixed32() {

+        PrepareBuilder();

+        result.packedFixed32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> PackedFixed64List {

+        get { return PrepareBuilder().packedFixed64_; }

+      }

+      public int PackedFixed64Count {

+        get { return result.PackedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetPackedFixed64(int index) {

+        return result.GetPackedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.packedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedFixed64(ulong value) {

+        PrepareBuilder();

+        result.packedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.packedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedFixed64() {

+        PrepareBuilder();

+        result.packedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> PackedSfixed32List {

+        get { return PrepareBuilder().packedSfixed32_; }

+      }

+      public int PackedSfixed32Count {

+        get { return result.PackedSfixed32Count; }

+      }

+      public int GetPackedSfixed32(int index) {

+        return result.GetPackedSfixed32(index);

+      }

+      public Builder SetPackedSfixed32(int index, int value) {

+        PrepareBuilder();

+        result.packedSfixed32_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSfixed32(int value) {

+        PrepareBuilder();

+        result.packedSfixed32_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSfixed32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedSfixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSfixed32() {

+        PrepareBuilder();

+        result.packedSfixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> PackedSfixed64List {

+        get { return PrepareBuilder().packedSfixed64_; }

+      }

+      public int PackedSfixed64Count {

+        get { return result.PackedSfixed64Count; }

+      }

+      public long GetPackedSfixed64(int index) {

+        return result.GetPackedSfixed64(index);

+      }

+      public Builder SetPackedSfixed64(int index, long value) {

+        PrepareBuilder();

+        result.packedSfixed64_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSfixed64(long value) {

+        PrepareBuilder();

+        result.packedSfixed64_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSfixed64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.packedSfixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSfixed64() {

+        PrepareBuilder();

+        result.packedSfixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> PackedFloatList {

+        get { return PrepareBuilder().packedFloat_; }

+      }

+      public int PackedFloatCount {

+        get { return result.PackedFloatCount; }

+      }

+      public float GetPackedFloat(int index) {

+        return result.GetPackedFloat(index);

+      }

+      public Builder SetPackedFloat(int index, float value) {

+        PrepareBuilder();

+        result.packedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddPackedFloat(float value) {

+        PrepareBuilder();

+        result.packedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.packedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedFloat() {

+        PrepareBuilder();

+        result.packedFloat_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<double> PackedDoubleList {

+        get { return PrepareBuilder().packedDouble_; }

+      }

+      public int PackedDoubleCount {

+        get { return result.PackedDoubleCount; }

+      }

+      public double GetPackedDouble(int index) {

+        return result.GetPackedDouble(index);

+      }

+      public Builder SetPackedDouble(int index, double value) {

+        PrepareBuilder();

+        result.packedDouble_[index] = value;

+        return this;

+      }

+      public Builder AddPackedDouble(double value) {

+        PrepareBuilder();

+        result.packedDouble_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedDouble(scg::IEnumerable<double> values) {

+        PrepareBuilder();

+        result.packedDouble_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedDouble() {

+        PrepareBuilder();

+        result.packedDouble_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<bool> PackedBoolList {

+        get { return PrepareBuilder().packedBool_; }

+      }

+      public int PackedBoolCount {

+        get { return result.PackedBoolCount; }

+      }

+      public bool GetPackedBool(int index) {

+        return result.GetPackedBool(index);

+      }

+      public Builder SetPackedBool(int index, bool value) {

+        PrepareBuilder();

+        result.packedBool_[index] = value;

+        return this;

+      }

+      public Builder AddPackedBool(bool value) {

+        PrepareBuilder();

+        result.packedBool_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedBool(scg::IEnumerable<bool> values) {

+        PrepareBuilder();

+        result.packedBool_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedBool() {

+        PrepareBuilder();

+        result.packedBool_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> PackedEnumList {

+        get { return PrepareBuilder().packedEnum_; }

+      }

+      public int PackedEnumCount {

+        get { return result.PackedEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetPackedEnum(int index) {

+        return result.GetPackedEnum(index);

+      }

+      public Builder SetPackedEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.packedEnum_[index] = value;

+        return this;

+      }

+      public Builder AddPackedEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.packedEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {

+        PrepareBuilder();

+        result.packedEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedEnum() {

+        PrepareBuilder();

+        result.packedEnum_.Clear();

+        return this;

+      }

+    }

+    static TestPackedTypes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestUnpackedTypes : pb::GeneratedMessage<TestUnpackedTypes, TestUnpackedTypes.Builder> {

+    private TestUnpackedTypes() { }

+    private static readonly TestUnpackedTypes defaultInstance = new TestUnpackedTypes().MakeReadOnly();

+    private static readonly string[] _testUnpackedTypesFieldNames = new string[] { "unpacked_bool", "unpacked_double", "unpacked_enum", "unpacked_fixed32", "unpacked_fixed64", "unpacked_float", "unpacked_int32", "unpacked_int64", "unpacked_sfixed32", "unpacked_sfixed64", "unpacked_sint32", "unpacked_sint64", "unpacked_uint32", "unpacked_uint64" };

+    private static readonly uint[] _testUnpackedTypesFieldTags = new uint[] { 816, 809, 824, 773, 777, 805, 720, 728, 789, 793, 752, 760, 736, 744 };

+    public static TestUnpackedTypes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestUnpackedTypes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestUnpackedTypes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestUnpackedTypes, TestUnpackedTypes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable; }

+    }

+    

+    public const int UnpackedInt32FieldNumber = 90;

+    private pbc::PopsicleList<int> unpackedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> UnpackedInt32List {

+      get { return pbc::Lists.AsReadOnly(unpackedInt32_); }

+    }

+    public int UnpackedInt32Count {

+      get { return unpackedInt32_.Count; }

+    }

+    public int GetUnpackedInt32(int index) {

+      return unpackedInt32_[index];

+    }

+    

+    public const int UnpackedInt64FieldNumber = 91;

+    private pbc::PopsicleList<long> unpackedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> UnpackedInt64List {

+      get { return pbc::Lists.AsReadOnly(unpackedInt64_); }

+    }

+    public int UnpackedInt64Count {

+      get { return unpackedInt64_.Count; }

+    }

+    public long GetUnpackedInt64(int index) {

+      return unpackedInt64_[index];

+    }

+    

+    public const int UnpackedUint32FieldNumber = 92;

+    private pbc::PopsicleList<uint> unpackedUint32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> UnpackedUint32List {

+      get { return pbc::Lists.AsReadOnly(unpackedUint32_); }

+    }

+    public int UnpackedUint32Count {

+      get { return unpackedUint32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetUnpackedUint32(int index) {

+      return unpackedUint32_[index];

+    }

+    

+    public const int UnpackedUint64FieldNumber = 93;

+    private pbc::PopsicleList<ulong> unpackedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> UnpackedUint64List {

+      get { return pbc::Lists.AsReadOnly(unpackedUint64_); }

+    }

+    public int UnpackedUint64Count {

+      get { return unpackedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetUnpackedUint64(int index) {

+      return unpackedUint64_[index];

+    }

+    

+    public const int UnpackedSint32FieldNumber = 94;

+    private pbc::PopsicleList<int> unpackedSint32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> UnpackedSint32List {

+      get { return pbc::Lists.AsReadOnly(unpackedSint32_); }

+    }

+    public int UnpackedSint32Count {

+      get { return unpackedSint32_.Count; }

+    }

+    public int GetUnpackedSint32(int index) {

+      return unpackedSint32_[index];

+    }

+    

+    public const int UnpackedSint64FieldNumber = 95;

+    private pbc::PopsicleList<long> unpackedSint64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> UnpackedSint64List {

+      get { return pbc::Lists.AsReadOnly(unpackedSint64_); }

+    }

+    public int UnpackedSint64Count {

+      get { return unpackedSint64_.Count; }

+    }

+    public long GetUnpackedSint64(int index) {

+      return unpackedSint64_[index];

+    }

+    

+    public const int UnpackedFixed32FieldNumber = 96;

+    private pbc::PopsicleList<uint> unpackedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> UnpackedFixed32List {

+      get { return pbc::Lists.AsReadOnly(unpackedFixed32_); }

+    }

+    public int UnpackedFixed32Count {

+      get { return unpackedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetUnpackedFixed32(int index) {

+      return unpackedFixed32_[index];

+    }

+    

+    public const int UnpackedFixed64FieldNumber = 97;

+    private pbc::PopsicleList<ulong> unpackedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> UnpackedFixed64List {

+      get { return pbc::Lists.AsReadOnly(unpackedFixed64_); }

+    }

+    public int UnpackedFixed64Count {

+      get { return unpackedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetUnpackedFixed64(int index) {

+      return unpackedFixed64_[index];

+    }

+    

+    public const int UnpackedSfixed32FieldNumber = 98;

+    private pbc::PopsicleList<int> unpackedSfixed32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> UnpackedSfixed32List {

+      get { return pbc::Lists.AsReadOnly(unpackedSfixed32_); }

+    }

+    public int UnpackedSfixed32Count {

+      get { return unpackedSfixed32_.Count; }

+    }

+    public int GetUnpackedSfixed32(int index) {

+      return unpackedSfixed32_[index];

+    }

+    

+    public const int UnpackedSfixed64FieldNumber = 99;

+    private pbc::PopsicleList<long> unpackedSfixed64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> UnpackedSfixed64List {

+      get { return pbc::Lists.AsReadOnly(unpackedSfixed64_); }

+    }

+    public int UnpackedSfixed64Count {

+      get { return unpackedSfixed64_.Count; }

+    }

+    public long GetUnpackedSfixed64(int index) {

+      return unpackedSfixed64_[index];

+    }

+    

+    public const int UnpackedFloatFieldNumber = 100;

+    private pbc::PopsicleList<float> unpackedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> UnpackedFloatList {

+      get { return pbc::Lists.AsReadOnly(unpackedFloat_); }

+    }

+    public int UnpackedFloatCount {

+      get { return unpackedFloat_.Count; }

+    }

+    public float GetUnpackedFloat(int index) {

+      return unpackedFloat_[index];

+    }

+    

+    public const int UnpackedDoubleFieldNumber = 101;

+    private pbc::PopsicleList<double> unpackedDouble_ = new pbc::PopsicleList<double>();

+    public scg::IList<double> UnpackedDoubleList {

+      get { return pbc::Lists.AsReadOnly(unpackedDouble_); }

+    }

+    public int UnpackedDoubleCount {

+      get { return unpackedDouble_.Count; }

+    }

+    public double GetUnpackedDouble(int index) {

+      return unpackedDouble_[index];

+    }

+    

+    public const int UnpackedBoolFieldNumber = 102;

+    private pbc::PopsicleList<bool> unpackedBool_ = new pbc::PopsicleList<bool>();

+    public scg::IList<bool> UnpackedBoolList {

+      get { return pbc::Lists.AsReadOnly(unpackedBool_); }

+    }

+    public int UnpackedBoolCount {

+      get { return unpackedBool_.Count; }

+    }

+    public bool GetUnpackedBool(int index) {

+      return unpackedBool_[index];

+    }

+    

+    public const int UnpackedEnumFieldNumber = 103;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> unpackedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> UnpackedEnumList {

+      get { return pbc::Lists.AsReadOnly(unpackedEnum_); }

+    }

+    public int UnpackedEnumCount {

+      get { return unpackedEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetUnpackedEnum(int index) {

+      return unpackedEnum_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testUnpackedTypesFieldNames;

+      if (unpackedInt32_.Count > 0) {

+        output.WriteInt32Array(90, field_names[6], unpackedInt32_);

+      }

+      if (unpackedInt64_.Count > 0) {

+        output.WriteInt64Array(91, field_names[7], unpackedInt64_);

+      }

+      if (unpackedUint32_.Count > 0) {

+        output.WriteUInt32Array(92, field_names[12], unpackedUint32_);

+      }

+      if (unpackedUint64_.Count > 0) {

+        output.WriteUInt64Array(93, field_names[13], unpackedUint64_);

+      }

+      if (unpackedSint32_.Count > 0) {

+        output.WriteSInt32Array(94, field_names[10], unpackedSint32_);

+      }

+      if (unpackedSint64_.Count > 0) {

+        output.WriteSInt64Array(95, field_names[11], unpackedSint64_);

+      }

+      if (unpackedFixed32_.Count > 0) {

+        output.WriteFixed32Array(96, field_names[3], unpackedFixed32_);

+      }

+      if (unpackedFixed64_.Count > 0) {

+        output.WriteFixed64Array(97, field_names[4], unpackedFixed64_);

+      }

+      if (unpackedSfixed32_.Count > 0) {

+        output.WriteSFixed32Array(98, field_names[8], unpackedSfixed32_);

+      }

+      if (unpackedSfixed64_.Count > 0) {

+        output.WriteSFixed64Array(99, field_names[9], unpackedSfixed64_);

+      }

+      if (unpackedFloat_.Count > 0) {

+        output.WriteFloatArray(100, field_names[5], unpackedFloat_);

+      }

+      if (unpackedDouble_.Count > 0) {

+        output.WriteDoubleArray(101, field_names[1], unpackedDouble_);

+      }

+      if (unpackedBool_.Count > 0) {

+        output.WriteBoolArray(102, field_names[0], unpackedBool_);

+      }

+      if (unpackedEnum_.Count > 0) {

+        output.WriteEnumArray(103, field_names[2], unpackedEnum_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        foreach (int element in UnpackedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedInt32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in UnpackedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedInt64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (uint element in UnpackedUint32List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedUint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in UnpackedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedUint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in UnpackedSint32List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedSint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in UnpackedSint64List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedSint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * unpackedFixed32_.Count;

+        size += dataSize;

+        size += 2 * unpackedFixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * unpackedFixed64_.Count;

+        size += dataSize;

+        size += 2 * unpackedFixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * unpackedSfixed32_.Count;

+        size += dataSize;

+        size += 2 * unpackedSfixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * unpackedSfixed64_.Count;

+        size += dataSize;

+        size += 2 * unpackedSfixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * unpackedFloat_.Count;

+        size += dataSize;

+        size += 2 * unpackedFloat_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * unpackedDouble_.Count;

+        size += dataSize;

+        size += 2 * unpackedDouble_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 1 * unpackedBool_.Count;

+        size += dataSize;

+        size += 2 * unpackedBool_.Count;

+      }

+      {

+        int dataSize = 0;

+        if (unpackedEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in unpackedEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * unpackedEnum_.Count;

+        }

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestUnpackedTypes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestUnpackedTypes MakeReadOnly() {

+      unpackedInt32_.MakeReadOnly();

+      unpackedInt64_.MakeReadOnly();

+      unpackedUint32_.MakeReadOnly();

+      unpackedUint64_.MakeReadOnly();

+      unpackedSint32_.MakeReadOnly();

+      unpackedSint64_.MakeReadOnly();

+      unpackedFixed32_.MakeReadOnly();

+      unpackedFixed64_.MakeReadOnly();

+      unpackedSfixed32_.MakeReadOnly();

+      unpackedSfixed64_.MakeReadOnly();

+      unpackedFloat_.MakeReadOnly();

+      unpackedDouble_.MakeReadOnly();

+      unpackedBool_.MakeReadOnly();

+      unpackedEnum_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestUnpackedTypes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestUnpackedTypes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestUnpackedTypes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestUnpackedTypes result;

+      

+      private TestUnpackedTypes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestUnpackedTypes original = result;

+          result = new TestUnpackedTypes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestUnpackedTypes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.Descriptor; }

+      }

+      

+      public override TestUnpackedTypes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.DefaultInstance; }

+      }

+      

+      public override TestUnpackedTypes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestUnpackedTypes) {

+          return MergeFrom((TestUnpackedTypes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestUnpackedTypes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.unpackedInt32_.Count != 0) {

+          result.unpackedInt32_.Add(other.unpackedInt32_);

+        }

+        if (other.unpackedInt64_.Count != 0) {

+          result.unpackedInt64_.Add(other.unpackedInt64_);

+        }

+        if (other.unpackedUint32_.Count != 0) {

+          result.unpackedUint32_.Add(other.unpackedUint32_);

+        }

+        if (other.unpackedUint64_.Count != 0) {

+          result.unpackedUint64_.Add(other.unpackedUint64_);

+        }

+        if (other.unpackedSint32_.Count != 0) {

+          result.unpackedSint32_.Add(other.unpackedSint32_);

+        }

+        if (other.unpackedSint64_.Count != 0) {

+          result.unpackedSint64_.Add(other.unpackedSint64_);

+        }

+        if (other.unpackedFixed32_.Count != 0) {

+          result.unpackedFixed32_.Add(other.unpackedFixed32_);

+        }

+        if (other.unpackedFixed64_.Count != 0) {

+          result.unpackedFixed64_.Add(other.unpackedFixed64_);

+        }

+        if (other.unpackedSfixed32_.Count != 0) {

+          result.unpackedSfixed32_.Add(other.unpackedSfixed32_);

+        }

+        if (other.unpackedSfixed64_.Count != 0) {

+          result.unpackedSfixed64_.Add(other.unpackedSfixed64_);

+        }

+        if (other.unpackedFloat_.Count != 0) {

+          result.unpackedFloat_.Add(other.unpackedFloat_);

+        }

+        if (other.unpackedDouble_.Count != 0) {

+          result.unpackedDouble_.Add(other.unpackedDouble_);

+        }

+        if (other.unpackedBool_.Count != 0) {

+          result.unpackedBool_.Add(other.unpackedBool_);

+        }

+        if (other.unpackedEnum_.Count != 0) {

+          result.unpackedEnum_.Add(other.unpackedEnum_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testUnpackedTypesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testUnpackedTypesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 722:

+            case 720: {

+              input.ReadInt32Array(tag, field_name, result.unpackedInt32_);

+              break;

+            }

+            case 730:

+            case 728: {

+              input.ReadInt64Array(tag, field_name, result.unpackedInt64_);

+              break;

+            }

+            case 738:

+            case 736: {

+              input.ReadUInt32Array(tag, field_name, result.unpackedUint32_);

+              break;

+            }

+            case 746:

+            case 744: {

+              input.ReadUInt64Array(tag, field_name, result.unpackedUint64_);

+              break;

+            }

+            case 754:

+            case 752: {

+              input.ReadSInt32Array(tag, field_name, result.unpackedSint32_);

+              break;

+            }

+            case 762:

+            case 760: {

+              input.ReadSInt64Array(tag, field_name, result.unpackedSint64_);

+              break;

+            }

+            case 770:

+            case 773: {

+              input.ReadFixed32Array(tag, field_name, result.unpackedFixed32_);

+              break;

+            }

+            case 778:

+            case 777: {

+              input.ReadFixed64Array(tag, field_name, result.unpackedFixed64_);

+              break;

+            }

+            case 786:

+            case 789: {

+              input.ReadSFixed32Array(tag, field_name, result.unpackedSfixed32_);

+              break;

+            }

+            case 794:

+            case 793: {

+              input.ReadSFixed64Array(tag, field_name, result.unpackedSfixed64_);

+              break;

+            }

+            case 802:

+            case 805: {

+              input.ReadFloatArray(tag, field_name, result.unpackedFloat_);

+              break;

+            }

+            case 810:

+            case 809: {

+              input.ReadDoubleArray(tag, field_name, result.unpackedDouble_);

+              break;

+            }

+            case 818:

+            case 816: {

+              input.ReadBoolArray(tag, field_name, result.unpackedBool_);

+              break;

+            }

+            case 826:

+            case 824: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.unpackedEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(103, (ulong)(int)rawValue);

+              }

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<int> UnpackedInt32List {

+        get { return PrepareBuilder().unpackedInt32_; }

+      }

+      public int UnpackedInt32Count {

+        get { return result.UnpackedInt32Count; }

+      }

+      public int GetUnpackedInt32(int index) {

+        return result.GetUnpackedInt32(index);

+      }

+      public Builder SetUnpackedInt32(int index, int value) {

+        PrepareBuilder();

+        result.unpackedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedInt32(int value) {

+        PrepareBuilder();

+        result.unpackedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.unpackedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedInt32() {

+        PrepareBuilder();

+        result.unpackedInt32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> UnpackedInt64List {

+        get { return PrepareBuilder().unpackedInt64_; }

+      }

+      public int UnpackedInt64Count {

+        get { return result.UnpackedInt64Count; }

+      }

+      public long GetUnpackedInt64(int index) {

+        return result.GetUnpackedInt64(index);

+      }

+      public Builder SetUnpackedInt64(int index, long value) {

+        PrepareBuilder();

+        result.unpackedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedInt64(long value) {

+        PrepareBuilder();

+        result.unpackedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.unpackedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedInt64() {

+        PrepareBuilder();

+        result.unpackedInt64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> UnpackedUint32List {

+        get { return PrepareBuilder().unpackedUint32_; }

+      }

+      public int UnpackedUint32Count {

+        get { return result.UnpackedUint32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetUnpackedUint32(int index) {

+        return result.GetUnpackedUint32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedUint32(int index, uint value) {

+        PrepareBuilder();

+        result.unpackedUint32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedUint32(uint value) {

+        PrepareBuilder();

+        result.unpackedUint32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedUint32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.unpackedUint32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedUint32() {

+        PrepareBuilder();

+        result.unpackedUint32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> UnpackedUint64List {

+        get { return PrepareBuilder().unpackedUint64_; }

+      }

+      public int UnpackedUint64Count {

+        get { return result.UnpackedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetUnpackedUint64(int index) {

+        return result.GetUnpackedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.unpackedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedUint64(ulong value) {

+        PrepareBuilder();

+        result.unpackedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.unpackedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedUint64() {

+        PrepareBuilder();

+        result.unpackedUint64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> UnpackedSint32List {

+        get { return PrepareBuilder().unpackedSint32_; }

+      }

+      public int UnpackedSint32Count {

+        get { return result.UnpackedSint32Count; }

+      }

+      public int GetUnpackedSint32(int index) {

+        return result.GetUnpackedSint32(index);

+      }

+      public Builder SetUnpackedSint32(int index, int value) {

+        PrepareBuilder();

+        result.unpackedSint32_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSint32(int value) {

+        PrepareBuilder();

+        result.unpackedSint32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSint32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.unpackedSint32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSint32() {

+        PrepareBuilder();

+        result.unpackedSint32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> UnpackedSint64List {

+        get { return PrepareBuilder().unpackedSint64_; }

+      }

+      public int UnpackedSint64Count {

+        get { return result.UnpackedSint64Count; }

+      }

+      public long GetUnpackedSint64(int index) {

+        return result.GetUnpackedSint64(index);

+      }

+      public Builder SetUnpackedSint64(int index, long value) {

+        PrepareBuilder();

+        result.unpackedSint64_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSint64(long value) {

+        PrepareBuilder();

+        result.unpackedSint64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSint64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.unpackedSint64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSint64() {

+        PrepareBuilder();

+        result.unpackedSint64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> UnpackedFixed32List {

+        get { return PrepareBuilder().unpackedFixed32_; }

+      }

+      public int UnpackedFixed32Count {

+        get { return result.UnpackedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetUnpackedFixed32(int index) {

+        return result.GetUnpackedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.unpackedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedFixed32(uint value) {

+        PrepareBuilder();

+        result.unpackedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.unpackedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedFixed32() {

+        PrepareBuilder();

+        result.unpackedFixed32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> UnpackedFixed64List {

+        get { return PrepareBuilder().unpackedFixed64_; }

+      }

+      public int UnpackedFixed64Count {

+        get { return result.UnpackedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetUnpackedFixed64(int index) {

+        return result.GetUnpackedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.unpackedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedFixed64(ulong value) {

+        PrepareBuilder();

+        result.unpackedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.unpackedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedFixed64() {

+        PrepareBuilder();

+        result.unpackedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> UnpackedSfixed32List {

+        get { return PrepareBuilder().unpackedSfixed32_; }

+      }

+      public int UnpackedSfixed32Count {

+        get { return result.UnpackedSfixed32Count; }

+      }

+      public int GetUnpackedSfixed32(int index) {

+        return result.GetUnpackedSfixed32(index);

+      }

+      public Builder SetUnpackedSfixed32(int index, int value) {

+        PrepareBuilder();

+        result.unpackedSfixed32_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSfixed32(int value) {

+        PrepareBuilder();

+        result.unpackedSfixed32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSfixed32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.unpackedSfixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSfixed32() {

+        PrepareBuilder();

+        result.unpackedSfixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> UnpackedSfixed64List {

+        get { return PrepareBuilder().unpackedSfixed64_; }

+      }

+      public int UnpackedSfixed64Count {

+        get { return result.UnpackedSfixed64Count; }

+      }

+      public long GetUnpackedSfixed64(int index) {

+        return result.GetUnpackedSfixed64(index);

+      }

+      public Builder SetUnpackedSfixed64(int index, long value) {

+        PrepareBuilder();

+        result.unpackedSfixed64_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSfixed64(long value) {

+        PrepareBuilder();

+        result.unpackedSfixed64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSfixed64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.unpackedSfixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSfixed64() {

+        PrepareBuilder();

+        result.unpackedSfixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> UnpackedFloatList {

+        get { return PrepareBuilder().unpackedFloat_; }

+      }

+      public int UnpackedFloatCount {

+        get { return result.UnpackedFloatCount; }

+      }

+      public float GetUnpackedFloat(int index) {

+        return result.GetUnpackedFloat(index);

+      }

+      public Builder SetUnpackedFloat(int index, float value) {

+        PrepareBuilder();

+        result.unpackedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedFloat(float value) {

+        PrepareBuilder();

+        result.unpackedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.unpackedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedFloat() {

+        PrepareBuilder();

+        result.unpackedFloat_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<double> UnpackedDoubleList {

+        get { return PrepareBuilder().unpackedDouble_; }

+      }

+      public int UnpackedDoubleCount {

+        get { return result.UnpackedDoubleCount; }

+      }

+      public double GetUnpackedDouble(int index) {

+        return result.GetUnpackedDouble(index);

+      }

+      public Builder SetUnpackedDouble(int index, double value) {

+        PrepareBuilder();

+        result.unpackedDouble_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedDouble(double value) {

+        PrepareBuilder();

+        result.unpackedDouble_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedDouble(scg::IEnumerable<double> values) {

+        PrepareBuilder();

+        result.unpackedDouble_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedDouble() {

+        PrepareBuilder();

+        result.unpackedDouble_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<bool> UnpackedBoolList {

+        get { return PrepareBuilder().unpackedBool_; }

+      }

+      public int UnpackedBoolCount {

+        get { return result.UnpackedBoolCount; }

+      }

+      public bool GetUnpackedBool(int index) {

+        return result.GetUnpackedBool(index);

+      }

+      public Builder SetUnpackedBool(int index, bool value) {

+        PrepareBuilder();

+        result.unpackedBool_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedBool(bool value) {

+        PrepareBuilder();

+        result.unpackedBool_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedBool(scg::IEnumerable<bool> values) {

+        PrepareBuilder();

+        result.unpackedBool_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedBool() {

+        PrepareBuilder();

+        result.unpackedBool_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> UnpackedEnumList {

+        get { return PrepareBuilder().unpackedEnum_; }

+      }

+      public int UnpackedEnumCount {

+        get { return result.UnpackedEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetUnpackedEnum(int index) {

+        return result.GetUnpackedEnum(index);

+      }

+      public Builder SetUnpackedEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.unpackedEnum_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.unpackedEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {

+        PrepareBuilder();

+        result.unpackedEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedEnum() {

+        PrepareBuilder();

+        result.unpackedEnum_.Clear();

+        return this;

+      }

+    }

+    static TestUnpackedTypes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestPackedExtensions : pb::ExtendableMessage<TestPackedExtensions, TestPackedExtensions.Builder> {

+    private TestPackedExtensions() { }

+    private static readonly TestPackedExtensions defaultInstance = new TestPackedExtensions().MakeReadOnly();

+    private static readonly string[] _testPackedExtensionsFieldNames = new string[] {  };

+    private static readonly uint[] _testPackedExtensionsFieldTags = new uint[] {  };

+    public static TestPackedExtensions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestPackedExtensions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestPackedExtensions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestPackedExtensions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestPackedExtensions, TestPackedExtensions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestPackedExtensions__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testPackedExtensionsFieldNames;

+      pb::ExtendableMessage<TestPackedExtensions, TestPackedExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestPackedExtensions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestPackedExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestPackedExtensions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestPackedExtensions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestPackedExtensions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestPackedExtensions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestPackedExtensions result;

+      

+      private TestPackedExtensions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestPackedExtensions original = result;

+          result = new TestPackedExtensions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestPackedExtensions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.Descriptor; }

+      }

+      

+      public override TestPackedExtensions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.DefaultInstance; }

+      }

+      

+      public override TestPackedExtensions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestPackedExtensions) {

+          return MergeFrom((TestPackedExtensions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestPackedExtensions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testPackedExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testPackedExtensionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestPackedExtensions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestDynamicExtensions : pb::GeneratedMessage<TestDynamicExtensions, TestDynamicExtensions.Builder> {

+    private TestDynamicExtensions() { }

+    private static readonly TestDynamicExtensions defaultInstance = new TestDynamicExtensions().MakeReadOnly();

+    private static readonly string[] _testDynamicExtensionsFieldNames = new string[] { "dynamic_enum_extension", "dynamic_message_extension", "enum_extension", "message_extension", "packed_extension", "repeated_extension", "scalar_extension" };

+    private static readonly uint[] _testDynamicExtensionsFieldTags = new uint[] { 16016, 16034, 16008, 16026, 16050, 16042, 16005 };

+    public static TestDynamicExtensions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestDynamicExtensions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestDynamicExtensions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestDynamicExtensions, TestDynamicExtensions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDynamicExtensions__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum DynamicEnumType {

+        DYNAMIC_FOO = 2200,

+        DYNAMIC_BAR = 2201,

+        DYNAMIC_BAZ = 2202,

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class DynamicMessageType : pb::GeneratedMessage<DynamicMessageType, DynamicMessageType.Builder> {

+        private DynamicMessageType() { }

+        private static readonly DynamicMessageType defaultInstance = new DynamicMessageType().MakeReadOnly();

+        private static readonly string[] _dynamicMessageTypeFieldNames = new string[] { "dynamic_field" };

+        private static readonly uint[] _dynamicMessageTypeFieldTags = new uint[] { 16800 };

+        public static DynamicMessageType DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override DynamicMessageType DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override DynamicMessageType ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<DynamicMessageType, DynamicMessageType.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__FieldAccessorTable; }

+        }

+        

+        public const int DynamicFieldFieldNumber = 2100;

+        private bool hasDynamicField;

+        private int dynamicField_;

+        public bool HasDynamicField {

+          get { return hasDynamicField; }

+        }

+        public int DynamicField {

+          get { return dynamicField_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _dynamicMessageTypeFieldNames;

+          if (hasDynamicField) {

+            output.WriteInt32(2100, field_names[0], DynamicField);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasDynamicField) {

+            size += pb::CodedOutputStream.ComputeInt32Size(2100, DynamicField);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static DynamicMessageType ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static DynamicMessageType ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static DynamicMessageType ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private DynamicMessageType MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(DynamicMessageType prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<DynamicMessageType, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(DynamicMessageType cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private DynamicMessageType result;

+          

+          private DynamicMessageType PrepareBuilder() {

+            if (resultIsReadOnly) {

+              DynamicMessageType original = result;

+              result = new DynamicMessageType();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override DynamicMessageType MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Descriptor; }

+          }

+          

+          public override DynamicMessageType DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance; }

+          }

+          

+          public override DynamicMessageType BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is DynamicMessageType) {

+              return MergeFrom((DynamicMessageType) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(DynamicMessageType other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasDynamicField) {

+              DynamicField = other.DynamicField;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_dynamicMessageTypeFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _dynamicMessageTypeFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 16800: {

+                  result.hasDynamicField = input.ReadInt32(ref result.dynamicField_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasDynamicField {

+            get { return result.hasDynamicField; }

+          }

+          public int DynamicField {

+            get { return result.DynamicField; }

+            set { SetDynamicField(value); }

+          }

+          public Builder SetDynamicField(int value) {

+            PrepareBuilder();

+            result.hasDynamicField = true;

+            result.dynamicField_ = value;

+            return this;

+          }

+          public Builder ClearDynamicField() {

+            PrepareBuilder();

+            result.hasDynamicField = false;

+            result.dynamicField_ = 0;

+            return this;

+          }

+        }

+        static DynamicMessageType() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int ScalarExtensionFieldNumber = 2000;

+    private bool hasScalarExtension;

+    private uint scalarExtension_;

+    public bool HasScalarExtension {

+      get { return hasScalarExtension; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint ScalarExtension {

+      get { return scalarExtension_; }

+    }

+    

+    public const int EnumExtensionFieldNumber = 2001;

+    private bool hasEnumExtension;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum enumExtension_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+    public bool HasEnumExtension {

+      get { return hasEnumExtension; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumExtension {

+      get { return enumExtension_; }

+    }

+    

+    public const int DynamicEnumExtensionFieldNumber = 2002;

+    private bool hasDynamicEnumExtension;

+    private global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType dynamicEnumExtension_ = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType.DYNAMIC_FOO;

+    public bool HasDynamicEnumExtension {

+      get { return hasDynamicEnumExtension; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType DynamicEnumExtension {

+      get { return dynamicEnumExtension_; }

+    }

+    

+    public const int MessageExtensionFieldNumber = 2003;

+    private bool hasMessageExtension;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage messageExtension_;

+    public bool HasMessageExtension {

+      get { return hasMessageExtension; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageExtension {

+      get { return messageExtension_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }

+    }

+    

+    public const int DynamicMessageExtensionFieldNumber = 2004;

+    private bool hasDynamicMessageExtension;

+    private global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType dynamicMessageExtension_;

+    public bool HasDynamicMessageExtension {

+      get { return hasDynamicMessageExtension; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType DynamicMessageExtension {

+      get { return dynamicMessageExtension_ ?? global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance; }

+    }

+    

+    public const int RepeatedExtensionFieldNumber = 2005;

+    private pbc::PopsicleList<string> repeatedExtension_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedExtensionList {

+      get { return pbc::Lists.AsReadOnly(repeatedExtension_); }

+    }

+    public int RepeatedExtensionCount {

+      get { return repeatedExtension_.Count; }

+    }

+    public string GetRepeatedExtension(int index) {

+      return repeatedExtension_[index];

+    }

+    

+    public const int PackedExtensionFieldNumber = 2006;

+    private int packedExtensionMemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedExtension_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedExtensionList {

+      get { return pbc::Lists.AsReadOnly(packedExtension_); }

+    }

+    public int PackedExtensionCount {

+      get { return packedExtension_.Count; }

+    }

+    public int GetPackedExtension(int index) {

+      return packedExtension_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testDynamicExtensionsFieldNames;

+      if (hasScalarExtension) {

+        output.WriteFixed32(2000, field_names[6], ScalarExtension);

+      }

+      if (hasEnumExtension) {

+        output.WriteEnum(2001, field_names[2], (int) EnumExtension, EnumExtension);

+      }

+      if (hasDynamicEnumExtension) {

+        output.WriteEnum(2002, field_names[0], (int) DynamicEnumExtension, DynamicEnumExtension);

+      }

+      if (hasMessageExtension) {

+        output.WriteMessage(2003, field_names[3], MessageExtension);

+      }

+      if (hasDynamicMessageExtension) {

+        output.WriteMessage(2004, field_names[1], DynamicMessageExtension);

+      }

+      if (repeatedExtension_.Count > 0) {

+        output.WriteStringArray(2005, field_names[5], repeatedExtension_);

+      }

+      if (packedExtension_.Count > 0) {

+        output.WritePackedSInt32Array(2006, field_names[4], packedExtensionMemoizedSerializedSize, packedExtension_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasScalarExtension) {

+        size += pb::CodedOutputStream.ComputeFixed32Size(2000, ScalarExtension);

+      }

+      if (hasEnumExtension) {

+        size += pb::CodedOutputStream.ComputeEnumSize(2001, (int) EnumExtension);

+      }

+      if (hasDynamicEnumExtension) {

+        size += pb::CodedOutputStream.ComputeEnumSize(2002, (int) DynamicEnumExtension);

+      }

+      if (hasMessageExtension) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2003, MessageExtension);

+      }

+      if (hasDynamicMessageExtension) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2004, DynamicMessageExtension);

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedExtensionList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedExtension_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in PackedExtensionList) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedExtension_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedExtensionMemoizedSerializedSize = dataSize;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestDynamicExtensions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestDynamicExtensions MakeReadOnly() {

+      repeatedExtension_.MakeReadOnly();

+      packedExtension_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestDynamicExtensions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestDynamicExtensions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestDynamicExtensions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestDynamicExtensions result;

+      

+      private TestDynamicExtensions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestDynamicExtensions original = result;

+          result = new TestDynamicExtensions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestDynamicExtensions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Descriptor; }

+      }

+      

+      public override TestDynamicExtensions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.DefaultInstance; }

+      }

+      

+      public override TestDynamicExtensions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestDynamicExtensions) {

+          return MergeFrom((TestDynamicExtensions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestDynamicExtensions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasScalarExtension) {

+          ScalarExtension = other.ScalarExtension;

+        }

+        if (other.HasEnumExtension) {

+          EnumExtension = other.EnumExtension;

+        }

+        if (other.HasDynamicEnumExtension) {

+          DynamicEnumExtension = other.DynamicEnumExtension;

+        }

+        if (other.HasMessageExtension) {

+          MergeMessageExtension(other.MessageExtension);

+        }

+        if (other.HasDynamicMessageExtension) {

+          MergeDynamicMessageExtension(other.DynamicMessageExtension);

+        }

+        if (other.repeatedExtension_.Count != 0) {

+          result.repeatedExtension_.Add(other.repeatedExtension_);

+        }

+        if (other.packedExtension_.Count != 0) {

+          result.packedExtension_.Add(other.packedExtension_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testDynamicExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testDynamicExtensionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 16005: {

+              result.hasScalarExtension = input.ReadFixed32(ref result.scalarExtension_);

+              break;

+            }

+            case 16008: {

+              object unknown;

+              if(input.ReadEnum(ref result.enumExtension_, out unknown)) {

+                result.hasEnumExtension = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(2001, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 16016: {

+              object unknown;

+              if(input.ReadEnum(ref result.dynamicEnumExtension_, out unknown)) {

+                result.hasDynamicEnumExtension = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(2002, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 16026: {

+              global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder();

+              if (result.hasMessageExtension) {

+                subBuilder.MergeFrom(MessageExtension);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              MessageExtension = subBuilder.BuildPartial();

+              break;

+            }

+            case 16034: {

+              global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.CreateBuilder();

+              if (result.hasDynamicMessageExtension) {

+                subBuilder.MergeFrom(DynamicMessageExtension);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              DynamicMessageExtension = subBuilder.BuildPartial();

+              break;

+            }

+            case 16042: {

+              input.ReadStringArray(tag, field_name, result.repeatedExtension_);

+              break;

+            }

+            case 16050:

+            case 16048: {

+              input.ReadSInt32Array(tag, field_name, result.packedExtension_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasScalarExtension {

+        get { return result.hasScalarExtension; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint ScalarExtension {

+        get { return result.ScalarExtension; }

+        set { SetScalarExtension(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetScalarExtension(uint value) {

+        PrepareBuilder();

+        result.hasScalarExtension = true;

+        result.scalarExtension_ = value;

+        return this;

+      }

+      public Builder ClearScalarExtension() {

+        PrepareBuilder();

+        result.hasScalarExtension = false;

+        result.scalarExtension_ = 0;

+        return this;

+      }

+      

+      public bool HasEnumExtension {

+       get { return result.hasEnumExtension; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumExtension {

+        get { return result.EnumExtension; }

+        set { SetEnumExtension(value); }

+      }

+      public Builder SetEnumExtension(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.hasEnumExtension = true;

+        result.enumExtension_ = value;

+        return this;

+      }

+      public Builder ClearEnumExtension() {

+        PrepareBuilder();

+        result.hasEnumExtension = false;

+        result.enumExtension_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+        return this;

+      }

+      

+      public bool HasDynamicEnumExtension {

+       get { return result.hasDynamicEnumExtension; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType DynamicEnumExtension {

+        get { return result.DynamicEnumExtension; }

+        set { SetDynamicEnumExtension(value); }

+      }

+      public Builder SetDynamicEnumExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType value) {

+        PrepareBuilder();

+        result.hasDynamicEnumExtension = true;

+        result.dynamicEnumExtension_ = value;

+        return this;

+      }

+      public Builder ClearDynamicEnumExtension() {

+        PrepareBuilder();

+        result.hasDynamicEnumExtension = false;

+        result.dynamicEnumExtension_ = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType.DYNAMIC_FOO;

+        return this;

+      }

+      

+      public bool HasMessageExtension {

+       get { return result.hasMessageExtension; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageExtension {

+        get { return result.MessageExtension; }

+        set { SetMessageExtension(value); }

+      }

+      public Builder SetMessageExtension(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMessageExtension = true;

+        result.messageExtension_ = value;

+        return this;

+      }

+      public Builder SetMessageExtension(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasMessageExtension = true;

+        result.messageExtension_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeMessageExtension(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasMessageExtension &&

+            result.messageExtension_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {

+            result.messageExtension_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.messageExtension_).MergeFrom(value).BuildPartial();

+        } else {

+          result.messageExtension_ = value;

+        }

+        result.hasMessageExtension = true;

+        return this;

+      }

+      public Builder ClearMessageExtension() {

+        PrepareBuilder();

+        result.hasMessageExtension = false;

+        result.messageExtension_ = null;

+        return this;

+      }

+      

+      public bool HasDynamicMessageExtension {

+       get { return result.hasDynamicMessageExtension; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType DynamicMessageExtension {

+        get { return result.DynamicMessageExtension; }

+        set { SetDynamicMessageExtension(value); }

+      }

+      public Builder SetDynamicMessageExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDynamicMessageExtension = true;

+        result.dynamicMessageExtension_ = value;

+        return this;

+      }

+      public Builder SetDynamicMessageExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasDynamicMessageExtension = true;

+        result.dynamicMessageExtension_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeDynamicMessageExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasDynamicMessageExtension &&

+            result.dynamicMessageExtension_ != global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance) {

+            result.dynamicMessageExtension_ = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.CreateBuilder(result.dynamicMessageExtension_).MergeFrom(value).BuildPartial();

+        } else {

+          result.dynamicMessageExtension_ = value;

+        }

+        result.hasDynamicMessageExtension = true;

+        return this;

+      }

+      public Builder ClearDynamicMessageExtension() {

+        PrepareBuilder();

+        result.hasDynamicMessageExtension = false;

+        result.dynamicMessageExtension_ = null;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedExtensionList {

+        get { return PrepareBuilder().repeatedExtension_; }

+      }

+      public int RepeatedExtensionCount {

+        get { return result.RepeatedExtensionCount; }

+      }

+      public string GetRepeatedExtension(int index) {

+        return result.GetRepeatedExtension(index);

+      }

+      public Builder SetRepeatedExtension(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedExtension_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedExtension(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedExtension_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedExtension(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedExtension_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedExtension() {

+        PrepareBuilder();

+        result.repeatedExtension_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> PackedExtensionList {

+        get { return PrepareBuilder().packedExtension_; }

+      }

+      public int PackedExtensionCount {

+        get { return result.PackedExtensionCount; }

+      }

+      public int GetPackedExtension(int index) {

+        return result.GetPackedExtension(index);

+      }

+      public Builder SetPackedExtension(int index, int value) {

+        PrepareBuilder();

+        result.packedExtension_[index] = value;

+        return this;

+      }

+      public Builder AddPackedExtension(int value) {

+        PrepareBuilder();

+        result.packedExtension_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedExtension(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedExtension_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedExtension() {

+        PrepareBuilder();

+        result.packedExtension_.Clear();

+        return this;

+      }

+    }

+    static TestDynamicExtensions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRepeatedScalarDifferentTagSizes : pb::GeneratedMessage<TestRepeatedScalarDifferentTagSizes, TestRepeatedScalarDifferentTagSizes.Builder> {

+    private TestRepeatedScalarDifferentTagSizes() { }

+    private static readonly TestRepeatedScalarDifferentTagSizes defaultInstance = new TestRepeatedScalarDifferentTagSizes().MakeReadOnly();

+    private static readonly string[] _testRepeatedScalarDifferentTagSizesFieldNames = new string[] { "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_int32", "repeated_int64", "repeated_uint64" };

+    private static readonly uint[] _testRepeatedScalarDifferentTagSizesFieldTags = new uint[] { 101, 16369, 2097141, 104, 16376, 2097144 };

+    public static TestRepeatedScalarDifferentTagSizes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRepeatedScalarDifferentTagSizes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRepeatedScalarDifferentTagSizes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestRepeatedScalarDifferentTagSizes, TestRepeatedScalarDifferentTagSizes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable; }

+    }

+    

+    public const int RepeatedFixed32FieldNumber = 12;

+    private pbc::PopsicleList<uint> repeatedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> RepeatedFixed32List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed32_); }

+    }

+    public int RepeatedFixed32Count {

+      get { return repeatedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetRepeatedFixed32(int index) {

+      return repeatedFixed32_[index];

+    }

+    

+    public const int RepeatedInt32FieldNumber = 13;

+    private pbc::PopsicleList<int> repeatedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedInt32List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt32_); }

+    }

+    public int RepeatedInt32Count {

+      get { return repeatedInt32_.Count; }

+    }

+    public int GetRepeatedInt32(int index) {

+      return repeatedInt32_[index];

+    }

+    

+    public const int RepeatedFixed64FieldNumber = 2046;

+    private pbc::PopsicleList<ulong> repeatedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedFixed64List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed64_); }

+    }

+    public int RepeatedFixed64Count {

+      get { return repeatedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedFixed64(int index) {

+      return repeatedFixed64_[index];

+    }

+    

+    public const int RepeatedInt64FieldNumber = 2047;

+    private pbc::PopsicleList<long> repeatedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedInt64List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt64_); }

+    }

+    public int RepeatedInt64Count {

+      get { return repeatedInt64_.Count; }

+    }

+    public long GetRepeatedInt64(int index) {

+      return repeatedInt64_[index];

+    }

+    

+    public const int RepeatedFloatFieldNumber = 262142;

+    private pbc::PopsicleList<float> repeatedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> RepeatedFloatList {

+      get { return pbc::Lists.AsReadOnly(repeatedFloat_); }

+    }

+    public int RepeatedFloatCount {

+      get { return repeatedFloat_.Count; }

+    }

+    public float GetRepeatedFloat(int index) {

+      return repeatedFloat_[index];

+    }

+    

+    public const int RepeatedUint64FieldNumber = 262143;

+    private pbc::PopsicleList<ulong> repeatedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedUint64List {

+      get { return pbc::Lists.AsReadOnly(repeatedUint64_); }

+    }

+    public int RepeatedUint64Count {

+      get { return repeatedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedUint64(int index) {

+      return repeatedUint64_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testRepeatedScalarDifferentTagSizesFieldNames;

+      if (repeatedFixed32_.Count > 0) {

+        output.WriteFixed32Array(12, field_names[0], repeatedFixed32_);

+      }

+      if (repeatedInt32_.Count > 0) {

+        output.WriteInt32Array(13, field_names[3], repeatedInt32_);

+      }

+      if (repeatedFixed64_.Count > 0) {

+        output.WriteFixed64Array(2046, field_names[1], repeatedFixed64_);

+      }

+      if (repeatedInt64_.Count > 0) {

+        output.WriteInt64Array(2047, field_names[4], repeatedInt64_);

+      }

+      if (repeatedFloat_.Count > 0) {

+        output.WriteFloatArray(262142, field_names[2], repeatedFloat_);

+      }

+      if (repeatedUint64_.Count > 0) {

+        output.WriteUInt64Array(262143, field_names[5], repeatedUint64_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFixed32_.Count;

+        size += dataSize;

+        size += 1 * repeatedFixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedInt32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedFixed64_.Count;

+        size += dataSize;

+        size += 2 * repeatedFixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in RepeatedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedInt64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFloat_.Count;

+        size += dataSize;

+        size += 3 * repeatedFloat_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in RepeatedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 3 * repeatedUint64_.Count;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRepeatedScalarDifferentTagSizes MakeReadOnly() {

+      repeatedFixed32_.MakeReadOnly();

+      repeatedInt32_.MakeReadOnly();

+      repeatedFixed64_.MakeReadOnly();

+      repeatedInt64_.MakeReadOnly();

+      repeatedFloat_.MakeReadOnly();

+      repeatedUint64_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRepeatedScalarDifferentTagSizes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestRepeatedScalarDifferentTagSizes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRepeatedScalarDifferentTagSizes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRepeatedScalarDifferentTagSizes result;

+      

+      private TestRepeatedScalarDifferentTagSizes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRepeatedScalarDifferentTagSizes original = result;

+          result = new TestRepeatedScalarDifferentTagSizes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRepeatedScalarDifferentTagSizes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.Descriptor; }

+      }

+      

+      public override TestRepeatedScalarDifferentTagSizes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.DefaultInstance; }

+      }

+      

+      public override TestRepeatedScalarDifferentTagSizes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestRepeatedScalarDifferentTagSizes) {

+          return MergeFrom((TestRepeatedScalarDifferentTagSizes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestRepeatedScalarDifferentTagSizes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.repeatedFixed32_.Count != 0) {

+          result.repeatedFixed32_.Add(other.repeatedFixed32_);

+        }

+        if (other.repeatedInt32_.Count != 0) {

+          result.repeatedInt32_.Add(other.repeatedInt32_);

+        }

+        if (other.repeatedFixed64_.Count != 0) {

+          result.repeatedFixed64_.Add(other.repeatedFixed64_);

+        }

+        if (other.repeatedInt64_.Count != 0) {

+          result.repeatedInt64_.Add(other.repeatedInt64_);

+        }

+        if (other.repeatedFloat_.Count != 0) {

+          result.repeatedFloat_.Add(other.repeatedFloat_);

+        }

+        if (other.repeatedUint64_.Count != 0) {

+          result.repeatedUint64_.Add(other.repeatedUint64_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testRepeatedScalarDifferentTagSizesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testRepeatedScalarDifferentTagSizesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 98:

+            case 101: {

+              input.ReadFixed32Array(tag, field_name, result.repeatedFixed32_);

+              break;

+            }

+            case 106:

+            case 104: {

+              input.ReadInt32Array(tag, field_name, result.repeatedInt32_);

+              break;

+            }

+            case 16370:

+            case 16369: {

+              input.ReadFixed64Array(tag, field_name, result.repeatedFixed64_);

+              break;

+            }

+            case 16378:

+            case 16376: {

+              input.ReadInt64Array(tag, field_name, result.repeatedInt64_);

+              break;

+            }

+            case 2097138:

+            case 2097141: {

+              input.ReadFloatArray(tag, field_name, result.repeatedFloat_);

+              break;

+            }

+            case 2097146:

+            case 2097144: {

+              input.ReadUInt64Array(tag, field_name, result.repeatedUint64_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> RepeatedFixed32List {

+        get { return PrepareBuilder().repeatedFixed32_; }

+      }

+      public int RepeatedFixed32Count {

+        get { return result.RepeatedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetRepeatedFixed32(int index) {

+        return result.GetRepeatedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed32(uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed32() {

+        PrepareBuilder();

+        result.repeatedFixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedInt32List {

+        get { return PrepareBuilder().repeatedInt32_; }

+      }

+      public int RepeatedInt32Count {

+        get { return result.RepeatedInt32Count; }

+      }

+      public int GetRepeatedInt32(int index) {

+        return result.GetRepeatedInt32(index);

+      }

+      public Builder SetRepeatedInt32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt32(int value) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt32() {

+        PrepareBuilder();

+        result.repeatedInt32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedFixed64List {

+        get { return PrepareBuilder().repeatedFixed64_; }

+      }

+      public int RepeatedFixed64Count {

+        get { return result.RepeatedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedFixed64(int index) {

+        return result.GetRepeatedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed64(ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed64() {

+        PrepareBuilder();

+        result.repeatedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedInt64List {

+        get { return PrepareBuilder().repeatedInt64_; }

+      }

+      public int RepeatedInt64Count {

+        get { return result.RepeatedInt64Count; }

+      }

+      public long GetRepeatedInt64(int index) {

+        return result.GetRepeatedInt64(index);

+      }

+      public Builder SetRepeatedInt64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt64(long value) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt64() {

+        PrepareBuilder();

+        result.repeatedInt64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> RepeatedFloatList {

+        get { return PrepareBuilder().repeatedFloat_; }

+      }

+      public int RepeatedFloatCount {

+        get { return result.RepeatedFloatCount; }

+      }

+      public float GetRepeatedFloat(int index) {

+        return result.GetRepeatedFloat(index);

+      }

+      public Builder SetRepeatedFloat(int index, float value) {

+        PrepareBuilder();

+        result.repeatedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedFloat(float value) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFloat() {

+        PrepareBuilder();

+        result.repeatedFloat_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedUint64List {

+        get { return PrepareBuilder().repeatedUint64_; }

+      }

+      public int RepeatedUint64Count {

+        get { return result.RepeatedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedUint64(int index) {

+        return result.GetRepeatedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedUint64(ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedUint64() {

+        PrepareBuilder();

+        result.repeatedUint64_.Clear();

+        return this;

+      }

+    }

+    static TestRepeatedScalarDifferentTagSizes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class FooRequest : pb::GeneratedMessage<FooRequest, FooRequest.Builder> {

+    private FooRequest() { }

+    private static readonly FooRequest defaultInstance = new FooRequest().MakeReadOnly();

+    private static readonly string[] _fooRequestFieldNames = new string[] {  };

+    private static readonly uint[] _fooRequestFieldTags = new uint[] {  };

+    public static FooRequest DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override FooRequest DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override FooRequest ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_FooRequest__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<FooRequest, FooRequest.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_FooRequest__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _fooRequestFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static FooRequest ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static FooRequest ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static FooRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static FooRequest ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private FooRequest MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(FooRequest prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<FooRequest, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(FooRequest cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private FooRequest result;

+      

+      private FooRequest PrepareBuilder() {

+        if (resultIsReadOnly) {

+          FooRequest original = result;

+          result = new FooRequest();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override FooRequest MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.FooRequest.Descriptor; }

+      }

+      

+      public override FooRequest DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.FooRequest.DefaultInstance; }

+      }

+      

+      public override FooRequest BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is FooRequest) {

+          return MergeFrom((FooRequest) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(FooRequest other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.FooRequest.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_fooRequestFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _fooRequestFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static FooRequest() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class FooResponse : pb::GeneratedMessage<FooResponse, FooResponse.Builder> {

+    private FooResponse() { }

+    private static readonly FooResponse defaultInstance = new FooResponse().MakeReadOnly();

+    private static readonly string[] _fooResponseFieldNames = new string[] {  };

+    private static readonly uint[] _fooResponseFieldTags = new uint[] {  };

+    public static FooResponse DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override FooResponse DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override FooResponse ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_FooResponse__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<FooResponse, FooResponse.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_FooResponse__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _fooResponseFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static FooResponse ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static FooResponse ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static FooResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static FooResponse ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private FooResponse MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(FooResponse prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<FooResponse, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(FooResponse cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private FooResponse result;

+      

+      private FooResponse PrepareBuilder() {

+        if (resultIsReadOnly) {

+          FooResponse original = result;

+          result = new FooResponse();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override FooResponse MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.FooResponse.Descriptor; }

+      }

+      

+      public override FooResponse DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.FooResponse.DefaultInstance; }

+      }

+      

+      public override FooResponse BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is FooResponse) {

+          return MergeFrom((FooResponse) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(FooResponse other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.FooResponse.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_fooResponseFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _fooResponseFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static FooResponse() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class BarRequest : pb::GeneratedMessage<BarRequest, BarRequest.Builder> {

+    private BarRequest() { }

+    private static readonly BarRequest defaultInstance = new BarRequest().MakeReadOnly();

+    private static readonly string[] _barRequestFieldNames = new string[] {  };

+    private static readonly uint[] _barRequestFieldTags = new uint[] {  };

+    public static BarRequest DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override BarRequest DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override BarRequest ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_BarRequest__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<BarRequest, BarRequest.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_BarRequest__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _barRequestFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static BarRequest ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static BarRequest ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static BarRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static BarRequest ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private BarRequest MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(BarRequest prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<BarRequest, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(BarRequest cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private BarRequest result;

+      

+      private BarRequest PrepareBuilder() {

+        if (resultIsReadOnly) {

+          BarRequest original = result;

+          result = new BarRequest();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override BarRequest MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BarRequest.Descriptor; }

+      }

+      

+      public override BarRequest DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BarRequest.DefaultInstance; }

+      }

+      

+      public override BarRequest BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is BarRequest) {

+          return MergeFrom((BarRequest) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(BarRequest other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.BarRequest.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_barRequestFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _barRequestFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static BarRequest() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class BarResponse : pb::GeneratedMessage<BarResponse, BarResponse.Builder> {

+    private BarResponse() { }

+    private static readonly BarResponse defaultInstance = new BarResponse().MakeReadOnly();

+    private static readonly string[] _barResponseFieldNames = new string[] {  };

+    private static readonly uint[] _barResponseFieldTags = new uint[] {  };

+    public static BarResponse DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override BarResponse DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override BarResponse ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_BarResponse__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<BarResponse, BarResponse.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_BarResponse__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _barResponseFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static BarResponse ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static BarResponse ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static BarResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static BarResponse ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private BarResponse MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(BarResponse prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<BarResponse, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(BarResponse cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private BarResponse result;

+      

+      private BarResponse PrepareBuilder() {

+        if (resultIsReadOnly) {

+          BarResponse original = result;

+          result = new BarResponse();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override BarResponse MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BarResponse.Descriptor; }

+      }

+      

+      public override BarResponse DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BarResponse.DefaultInstance; }

+      }

+      

+      public override BarResponse BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is BarResponse) {

+          return MergeFrom((BarResponse) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(BarResponse other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.BarResponse.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_barResponseFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _barResponseFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static BarResponse() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+  #region Services

+  /*

+  * Service generation is now disabled by default, use the following option to enable:

+  * option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;

+  */

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtoBench/google_message1.dat b/csharp/src/ProtoBench/google_message1.dat
new file mode 100644
index 0000000..bc0f064
--- /dev/null
+++ b/csharp/src/ProtoBench/google_message1.dat
Binary files differ
diff --git a/csharp/src/ProtoBench/google_message2.dat b/csharp/src/ProtoBench/google_message2.dat
new file mode 100644
index 0000000..06c0944
--- /dev/null
+++ b/csharp/src/ProtoBench/google_message2.dat
Binary files differ
diff --git a/csharp/src/ProtoDump/Program.cs b/csharp/src/ProtoDump/Program.cs
new file mode 100644
index 0000000..a935e78
--- /dev/null
+++ b/csharp/src/ProtoDump/Program.cs
@@ -0,0 +1,88 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.IO;

+

+namespace Google.ProtocolBuffers.ProtoDump

+{

+    /// <summary>

+    /// Small utility to load a binary message and dump it in text form

+    /// </summary>

+    internal class Program

+    {

+        private static int Main(string[] args)

+        {

+            if (args.Length != 2)

+            {

+                Console.Error.WriteLine("Usage: ProtoDump <descriptor type name> <input data>");

+                Console.Error.WriteLine("The descriptor type name is the fully-qualified message name,");

+                Console.Error.WriteLine("including assembly e.g. ProjectNamespace.Message,Company.Project");

+                return 1;

+            }

+            IMessage defaultMessage;

+            try

+            {

+                defaultMessage = MessageUtil.GetDefaultMessage(args[0]);

+            }

+            catch (ArgumentException e)

+            {

+                Console.Error.WriteLine(e.Message);

+                return 1;

+            }

+            try

+            {

+                IBuilder builder = defaultMessage.WeakCreateBuilderForType();

+                if (builder == null)

+                {

+                    Console.Error.WriteLine("Unable to create builder");

+                    return 1;

+                }

+                byte[] inputData = File.ReadAllBytes(args[1]);

+                builder.WeakMergeFrom(ByteString.CopyFrom(inputData));

+                Console.WriteLine(TextFormat.PrintToString(builder.WeakBuild()));

+                return 0;

+            }

+            catch (Exception e)

+            {

+                Console.Error.WriteLine("Error: {0}", e.Message);

+                Console.Error.WriteLine();

+                Console.Error.WriteLine("Detailed exception information: {0}", e);

+                return 1;

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoDump/Properties/AssemblyInfo.cs b/csharp/src/ProtoDump/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..a8ce8ea
--- /dev/null
+++ b/csharp/src/ProtoDump/Properties/AssemblyInfo.cs
@@ -0,0 +1,30 @@
+using System.Reflection;

+using System.Runtime.CompilerServices;

+using System.Runtime.InteropServices;

+

+// General Information about an assembly is controlled through the following 

+// set of attributes. Change these attribute values to modify the information

+// associated with an assembly.

+

+[assembly: AssemblyTitle("ProtoDump")]

+[assembly: AssemblyDescription("")]

+[assembly: AssemblyConfiguration("")]

+[assembly: AssemblyCompany("")]

+[assembly: AssemblyProduct("ProtoDump")]

+[assembly: AssemblyCopyright("Copyright ©  2009")]

+[assembly: AssemblyTrademark("")]

+[assembly: AssemblyCulture("")]

+

+// Version information for an assembly consists of the following four values:

+//

+//      Major Version

+//      Minor Version 

+//      Build Number

+//      Revision

+//

+// You can specify all the values or you can default the Build and Revision Numbers 

+// by using the '*' as shown below:

+// [assembly: AssemblyVersion("2.4.1.555")]

+

+[assembly: AssemblyVersion("2.4.1.555")]

+[assembly: AssemblyFileVersion("2.4.1.555")]
\ No newline at end of file
diff --git a/csharp/src/ProtoDump/ProtoDump.csproj b/csharp/src/ProtoDump/ProtoDump.csproj
new file mode 100644
index 0000000..f040d95
--- /dev/null
+++ b/csharp/src/ProtoDump/ProtoDump.csproj
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{D7282E99-2DC3-405B-946F-177DB2FD2AE2}</ProjectGuid>

+    <OutputType>Exe</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.ProtoDump</RootNamespace>

+    <AssemblyName>ProtoDump</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="Program.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtoGen.Test/DependencyResolutionTest.cs b/csharp/src/ProtoGen.Test/DependencyResolutionTest.cs
new file mode 100644
index 0000000..47c6f1a
--- /dev/null
+++ b/csharp/src/ProtoGen.Test/DependencyResolutionTest.cs
@@ -0,0 +1,150 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.Collections.Generic;

+using Google.ProtocolBuffers.DescriptorProtos;

+using Google.ProtocolBuffers.Descriptors;

+using NUnit.Framework;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    /// <summary>

+    /// Tests for the dependency resolution in Generator.

+    /// </summary>

+    [TestFixture]

+    public class DependencyResolutionTest

+    {

+        [Test]

+        public void TwoDistinctFiles()

+        {

+            FileDescriptorProto first = new FileDescriptorProto.Builder {Name = "First"}.Build();

+            FileDescriptorProto second = new FileDescriptorProto.Builder {Name = "Second"}.Build();

+            var set = new List<FileDescriptorProto> { first, second };

+

+            IList<FileDescriptor> converted = Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);

+            Assert.AreEqual(2, converted.Count);

+            Assert.AreEqual("First", converted[0].Name);

+            Assert.AreEqual(0, converted[0].Dependencies.Count);

+            Assert.AreEqual("Second", converted[1].Name);

+            Assert.AreEqual(0, converted[1].Dependencies.Count);

+        }

+

+        [Test]

+        public void FirstDependsOnSecond()

+        {

+            FileDescriptorProto first =

+                new FileDescriptorProto.Builder {Name = "First", DependencyList = {"Second"}}.Build();

+            FileDescriptorProto second = new FileDescriptorProto.Builder {Name = "Second"}.Build();

+            var set = new List<FileDescriptorProto> { first, second };

+            IList<FileDescriptor> converted = Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);

+            Assert.AreEqual(2, converted.Count);

+            Assert.AreEqual("First", converted[0].Name);

+            Assert.AreEqual(1, converted[0].Dependencies.Count);

+            Assert.AreEqual(converted[1], converted[0].Dependencies[0]);

+            Assert.AreEqual("Second", converted[1].Name);

+            Assert.AreEqual(0, converted[1].Dependencies.Count);

+        }

+

+        [Test]

+        public void SecondDependsOnFirst()

+        {

+            FileDescriptorProto first = new FileDescriptorProto.Builder {Name = "First"}.Build();

+            FileDescriptorProto second =

+                new FileDescriptorProto.Builder {Name = "Second", DependencyList = {"First"}}.Build();

+            var set = new List<FileDescriptorProto> { first, second };

+            IList<FileDescriptor> converted = Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);

+            Assert.AreEqual(2, converted.Count);

+            Assert.AreEqual("First", converted[0].Name);

+            Assert.AreEqual(0, converted[0].Dependencies.Count);

+            Assert.AreEqual("Second", converted[1].Name);

+            Assert.AreEqual(1, converted[1].Dependencies.Count);

+            Assert.AreEqual(converted[0], converted[1].Dependencies[0]);

+        }

+

+        [Test]

+        public void CircularDependency()

+        {

+            FileDescriptorProto first =

+                new FileDescriptorProto.Builder {Name = "First", DependencyList = {"Second"}}.Build();

+            FileDescriptorProto second =

+                new FileDescriptorProto.Builder {Name = "Second", DependencyList = {"First"}}.Build();

+            var set = new List<FileDescriptorProto> { first, second };

+            try

+            {

+                Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);

+                Assert.Fail("Expected exception");

+            }

+            catch (DependencyResolutionException)

+            {

+                // Expected

+            }

+        }

+

+        [Test]

+        public void MissingDependency()

+        {

+            FileDescriptorProto first =

+                new FileDescriptorProto.Builder {Name = "First", DependencyList = {"Second"}}.Build();

+            var set = new List<FileDescriptorProto> { first };

+            try

+            {

+                Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);

+                Assert.Fail("Expected exception");

+            }

+            catch (DependencyResolutionException)

+            {

+                // Expected

+            }

+        }

+

+        [Test]

+        public void SelfDependency()

+        {

+            FileDescriptorProto first =

+                new FileDescriptorProto.Builder {Name = "First", DependencyList = {"First"}}.Build();

+            var set = new List<FileDescriptorProto> { first };

+            try

+            {

+                Generator.ConvertDescriptors(CSharpFileOptions.DefaultInstance, set);

+                Assert.Fail("Expected exception");

+            }

+            catch (DependencyResolutionException)

+            {

+                // Expected

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen.Test/Properties/AssemblyInfo.cs b/csharp/src/ProtoGen.Test/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..0b632bc
--- /dev/null
+++ b/csharp/src/ProtoGen.Test/Properties/AssemblyInfo.cs
@@ -0,0 +1,30 @@
+using System.Reflection;

+using System.Runtime.CompilerServices;

+using System.Runtime.InteropServices;

+

+// General Information about an assembly is controlled through the following 

+// set of attributes. Change these attribute values to modify the information

+// associated with an assembly.

+

+[assembly: AssemblyTitle("ProtoGen.Test")]

+[assembly: AssemblyDescription("")]

+[assembly: AssemblyConfiguration("")]

+[assembly: AssemblyCompany("")]

+[assembly: AssemblyProduct("ProtoGen.Test")]

+[assembly: AssemblyCopyright("Copyright ©  2008")]

+[assembly: AssemblyTrademark("")]

+[assembly: AssemblyCulture("")]

+

+// Version information for an assembly consists of the following four values:

+//

+//      Major Version

+//      Minor Version 

+//      Build Number

+//      Revision

+//

+// You can specify all the values or you can default the Build and Revision Numbers 

+// by using the '*' as shown below:

+// [assembly: AssemblyVersion("2.4.1.555")]

+

+[assembly: AssemblyVersion("2.4.1.555")]

+[assembly: AssemblyFileVersion("2.4.1.555")]
\ No newline at end of file
diff --git a/csharp/src/ProtoGen.Test/ProtoGen.Test.csproj b/csharp/src/ProtoGen.Test/ProtoGen.Test.csproj
new file mode 100644
index 0000000..81f8479
--- /dev/null
+++ b/csharp/src/ProtoGen.Test/ProtoGen.Test.csproj
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{C268DA4C-4004-47DA-AF23-44C983281A68}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.ProtoGen</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.ProtoGen.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Data" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="DependencyResolutionTest.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="TempFile.cs" />

+    <Compile Include="TestPreprocessing.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtoGen\ProtoGen.csproj">

+      <Project>{250ADE34-82FD-4BAE-86D5-985FBE589C4A}</Project>

+      <Name>ProtoGen</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <Content Include="..\..\lib\protoc.exe">

+      <Link>protoc.exe</Link>

+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

+    </Content>

+  </ItemGroup>

+  <ItemGroup>

+    <None Include="..\..\protos\google\protobuf\csharp_options.proto">

+      <Link>google\protobuf\csharp_options.proto</Link>

+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

+    </None>

+    <None Include="..\..\protos\google\protobuf\descriptor.proto">

+      <Link>google\protobuf\descriptor.proto</Link>

+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

+    </None>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup>

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtoGen.Test/ProtocGenCsUnittests.cs b/csharp/src/ProtoGen.Test/ProtocGenCsUnittests.cs
new file mode 100644
index 0000000..8ee56de
--- /dev/null
+++ b/csharp/src/ProtoGen.Test/ProtocGenCsUnittests.cs
@@ -0,0 +1,683 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using NUnit.Framework;

+using System;

+using System.Collections.Generic;

+using System.Diagnostics;

+using System.IO;

+using System.Reflection;

+using System.Text;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    /// <summary>

+    /// Tests protoc-gen-cs plugin.

+    /// </summary>

+    [TestFixture]

+    [Category("Preprocessor")]

+    public partial class ProtocGenCsUnittests

+    {

+        private static readonly string TempPath = Path.Combine(Path.GetTempPath(), "protoc-gen-cs.Test");

+

+        private const string DefaultProto =

+            @"

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+}";

+

+        #region TestFixture SetUp/TearDown

+

+        private static readonly string OriginalWorkingDirectory = Environment.CurrentDirectory;

+

+        private StringBuilder buffer = new StringBuilder();

+

+        [TestFixtureSetUp]

+        public virtual void Setup()

+        {

+            Teardown();

+            Directory.CreateDirectory(TempPath);

+            Environment.CurrentDirectory = TempPath;

+            this.buffer.Length = 0;

+        }

+

+        [TestFixtureTearDown]

+        public virtual void Teardown()

+        {

+            Environment.CurrentDirectory = OriginalWorkingDirectory;

+            if (Directory.Exists(TempPath))

+            {

+                Directory.Delete(TempPath, true);

+            }

+        }

+

+        #endregion

+

+        #region Helper Methods RunProtoGen / RunCsc

+

+        private void RunProtoc(int expect, string protoFile, params string[] args)

+        {

+            string protoPath = string.Format("-I. -I\"{0}\"", OriginalWorkingDirectory);

+            string plugin = string.Format("--plugin=\"{0}\"", Path.Combine(OriginalWorkingDirectory, "protoc-gen-cs.exe"));

+            string csOut = args.Length == 0 ? "--cs_out=." : string.Format("--cs_out=\"{0}:.\"", string.Join(" ", args));

+            // Start the child process.

+            Process p = new Process();

+            // Redirect the output stream of the child process.

+            p.StartInfo.CreateNoWindow = true;

+            p.StartInfo.UseShellExecute = false;

+            p.StartInfo.RedirectStandardError = true;

+            p.StartInfo.RedirectStandardOutput = true;

+            p.StartInfo.WorkingDirectory = TempPath;

+            p.StartInfo.FileName = Path.Combine(OriginalWorkingDirectory, "protoc.exe");

+            p.StartInfo.Arguments = string.Join(" ", new string[] { plugin, csOut, protoPath, protoFile });

+            p.Start();

+            // Read the output stream first and then wait.

+            buffer.AppendLine(string.Format("{0}> \"{1}\" {2}", p.StartInfo.WorkingDirectory, p.StartInfo.FileName, p.StartInfo.Arguments));

+            buffer.AppendLine(p.StandardError.ReadToEnd());

+            buffer.AppendLine(p.StandardOutput.ReadToEnd());

+            p.WaitForExit();

+            Assert.AreEqual(expect, p.ExitCode, this.buffer.ToString());

+        }

+

+        private Assembly RunCsc(int expect, params string[] sources)

+        {

+            using (TempFile tempDll = new TempFile(String.Empty))

+            {

+                tempDll.ChangeExtension(".dll");

+                List<string> args = new List<string>();

+                args.Add("/nologo");

+                args.Add("/target:library");

+                args.Add("/debug-");

+                args.Add(String.Format(@"""/out:{0}""", tempDll.TempPath));

+                args.Add("/r:System.dll");

+                args.Add(String.Format(@"""/r:{0}""",

+                                       typeof(Google.ProtocolBuffers.DescriptorProtos.DescriptorProto).Assembly.

+                                           Location));

+                args.AddRange(sources);

+

+                string exe = Path.Combine(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(),

+                                          "csc.exe");

+                ProcessStartInfo psi = new ProcessStartInfo(exe);

+                psi.WorkingDirectory = TempPath;

+                psi.CreateNoWindow = true;

+                psi.UseShellExecute = false;

+                psi.RedirectStandardOutput = true;

+                psi.RedirectStandardError = true;

+                psi.Arguments = string.Join(" ", args.ToArray());

+                Process p = Process.Start(psi);

+                buffer.AppendLine(string.Format("{0}> \"{1}\" {2}", p.StartInfo.WorkingDirectory, p.StartInfo.FileName, p.StartInfo.Arguments));

+                buffer.AppendLine(p.StandardError.ReadToEnd());

+                buffer.AppendLine(p.StandardOutput.ReadToEnd());

+                p.WaitForExit();

+                Assert.AreEqual(expect, p.ExitCode, this.buffer.ToString());

+

+                Assembly asm = null;

+                if (p.ExitCode == 0)

+                {

+                    byte[] allbytes = File.ReadAllBytes(tempDll.TempPath);

+                    asm = Assembly.Load(allbytes);

+

+                    foreach (Type t in asm.GetTypes())

+                    {

+                        Debug.WriteLine(t.FullName, asm.FullName);

+                    }

+                }

+                return asm;

+            }

+        }

+

+        #endregion

+

+        // *******************************************************************

+        // The following tests excercise options for protogen.exe

+        // *******************************************************************

+

+        [Test]

+        public void TestProtoFile()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoc(0, proto.TempPath);

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithConflictingType()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (

+                ProtoFile proto = new ProtoFile(test + ".proto",

+                                                @"

+package nunit.simple;

+// Test a very simple message.

+message " +

+                                                test + @" {

+  optional string name = 1;

+} "))

+            {

+                RunProtoc(0, proto.TempPath);

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple." + test, true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple.Proto." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithNamespace()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoc(0, proto.TempPath, "-namespace=MyNewNamespace");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("MyNewNamespace.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("MyNewNamespace." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithUmbrellaClassName()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach("MyUmbrellaClassname.cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoc(0, proto.TempPath, "/umbrella_classname=MyUmbrellaClassname");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple.MyUmbrellaClassname", true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithNestedClass()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoc(0, proto.TempPath, "-nest_classes=true");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple." + test + "+MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithExpandedNsDirectories()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(@"nunit\simple\" + test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoc(0, proto.TempPath, "-expand_namespace_directories=true");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithNewExtension()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".Generated.cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoc(0, proto.TempPath, "-file_extension=.Generated.cs");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithUmbrellaNamespace()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoc(0, proto.TempPath, "-umbrella_namespace=MyUmbrella.Namespace");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple.MyUmbrella.Namespace." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithIgnoredUmbrellaNamespaceDueToNesting()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoc(0, proto.TempPath, "-nest_classes=true", "-umbrella_namespace=MyUmbrella.Namespace");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple." + test + "+MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithExplicitEmptyUmbrellaNamespace()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (

+                ProtoFile proto = new ProtoFile(test + ".proto",

+                                                @"

+package nunit.simple;

+// Test a very simple message.

+message " +

+                                                test + @" {

+  optional string name = 1;

+} "))

+            {

+                //Forces the umbrella class to not use a namespace even if a collision with a type is detected.

+                RunProtoc(0, proto.TempPath, "-umbrella_namespace=");

+                //error CS0441: 'nunit.simple.TestProtoFileWithExplicitEmptyUmbrellaNamespace': a class cannot be both static and sealed

+                RunCsc(1, source.TempPath);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithNewOutputFolder()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(@"generated-code\" + test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoc(1, proto.TempPath, "-output_directory=generated-code");

+                Directory.CreateDirectory("generated-code");

+                RunProtoc(0, proto.TempPath, "-output_directory=generated-code");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileAndIgnoreGoogleProtobuf()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (

+                ProtoFile proto = new ProtoFile(test + ".proto",

+                                                @"

+import ""google/protobuf/csharp_options.proto"";

+option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";

+" +

+                                                DefaultProto))

+            {

+                string google = Path.Combine(TempPath, "google\\protobuf");

+                Directory.CreateDirectory(google);

+                foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))

+                {

+                    File.Copy(file, Path.Combine(google, Path.GetFileName(file)));

+                }

+

+                Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);

+                RunProtoc(0, proto.TempPath);

+                Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);

+

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("MyNewNamespace.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("MyNewNamespace." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithoutIgnoreGoogleProtobuf()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (

+                ProtoFile proto = new ProtoFile(test + ".proto",

+                                                @"

+import ""google/protobuf/csharp_options.proto"";

+option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";

+" +

+                                                DefaultProto))

+            {

+                string google = Path.Combine(TempPath, "google\\protobuf");

+                Directory.CreateDirectory(google);

+                foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))

+                {

+                    File.Copy(file, Path.Combine(google, Path.GetFileName(file)));

+                }

+

+                Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);

+                //Without the option this fails due to being unable to resolve google/protobuf descriptors

+                RunProtoc(0, proto.TempPath);

+            }

+        }

+

+        // *******************************************************************

+        // The following tests excercise options for protoc.exe

+        // *******************************************************************

+

+        [Test]

+        public void TestProtoFileWithIncludeImports()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (

+                ProtoFile proto = new ProtoFile(test + ".proto",

+                                                @"

+import ""google/protobuf/csharp_options.proto"";

+option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";

+

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+} ")

+                )

+            {

+                string google = Path.Combine(TempPath, "google\\protobuf");

+                Directory.CreateDirectory(google);

+                foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))

+                {

+                    File.Copy(file, Path.Combine(google, Path.GetFileName(file)));

+                }

+

+                Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);

+                //if you specify the protoc option --include_imports this should build three source files

+                RunProtoc(0, proto.TempPath);

+                Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);

+

+                //you can (and should) simply omit the inclusion of the extra source files in your project

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("MyNewNamespace.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("MyNewNamespace." + test, true, true);

+            }

+        }

+

+        //Seems the --proto_path or -I option is non-functional for me.  Maybe others have luck?

+        [Test]

+        public void TestProtoFileInDifferentDirectory()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                Environment.CurrentDirectory = OriginalWorkingDirectory;

+                RunProtoc(0, proto.TempPath);

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        // *******************************************************************

+        // Handling of mutliple input files

+        // *******************************************************************

+

+        [Test]

+        public void TestMultipleProtoFiles()

+        {

+            Setup();

+            using (TempFile source1 = TempFile.Attach("MyMessage.cs"))

+            using (

+                ProtoFile proto1 = new ProtoFile("MyMessage.proto",

+                                                 @"

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+}")

+                )

+            using (TempFile source2 = TempFile.Attach("MyMessageList.cs"))

+            using (

+                ProtoFile proto2 = new ProtoFile("MyMessageList.proto",

+                                                 @"

+package nunit.simple;

+import ""MyMessage.proto"";

+// Test a very simple message.

+message MyMessageList {

+  repeated MyMessage messages = 1;

+}")

+                )

+            {

+                RunProtoc(0, proto1.TempPath);

+                RunProtoc(0, proto2.TempPath);

+                Assembly a = RunCsc(0, source1.TempPath, source2.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t1 = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t1), "Expect an IMessage");

+                //assert that the message type is in the expected namespace

+                Type t2 = a.GetType("nunit.simple.MyMessageList", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t2), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple.Proto.MyMessage", true, true);

+                a.GetType("nunit.simple.Proto.MyMessageList", true, true);

+            }

+        }

+

+        [Test]

+        public void TestOneProtoFileWithBufferFile()

+        {

+            Setup();

+            using (TempFile source1 = TempFile.Attach("MyMessage.cs"))

+            using (

+                ProtoFile proto1 = new ProtoFile("MyMessage.proto",

+                                                 @"

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+}")

+                )

+            using (TempFile source2 = TempFile.Attach("MyMessageList.cs"))

+            using (

+                ProtoFile proto2 = new ProtoFile("MyMessageList.proto",

+                                                 @"

+package nunit.simple;

+import ""MyMessage.proto"";

+// Test a very simple message.

+message MyMessageList {

+  repeated MyMessage messages = 1;

+}")

+                )

+            {

+                //build the proto buffer for MyMessage

+                RunProtoc(0, proto1.TempPath);

+                //build the MyMessageList proto-buffer and generate code by including MyMessage.pb

+                RunProtoc(0, proto2.TempPath);

+                Assembly a = RunCsc(0, source1.TempPath, source2.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t1 = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t1), "Expect an IMessage");

+                //assert that the message type is in the expected namespace

+                Type t2 = a.GetType("nunit.simple.MyMessageList", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t2), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple.Proto.MyMessage", true, true);

+                a.GetType("nunit.simple.Proto.MyMessageList", true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithService()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto",

+@"

+import ""google/protobuf/csharp_options.proto"";

+option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;

+

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+}

+// test a very simple service.

+service TestService {

+  rpc Execute (MyMessage) returns (MyMessage);

+}"))

+            {

+                CopyInGoogleProtoFiles();

+

+                RunProtoc(0, proto.TempPath, "-nest_classes=false");

+                Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);

+

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the service type is in the expected namespace

+                Type t1 = a.GetType("nunit.simple.TestService", true, true);

+                Assert.IsTrue(typeof(IService).IsAssignableFrom(t1), "Expect an IService");

+                Assert.IsTrue(t1.IsAbstract, "Expect abstract class");

+                //assert that the Stub subclass type is in the expected namespace

+                Type t2 = a.GetType("nunit.simple.TestService+Stub", true, true);

+                Assert.IsTrue(t1.IsAssignableFrom(t2), "Expect a sub of TestService");

+                Assert.IsFalse(t2.IsAbstract, "Expect concrete class");

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithServiceInternal()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto",

+@"

+import ""google/protobuf/csharp_options.proto"";

+option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;

+

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+}

+// test a very simple service.

+service TestService {

+  rpc Execute (MyMessage) returns (MyMessage);

+}"))

+            {

+                CopyInGoogleProtoFiles();

+

+                RunProtoc(0, proto.TempPath, "-nest_classes=false", "-public_classes=false");

+                Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);

+

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the service type is in the expected namespace

+                Type t1 = a.GetType("nunit.simple.TestService", true, true);

+                Assert.IsTrue(typeof(IService).IsAssignableFrom(t1), "Expect an IService");

+                Assert.IsTrue(t1.IsAbstract, "Expect abstract class");

+                //assert that the Stub subclass type is in the expected namespace

+                Type t2 = a.GetType("nunit.simple.TestService+Stub", true, true);

+                Assert.IsTrue(t1.IsAssignableFrom(t2), "Expect a sub of TestService");

+                Assert.IsFalse(t2.IsAbstract, "Expect concrete class");

+            }

+        }

+

+        private static void CopyInGoogleProtoFiles()

+        {

+            string google = Path.Combine(TempPath, "google\\protobuf");

+            Directory.CreateDirectory(google);

+            foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))

+            {

+                File.Copy(file, Path.Combine(google, Path.GetFileName(file)));

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen.Test/TempFile.cs b/csharp/src/ProtoGen.Test/TempFile.cs
new file mode 100644
index 0000000..74a183f
--- /dev/null
+++ b/csharp/src/ProtoGen.Test/TempFile.cs
@@ -0,0 +1,59 @@
+using System;

+using System.Collections.Generic;

+using System.IO;

+using System.Text;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal class ProtoFile : TempFile

+    {

+        public ProtoFile(string filename, string contents)

+            : base(filename, contents)

+        {

+        }

+    }

+

+    internal class TempFile : IDisposable

+    {

+        private string tempFile;

+

+        public static TempFile Attach(string path)

+        {

+            return new TempFile(path, null);

+        }

+

+        protected TempFile(string filename, string contents)

+        {

+            tempFile = filename;

+            if (contents != null)

+            {

+                File.WriteAllText(tempFile, contents, new UTF8Encoding(false));

+            }

+        }

+

+        public TempFile(string contents)

+            : this(Path.GetTempFileName(), contents)

+        {

+        }

+

+        public string TempPath

+        {

+            get { return tempFile; }

+        }

+

+        public void ChangeExtension(string ext)

+        {

+            string newFile = Path.ChangeExtension(tempFile, ext);

+            File.Move(tempFile, newFile);

+            tempFile = newFile;

+        }

+

+        public void Dispose()

+        {

+            if (File.Exists(tempFile))

+            {

+                File.Delete(tempFile);

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen.Test/TestPreprocessing.cs b/csharp/src/ProtoGen.Test/TestPreprocessing.cs
new file mode 100644
index 0000000..8b3b066
--- /dev/null
+++ b/csharp/src/ProtoGen.Test/TestPreprocessing.cs
@@ -0,0 +1,733 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.Diagnostics;

+using System.IO;

+using System.Reflection;

+using NUnit.Framework;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    [TestFixture]

+    [Category("Preprocessor")]

+    public partial class TestPreprocessing

+    {

+        private static readonly string TempPath = Path.Combine(Path.GetTempPath(), "proto-gen-test");

+

+        private const string DefaultProto =

+            @"

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+}";

+

+        #region TestFixture SetUp/TearDown

+

+        private static readonly string OriginalWorkingDirectory = Environment.CurrentDirectory;

+

+        [TestFixtureSetUp]

+        public virtual void Setup()

+        {

+            Teardown();

+            Directory.CreateDirectory(TempPath);

+            Environment.CurrentDirectory = TempPath;

+        }

+

+        [TestFixtureTearDown]

+        public virtual void Teardown()

+        {

+            Environment.CurrentDirectory = OriginalWorkingDirectory;

+            if (Directory.Exists(TempPath))

+            {

+                Directory.Delete(TempPath, true);

+            }

+        }

+

+        #endregion

+

+        #region Helper Methods RunProtoGen / RunCsc

+

+        private void RunProtoGen(int expect, params string[] args)

+        {

+            TextWriter tout = Console.Out, terr = Console.Error;

+            StringWriter temp = new StringWriter();

+            Console.SetOut(temp);

+            Console.SetError(temp);

+            try

+            {

+                Assert.AreEqual(expect, ProgramPreprocess.Run(args), "ProtoGen Failed: {0}", temp);

+            }

+            finally

+            {

+                Console.SetOut(tout);

+                Console.SetError(terr);

+            }

+        }

+

+        private Assembly RunCsc(int expect, params string[] sources)

+        {

+            using (TempFile tempDll = new TempFile(String.Empty))

+            {

+                tempDll.ChangeExtension(".dll");

+                List<string> args = new List<string>();

+                args.Add("/nologo");

+                args.Add("/target:library");

+                args.Add("/debug-");

+                args.Add(String.Format(@"""/out:{0}""", tempDll.TempPath));

+                args.Add("/r:System.dll");

+                args.Add(String.Format(@"""/r:{0}""",

+                                       typeof(Google.ProtocolBuffers.DescriptorProtos.DescriptorProto).Assembly.

+                                           Location));

+                args.AddRange(sources);

+

+                string exe = Path.Combine(System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(),

+                                          "csc.exe");

+                ProcessStartInfo psi = new ProcessStartInfo(exe);

+                psi.CreateNoWindow = true;

+                psi.UseShellExecute = false;

+                psi.RedirectStandardOutput = true;

+                psi.RedirectStandardError = true;

+                psi.Arguments = string.Join(" ", args.ToArray());

+                Process p = Process.Start(psi);

+                p.WaitForExit();

+                string errorText = p.StandardOutput.ReadToEnd() + p.StandardError.ReadToEnd();

+                Assert.AreEqual(expect, p.ExitCode, "CSC.exe Failed: {0}", errorText);

+

+                Assembly asm = null;

+                if (p.ExitCode == 0)

+                {

+                    byte[] allbytes = File.ReadAllBytes(tempDll.TempPath);

+                    asm = Assembly.Load(allbytes);

+

+                    foreach (Type t in asm.GetTypes())

+                    {

+                        Debug.WriteLine(t.FullName, asm.FullName);

+                    }

+                }

+                return asm;

+            }

+        }

+

+        #endregion

+

+        // *******************************************************************

+        // The following tests excercise options for protogen.exe

+        // *******************************************************************

+

+        [Test]

+        public void TestProtoFile()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoGen(0, proto.TempPath);

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithConflictingType()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (

+                ProtoFile proto = new ProtoFile(test + ".proto",

+                                                @"

+package nunit.simple;

+// Test a very simple message.

+message " +

+                                                test + @" {

+  optional string name = 1;

+} "))

+            {

+                RunProtoGen(0, proto.TempPath);

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple." + test, true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple.Proto." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithNamespace()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoGen(0, proto.TempPath, "-namespace:MyNewNamespace");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("MyNewNamespace.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("MyNewNamespace." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithUmbrellaClassName()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach("MyUmbrellaClassname.cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoGen(0, proto.TempPath, "/umbrella_classname=MyUmbrellaClassname");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple.MyUmbrellaClassname", true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithNestedClass()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoGen(0, proto.TempPath, "-nest_classes:true");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple." + test + "+MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithExpandedNsDirectories()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(@"nunit\simple\" + test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoGen(0, proto.TempPath, "-expand_namespace_directories:true");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithNewExtension()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".Generated.cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoGen(0, proto.TempPath, "-file_extension:.Generated.cs");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithUmbrellaNamespace()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoGen(0, proto.TempPath, "-umbrella_namespace:MyUmbrella.Namespace");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple.MyUmbrella.Namespace." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithIgnoredUmbrellaNamespaceDueToNesting()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoGen(0, proto.TempPath, "-nest_classes:true", "-umbrella_namespace:MyUmbrella.Namespace");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple." + test + "+MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithExplicitEmptyUmbrellaNamespace()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (

+                ProtoFile proto = new ProtoFile(test + ".proto",

+                                                @"

+package nunit.simple;

+// Test a very simple message.

+message " +

+                                                test + @" {

+  optional string name = 1;

+} "))

+            {

+                //Forces the umbrella class to not use a namespace even if a collision with a type is detected.

+                RunProtoGen(0, proto.TempPath, "-umbrella_namespace:");

+                //error CS0441: 'nunit.simple.TestProtoFileWithExplicitEmptyUmbrellaNamespace': a class cannot be both static and sealed

+                RunCsc(1, source.TempPath);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithNewOutputFolder()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(@"generated-code\" + test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                RunProtoGen(1, proto.TempPath, "-output_directory:generated-code");

+                Directory.CreateDirectory("generated-code");

+                RunProtoGen(0, proto.TempPath, "-output_directory:generated-code");

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileAndIgnoreGoogleProtobuf()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (

+                ProtoFile proto = new ProtoFile(test + ".proto",

+                                                @"

+import ""google/protobuf/csharp_options.proto"";

+option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";

+" +

+                                                DefaultProto))

+            {

+                string google = Path.Combine(TempPath, "google\\protobuf");

+                Directory.CreateDirectory(google);

+                foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))

+                {

+                    File.Copy(file, Path.Combine(google, Path.GetFileName(file)));

+                }

+

+                Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);

+                RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true");

+                Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);

+

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("MyNewNamespace.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("MyNewNamespace." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithoutIgnoreGoogleProtobuf()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (

+                ProtoFile proto = new ProtoFile(test + ".proto",

+                                                @"

+import ""google/protobuf/csharp_options.proto"";

+option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";

+" +

+                                                DefaultProto))

+            {

+                string google = Path.Combine(TempPath, "google\\protobuf");

+                Directory.CreateDirectory(google);

+                foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))

+                {

+                    File.Copy(file, Path.Combine(google, Path.GetFileName(file)));

+                }

+

+                Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);

+                //Without the option this fails due to being unable to resolve google/protobuf descriptors

+                RunProtoGen(1, proto.TempPath, "-ignore_google_protobuf:false");

+            }

+        }

+

+        // *******************************************************************

+        // The following tests excercise options for protoc.exe

+        // *******************************************************************

+

+        [Test]

+        public void TestProtoFileWithIncludeImports()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (

+                ProtoFile proto = new ProtoFile(test + ".proto",

+                                                @"

+import ""google/protobuf/csharp_options.proto"";

+option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";

+

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+} ")

+                )

+            {

+                string google = Path.Combine(TempPath, "google\\protobuf");

+                Directory.CreateDirectory(google);

+                foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))

+                {

+                    File.Copy(file, Path.Combine(google, Path.GetFileName(file)));

+                }

+

+                Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);

+                //if you specify the protoc option --include_imports this should build three source files

+                RunProtoGen(0, proto.TempPath, "--include_imports");

+                Assert.AreEqual(3, Directory.GetFiles(TempPath, "*.cs").Length);

+

+                //you can (and should) simply omit the inclusion of the extra source files in your project

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("MyNewNamespace.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("MyNewNamespace." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithIncludeImportsAndIgnoreGoogleProtobuf()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (

+                ProtoFile proto = new ProtoFile(test + ".proto",

+                                                @"

+import ""google/protobuf/csharp_options.proto"";

+option (google.protobuf.csharp_file_options).namespace = ""MyNewNamespace"";

+

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+} ")

+                )

+            {

+                string google = Path.Combine(TempPath, "google\\protobuf");

+                Directory.CreateDirectory(google);

+                foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))

+                    File.Copy(file, Path.Combine(google, Path.GetFileName(file)));

+

+                Assert.AreEqual(0, Directory.GetFiles(TempPath, "*.cs").Length);

+                //Even with --include_imports, if you provide -ignore_google_protobuf:true you only get the one source file

+                RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true", "--include_imports");

+                Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);

+

+                //you can (and should) simply omit the inclusion of the extra source files in your project

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("MyNewNamespace.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("MyNewNamespace." + test, true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileKeepingTheProtoBuffer()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile protobuf = TempFile.Attach(test + ".pb"))

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (

+                ProtoFile proto = new ProtoFile(test + ".proto",

+                                                @"

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+} ")

+                )

+            {

+                RunProtoGen(0, proto.TempPath, "--descriptor_set_out=" + protobuf.TempPath);

+                Assert.IsTrue(File.Exists(protobuf.TempPath), "Missing: " + protobuf.TempPath);

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        //Seems the --proto_path or -I option is non-functional for me.  Maybe others have luck?

+        [Test]

+        public void TestProtoFileInDifferentDirectory()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto", DefaultProto))

+            {

+                Environment.CurrentDirectory = OriginalWorkingDirectory;

+                RunProtoGen(0, proto.TempPath, "--proto_path=" + TempPath);

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple." + test, true, true);

+            }

+        }

+

+        // *******************************************************************

+        // Handling of mutliple input files

+        // *******************************************************************

+

+        [Test]

+        public void TestMultipleProtoFiles()

+        {

+            Setup();

+            using (TempFile source1 = TempFile.Attach("MyMessage.cs"))

+            using (

+                ProtoFile proto1 = new ProtoFile("MyMessage.proto",

+                                                 @"

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+}")

+                )

+            using (TempFile source2 = TempFile.Attach("MyMessageList.cs"))

+            using (

+                ProtoFile proto2 = new ProtoFile("MyMessageList.proto",

+                                                 @"

+package nunit.simple;

+import ""MyMessage.proto"";

+// Test a very simple message.

+message MyMessageList {

+  repeated MyMessage messages = 1;

+}")

+                )

+            {

+                RunProtoGen(0, proto1.TempPath, proto2.TempPath);

+                Assembly a = RunCsc(0, source1.TempPath, source2.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t1 = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t1), "Expect an IMessage");

+                //assert that the message type is in the expected namespace

+                Type t2 = a.GetType("nunit.simple.MyMessageList", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t2), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple.Proto.MyMessage", true, true);

+                a.GetType("nunit.simple.Proto.MyMessageList", true, true);

+            }

+        }

+

+        [Test]

+        public void TestOneProtoFileWithBufferFile()

+        {

+            Setup();

+            using (TempFile source1 = TempFile.Attach("MyMessage.cs"))

+            using (TempFile protobuf = TempFile.Attach("MyMessage.pb"))

+            using (

+                ProtoFile proto1 = new ProtoFile("MyMessage.proto",

+                                                 @"

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+}")

+                )

+            using (TempFile source2 = TempFile.Attach("MyMessageList.cs"))

+            using (

+                ProtoFile proto2 = new ProtoFile("MyMessageList.proto",

+                                                 @"

+package nunit.simple;

+import ""MyMessage.proto"";

+// Test a very simple message.

+message MyMessageList {

+  repeated MyMessage messages = 1;

+}")

+                )

+            {

+                //build the proto buffer for MyMessage

+                RunProtoGen(0, proto1.TempPath, "--descriptor_set_out=" + protobuf.TempPath);

+                //build the MyMessageList proto-buffer and generate code by including MyMessage.pb

+                RunProtoGen(0, proto2.TempPath, protobuf.TempPath);

+                Assembly a = RunCsc(0, source1.TempPath, source2.TempPath);

+                //assert that the message type is in the expected namespace

+                Type t1 = a.GetType("nunit.simple.MyMessage", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t1), "Expect an IMessage");

+                //assert that the message type is in the expected namespace

+                Type t2 = a.GetType("nunit.simple.MyMessageList", true, true);

+                Assert.IsTrue(typeof(IMessage).IsAssignableFrom(t2), "Expect an IMessage");

+                //assert that we can find the static descriptor type

+                a.GetType("nunit.simple.Proto.MyMessage", true, true);

+                a.GetType("nunit.simple.Proto.MyMessageList", true, true);

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithService()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto",

+@"

+import ""google/protobuf/csharp_options.proto"";

+option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;

+

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+}

+// test a very simple service.

+service TestService {

+  rpc Execute (MyMessage) returns (MyMessage);

+}"))

+            {

+                CopyInGoogleProtoFiles();

+

+                RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true", "-nest_classes=false");

+                Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);

+

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the service type is in the expected namespace

+                Type t1 = a.GetType("nunit.simple.TestService", true, true);

+                Assert.IsTrue(typeof(IService).IsAssignableFrom(t1), "Expect an IService");

+                Assert.IsTrue(t1.IsAbstract, "Expect abstract class");

+                //assert that the Stub subclass type is in the expected namespace

+                Type t2 = a.GetType("nunit.simple.TestService+Stub", true, true);

+                Assert.IsTrue(t1.IsAssignableFrom(t2), "Expect a sub of TestService");

+                Assert.IsFalse(t2.IsAbstract, "Expect concrete class");

+            }

+        }

+

+        [Test]

+        public void TestProtoFileWithServiceInternal()

+        {

+            string test = new StackFrame(false).GetMethod().Name;

+            Setup();

+            using (TempFile source = TempFile.Attach(test + ".cs"))

+            using (ProtoFile proto = new ProtoFile(test + ".proto",

+@"

+import ""google/protobuf/csharp_options.proto"";

+option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;

+

+package nunit.simple;

+// Test a very simple message.

+message MyMessage {

+  optional string name = 1;

+}

+// test a very simple service.

+service TestService {

+  rpc Execute (MyMessage) returns (MyMessage);

+}"))

+            {

+                CopyInGoogleProtoFiles();

+

+                RunProtoGen(0, proto.TempPath, "-ignore_google_protobuf:true", "-nest_classes=false", "-public_classes=false");

+                Assert.AreEqual(1, Directory.GetFiles(TempPath, "*.cs").Length);

+

+                Assembly a = RunCsc(0, source.TempPath);

+                //assert that the service type is in the expected namespace

+                Type t1 = a.GetType("nunit.simple.TestService", true, true);

+                Assert.IsTrue(typeof(IService).IsAssignableFrom(t1), "Expect an IService");

+                Assert.IsTrue(t1.IsAbstract, "Expect abstract class");

+                //assert that the Stub subclass type is in the expected namespace

+                Type t2 = a.GetType("nunit.simple.TestService+Stub", true, true);

+                Assert.IsTrue(t1.IsAssignableFrom(t2), "Expect a sub of TestService");

+                Assert.IsFalse(t2.IsAbstract, "Expect concrete class");

+            }

+        }

+

+        private static void CopyInGoogleProtoFiles()

+        {

+            string google = Path.Combine(TempPath, "google\\protobuf");

+            Directory.CreateDirectory(google);

+            foreach (string file in Directory.GetFiles(Path.Combine(OriginalWorkingDirectory, "google\\protobuf")))

+            {

+                File.Copy(file, Path.Combine(google, Path.GetFileName(file)));

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen.Test/protoc-gen-cs.Test.csproj b/csharp/src/ProtoGen.Test/protoc-gen-cs.Test.csproj
new file mode 100644
index 0000000..2e81611
--- /dev/null
+++ b/csharp/src/ProtoGen.Test/protoc-gen-cs.Test.csproj
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{C1024C9C-8176-48C3-B547-B9F6DF6B80A6}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.ProtoGen</RootNamespace>

+    <AssemblyName>protoc-gen-cs.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Data" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="ProtocGenCsUnittests.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="TempFile.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">

+      <Project>{6908bdce-d925-43f3-94ac-a531e6df2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtoGen\protoc-gen-cs.csproj">

+      <Project>{250ade34-82fd-4bae-86d5-985fbe589c4b}</Project>

+      <Name>protoc-gen-cs</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <Content Include="..\..\lib\protoc.exe">

+      <Link>protoc.exe</Link>

+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

+    </Content>

+  </ItemGroup>

+  <ItemGroup>

+    <None Include="..\..\protos\google\protobuf\csharp_options.proto">

+      <Link>google\protobuf\csharp_options.proto</Link>

+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

+    </None>

+    <None Include="..\..\protos\google\protobuf\descriptor.proto">

+      <Link>google\protobuf\descriptor.proto</Link>

+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>

+    </None>

+  </ItemGroup>

+  <ItemGroup>

+    <Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup>

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/DependencyResolutionException.cs b/csharp/src/ProtoGen/DependencyResolutionException.cs
new file mode 100644
index 0000000..aef192e
--- /dev/null
+++ b/csharp/src/ProtoGen/DependencyResolutionException.cs
@@ -0,0 +1,55 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    /// <summary>

+    /// Exception thrown when dependencies within a descriptor set can't be resolved.

+    /// </summary>

+    public sealed class DependencyResolutionException : Exception

+    {

+        public DependencyResolutionException(string message) : base(message)

+        {

+        }

+

+        public DependencyResolutionException(string format, params object[] args)

+            : base(string.Format(format, args))

+        {

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/DescriptorUtil.cs b/csharp/src/ProtoGen/DescriptorUtil.cs
new file mode 100644
index 0000000..0666bb9
--- /dev/null
+++ b/csharp/src/ProtoGen/DescriptorUtil.cs
@@ -0,0 +1,106 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using Google.ProtocolBuffers.DescriptorProtos;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    /// <summary>

+    /// Utility class for determining namespaces etc.

+    /// </summary>

+    internal static class DescriptorUtil

+    {

+        internal static string GetFullUmbrellaClassName(IDescriptor descriptor)

+        {

+            CSharpFileOptions options = descriptor.File.CSharpOptions;

+            string result = options.Namespace;

+            if (result != "")

+            {

+                result += '.';

+            }

+            result += GetQualifiedUmbrellaClassName(options);

+            return "global::" + result;

+        }

+

+        /// <summary>

+        /// Evaluates the options and returns the qualified name of the umbrella class

+        /// relative to the descriptor type's namespace.  Basically concatenates the

+        /// UmbrellaNamespace + UmbrellaClassname fields.

+        /// </summary>

+        internal static string GetQualifiedUmbrellaClassName(CSharpFileOptions options)

+        {

+            string fullName = options.UmbrellaClassname;

+            if (!options.NestClasses && options.UmbrellaNamespace != "")

+            {

+                fullName = String.Format("{0}.{1}", options.UmbrellaNamespace, options.UmbrellaClassname);

+            }

+            return fullName;

+        }

+

+        internal static string GetMappedTypeName(MappedType type)

+        {

+            switch (type)

+            {

+                case MappedType.Int32:

+                    return "int";

+                case MappedType.Int64:

+                    return "long";

+                case MappedType.UInt32:

+                    return "uint";

+                case MappedType.UInt64:

+                    return "ulong";

+                case MappedType.Single:

+                    return "float";

+                case MappedType.Double:

+                    return "double";

+                case MappedType.Boolean:

+                    return "bool";

+                case MappedType.String:

+                    return "string";

+                case MappedType.ByteString:

+                    return "pb::ByteString";

+                case MappedType.Enum:

+                    return null;

+                case MappedType.Message:

+                    return null;

+                default:

+                    throw new ArgumentOutOfRangeException("Unknown mapped type " + type);

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/EnumFieldGenerator.cs b/csharp/src/ProtoGen/EnumFieldGenerator.cs
new file mode 100644
index 0000000..8d70bc6
--- /dev/null
+++ b/csharp/src/ProtoGen/EnumFieldGenerator.cs
@@ -0,0 +1,148 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal class EnumFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator

+    {

+        internal EnumFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal)

+            : base(descriptor, fieldOrdinal)

+        {

+        }

+

+        public void GenerateMembers(TextGenerator writer)

+        {

+            writer.WriteLine("private bool has{0};", PropertyName);

+            writer.WriteLine("private {0} {1}_ = {2};", TypeName, Name, DefaultValue);

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public bool Has{0} {{", PropertyName);

+            writer.WriteLine("  get {{ return has{0}; }}", PropertyName);

+            writer.WriteLine("}");

+            AddPublicMemberAttributes(writer);

+            writer.WriteLine("public {0} {1} {{", TypeName, PropertyName);

+            writer.WriteLine("  get {{ return {0}_; }}", Name);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateBuilderMembers(TextGenerator writer)

+        {

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public bool Has{0} {{", PropertyName);

+            writer.WriteLine(" get {{ return result.has{0}; }}", PropertyName);

+            writer.WriteLine("}");

+            AddPublicMemberAttributes(writer);

+            writer.WriteLine("public {0} {1} {{", TypeName, PropertyName);

+            writer.WriteLine("  get {{ return result.{0}; }}", PropertyName);

+            writer.WriteLine("  set {{ Set{0}(value); }}", PropertyName);

+            writer.WriteLine("}");

+            AddPublicMemberAttributes(writer);

+            writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.has{0} = true;", PropertyName);

+            writer.WriteLine("  result.{0}_ = value;", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Clear{0}() {{", PropertyName);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.has{0} = false;", PropertyName);

+            writer.WriteLine("  result.{0}_ = {1};", Name, DefaultValue);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+        }

+

+        public void GenerateMergingCode(TextGenerator writer)

+        {

+            writer.WriteLine("if (other.Has{0}) {{", PropertyName);

+            writer.WriteLine("  {0} = other.{0};", PropertyName);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateBuildingCode(TextGenerator writer)

+        {

+            // Nothing to do here for enum types

+        }

+

+        public void GenerateParsingCode(TextGenerator writer)

+        {

+            writer.WriteLine("object unknown;");

+            writer.WriteLine("if(input.ReadEnum(ref result.{0}_, out unknown)) {{", Name);

+            writer.WriteLine("  result.has{0} = true;", PropertyName);

+            writer.WriteLine("} else if(unknown is int) {");

+            if (!UseLiteRuntime)

+            {

+                writer.WriteLine("  if (unknownFields == null) {"); // First unknown field - create builder now

+                writer.WriteLine("    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);");

+                writer.WriteLine("  }");

+                writer.WriteLine("  unknownFields.MergeVarintField({0}, (ulong)(int)unknown);", Number);

+            }

+            writer.WriteLine("}");

+        }

+

+        public void GenerateSerializationCode(TextGenerator writer)

+        {

+            writer.WriteLine("if (has{0}) {{", PropertyName);

+            writer.WriteLine("  output.WriteEnum({0}, field_names[{2}], (int) {1}, {1});", Number, PropertyName,

+                             FieldOrdinal);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateSerializedSizeCode(TextGenerator writer)

+        {

+            writer.WriteLine("if (has{0}) {{", PropertyName);

+            writer.WriteLine("  size += pb::CodedOutputStream.ComputeEnumSize({0}, (int) {1});", Number, PropertyName);

+            writer.WriteLine("}");

+        }

+

+        public override void WriteHash(TextGenerator writer)

+        {

+            writer.WriteLine("if (has{0}) hash ^= {1}_.GetHashCode();", PropertyName, Name);

+        }

+

+        public override void WriteEquals(TextGenerator writer)

+        {

+            writer.WriteLine("if (has{0} != other.has{0} || (has{0} && !{1}_.Equals(other.{1}_))) return false;",

+                             PropertyName, Name);

+        }

+

+        public override void WriteToString(TextGenerator writer)

+        {

+            writer.WriteLine("PrintField(\"{0}\", has{1}, {2}_, writer);", Descriptor.Name, PropertyName, Name);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/EnumGenerator.cs b/csharp/src/ProtoGen/EnumGenerator.cs
new file mode 100644
index 0000000..a6ed45d
--- /dev/null
+++ b/csharp/src/ProtoGen/EnumGenerator.cs
@@ -0,0 +1,62 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal class EnumGenerator : SourceGeneratorBase<EnumDescriptor>, ISourceGenerator

+    {

+        internal EnumGenerator(EnumDescriptor descriptor) : base(descriptor)

+        {

+        }

+

+        // TODO(jonskeet): Write out enum descriptors? Can be retrieved from file...

+        public void Generate(TextGenerator writer)

+        {

+            WriteGeneratedCodeAttributes(writer);

+            writer.WriteLine("{0} enum {1} {{", ClassAccessLevel, Descriptor.Name);

+            writer.Indent();

+            foreach (EnumValueDescriptor value in Descriptor.Values)

+            {

+                writer.WriteLine("{0} = {1},", value.Name, value.Number);

+            }

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine();

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/ExtensionGenerator.cs b/csharp/src/ProtoGen/ExtensionGenerator.cs
new file mode 100644
index 0000000..a862a7a
--- /dev/null
+++ b/csharp/src/ProtoGen/ExtensionGenerator.cs
@@ -0,0 +1,183 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal class ExtensionGenerator : FieldGeneratorBase, ISourceGenerator

+    {

+        private readonly string extends;

+        private readonly string scope;

+        private readonly string type;

+        private readonly string name;

+

+        internal ExtensionGenerator(FieldDescriptor descriptor)

+            : base(descriptor, 0)

+        {

+            if (Descriptor.ExtensionScope != null)

+            {

+                scope = GetClassName(Descriptor.ExtensionScope);

+            }

+            else

+            {

+                scope = DescriptorUtil.GetFullUmbrellaClassName(Descriptor.File);

+            }

+            switch (Descriptor.MappedType)

+            {

+                case MappedType.Message:

+                    type = GetClassName(Descriptor.MessageType);

+                    break;

+                case MappedType.Enum:

+                    type = GetClassName(Descriptor.EnumType);

+                    break;

+                default:

+                    type = DescriptorUtil.GetMappedTypeName(Descriptor.MappedType);

+                    break;

+            }

+            extends = GetClassName(Descriptor.ContainingType);

+            name = Descriptor.CSharpOptions.PropertyName;

+        }

+

+        public void Generate(TextGenerator writer)

+        {

+            if (Descriptor.File.CSharpOptions.ClsCompliance && GetFieldConstantName(Descriptor).StartsWith("_"))

+            {

+                writer.WriteLine("[global::System.CLSCompliant(false)]");

+            }

+

+            writer.WriteLine("public const int {0} = {1};", GetFieldConstantName(Descriptor), Descriptor.FieldNumber);

+

+            if (UseLiteRuntime)

+            {

+                if (Descriptor.MappedType == MappedType.Message && Descriptor.MessageType.Options.MessageSetWireFormat)

+                {

+                    throw new ArgumentException(

+                        "option message_set_wire_format = true; is not supported in Lite runtime extensions.");

+                }

+                if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance)

+                {

+                    writer.WriteLine("[global::System.CLSCompliant(false)]");

+                }

+                writer.WriteLine("{0} static pb::{4}<{1}, {2}> {3};", ClassAccessLevel, extends, type, name,

+                                 Descriptor.IsRepeated ? "GeneratedRepeatExtensionLite" : "GeneratedExtensionLite");

+            }

+            else if (Descriptor.IsRepeated)

+            {

+                if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance)

+                {

+                    writer.WriteLine("[global::System.CLSCompliant(false)]");

+                }

+                writer.WriteLine("{0} static pb::GeneratedExtensionBase<scg::IList<{1}>> {2};", ClassAccessLevel, type,

+                                 name);

+            }

+            else

+            {

+                if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance)

+                {

+                    writer.WriteLine("[global::System.CLSCompliant(false)]");

+                }

+                writer.WriteLine("{0} static pb::GeneratedExtensionBase<{1}> {2};", ClassAccessLevel, type, name);

+            }

+        }

+

+        internal void GenerateStaticVariableInitializers(TextGenerator writer)

+        {

+            if (UseLiteRuntime)

+            {

+                writer.WriteLine("{0}.{1} = ", scope, name);

+                writer.Indent();

+                writer.WriteLine("new pb::{0}<{1}, {2}>(",

+                                 Descriptor.IsRepeated ? "GeneratedRepeatExtensionLite" : "GeneratedExtensionLite",

+                                 extends, type);

+                writer.Indent();

+                writer.WriteLine("\"{0}\",", Descriptor.FullName);

+                writer.WriteLine("{0}.DefaultInstance,", extends);

+                if (!Descriptor.IsRepeated)

+                {

+                    writer.WriteLine("{0},",

+                                     Descriptor.HasDefaultValue

+                                         ? DefaultValue

+                                         : IsNullableType ? "null" : "default(" + type + ")");

+                }

+                writer.WriteLine("{0},",

+                                 (Descriptor.MappedType == MappedType.Message) ? type + ".DefaultInstance" : "null");

+                writer.WriteLine("{0},",

+                                 (Descriptor.MappedType == MappedType.Enum) ? "new EnumLiteMap<" + type + ">()" : "null");

+                writer.WriteLine("{0}.{1}FieldNumber,", scope, name);

+                writer.Write("pbd::FieldType.{0}", Descriptor.FieldType);

+                if (Descriptor.IsRepeated)

+                {

+                    writer.WriteLine(",");

+                    writer.Write(Descriptor.IsPacked ? "true" : "false");

+                }

+                writer.Outdent();

+                writer.WriteLine(");");

+                writer.Outdent();

+            }

+            else if (Descriptor.IsRepeated)

+            {

+                writer.WriteLine(

+                    "{0}.{1} = pb::GeneratedRepeatExtension<{2}>.CreateInstance({0}.Descriptor.Extensions[{3}]);", scope,

+                    name, type, Descriptor.Index);

+            }

+            else

+            {

+                writer.WriteLine(

+                    "{0}.{1} = pb::GeneratedSingleExtension<{2}>.CreateInstance({0}.Descriptor.Extensions[{3}]);", scope,

+                    name, type, Descriptor.Index);

+            }

+        }

+

+        internal void GenerateExtensionRegistrationCode(TextGenerator writer)

+        {

+            writer.WriteLine("registry.Add({0}.{1});", scope, name);

+        }

+

+        public override void WriteHash(TextGenerator writer)

+        {

+        }

+

+        public override void WriteEquals(TextGenerator writer)

+        {

+        }

+

+        public override void WriteToString(TextGenerator writer)

+        {

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/FieldGeneratorBase.cs b/csharp/src/ProtoGen/FieldGeneratorBase.cs
new file mode 100644
index 0000000..93aee6c
--- /dev/null
+++ b/csharp/src/ProtoGen/FieldGeneratorBase.cs
@@ -0,0 +1,389 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Globalization;

+using System.Text;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal abstract class FieldGeneratorBase : SourceGeneratorBase<FieldDescriptor>

+    {

+        private readonly int _fieldOrdinal;

+

+        protected FieldGeneratorBase(FieldDescriptor descriptor, int fieldOrdinal)

+            : base(descriptor)

+        {

+            _fieldOrdinal = fieldOrdinal;

+        }

+

+        public abstract void WriteHash(TextGenerator writer);

+        public abstract void WriteEquals(TextGenerator writer);

+        public abstract void WriteToString(TextGenerator writer);

+

+        public int FieldOrdinal

+        {

+            get { return _fieldOrdinal; }

+        }

+

+        private static bool AllPrintableAscii(string text)

+        {

+            foreach (char c in text)

+            {

+                if (c < 0x20 || c > 0x7e)

+                {

+                    return false;

+                }

+            }

+            return true;

+        }

+

+        /// <summary>

+        /// This returns true if the field has a non-default default value.  For instance this returns 

+        /// false for numerics with a default of zero '0', or booleans with a default of false.

+        /// </summary>

+        protected bool HasDefaultValue

+        {

+            get

+            {

+                switch (Descriptor.FieldType)

+                {

+                    case FieldType.Float:

+                    case FieldType.Double:

+                    case FieldType.Int32:

+                    case FieldType.Int64:

+                    case FieldType.SInt32:

+                    case FieldType.SInt64:

+                    case FieldType.SFixed32:

+                    case FieldType.SFixed64:

+                    case FieldType.UInt32:

+                    case FieldType.UInt64:

+                    case FieldType.Fixed32:

+                    case FieldType.Fixed64:

+                        {

+                            IConvertible value = (IConvertible) Descriptor.DefaultValue;

+                            return value.ToString(CultureInfo.InvariantCulture) != "0";

+                        }

+                    case FieldType.Bool:

+                        return ((bool) Descriptor.DefaultValue) == true;

+                    default:

+                        return true;

+                }

+            }

+        }

+

+        /// <remarks>Copy exists in ExtensionGenerator.cs</remarks>

+        protected string DefaultValue

+        {

+            get

+            {

+                string suffix = "";

+                switch (Descriptor.FieldType)

+                {

+                    case FieldType.Float:

+                        suffix = "F";

+                        break;

+                    case FieldType.Double:

+                        suffix = "D";

+                        break;

+                    case FieldType.Int64:

+                        suffix = "L";

+                        break;

+                    case FieldType.UInt64:

+                        suffix = "UL";

+                        break;

+                }

+                switch (Descriptor.FieldType)

+                {

+                    case FieldType.Float:

+                    case FieldType.Double:

+                    case FieldType.Int32:

+                    case FieldType.Int64:

+                    case FieldType.SInt32:

+                    case FieldType.SInt64:

+                    case FieldType.SFixed32:

+                    case FieldType.SFixed64:

+                    case FieldType.UInt32:

+                    case FieldType.UInt64:

+                    case FieldType.Fixed32:

+                    case FieldType.Fixed64:

+                        {

+                            // The simple Object.ToString converts using the current culture.

+                            // We want to always use the invariant culture so it's predictable.

+                            IConvertible value = (IConvertible) Descriptor.DefaultValue;

+                            //a few things that must be handled explicitly

+                            if (Descriptor.FieldType == FieldType.Double && value is double)

+                            {

+                                if (double.IsNaN((double) value))

+                                {

+                                    return "double.NaN";

+                                }

+                                if (double.IsPositiveInfinity((double) value))

+                                {

+                                    return "double.PositiveInfinity";

+                                }

+                                if (double.IsNegativeInfinity((double) value))

+                                {

+                                    return "double.NegativeInfinity";

+                                }

+                            }

+                            else if (Descriptor.FieldType == FieldType.Float && value is float)

+                            {

+                                if (float.IsNaN((float) value))

+                                {

+                                    return "float.NaN";

+                                }

+                                if (float.IsPositiveInfinity((float) value))

+                                {

+                                    return "float.PositiveInfinity";

+                                }

+                                if (float.IsNegativeInfinity((float) value))

+                                {

+                                    return "float.NegativeInfinity";

+                                }

+                            }

+                            return value.ToString(CultureInfo.InvariantCulture) + suffix;

+                        }

+                    case FieldType.Bool:

+                        return (bool) Descriptor.DefaultValue ? "true" : "false";

+

+                    case FieldType.Bytes:

+                        if (!Descriptor.HasDefaultValue)

+                        {

+                            return "pb::ByteString.Empty";

+                        }

+                        if (UseLiteRuntime && Descriptor.DefaultValue is ByteString)

+                        {

+                            string temp = (((ByteString) Descriptor.DefaultValue).ToBase64());

+                            return String.Format("pb::ByteString.FromBase64(\"{0}\")", temp);

+                        }

+                        return string.Format("(pb::ByteString) {0}.Descriptor.Fields[{1}].DefaultValue",

+                                             GetClassName(Descriptor.ContainingType), Descriptor.Index);

+                    case FieldType.String:

+                        if (AllPrintableAscii(Descriptor.Proto.DefaultValue))

+                        {

+                            // All chars are ASCII and printable.  In this case we only

+                            // need to escape quotes and backslashes.

+                            return "\"" + Descriptor.Proto.DefaultValue

+                                              .Replace("\\", "\\\\")

+                                              .Replace("'", "\\'")

+                                              .Replace("\"", "\\\"")

+                                   + "\"";

+                        }

+                        if (UseLiteRuntime && Descriptor.DefaultValue is String)

+                        {

+                            string temp = Convert.ToBase64String(

+                                    Encoding.UTF8.GetBytes((String) Descriptor.DefaultValue));

+                            return String.Format("pb::ByteString.FromBase64(\"{0}\").ToStringUtf8()", temp);

+                        }

+                        return string.Format("(string) {0}.Descriptor.Fields[{1}].DefaultValue",

+                                             GetClassName(Descriptor.ContainingType), Descriptor.Index);

+                    case FieldType.Enum:

+                        return TypeName + "." + ((EnumValueDescriptor) Descriptor.DefaultValue).Name;

+                    case FieldType.Message:

+                    case FieldType.Group:

+                        return TypeName + ".DefaultInstance";

+                    default:

+                        throw new InvalidOperationException("Invalid field descriptor type");

+                }

+            }

+        }

+

+        protected string PropertyName

+        {

+            get { return Descriptor.CSharpOptions.PropertyName; }

+        }

+

+        protected string Name

+        {

+            get { return NameHelpers.UnderscoresToCamelCase(GetFieldName(Descriptor)); }

+        }

+

+        protected int Number

+        {

+            get { return Descriptor.FieldNumber; }

+        }

+

+        protected void AddNullCheck(TextGenerator writer)

+        {

+            AddNullCheck(writer, "value");

+        }

+

+        protected void AddNullCheck(TextGenerator writer, string name)

+        {

+            if (IsNullableType)

+            {

+                writer.WriteLine("  pb::ThrowHelper.ThrowIfNull({0}, \"{0}\");", name);

+            }

+        }

+

+        protected void AddPublicMemberAttributes(TextGenerator writer)

+        {

+            AddDeprecatedFlag(writer);

+            AddClsComplianceCheck(writer);

+        }

+

+        protected void AddClsComplianceCheck(TextGenerator writer)

+        {

+            if (!Descriptor.IsCLSCompliant && Descriptor.File.CSharpOptions.ClsCompliance)

+            {

+                writer.WriteLine("[global::System.CLSCompliant(false)]");

+            }

+        }

+

+        protected bool IsObsolete { get { return Descriptor.Options.Deprecated; } }

+

+        /// <summary>

+        /// Writes [global::System.ObsoleteAttribute()] if the member is obsolete

+        /// </summary>

+        protected void AddDeprecatedFlag(TextGenerator writer)

+        {

+            if (IsObsolete)

+            {

+                writer.WriteLine("[global::System.ObsoleteAttribute()]");

+            }

+        }

+

+        /// <summary>

+        /// For encodings with fixed sizes, returns that size in bytes.  Otherwise

+        /// returns -1. TODO(jonskeet): Make this less ugly.

+        /// </summary>

+        protected int FixedSize

+        {

+            get

+            {

+                switch (Descriptor.FieldType)

+                {

+                    case FieldType.UInt32:

+                    case FieldType.UInt64:

+                    case FieldType.Int32:

+                    case FieldType.Int64:

+                    case FieldType.SInt32:

+                    case FieldType.SInt64:

+                    case FieldType.Enum:

+                    case FieldType.Bytes:

+                    case FieldType.String:

+                    case FieldType.Message:

+                    case FieldType.Group:

+                        return -1;

+                    case FieldType.Float:

+                        return WireFormat.FloatSize;

+                    case FieldType.SFixed32:

+                        return WireFormat.SFixed32Size;

+                    case FieldType.Fixed32:

+                        return WireFormat.Fixed32Size;

+                    case FieldType.Double:

+                        return WireFormat.DoubleSize;

+                    case FieldType.SFixed64:

+                        return WireFormat.SFixed64Size;

+                    case FieldType.Fixed64:

+                        return WireFormat.Fixed64Size;

+                    case FieldType.Bool:

+                        return WireFormat.BoolSize;

+                    default:

+                        throw new InvalidOperationException("Invalid field descriptor type");

+                }

+            }

+        }

+

+        protected bool IsNullableType

+        {

+            get

+            {

+                switch (Descriptor.FieldType)

+                {

+                    case FieldType.Float:

+                    case FieldType.Double:

+                    case FieldType.Int32:

+                    case FieldType.Int64:

+                    case FieldType.SInt32:

+                    case FieldType.SInt64:

+                    case FieldType.SFixed32:

+                    case FieldType.SFixed64:

+                    case FieldType.UInt32:

+                    case FieldType.UInt64:

+                    case FieldType.Fixed32:

+                    case FieldType.Fixed64:

+                    case FieldType.Bool:

+                    case FieldType.Enum:

+                        return false;

+                    case FieldType.Bytes:

+                    case FieldType.String:

+                    case FieldType.Message:

+                    case FieldType.Group:

+                        return true;

+                    default:

+                        throw new InvalidOperationException("Invalid field descriptor type");

+                }

+            }

+        }

+

+        protected string TypeName

+        {

+            get

+            {

+                switch (Descriptor.FieldType)

+                {

+                    case FieldType.Enum:

+                        return GetClassName(Descriptor.EnumType);

+                    case FieldType.Message:

+                    case FieldType.Group:

+                        return GetClassName(Descriptor.MessageType);

+                    default:

+                        return DescriptorUtil.GetMappedTypeName(Descriptor.MappedType);

+                }

+            }

+        }

+

+        protected string MessageOrGroup

+        {

+            get { return Descriptor.FieldType == FieldType.Group ? "Group" : "Message"; }

+        }

+

+        /// <summary>

+        /// Returns the type name as used in CodedInputStream method names: SFixed32, UInt32 etc.

+        /// </summary>

+        protected string CapitalizedTypeName

+        {

+            get

+            {

+                // Our enum names match perfectly. How serendipitous.

+                return Descriptor.FieldType.ToString();

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/Generator.cs b/csharp/src/ProtoGen/Generator.cs
new file mode 100644
index 0000000..bc481ec
--- /dev/null
+++ b/csharp/src/ProtoGen/Generator.cs
@@ -0,0 +1,267 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.IO;

+using System.Text;

+using Google.ProtocolBuffers.Collections;

+using Google.ProtocolBuffers.Compiler.PluginProto;

+using Google.ProtocolBuffers.DescriptorProtos;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    /// <summary>

+    /// Code generator for protocol buffers. Only C# is supported at the moment.

+    /// </summary>

+    public sealed class Generator

+    {

+        private readonly GeneratorOptions options;

+

+        private Generator(GeneratorOptions options)

+        {

+            options.Validate();

+            this.options = options;

+        }

+

+        /// <summary>

+        /// Returns a generator configured with the specified options.

+        /// </summary>

+        public static Generator CreateGenerator(GeneratorOptions options)

+        {

+            return new Generator(options);

+        }

+

+        public void Generate(CodeGeneratorRequest request, CodeGeneratorResponse.Builder response)

+        {

+            IList<FileDescriptor> descriptors = ConvertDescriptors(options.FileOptions, request.ProtoFileList);

+

+            // Combine with options from command line

+            foreach (FileDescriptor descriptor in descriptors)

+            {

+                descriptor.ConfigureWithDefaultOptions(options.FileOptions);

+            }

+

+            bool duplicates = false;

+            Dictionary<string, bool> names = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);

+            foreach (FileDescriptor descriptor in descriptors)

+            {

+                string file = GetOutputFile(descriptor, false);

+                if (names.ContainsKey(file))

+                {

+                    duplicates = true;

+                    break;

+                }

+                names.Add(file, true);

+            }

+

+            //ROK - Changed to dictionary from HashSet to allow 2.0 compile

+            var filesToGenerate = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

+            foreach (var item in request.FileToGenerateList)

+            {

+                filesToGenerate[item] = null;

+            }

+            foreach (FileDescriptor descriptor in descriptors)

+            {

+                // Optionally exclude descriptors in google.protobuf

+                if (descriptor.CSharpOptions.IgnoreGoogleProtobuf && descriptor.Package == "google.protobuf")

+                {

+                    continue;

+                }

+                if (filesToGenerate.ContainsKey(descriptor.Name))

+                {

+                    Generate(descriptor, duplicates, response);

+                }

+            }

+        }

+

+        /// <summary>

+        /// Generates code for a particular file. All dependencies must

+        /// already have been resolved.

+        /// </summary>

+        private void Generate(FileDescriptor descriptor, bool duplicates, CodeGeneratorResponse.Builder response)

+        {

+            var code = new StringBuilder();

+            var ucg = new UmbrellaClassGenerator(descriptor);

+            using (StringWriter textWriter = new StringWriter(code))

+            {

+                TextGenerator writer = new TextGenerator(textWriter, options.LineBreak);

+                ucg.Generate(writer);

+            }

+            response.AddFile(new CodeGeneratorResponse.Types.File.Builder

+            {

+                Name = GetOutputFile(descriptor, duplicates),

+                Content = code.ToString(),

+            }.Build());

+        }

+

+        private string GetOutputFile(FileDescriptor descriptor, bool duplicates)

+        {

+            CSharpFileOptions fileOptions = descriptor.CSharpOptions;

+

+            string filename = descriptor.CSharpOptions.UmbrellaClassname + descriptor.CSharpOptions.FileExtension;

+            if (duplicates)

+            {

+                string namepart;

+                if (String.IsNullOrEmpty(descriptor.Name) || String.IsNullOrEmpty(namepart = Path.GetFileNameWithoutExtension(descriptor.Name)))

+                    throw new ApplicationException("Duplicate UmbrellaClassname options created a file name collision.");

+

+                filename = namepart + descriptor.CSharpOptions.FileExtension;

+            }

+

+            string outputDirectory = descriptor.CSharpOptions.OutputDirectory;

+            if (fileOptions.ExpandNamespaceDirectories)

+            {

+                string package = fileOptions.Namespace;

+                if (!string.IsNullOrEmpty(package))

+                {

+                    string[] bits = package.Split('.');

+                    foreach (string bit in bits)

+                    {

+                        outputDirectory = Path.Combine(outputDirectory, bit);

+                    }

+                }

+            }

+

+            // As the directory can be explicitly specified in options, we need to make sure it exists

+            Directory.CreateDirectory(outputDirectory);

+            return Path.Combine(outputDirectory, filename);

+        }

+

+        /// <summary>

+        /// Resolves any dependencies and converts FileDescriptorProtos into FileDescriptors.

+        /// The list returned is in the same order as the protos are listed in the descriptor set.

+        /// Note: this method is internal rather than private to allow testing.

+        /// </summary>

+        /// <exception cref="DependencyResolutionException">Not all dependencies could be resolved.</exception>

+        public static IList<FileDescriptor> ConvertDescriptors(CSharpFileOptions options,

+                                                               IList<FileDescriptorProto> fileList)

+        {

+            FileDescriptor[] converted = new FileDescriptor[fileList.Count];

+

+            Dictionary<string, FileDescriptor> convertedMap = new Dictionary<string, FileDescriptor>();

+

+            int totalConverted = 0;

+

+            bool madeProgress = true;

+            while (madeProgress && totalConverted < converted.Length)

+            {

+                madeProgress = false;

+                for (int i = 0; i < converted.Length; i++)

+                {

+                    if (converted[i] != null)

+                    {

+                        // Already done this one

+                        continue;

+                    }

+                    FileDescriptorProto candidate = fileList[i];

+                    FileDescriptor[] dependencies = new FileDescriptor[candidate.DependencyList.Count];

+

+

+                    CSharpFileOptions.Builder builder = options.ToBuilder();

+                    if (candidate.Options.HasExtension(CSharpOptions.CSharpFileOptions))

+                    {

+                        builder.MergeFrom(

+                            candidate.Options.GetExtension(CSharpOptions.CSharpFileOptions));

+                    }

+                    CSharpFileOptions localOptions = builder.Build();

+

+                    bool foundAllDependencies = true;

+                    for (int j = 0; j < dependencies.Length; j++)

+                    {

+                        if (!convertedMap.TryGetValue(candidate.DependencyList[j], out dependencies[j]))

+                        {

+                            // We can auto-magically resolve these since we already have their description

+                            // This way if the file is only referencing options it does not need to be built with the

+                            // --include_imports definition.

+                            if (localOptions.IgnoreGoogleProtobuf &&

+                                (candidate.DependencyList[j] == "google/protobuf/csharp_options.proto"))

+                            {

+                                dependencies[j] = CSharpOptions.Descriptor;

+                                continue;

+                            }

+                            if (localOptions.IgnoreGoogleProtobuf &&

+                                (candidate.DependencyList[j] == "google/protobuf/descriptor.proto"))

+                            {

+                                dependencies[j] = DescriptorProtoFile.Descriptor;

+                                continue;

+                            }

+                            foundAllDependencies = false;

+                            break;

+                        }

+                    }

+                    if (!foundAllDependencies)

+                    {

+                        continue;

+                    }

+                    madeProgress = true;

+                    totalConverted++;

+                    converted[i] = FileDescriptor.BuildFrom(candidate, dependencies);

+                    convertedMap[candidate.Name] = converted[i];

+                }

+            }

+            if (!madeProgress)

+            {

+                StringBuilder remaining = new StringBuilder();

+                for (int i = 0; i < converted.Length; i++)

+                {

+                    if (converted[i] == null)

+                    {

+                        if (remaining.Length != 0)

+                        {

+                            remaining.Append(", ");

+                        }

+                        FileDescriptorProto failure = fileList[i];

+                        remaining.Append(failure.Name);

+                        remaining.Append(":");

+                        foreach (string dependency in failure.DependencyList)

+                        {

+                            if (!convertedMap.ContainsKey(dependency))

+                            {

+                                remaining.Append(" ");

+                                remaining.Append(dependency);

+                            }

+                        }

+                        remaining.Append(";");

+                    }

+                }

+                throw new DependencyResolutionException("Unable to resolve all dependencies: " + remaining);

+            }

+            return Lists.AsReadOnly(converted);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/GeneratorOptions.cs b/csharp/src/ProtoGen/GeneratorOptions.cs
new file mode 100644
index 0000000..ec500d8
--- /dev/null
+++ b/csharp/src/ProtoGen/GeneratorOptions.cs
@@ -0,0 +1,330 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.IO;

+using System.Text.RegularExpressions;

+using Google.ProtocolBuffers.DescriptorProtos;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    /// <summary>

+    /// All the configuration required for the generator - where to generate

+    /// output files, the location of input files etc. While this isn't immutable

+    /// in practice, the contents shouldn't be changed after being passed to

+    /// the generator.

+    /// </summary>

+    public sealed class GeneratorOptions

+    {

+        private static Dictionary<string, string> LineBreaks =

+            new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)

+                {

+                    {"Windows", "\r\n"},

+                    {"Unix", "\n"},

+                    {"Default", Environment.NewLine}

+                };

+

+        public IList<string> InputFiles { get; set; }

+

+        public GeneratorOptions()

+        {

+            LineBreak = Environment.NewLine;

+        }

+

+        /// <summary>

+        /// Attempts to validate the options, but doesn't throw an exception if they're invalid.

+        /// Instead, when this method returns false, the output variable will contain a collection

+        /// of reasons for the validation failure.

+        /// </summary>

+        /// <param name="reasons">Variable to receive a list of reasons in case of validation failure.</param>

+        /// <returns>true if the options are valid; false otherwise</returns>

+        public bool TryValidate(out IList<string> reasons)

+        {

+            List<string> tmpReasons = new List<string>();

+

+            ParseArguments(tmpReasons);

+

+            // Output directory validation

+            if (string.IsNullOrEmpty(FileOptions.OutputDirectory))

+            {

+                tmpReasons.Add("No output directory specified");

+            }

+            else

+            {

+                if (!Directory.Exists(FileOptions.OutputDirectory))

+                {

+                    tmpReasons.Add("Specified output directory (" + FileOptions.OutputDirectory + " doesn't exist.");

+                }

+            }

+

+            // Input file validation (just in terms of presence)

+            if (InputFiles == null || InputFiles.Count == 0)

+            {

+                tmpReasons.Add("No input files specified");

+            }

+            else

+            {

+                foreach (string input in InputFiles)

+                {

+                    FileInfo fi = new FileInfo(input);

+                    if (!fi.Exists)

+                    {

+                        tmpReasons.Add("Input file " + input + " doesn't exist.");

+                    }

+                }

+            }

+

+            if (tmpReasons.Count != 0)

+            {

+                reasons = tmpReasons;

+                return false;

+            }

+

+            reasons = null;

+            return true;

+        }

+

+        /// <summary>

+        /// Validates that all the options have been set and are valid,

+        /// throwing an exception if they haven't.

+        /// </summary>

+        /// <exception cref="InvalidOptionsException">The options are invalid.</exception>

+        public void Validate()

+        {

+            IList<string> reasons;

+            if (!TryValidate(out reasons))

+            {

+                throw new InvalidOptionsException(reasons);

+            }

+        }

+

+        // Raw arguments, used to provide defaults for proto file options

+        public IList<string> Arguments { get; set; }

+

+        [Obsolete("Please use GeneratorOptions.FileOptions.OutputDirectory instead")]

+        public string OutputDirectory

+        {

+            get { return FileOptions.OutputDirectory; }

+            set

+            {

+                CSharpFileOptions.Builder bld = FileOptions.ToBuilder();

+                bld.OutputDirectory = value;

+                FileOptions = bld.Build();

+            }

+        }

+

+        private static readonly Regex ArgMatch = new Regex(@"^[-/](?<name>[\w_]+?)[:=](?<value>.*)$");

+        private CSharpFileOptions fileOptions;

+

+        public CSharpFileOptions FileOptions

+        {

+            get { return fileOptions ?? (fileOptions = CSharpFileOptions.DefaultInstance); }

+            set { fileOptions = value; }

+        }

+

+        public string LineBreak { get; set; }

+

+        private void ParseArguments(IList<string> tmpReasons)

+        {

+            bool doHelp = Arguments.Count == 0;

+

+            InputFiles = new List<string>();

+            CSharpFileOptions.Builder builder = FileOptions.ToBuilder();

+            Dictionary<string, FieldDescriptor> fields =

+                new Dictionary<string, FieldDescriptor>(StringComparer.OrdinalIgnoreCase);

+            foreach (FieldDescriptor fld in builder.DescriptorForType.Fields)

+            {

+                fields.Add(fld.Name, fld);

+            }

+

+            foreach (string argument in Arguments)

+            {

+                if (StringComparer.OrdinalIgnoreCase.Equals("-help", argument) ||

+                    StringComparer.OrdinalIgnoreCase.Equals("/help", argument) ||

+                    StringComparer.OrdinalIgnoreCase.Equals("-?", argument) ||

+                    StringComparer.OrdinalIgnoreCase.Equals("/?", argument))

+                {

+                    doHelp = true;

+                    break;

+                }

+

+                Match m = ArgMatch.Match(argument);

+                if (m.Success)

+                {

+                    FieldDescriptor fld;

+                    string name = m.Groups["name"].Value;

+                    string value = m.Groups["value"].Value;

+

+                    if (fields.TryGetValue(name, out fld))

+                    {

+                        object obj;

+                        if (TryCoerceType(value, fld, out obj, tmpReasons))

+                        {

+                            builder[fld] = obj;

+                        }

+                    }

+                    else if (name == "line_break")

+                    {

+                        string tmp;

+                        if (LineBreaks.TryGetValue(value, out tmp))

+                        {

+                            LineBreak = tmp;

+                        }

+                        else

+                        {

+                            tmpReasons.Add("Invalid value for 'line_break': " + value + ".");

+                        }

+                    }

+                    else if (!File.Exists(argument))

+                    {

+                        doHelp = true;

+                        tmpReasons.Add("Unknown argument '" + name + "'.");

+                    }

+                    else

+                    {

+                        InputFiles.Add(argument);

+                    }

+                }

+                else

+                {

+                    InputFiles.Add(argument);

+                }

+            }

+

+            if (doHelp || InputFiles.Count == 0)

+            {

+                tmpReasons.Add("Arguments:");

+                foreach (KeyValuePair<string, FieldDescriptor> field in fields)

+                {

+                    tmpReasons.Add(String.Format("-{0}=[{1}]", field.Key, field.Value.FieldType));

+                }

+                tmpReasons.Add("-line_break=[" + string.Join("|", new List<string>(LineBreaks.Keys).ToArray()) + "]");

+                tmpReasons.Add("followed by one or more file paths.");

+            }

+            else

+            {

+                FileOptions = builder.Build();

+            }

+        }

+

+        private static bool TryCoerceType(string text, FieldDescriptor field, out object value, IList<string> tmpReasons)

+        {

+            value = null;

+

+            switch (field.FieldType)

+            {

+                case FieldType.Int32:

+                case FieldType.SInt32:

+                case FieldType.SFixed32:

+                    value = Int32.Parse(text);

+                    break;

+

+                case FieldType.Int64:

+                case FieldType.SInt64:

+                case FieldType.SFixed64:

+                    value = Int64.Parse(text);

+                    break;

+

+                case FieldType.UInt32:

+                case FieldType.Fixed32:

+                    value = UInt32.Parse(text);

+                    break;

+

+                case FieldType.UInt64:

+                case FieldType.Fixed64:

+                    value = UInt64.Parse(text);

+                    break;

+

+                case FieldType.Float:

+                    value = float.Parse(text);

+                    break;

+

+                case FieldType.Double:

+                    value = Double.Parse(text);

+                    break;

+

+                case FieldType.Bool:

+                    value = Boolean.Parse(text);

+                    break;

+

+                case FieldType.String:

+                    value = text;

+                    break;

+

+                case FieldType.Enum:

+                    {

+                        EnumDescriptor enumType = field.EnumType;

+

+                        int number;

+                        if (int.TryParse(text, out number))

+                        {

+                            value = enumType.FindValueByNumber(number);

+                            if (value == null)

+                            {

+                                tmpReasons.Add(

+                                    "Enum type \"" + enumType.FullName +

+                                    "\" has no value with number " + number + ".");

+                                return false;

+                            }

+                        }

+                        else

+                        {

+                            value = enumType.FindValueByName(text);

+                            if (value == null)

+                            {

+                                tmpReasons.Add(

+                                    "Enum type \"" + enumType.FullName +

+                                    "\" has no value named \"" + text + "\".");

+                                return false;

+                            }

+                        }

+

+                        break;

+                    }

+

+                case FieldType.Bytes:

+                case FieldType.Message:

+                case FieldType.Group:

+                    tmpReasons.Add("Unhandled field type " + field.FieldType.ToString() + ".");

+                    return false;

+            }

+

+            return true;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/Helpers.cs b/csharp/src/ProtoGen/Helpers.cs
new file mode 100644
index 0000000..3c00115
--- /dev/null
+++ b/csharp/src/ProtoGen/Helpers.cs
@@ -0,0 +1,45 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    /// <summary>

+    /// Helpers to resolve class names etc.

+    /// </summary>

+    internal static class Helpers

+    {

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/IFieldSourceGenerator.cs b/csharp/src/ProtoGen/IFieldSourceGenerator.cs
new file mode 100644
index 0000000..f53ae5e
--- /dev/null
+++ b/csharp/src/ProtoGen/IFieldSourceGenerator.cs
@@ -0,0 +1,53 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal interface IFieldSourceGenerator

+    {

+        void GenerateMembers(TextGenerator writer);

+        void GenerateBuilderMembers(TextGenerator writer);

+        void GenerateMergingCode(TextGenerator writer);

+        void GenerateBuildingCode(TextGenerator writer);

+        void GenerateParsingCode(TextGenerator writer);

+        void GenerateSerializationCode(TextGenerator writer);

+        void GenerateSerializedSizeCode(TextGenerator writer);

+

+        void WriteHash(TextGenerator writer);

+        void WriteEquals(TextGenerator writer);

+        void WriteToString(TextGenerator writer);

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/ISourceGenerator.cs b/csharp/src/ProtoGen/ISourceGenerator.cs
new file mode 100644
index 0000000..452d854
--- /dev/null
+++ b/csharp/src/ProtoGen/ISourceGenerator.cs
@@ -0,0 +1,43 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal interface ISourceGenerator

+    {

+        void Generate(TextGenerator writer);

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/InvalidOptionsException.cs b/csharp/src/ProtoGen/InvalidOptionsException.cs
new file mode 100644
index 0000000..fb69849
--- /dev/null
+++ b/csharp/src/ProtoGen/InvalidOptionsException.cs
@@ -0,0 +1,77 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.Text;

+using Google.ProtocolBuffers.Collections;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    /// <summary>

+    /// Exception thrown to indicate that the options passed were invalid.

+    /// </summary>

+    public sealed class InvalidOptionsException : Exception

+    {

+        private readonly IList<string> reasons;

+

+        /// <summary>

+        /// An immutable list of reasons why the options were invalid.

+        /// </summary>

+        public IList<string> Reasons

+        {

+            get { return reasons; }

+        }

+

+        public InvalidOptionsException(IList<string> reasons)

+            : base(BuildMessage(reasons))

+        {

+            this.reasons = Lists.AsReadOnly(reasons);

+        }

+

+        private static string BuildMessage(IEnumerable<string> reasons)

+        {

+            StringBuilder builder = new StringBuilder("Invalid options:");

+            builder.AppendLine();

+            foreach (string reason in reasons)

+            {

+                builder.Append("  ");

+                builder.AppendLine(reason);

+            }

+            return builder.ToString();

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/MessageFieldGenerator.cs b/csharp/src/ProtoGen/MessageFieldGenerator.cs
new file mode 100644
index 0000000..25b58a6
--- /dev/null
+++ b/csharp/src/ProtoGen/MessageFieldGenerator.cs
@@ -0,0 +1,174 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal class MessageFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator

+    {

+        internal MessageFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal)

+            : base(descriptor, fieldOrdinal)

+        {

+        }

+

+        public void GenerateMembers(TextGenerator writer)

+        {

+            writer.WriteLine("private bool has{0};", PropertyName);

+            writer.WriteLine("private {0} {1}_;", TypeName, Name);

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public bool Has{0} {{", PropertyName);

+            writer.WriteLine("  get {{ return has{0}; }}", PropertyName);

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public {0} {1} {{", TypeName, PropertyName);

+            writer.WriteLine("  get {{ return {0}_ ?? {1}; }}", Name, DefaultValue);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateBuilderMembers(TextGenerator writer)

+        {

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public bool Has{0} {{", PropertyName);

+            writer.WriteLine(" get {{ return result.has{0}; }}", PropertyName);

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public {0} {1} {{", TypeName, PropertyName);

+            writer.WriteLine("  get {{ return result.{0}; }}", PropertyName);

+            writer.WriteLine("  set {{ Set{0}(value); }}", PropertyName);

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName);

+            AddNullCheck(writer);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.has{0} = true;", PropertyName);

+            writer.WriteLine("  result.{0}_ = value;", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Set{0}({1}.Builder builderForValue) {{", PropertyName, TypeName);

+            AddNullCheck(writer, "builderForValue");

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.has{0} = true;", PropertyName);

+            writer.WriteLine("  result.{0}_ = builderForValue.Build();", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Merge{0}({1} value) {{", PropertyName, TypeName);

+            AddNullCheck(writer);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  if (result.has{0} &&", PropertyName);

+            writer.WriteLine("      result.{0}_ != {1}) {{", Name, DefaultValue);

+            writer.WriteLine("      result.{0}_ = {1}.CreateBuilder(result.{0}_).MergeFrom(value).BuildPartial();", Name,

+                             TypeName);

+            writer.WriteLine("  } else {");

+            writer.WriteLine("    result.{0}_ = value;", Name);

+            writer.WriteLine("  }");

+            writer.WriteLine("  result.has{0} = true;", PropertyName);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Clear{0}() {{", PropertyName);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.has{0} = false;", PropertyName);

+            writer.WriteLine("  result.{0}_ = null;", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+        }

+

+        public void GenerateMergingCode(TextGenerator writer)

+        {

+            writer.WriteLine("if (other.Has{0}) {{", PropertyName);

+            writer.WriteLine("  Merge{0}(other.{0});", PropertyName);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateBuildingCode(TextGenerator writer)

+        {

+            // Nothing to do for singular fields

+        }

+

+        public void GenerateParsingCode(TextGenerator writer)

+        {

+            writer.WriteLine("{0}.Builder subBuilder = {0}.CreateBuilder();", TypeName);

+            writer.WriteLine("if (result.has{0}) {{", PropertyName);

+            writer.WriteLine("  subBuilder.MergeFrom({0});", PropertyName);

+            writer.WriteLine("}");

+            if (Descriptor.FieldType == FieldType.Group)

+            {

+                writer.WriteLine("input.ReadGroup({0}, subBuilder, extensionRegistry);", Number);

+            }

+            else

+            {

+                writer.WriteLine("input.ReadMessage(subBuilder, extensionRegistry);");

+            }

+            writer.WriteLine("{0} = subBuilder.BuildPartial();", PropertyName);

+        }

+

+        public void GenerateSerializationCode(TextGenerator writer)

+        {

+            writer.WriteLine("if (has{0}) {{", PropertyName);

+            writer.WriteLine("  output.Write{0}({1}, field_names[{3}], {2});", MessageOrGroup, Number, PropertyName,

+                             FieldOrdinal);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateSerializedSizeCode(TextGenerator writer)

+        {

+            writer.WriteLine("if (has{0}) {{", PropertyName);

+            writer.WriteLine("  size += pb::CodedOutputStream.Compute{0}Size({1}, {2});",

+                             MessageOrGroup, Number, PropertyName);

+            writer.WriteLine("}");

+        }

+

+        public override void WriteHash(TextGenerator writer)

+        {

+            writer.WriteLine("if (has{0}) hash ^= {1}_.GetHashCode();", PropertyName, Name);

+        }

+

+        public override void WriteEquals(TextGenerator writer)

+        {

+            writer.WriteLine("if (has{0} != other.has{0} || (has{0} && !{1}_.Equals(other.{1}_))) return false;",

+                             PropertyName, Name);

+        }

+

+        public override void WriteToString(TextGenerator writer)

+        {

+            writer.WriteLine("PrintField(\"{2}\", has{0}, {1}_, writer);", PropertyName, Name,

+                             Descriptor.FieldType == FieldType.Group ? Descriptor.MessageType.Name : Descriptor.Name);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/MessageGenerator.cs b/csharp/src/ProtoGen/MessageGenerator.cs
new file mode 100644
index 0000000..e7ed1e8
--- /dev/null
+++ b/csharp/src/ProtoGen/MessageGenerator.cs
@@ -0,0 +1,893 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.DescriptorProtos;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal class MessageGenerator : SourceGeneratorBase<MessageDescriptor>, ISourceGenerator

+    {

+        private string[] _fieldNames;

+

+        internal MessageGenerator(MessageDescriptor descriptor) : base(descriptor)

+        {

+        }

+

+        private string ClassName

+        {

+            get { return Descriptor.Name; }

+        }

+

+        private string FullClassName

+        {

+            get { return GetClassName(Descriptor); }

+        }

+

+        /// <summary>

+        /// Get an identifier that uniquely identifies this type within the file.

+        /// This is used to declare static variables related to this type at the

+        /// outermost file scope.

+        /// </summary>

+        private static string GetUniqueFileScopeIdentifier(IDescriptor descriptor)

+        {

+            return "static_" + descriptor.FullName.Replace(".", "_");

+        }

+

+        internal void GenerateStaticVariables(TextGenerator writer)

+        {

+            // Because descriptor.proto (Google.ProtocolBuffers.DescriptorProtos) is

+            // used in the construction of descriptors, we have a tricky bootstrapping

+            // problem.  To help control static initialization order, we make sure all

+            // descriptors and other static data that depends on them are members of

+            // the proto-descriptor class.  This way, they will be initialized in

+            // a deterministic order.

+

+            string identifier = GetUniqueFileScopeIdentifier(Descriptor);

+

+            if (!UseLiteRuntime)

+            {

+                // The descriptor for this type.

+                string access = Descriptor.File.CSharpOptions.NestClasses ? "private" : "internal";

+                writer.WriteLine("{0} static pbd::MessageDescriptor internal__{1}__Descriptor;", access, identifier);

+                writer.WriteLine(

+                    "{0} static pb::FieldAccess.FieldAccessorTable<{1}, {1}.Builder> internal__{2}__FieldAccessorTable;",

+                    access, FullClassName, identifier);

+            }

+            // Generate static members for all nested types.

+            foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes)

+            {

+                new MessageGenerator(nestedMessage).GenerateStaticVariables(writer);

+            }

+        }

+

+        internal void GenerateStaticVariableInitializers(TextGenerator writer)

+        {

+            string identifier = GetUniqueFileScopeIdentifier(Descriptor);

+

+            if (!UseLiteRuntime)

+            {

+                writer.Write("internal__{0}__Descriptor = ", identifier);

+                if (Descriptor.ContainingType == null)

+                {

+                    writer.WriteLine("Descriptor.MessageTypes[{0}];", Descriptor.Index);

+                }

+                else

+                {

+                    writer.WriteLine("internal__{0}__Descriptor.NestedTypes[{1}];",

+                                     GetUniqueFileScopeIdentifier(Descriptor.ContainingType), Descriptor.Index);

+                }

+

+                writer.WriteLine("internal__{0}__FieldAccessorTable = ", identifier);

+                writer.WriteLine(

+                    "    new pb::FieldAccess.FieldAccessorTable<{1}, {1}.Builder>(internal__{0}__Descriptor,",

+                    identifier, FullClassName);

+                writer.Print("        new string[] { ");

+                foreach (FieldDescriptor field in Descriptor.Fields)

+                {

+                    writer.Write("\"{0}\", ", field.CSharpOptions.PropertyName);

+                }

+                writer.WriteLine("});");

+            }

+

+            // Generate static member initializers for all nested types.

+            foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes)

+            {

+                new MessageGenerator(nestedMessage).GenerateStaticVariableInitializers(writer);

+            }

+

+            foreach (FieldDescriptor extension in Descriptor.Extensions)

+            {

+                new ExtensionGenerator(extension).GenerateStaticVariableInitializers(writer);

+            }

+        }

+

+        public string[] FieldNames

+        {

+            get

+            {

+                if (_fieldNames == null)

+                {

+                    List<string> names = new List<string>();

+                    foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields)

+                    {

+                        names.Add(fieldDescriptor.Name);

+                    }

+                    //if you change this, the search must also change in GenerateBuilderParsingMethods

+                    names.Sort(StringComparer.Ordinal);

+                    _fieldNames = names.ToArray();

+                }

+                return _fieldNames;

+            }

+        }

+

+        internal int FieldOrdinal(FieldDescriptor field)

+        {

+            return Array.BinarySearch(FieldNames, field.Name, StringComparer.Ordinal);

+        }

+

+        private IFieldSourceGenerator CreateFieldGenerator(FieldDescriptor fieldDescriptor)

+        {

+            return SourceGenerators.CreateFieldGenerator(fieldDescriptor, FieldOrdinal(fieldDescriptor));

+        }

+        

+        public void Generate(TextGenerator writer)

+        {

+            if (Descriptor.File.CSharpOptions.AddSerializable)

+            {

+                writer.WriteLine("[global::System.SerializableAttribute()]");

+            }

+            writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");

+            WriteGeneratedCodeAttributes(writer);

+            writer.WriteLine("{0} sealed partial class {1} : pb::{2}Message{3}<{1}, {1}.Builder> {{",

+                             ClassAccessLevel, ClassName,

+                             Descriptor.Proto.ExtensionRangeCount > 0 ? "Extendable" : "Generated",

+                             RuntimeSuffix);

+            writer.Indent();

+            if (Descriptor.File.CSharpOptions.GeneratePrivateCtor)

+            {

+                writer.WriteLine("private {0}() {{ }}", ClassName);

+            }

+            // Must call MakeReadOnly() to make sure all lists are made read-only

+            writer.WriteLine("private static readonly {0} defaultInstance = new {0}().MakeReadOnly();", ClassName);

+

+            if (OptimizeSpeed)

+            {

+                writer.WriteLine("private static readonly string[] _{0}FieldNames = new string[] {{ {2}{1}{2} }};",

+                                 NameHelpers.UnderscoresToCamelCase(ClassName), String.Join("\", \"", FieldNames),

+                                 FieldNames.Length > 0 ? "\"" : "");

+                List<string> tags = new List<string>();

+                foreach (string name in FieldNames)

+                {

+                    tags.Add(WireFormat.MakeTag(Descriptor.FindFieldByName(name)).ToString());

+                }

+

+                writer.WriteLine("private static readonly uint[] _{0}FieldTags = new uint[] {{ {1} }};",

+                                 NameHelpers.UnderscoresToCamelCase(ClassName), String.Join(", ", tags.ToArray()));

+            }

+            writer.WriteLine("public static {0} DefaultInstance {{", ClassName);

+            writer.WriteLine("  get { return defaultInstance; }");

+            writer.WriteLine("}");

+            writer.WriteLine();

+            writer.WriteLine("public override {0} DefaultInstanceForType {{", ClassName);

+            writer.WriteLine("  get { return DefaultInstance; }");

+            writer.WriteLine("}");

+            writer.WriteLine();

+            writer.WriteLine("protected override {0} ThisMessage {{", ClassName);

+            writer.WriteLine("  get { return this; }");

+            writer.WriteLine("}");

+            writer.WriteLine();

+            if (!UseLiteRuntime)

+            {

+                writer.WriteLine("public static pbd::MessageDescriptor Descriptor {");

+                writer.WriteLine("  get {{ return {0}.internal__{1}__Descriptor; }}",

+                                 DescriptorUtil.GetFullUmbrellaClassName(Descriptor),

+                                 GetUniqueFileScopeIdentifier(Descriptor));

+                writer.WriteLine("}");

+                writer.WriteLine();

+                writer.WriteLine(

+                    "protected override pb::FieldAccess.FieldAccessorTable<{0}, {0}.Builder> InternalFieldAccessors {{",

+                    ClassName);

+                writer.WriteLine("  get {{ return {0}.internal__{1}__FieldAccessorTable; }}",

+                                 DescriptorUtil.GetFullUmbrellaClassName(Descriptor),

+                                 GetUniqueFileScopeIdentifier(Descriptor));

+                writer.WriteLine("}");

+                writer.WriteLine();

+            }

+

+            // Extensions don't need to go in an extra nested type 

+            WriteChildren(writer, null, Descriptor.Extensions);

+

+            if (Descriptor.EnumTypes.Count + Descriptor.NestedTypes.Count > 0)

+            {

+                writer.WriteLine("#region Nested types");

+                writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");

+                WriteGeneratedCodeAttributes(writer);

+                writer.WriteLine("public static partial class Types {");

+                writer.Indent();

+                WriteChildren(writer, null, Descriptor.EnumTypes);

+                WriteChildren(writer, null, Descriptor.NestedTypes);

+                writer.Outdent();

+                writer.WriteLine("}");

+                writer.WriteLine("#endregion");

+                writer.WriteLine();

+            }

+

+            foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields)

+            {

+                if (Descriptor.File.CSharpOptions.ClsCompliance && GetFieldConstantName(fieldDescriptor).StartsWith("_"))

+                {

+                    writer.WriteLine("[global::System.CLSCompliant(false)]");

+                }

+

+                // Rats: we lose the debug comment here :(

+                writer.WriteLine("public const int {0} = {1};", GetFieldConstantName(fieldDescriptor),

+                                 fieldDescriptor.FieldNumber);

+                CreateFieldGenerator(fieldDescriptor).GenerateMembers(writer);

+                writer.WriteLine();

+            }

+

+            if (OptimizeSpeed)

+            {

+                GenerateIsInitialized(writer);

+                GenerateMessageSerializationMethods(writer);

+            }

+            if (UseLiteRuntime)

+            {

+                GenerateLiteRuntimeMethods(writer);

+            }

+

+            GenerateParseFromMethods(writer);

+            GenerateBuilder(writer);

+

+            // Force the static initialization code for the file to run, since it may

+            // initialize static variables declared in this class.

+            writer.WriteLine("static {0}() {{", ClassName);

+            // We call object.ReferenceEquals() just to make it a valid statement on its own.

+            // Another option would be GetType(), but that causes problems in DescriptorProtoFile,

+            // where the bootstrapping is somewhat recursive - type initializers call

+            // each other, effectively. We temporarily see Descriptor as null.

+            writer.WriteLine("  object.ReferenceEquals({0}.Descriptor, null);",

+                             DescriptorUtil.GetFullUmbrellaClassName(Descriptor));

+            writer.WriteLine("}");

+

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine();

+        }

+

+        private void GenerateLiteRuntimeMethods(TextGenerator writer)

+        {

+            bool callbase = Descriptor.Proto.ExtensionRangeCount > 0;

+            writer.WriteLine("#region Lite runtime methods");

+            writer.WriteLine("public override int GetHashCode() {");

+            writer.Indent();

+            writer.WriteLine("int hash = GetType().GetHashCode();");

+            foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields)

+            {

+                CreateFieldGenerator(fieldDescriptor).WriteHash(writer);

+            }

+            if (callbase)

+            {

+                writer.WriteLine("hash ^= base.GetHashCode();");

+            }

+            writer.WriteLine("return hash;");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine();

+

+            writer.WriteLine("public override bool Equals(object obj) {");

+            writer.Indent();

+            writer.WriteLine("{0} other = obj as {0};", ClassName);

+            writer.WriteLine("if (other == null) return false;");

+            foreach (FieldDescriptor fieldDescriptor in Descriptor.Fields)

+            {

+                CreateFieldGenerator(fieldDescriptor).WriteEquals(writer);

+            }

+            if (callbase)

+            {

+                writer.WriteLine("if (!base.Equals(other)) return false;");

+            }

+            writer.WriteLine("return true;");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine();

+

+            writer.WriteLine("public override void PrintTo(global::System.IO.TextWriter writer) {");

+            writer.Indent();

+            List<FieldDescriptor> sorted = new List<FieldDescriptor>(Descriptor.Fields);

+            sorted.Sort(

+                new Comparison<FieldDescriptor>(

+                    delegate(FieldDescriptor a, FieldDescriptor b) { return a.FieldNumber.CompareTo(b.FieldNumber); }));

+            foreach (FieldDescriptor fieldDescriptor in sorted)

+            {

+                CreateFieldGenerator(fieldDescriptor).WriteToString(writer);

+            }

+            if (callbase)

+            {

+                writer.WriteLine("base.PrintTo(writer);");

+            }

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine("#endregion");

+            writer.WriteLine();

+        }

+

+        private void GenerateMessageSerializationMethods(TextGenerator writer)

+        {

+            List<FieldDescriptor> sortedFields = new List<FieldDescriptor>(Descriptor.Fields);

+            sortedFields.Sort((f1, f2) => f1.FieldNumber.CompareTo(f2.FieldNumber));

+

+            List<DescriptorProto.Types.ExtensionRange> sortedExtensions =

+                new List<DescriptorProto.Types.ExtensionRange>(Descriptor.Proto.ExtensionRangeList);

+            sortedExtensions.Sort((r1, r2) => (r1.Start.CompareTo(r2.Start)));

+

+            writer.WriteLine("public override void WriteTo(pb::ICodedOutputStream output) {");

+            writer.Indent();

+            // Make sure we've computed the serialized length, so that packed fields are generated correctly.

+            writer.WriteLine("CalcSerializedSize();");

+            writer.WriteLine("string[] field_names = _{0}FieldNames;", NameHelpers.UnderscoresToCamelCase(ClassName));

+            if (Descriptor.Proto.ExtensionRangeList.Count > 0)

+            {

+                writer.WriteLine(

+                    "pb::ExtendableMessage{1}<{0}, {0}.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);",

+                    ClassName, RuntimeSuffix);

+            }

+

+            // Merge the fields and the extension ranges, both sorted by field number.

+            for (int i = 0, j = 0; i < Descriptor.Fields.Count || j < sortedExtensions.Count;)

+            {

+                if (i == Descriptor.Fields.Count)

+                {

+                    GenerateSerializeOneExtensionRange(writer, sortedExtensions[j++]);

+                }

+                else if (j == sortedExtensions.Count)

+                {

+                    GenerateSerializeOneField(writer, sortedFields[i++]);

+                }

+                else if (sortedFields[i].FieldNumber < sortedExtensions[j].Start)

+                {

+                    GenerateSerializeOneField(writer, sortedFields[i++]);

+                }

+                else

+                {

+                    GenerateSerializeOneExtensionRange(writer, sortedExtensions[j++]);

+                }

+            }

+

+            if (!UseLiteRuntime)

+            {

+                if (Descriptor.Proto.Options.MessageSetWireFormat)

+                {

+                    writer.WriteLine("UnknownFields.WriteAsMessageSetTo(output);");

+                }

+                else

+                {

+                    writer.WriteLine("UnknownFields.WriteTo(output);");

+                }

+            }

+

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine();

+            writer.WriteLine("private int memoizedSerializedSize = -1;");

+            writer.WriteLine("public override int SerializedSize {");

+            writer.Indent();

+            writer.WriteLine("get {");

+            writer.Indent();

+            writer.WriteLine("int size = memoizedSerializedSize;");

+            writer.WriteLine("if (size != -1) return size;");

+            writer.WriteLine("return CalcSerializedSize();");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine();

+

+            writer.WriteLine("private int CalcSerializedSize() {");

+            writer.Indent();

+            writer.WriteLine("int size = memoizedSerializedSize;");

+            writer.WriteLine("if (size != -1) return size;");

+            writer.WriteLine();

+            writer.WriteLine("size = 0;");

+            foreach (FieldDescriptor field in Descriptor.Fields)

+            {

+                CreateFieldGenerator(field).GenerateSerializedSizeCode(writer);

+            }

+            if (Descriptor.Proto.ExtensionRangeCount > 0)

+            {

+                writer.WriteLine("size += ExtensionsSerializedSize;");

+            }

+

+            if (!UseLiteRuntime)

+            {

+                if (Descriptor.Options.MessageSetWireFormat)

+                {

+                    writer.WriteLine("size += UnknownFields.SerializedSizeAsMessageSet;");

+                }

+                else

+                {

+                    writer.WriteLine("size += UnknownFields.SerializedSize;");

+                }

+            }

+            writer.WriteLine("memoizedSerializedSize = size;");

+            writer.WriteLine("return size;");

+            writer.Outdent();

+            writer.WriteLine("}");

+        }

+

+        private void GenerateSerializeOneField(TextGenerator writer, FieldDescriptor fieldDescriptor)

+        {

+            CreateFieldGenerator(fieldDescriptor).GenerateSerializationCode(writer);

+        }

+

+        private static void GenerateSerializeOneExtensionRange(TextGenerator writer,

+                                                               DescriptorProto.Types.ExtensionRange extensionRange)

+        {

+            writer.WriteLine("extensionWriter.WriteUntil({0}, output);", extensionRange.End);

+        }

+

+        private void GenerateParseFromMethods(TextGenerator writer)

+        {

+            // Note:  These are separate from GenerateMessageSerializationMethods()

+            //   because they need to be generated even for messages that are optimized

+            //   for code size.

+

+            writer.WriteLine("public static {0} ParseFrom(pb::ByteString data) {{", ClassName);

+            writer.WriteLine("  return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();");

+            writer.WriteLine("}");

+            writer.WriteLine(

+                "public static {0} ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {{",

+                ClassName);

+            writer.WriteLine("  return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();");

+            writer.WriteLine("}");

+            writer.WriteLine("public static {0} ParseFrom(byte[] data) {{", ClassName);

+            writer.WriteLine("  return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();");

+            writer.WriteLine("}");

+            writer.WriteLine("public static {0} ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {{",

+                             ClassName);

+            writer.WriteLine("  return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();");

+            writer.WriteLine("}");

+            writer.WriteLine("public static {0} ParseFrom(global::System.IO.Stream input) {{", ClassName);

+            writer.WriteLine("  return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();");

+            writer.WriteLine("}");

+            writer.WriteLine(

+                "public static {0} ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {{",

+                ClassName);

+            writer.WriteLine("  return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();");

+            writer.WriteLine("}");

+            writer.WriteLine("public static {0} ParseDelimitedFrom(global::System.IO.Stream input) {{", ClassName);

+            writer.WriteLine("  return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();");

+            writer.WriteLine("}");

+            writer.WriteLine(

+                "public static {0} ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {{",

+                ClassName);

+            writer.WriteLine("  return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();");

+            writer.WriteLine("}");

+            writer.WriteLine("public static {0} ParseFrom(pb::ICodedInputStream input) {{", ClassName);

+            writer.WriteLine("  return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();");

+            writer.WriteLine("}");

+            writer.WriteLine(

+                "public static {0} ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {{",

+                ClassName);

+            writer.WriteLine("  return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();");

+            writer.WriteLine("}");

+        }

+

+        /// <summary>

+        /// Returns whether or not the specified message type has any required fields.

+        /// If it doesn't, calls to check for initialization can be optimised.

+        /// TODO(jonskeet): Move this into MessageDescriptor?

+        /// </summary>

+        private static bool HasRequiredFields(MessageDescriptor descriptor,

+                                              Dictionary<MessageDescriptor, object> alreadySeen)

+        {

+            if (alreadySeen.ContainsKey(descriptor))

+            {

+                // The type is already in cache.  This means that either:

+                // a. The type has no required fields.

+                // b. We are in the midst of checking if the type has required fields,

+                //    somewhere up the stack.  In this case, we know that if the type

+                //    has any required fields, they'll be found when we return to it,

+                //    and the whole call to HasRequiredFields() will return true.

+                //    Therefore, we don't have to check if this type has required fields

+                //    here.

+                return false;

+            }

+            alreadySeen[descriptor] = descriptor; // Value is irrelevant

+

+            // If the type has extensions, an extension with message type could contain

+            // required fields, so we have to be conservative and assume such an

+            // extension exists.

+            if (descriptor.Extensions.Count > 0)

+            {

+                return true;

+            }

+

+            foreach (FieldDescriptor field in descriptor.Fields)

+            {

+                if (field.IsRequired)

+                {

+                    return true;

+                }

+                // Message or group

+                if (field.MappedType == MappedType.Message)

+                {

+                    if (HasRequiredFields(field.MessageType, alreadySeen))

+                    {

+                        return true;

+                    }

+                }

+            }

+            return false;

+        }

+

+        private void GenerateBuilder(TextGenerator writer)

+        {

+            writer.WriteLine("private {0} MakeReadOnly() {{", ClassName);

+            writer.Indent();

+            foreach (FieldDescriptor field in Descriptor.Fields)

+            {

+                CreateFieldGenerator(field).GenerateBuildingCode(writer);

+            }

+            writer.WriteLine("return this;");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine();

+

+            writer.WriteLine("public static Builder CreateBuilder() { return new Builder(); }");

+            writer.WriteLine("public override Builder ToBuilder() { return CreateBuilder(this); }");

+            writer.WriteLine("public override Builder CreateBuilderForType() { return new Builder(); }");

+            writer.WriteLine("public static Builder CreateBuilder({0} prototype) {{", ClassName);

+            writer.WriteLine("  return new Builder(prototype);");

+            writer.WriteLine("}");

+            writer.WriteLine();

+            if (Descriptor.File.CSharpOptions.AddSerializable)

+            {

+                writer.WriteLine("[global::System.SerializableAttribute()]");

+            }

+            writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");

+            WriteGeneratedCodeAttributes(writer);

+            writer.WriteLine("{0} sealed partial class Builder : pb::{2}Builder{3}<{1}, Builder> {{",

+                             ClassAccessLevel, ClassName,

+                             Descriptor.Proto.ExtensionRangeCount > 0 ? "Extendable" : "Generated", RuntimeSuffix);

+            writer.Indent();

+            writer.WriteLine("protected override Builder ThisBuilder {");

+            writer.WriteLine("  get { return this; }");

+            writer.WriteLine("}");

+            GenerateCommonBuilderMethods(writer);

+            if (OptimizeSpeed)

+            {

+                GenerateBuilderParsingMethods(writer);

+            }

+            foreach (FieldDescriptor field in Descriptor.Fields)

+            {

+                writer.WriteLine();

+                // No field comment :(

+                CreateFieldGenerator(field).GenerateBuilderMembers(writer);

+            }

+            writer.Outdent();

+            writer.WriteLine("}");

+        }

+

+        private void GenerateCommonBuilderMethods(TextGenerator writer)

+        {

+            //default constructor

+            writer.WriteLine("public Builder() {");

+            //Durring static initialization of message, DefaultInstance is expected to return null.

+            writer.WriteLine("  result = DefaultInstance;");

+            writer.WriteLine("  resultIsReadOnly = true;");

+            writer.WriteLine("}");

+            //clone constructor

+            writer.WriteLine("internal Builder({0} cloneFrom) {{", ClassName);

+            writer.WriteLine("  result = cloneFrom;");

+            writer.WriteLine("  resultIsReadOnly = true;");

+            writer.WriteLine("}");

+            writer.WriteLine();

+            writer.WriteLine("private bool resultIsReadOnly;");

+            writer.WriteLine("private {0} result;", ClassName);

+            writer.WriteLine();

+            writer.WriteLine("private {0} PrepareBuilder() {{", ClassName);

+            writer.WriteLine("  if (resultIsReadOnly) {");

+            writer.WriteLine("    {0} original = result;", ClassName);

+            writer.WriteLine("    result = new {0}();", ClassName);

+            writer.WriteLine("    resultIsReadOnly = false;");

+            writer.WriteLine("    MergeFrom(original);");

+            writer.WriteLine("  }");

+            writer.WriteLine("  return result;");

+            writer.WriteLine("}");

+            writer.WriteLine();

+            writer.WriteLine("public override bool IsInitialized {");

+            writer.WriteLine("  get { return result.IsInitialized; }");

+            writer.WriteLine("}");

+            writer.WriteLine();

+            writer.WriteLine("protected override {0} MessageBeingBuilt {{", ClassName);

+            writer.WriteLine("  get { return PrepareBuilder(); }");

+            writer.WriteLine("}");

+            writer.WriteLine();

+            //Not actually expecting that DefaultInstance would ever be null here; however, we will ensure it does not break

+            writer.WriteLine("public override Builder Clear() {");

+            writer.WriteLine("  result = DefaultInstance;", ClassName);

+            writer.WriteLine("  resultIsReadOnly = true;");

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            writer.WriteLine();

+            writer.WriteLine("public override Builder Clone() {");

+            writer.WriteLine("  if (resultIsReadOnly) {");

+            writer.WriteLine("    return new Builder(result);");

+            writer.WriteLine("  } else {");

+            writer.WriteLine("    return new Builder().MergeFrom(result);");

+            writer.WriteLine("  }");

+            writer.WriteLine("}");

+            writer.WriteLine();

+            if (!UseLiteRuntime)

+            {

+                writer.WriteLine("public override pbd::MessageDescriptor DescriptorForType {");

+                writer.WriteLine("  get {{ return {0}.Descriptor; }}", FullClassName);

+                writer.WriteLine("}");

+                writer.WriteLine();

+            }

+            writer.WriteLine("public override {0} DefaultInstanceForType {{", ClassName);

+            writer.WriteLine("  get {{ return {0}.DefaultInstance; }}", FullClassName);

+            writer.WriteLine("}");

+            writer.WriteLine();

+

+            writer.WriteLine("public override {0} BuildPartial() {{", ClassName);

+            writer.Indent();

+            writer.WriteLine("if (resultIsReadOnly) {");

+            writer.WriteLine("  return result;");

+            writer.WriteLine("}");

+            writer.WriteLine("resultIsReadOnly = true;");

+            writer.WriteLine("return result.MakeReadOnly();");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine();

+

+            if (OptimizeSpeed)

+            {

+                writer.WriteLine("public override Builder MergeFrom(pb::IMessage{0} other) {{", RuntimeSuffix);

+                writer.WriteLine("  if (other is {0}) {{", ClassName);

+                writer.WriteLine("    return MergeFrom(({0}) other);", ClassName);

+                writer.WriteLine("  } else {");

+                writer.WriteLine("    base.MergeFrom(other);");

+                writer.WriteLine("    return this;");

+                writer.WriteLine("  }");

+                writer.WriteLine("}");

+                writer.WriteLine();

+                writer.WriteLine("public override Builder MergeFrom({0} other) {{", ClassName);

+                // Optimization:  If other is the default instance, we know none of its

+                // fields are set so we can skip the merge.

+                writer.Indent();

+                writer.WriteLine("if (other == {0}.DefaultInstance) return this;", FullClassName);

+                writer.WriteLine("PrepareBuilder();");

+                foreach (FieldDescriptor field in Descriptor.Fields)

+                {

+                    CreateFieldGenerator(field).GenerateMergingCode(writer);

+                }

+                // if message type has extensions

+                if (Descriptor.Proto.ExtensionRangeCount > 0)

+                {

+                    writer.WriteLine("  this.MergeExtensionFields(other);");

+                }

+                if (!UseLiteRuntime)

+                {

+                    writer.WriteLine("this.MergeUnknownFields(other.UnknownFields);");

+                }

+                writer.WriteLine("return this;");

+                writer.Outdent();

+                writer.WriteLine("}");

+                writer.WriteLine();

+            }

+        }

+

+        private void GenerateBuilderParsingMethods(TextGenerator writer)

+        {

+            List<FieldDescriptor> sortedFields = new List<FieldDescriptor>(Descriptor.Fields);

+            sortedFields.Sort((f1, f2) => f1.FieldNumber.CompareTo(f2.FieldNumber));

+

+            writer.WriteLine("public override Builder MergeFrom(pb::ICodedInputStream input) {");

+            writer.WriteLine("  return MergeFrom(input, pb::ExtensionRegistry.Empty);");

+            writer.WriteLine("}");

+            writer.WriteLine();

+            writer.WriteLine(

+                "public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {");

+            writer.Indent();

+            writer.WriteLine("PrepareBuilder();");

+            if (!UseLiteRuntime)

+            {

+                writer.WriteLine("pb::UnknownFieldSet.Builder unknownFields = null;");

+            }

+            writer.WriteLine("uint tag;");

+            writer.WriteLine("string field_name;");

+            writer.WriteLine("while (input.ReadTag(out tag, out field_name)) {");

+            writer.Indent();

+            writer.WriteLine("if(tag == 0 && field_name != null) {");

+            writer.Indent();

+            //if you change from StringComparer.Ordinal, the array sort in FieldNames { get; } must also change

+            writer.WriteLine(

+                "int field_ordinal = global::System.Array.BinarySearch(_{0}FieldNames, field_name, global::System.StringComparer.Ordinal);",

+                NameHelpers.UnderscoresToCamelCase(ClassName));

+            writer.WriteLine("if(field_ordinal >= 0)");

+            writer.WriteLine("  tag = _{0}FieldTags[field_ordinal];", NameHelpers.UnderscoresToCamelCase(ClassName));

+            writer.WriteLine("else {");

+            if (!UseLiteRuntime)

+            {

+                writer.WriteLine("  if (unknownFields == null) {"); // First unknown field - create builder now

+                writer.WriteLine("    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);");

+                writer.WriteLine("  }");

+            }

+            writer.WriteLine("  ParseUnknownField(input, {0}extensionRegistry, tag, field_name);",

+                             UseLiteRuntime ? "" : "unknownFields, ");

+            writer.WriteLine("  continue;");

+            writer.WriteLine("}");

+            writer.Outdent();

+            writer.WriteLine("}");

+

+            writer.WriteLine("switch (tag) {");

+            writer.Indent();

+            writer.WriteLine("case 0: {"); // 0 signals EOF / limit reached

+            writer.WriteLine("  throw pb::InvalidProtocolBufferException.InvalidTag();");

+            writer.WriteLine("}");

+            writer.WriteLine("default: {");

+            writer.WriteLine("  if (pb::WireFormat.IsEndGroupTag(tag)) {");

+            if (!UseLiteRuntime)

+            {

+                writer.WriteLine("    if (unknownFields != null) {");

+                writer.WriteLine("      this.UnknownFields = unknownFields.Build();");

+                writer.WriteLine("    }");

+            }

+            writer.WriteLine("    return this;"); // it's an endgroup tag

+            writer.WriteLine("  }");

+            if (!UseLiteRuntime)

+            {

+                writer.WriteLine("  if (unknownFields == null) {"); // First unknown field - create builder now

+                writer.WriteLine("    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);");

+                writer.WriteLine("  }");

+            }

+            writer.WriteLine("  ParseUnknownField(input, {0}extensionRegistry, tag, field_name);",

+                             UseLiteRuntime ? "" : "unknownFields, ");

+            writer.WriteLine("  break;");

+            writer.WriteLine("}");

+            foreach (FieldDescriptor field in sortedFields)

+            {

+                WireFormat.WireType wt = WireFormat.GetWireType(field.FieldType);

+                uint tag = WireFormat.MakeTag(field.FieldNumber, wt);

+

+                if (field.IsRepeated &&

+                    (wt == WireFormat.WireType.Varint || wt == WireFormat.WireType.Fixed32 ||

+                     wt == WireFormat.WireType.Fixed64))

+                {

+                    writer.WriteLine("case {0}:",

+                                     WireFormat.MakeTag(field.FieldNumber, WireFormat.WireType.LengthDelimited));

+                }

+

+                writer.WriteLine("case {0}: {{", tag);

+                writer.Indent();

+                CreateFieldGenerator(field).GenerateParsingCode(writer);

+                writer.WriteLine("break;");

+                writer.Outdent();

+                writer.WriteLine("}");

+            }

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine();

+            if (!UseLiteRuntime)

+            {

+                writer.WriteLine("if (unknownFields != null) {");

+                writer.WriteLine("  this.UnknownFields = unknownFields.Build();");

+                writer.WriteLine("}");

+            }

+            writer.WriteLine("return this;");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine();

+        }

+

+        private void GenerateIsInitialized(TextGenerator writer)

+        {

+            writer.WriteLine("public override bool IsInitialized {");

+            writer.Indent();

+            writer.WriteLine("get {");

+            writer.Indent();

+

+            // Check that all required fields in this message are set.

+            // TODO(kenton):  We can optimize this when we switch to putting all the

+            // "has" fields into a single bitfield.

+            foreach (FieldDescriptor field in Descriptor.Fields)

+            {

+                if (field.IsRequired)

+                {

+                    writer.WriteLine("if (!has{0}) return false;", field.CSharpOptions.PropertyName);

+                }

+            }

+

+            // Now check that all embedded messages are initialized.

+            foreach (FieldDescriptor field in Descriptor.Fields)

+            {

+                if (field.FieldType != FieldType.Message ||

+                    !HasRequiredFields(field.MessageType, new Dictionary<MessageDescriptor, object>()))

+                {

+                    continue;

+                }

+                string propertyName = NameHelpers.UnderscoresToPascalCase(GetFieldName(field));

+                if (field.IsRepeated)

+                {

+                    writer.WriteLine("foreach ({0} element in {1}List) {{", GetClassName(field.MessageType),

+                                     propertyName);

+                    writer.WriteLine("  if (!element.IsInitialized) return false;");

+                    writer.WriteLine("}");

+                }

+                else if (field.IsOptional)

+                {

+                    writer.WriteLine("if (Has{0}) {{", propertyName);

+                    writer.WriteLine("  if (!{0}.IsInitialized) return false;", propertyName);

+                    writer.WriteLine("}");

+                }

+                else

+                {

+                    writer.WriteLine("if (!{0}.IsInitialized) return false;", propertyName);

+                }

+            }

+

+            if (Descriptor.Proto.ExtensionRangeCount > 0)

+            {

+                writer.WriteLine("if (!ExtensionsAreInitialized) return false;");

+            }

+            writer.WriteLine("return true;");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine();

+        }

+

+        internal void GenerateExtensionRegistrationCode(TextGenerator writer)

+        {

+            foreach (FieldDescriptor extension in Descriptor.Extensions)

+            {

+                new ExtensionGenerator(extension).GenerateExtensionRegistrationCode(writer);

+            }

+            foreach (MessageDescriptor nestedMessage in Descriptor.NestedTypes)

+            {

+                new MessageGenerator(nestedMessage).GenerateExtensionRegistrationCode(writer);

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/PluginProtoFile.cs b/csharp/src/ProtoGen/PluginProtoFile.cs
new file mode 100644
index 0000000..e0fed5c
--- /dev/null
+++ b/csharp/src/ProtoGen/PluginProtoFile.cs
@@ -0,0 +1,1187 @@
+// Generated by protoc-gen-cs, Version=2.4.1.521, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.Compiler.PluginProto {

+

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class Plugin {

+

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_compiler_CodeGeneratorRequest__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorRequest, global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorRequest.Builder> internal__static_google_protobuf_compiler_CodeGeneratorRequest__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_compiler_CodeGeneratorResponse__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse, global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Builder> internal__static_google_protobuf_compiler_CodeGeneratorResponse__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_compiler_CodeGeneratorResponse_File__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File, global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File.Builder> internal__static_google_protobuf_compiler_CodeGeneratorResponse_File__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+

+    static Plugin() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CiVnb29nbGUvcHJvdG9idWYvY29tcGlsZXIvcGx1Z2luLnByb3RvEhhnb29n",

+            "bGUucHJvdG9idWYuY29tcGlsZXIaIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlw",

+            "dG9yLnByb3RvIn0KFENvZGVHZW5lcmF0b3JSZXF1ZXN0EhgKEGZpbGVfdG9f",

+            "Z2VuZXJhdGUYASADKAkSEQoJcGFyYW1ldGVyGAIgASgJEjgKCnByb3RvX2Zp",

+            "bGUYDyADKAsyJC5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90",

+            "byKqAQoVQ29kZUdlbmVyYXRvclJlc3BvbnNlEg0KBWVycm9yGAEgASgJEkIK",

+            "BGZpbGUYDyADKAsyNC5nb29nbGUucHJvdG9idWYuY29tcGlsZXIuQ29kZUdl",

+            "bmVyYXRvclJlc3BvbnNlLkZpbGUaPgoERmlsZRIMCgRuYW1lGAEgASgJEhcK",

+            "D2luc2VydGlvbl9wb2ludBgCIAEoCRIPCgdjb250ZW50GA8gASgJQiwKHGNv",

+          "bS5nb29nbGUucHJvdG9idWYuY29tcGlsZXJCDFBsdWdpblByb3Rvcw=="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_google_protobuf_compiler_CodeGeneratorRequest__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_google_protobuf_compiler_CodeGeneratorRequest__FieldAccessorTable =

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorRequest, global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorRequest.Builder>(internal__static_google_protobuf_compiler_CodeGeneratorRequest__Descriptor,

+                new string[] { "FileToGenerate", "Parameter", "ProtoFile", });

+        internal__static_google_protobuf_compiler_CodeGeneratorResponse__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_google_protobuf_compiler_CodeGeneratorResponse__FieldAccessorTable =

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse, global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Builder>(internal__static_google_protobuf_compiler_CodeGeneratorResponse__Descriptor,

+                new string[] { "Error", "File", });

+        internal__static_google_protobuf_compiler_CodeGeneratorResponse_File__Descriptor = internal__static_google_protobuf_compiler_CodeGeneratorResponse__Descriptor.NestedTypes[0];

+        internal__static_google_protobuf_compiler_CodeGeneratorResponse_File__FieldAccessorTable =

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File, global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File.Builder>(internal__static_google_protobuf_compiler_CodeGeneratorResponse_File__Descriptor,

+                new string[] { "Name", "InsertionPoint", "Content", });

+        return null;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor,

+          }, assigner);

+    }

+    #endregion

+

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class CodeGeneratorRequest : pb::GeneratedMessage<CodeGeneratorRequest, CodeGeneratorRequest.Builder> {

+    private CodeGeneratorRequest() { }

+    private static readonly CodeGeneratorRequest defaultInstance = new CodeGeneratorRequest().MakeReadOnly();

+    private static readonly string[] _codeGeneratorRequestFieldNames = new string[] { "file_to_generate", "parameter", "proto_file" };

+    private static readonly uint[] _codeGeneratorRequestFieldTags = new uint[] { 10, 18, 122 };

+    public static CodeGeneratorRequest DefaultInstance {

+      get { return defaultInstance; }

+    }

+

+    public override CodeGeneratorRequest DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+

+    protected override CodeGeneratorRequest ThisMessage {

+      get { return this; }

+    }

+

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.Compiler.PluginProto.Plugin.internal__static_google_protobuf_compiler_CodeGeneratorRequest__Descriptor; }

+    }

+

+    protected override pb::FieldAccess.FieldAccessorTable<CodeGeneratorRequest, CodeGeneratorRequest.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.Compiler.PluginProto.Plugin.internal__static_google_protobuf_compiler_CodeGeneratorRequest__FieldAccessorTable; }

+    }

+

+    public const int FileToGenerateFieldNumber = 1;

+    private pbc::PopsicleList<string> fileToGenerate_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> FileToGenerateList {

+      get { return pbc::Lists.AsReadOnly(fileToGenerate_); }

+    }

+    public int FileToGenerateCount {

+      get { return fileToGenerate_.Count; }

+    }

+    public string GetFileToGenerate(int index) {

+      return fileToGenerate_[index];

+    }

+

+    public const int ParameterFieldNumber = 2;

+    private bool hasParameter;

+    private string parameter_ = "";

+    public bool HasParameter {

+      get { return hasParameter; }

+    }

+    public string Parameter {

+      get { return parameter_; }

+    }

+

+    public const int ProtoFileFieldNumber = 15;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> protoFile_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> ProtoFileList {

+      get { return protoFile_; }

+    }

+    public int ProtoFileCount {

+      get { return protoFile_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto GetProtoFile(int index) {

+      return protoFile_[index];

+    }

+

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto element in ProtoFileList) {

+          if (!element.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      int size = SerializedSize;

+      string[] field_names = _codeGeneratorRequestFieldNames;

+      if (fileToGenerate_.Count > 0) {

+        output.WriteStringArray(1, field_names[0], fileToGenerate_);

+      }

+      if (hasParameter) {

+        output.WriteString(2, field_names[1], Parameter);

+      }

+      if (protoFile_.Count > 0) {

+        output.WriteMessageArray(15, field_names[2], protoFile_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+

+        size = 0;

+        {

+          int dataSize = 0;

+          foreach (string element in FileToGenerateList) {

+            dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+          }

+          size += dataSize;

+          size += 1 * fileToGenerate_.Count;

+        }

+        if (hasParameter) {

+          size += pb::CodedOutputStream.ComputeStringSize(2, Parameter);

+        }

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto element in ProtoFileList) {

+          size += pb::CodedOutputStream.ComputeMessageSize(15, element);

+        }

+        size += UnknownFields.SerializedSize;

+        memoizedSerializedSize = size;

+        return size;

+      }

+    }

+

+    public static CodeGeneratorRequest ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CodeGeneratorRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CodeGeneratorRequest ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CodeGeneratorRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CodeGeneratorRequest ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CodeGeneratorRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static CodeGeneratorRequest ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static CodeGeneratorRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static CodeGeneratorRequest ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CodeGeneratorRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private CodeGeneratorRequest MakeReadOnly() {

+      fileToGenerate_.MakeReadOnly();

+      protoFile_.MakeReadOnly();

+      return this;

+    }

+

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(CodeGeneratorRequest prototype) {

+      return new Builder(prototype);

+    }

+

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<CodeGeneratorRequest, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(CodeGeneratorRequest cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+

+      private bool resultIsReadOnly;

+      private CodeGeneratorRequest result;

+

+      private CodeGeneratorRequest PrepareBuilder() {

+        if (resultIsReadOnly) {

+          CodeGeneratorRequest original = result;

+          result = new CodeGeneratorRequest();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+

+      protected override CodeGeneratorRequest MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorRequest.Descriptor; }

+      }

+

+      public override CodeGeneratorRequest DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorRequest.DefaultInstance; }

+      }

+

+      public override CodeGeneratorRequest BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is CodeGeneratorRequest) {

+          return MergeFrom((CodeGeneratorRequest) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+

+      public override Builder MergeFrom(CodeGeneratorRequest other) {

+        if (other == global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorRequest.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.fileToGenerate_.Count != 0) {

+          result.fileToGenerate_.Add(other.fileToGenerate_);

+        }

+        if (other.HasParameter) {

+          Parameter = other.Parameter;

+        }

+        if (other.protoFile_.Count != 0) {

+          result.protoFile_.Add(other.protoFile_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_codeGeneratorRequestFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _codeGeneratorRequestFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              input.ReadStringArray(tag, field_name, result.fileToGenerate_);

+              break;

+            }

+            case 18: {

+              result.hasParameter = input.ReadString(ref result.parameter_);

+              break;

+            }

+            case 122: {

+              input.ReadMessageArray(tag, field_name, result.protoFile_, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+

+

+      public pbc::IPopsicleList<string> FileToGenerateList {

+        get { return PrepareBuilder().fileToGenerate_; }

+      }

+      public int FileToGenerateCount {

+        get { return result.FileToGenerateCount; }

+      }

+      public string GetFileToGenerate(int index) {

+        return result.GetFileToGenerate(index);

+      }

+      public Builder SetFileToGenerate(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.fileToGenerate_[index] = value;

+        return this;

+      }

+      public Builder AddFileToGenerate(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.fileToGenerate_.Add(value);

+        return this;

+      }

+      public Builder AddRangeFileToGenerate(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.fileToGenerate_.Add(values);

+        return this;

+      }

+      public Builder ClearFileToGenerate() {

+        PrepareBuilder();

+        result.fileToGenerate_.Clear();

+        return this;

+      }

+

+      public bool HasParameter {

+        get { return result.hasParameter; }

+      }

+      public string Parameter {

+        get { return result.Parameter; }

+        set { SetParameter(value); }

+      }

+      public Builder SetParameter(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasParameter = true;

+        result.parameter_ = value;

+        return this;

+      }

+      public Builder ClearParameter() {

+        PrepareBuilder();

+        result.hasParameter = false;

+        result.parameter_ = "";

+        return this;

+      }

+

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> ProtoFileList {

+        get { return PrepareBuilder().protoFile_; }

+      }

+      public int ProtoFileCount {

+        get { return result.ProtoFileCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto GetProtoFile(int index) {

+        return result.GetProtoFile(index);

+      }

+      public Builder SetProtoFile(int index, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.protoFile_[index] = value;

+        return this;

+      }

+      public Builder SetProtoFile(int index, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.protoFile_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddProtoFile(global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.protoFile_.Add(value);

+        return this;

+      }

+      public Builder AddProtoFile(global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.protoFile_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeProtoFile(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> values) {

+        PrepareBuilder();

+        result.protoFile_.Add(values);

+        return this;

+      }

+      public Builder ClearProtoFile() {

+        PrepareBuilder();

+        result.protoFile_.Clear();

+        return this;

+      }

+    }

+    static CodeGeneratorRequest() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.Compiler.PluginProto.Plugin.Descriptor, null);

+    }

+  }

+

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class CodeGeneratorResponse : pb::GeneratedMessage<CodeGeneratorResponse, CodeGeneratorResponse.Builder> {

+    private CodeGeneratorResponse() { }

+    private static readonly CodeGeneratorResponse defaultInstance = new CodeGeneratorResponse().MakeReadOnly();

+    private static readonly string[] _codeGeneratorResponseFieldNames = new string[] { "error", "file" };

+    private static readonly uint[] _codeGeneratorResponseFieldTags = new uint[] { 10, 122 };

+    public static CodeGeneratorResponse DefaultInstance {

+      get { return defaultInstance; }

+    }

+

+    public override CodeGeneratorResponse DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+

+    protected override CodeGeneratorResponse ThisMessage {

+      get { return this; }

+    }

+

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.Compiler.PluginProto.Plugin.internal__static_google_protobuf_compiler_CodeGeneratorResponse__Descriptor; }

+    }

+

+    protected override pb::FieldAccess.FieldAccessorTable<CodeGeneratorResponse, CodeGeneratorResponse.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.Compiler.PluginProto.Plugin.internal__static_google_protobuf_compiler_CodeGeneratorResponse__FieldAccessorTable; }

+    }

+

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class File : pb::GeneratedMessage<File, File.Builder> {

+        private File() { }

+        private static readonly File defaultInstance = new File().MakeReadOnly();

+        private static readonly string[] _fileFieldNames = new string[] { "content", "insertion_point", "name" };

+        private static readonly uint[] _fileFieldTags = new uint[] { 122, 18, 10 };

+        public static File DefaultInstance {

+          get { return defaultInstance; }

+        }

+

+        public override File DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+

+        protected override File ThisMessage {

+          get { return this; }

+        }

+

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.Compiler.PluginProto.Plugin.internal__static_google_protobuf_compiler_CodeGeneratorResponse_File__Descriptor; }

+        }

+

+        protected override pb::FieldAccess.FieldAccessorTable<File, File.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.Compiler.PluginProto.Plugin.internal__static_google_protobuf_compiler_CodeGeneratorResponse_File__FieldAccessorTable; }

+        }

+

+        public const int NameFieldNumber = 1;

+        private bool hasName;

+        private string name_ = "";

+        public bool HasName {

+          get { return hasName; }

+        }

+        public string Name {

+          get { return name_; }

+        }

+

+        public const int InsertionPointFieldNumber = 2;

+        private bool hasInsertionPoint;

+        private string insertionPoint_ = "";

+        public bool HasInsertionPoint {

+          get { return hasInsertionPoint; }

+        }

+        public string InsertionPoint {

+          get { return insertionPoint_; }

+        }

+

+        public const int ContentFieldNumber = 15;

+        private bool hasContent;

+        private string content_ = "";

+        public bool HasContent {

+          get { return hasContent; }

+        }

+        public string Content {

+          get { return content_; }

+        }

+

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          int size = SerializedSize;

+          string[] field_names = _fileFieldNames;

+          if (hasName) {

+            output.WriteString(1, field_names[2], Name);

+          }

+          if (hasInsertionPoint) {

+            output.WriteString(2, field_names[1], InsertionPoint);

+          }

+          if (hasContent) {

+            output.WriteString(15, field_names[0], Content);

+          }

+          UnknownFields.WriteTo(output);

+        }

+

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+

+            size = 0;

+            if (hasName) {

+              size += pb::CodedOutputStream.ComputeStringSize(1, Name);

+            }

+            if (hasInsertionPoint) {

+              size += pb::CodedOutputStream.ComputeStringSize(2, InsertionPoint);

+            }

+            if (hasContent) {

+              size += pb::CodedOutputStream.ComputeStringSize(15, Content);

+            }

+            size += UnknownFields.SerializedSize;

+            memoizedSerializedSize = size;

+            return size;

+          }

+        }

+

+        public static File ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static File ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static File ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static File ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static File ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static File ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static File ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static File ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static File ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static File ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private File MakeReadOnly() {

+          return this;

+        }

+

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(File prototype) {

+          return new Builder(prototype);

+        }

+

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<File, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(File cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+

+          private bool resultIsReadOnly;

+          private File result;

+

+          private File PrepareBuilder() {

+            if (resultIsReadOnly) {

+              File original = result;

+              result = new File();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+

+          protected override File MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File.Descriptor; }

+          }

+

+          public override File DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File.DefaultInstance; }

+          }

+

+          public override File BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is File) {

+              return MergeFrom((File) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+

+          public override Builder MergeFrom(File other) {

+            if (other == global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasName) {

+              Name = other.Name;

+            }

+            if (other.HasInsertionPoint) {

+              InsertionPoint = other.InsertionPoint;

+            }

+            if (other.HasContent) {

+              Content = other.Content;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_fileFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _fileFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 10: {

+                  result.hasName = input.ReadString(ref result.name_);

+                  break;

+                }

+                case 18: {

+                  result.hasInsertionPoint = input.ReadString(ref result.insertionPoint_);

+                  break;

+                }

+                case 122: {

+                  result.hasContent = input.ReadString(ref result.content_);

+                  break;

+                }

+              }

+            }

+

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+

+

+          public bool HasName {

+            get { return result.hasName; }

+          }

+          public string Name {

+            get { return result.Name; }

+            set { SetName(value); }

+          }

+          public Builder SetName(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasName = true;

+            result.name_ = value;

+            return this;

+          }

+          public Builder ClearName() {

+            PrepareBuilder();

+            result.hasName = false;

+            result.name_ = "";

+            return this;

+          }

+

+          public bool HasInsertionPoint {

+            get { return result.hasInsertionPoint; }

+          }

+          public string InsertionPoint {

+            get { return result.InsertionPoint; }

+            set { SetInsertionPoint(value); }

+          }

+          public Builder SetInsertionPoint(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasInsertionPoint = true;

+            result.insertionPoint_ = value;

+            return this;

+          }

+          public Builder ClearInsertionPoint() {

+            PrepareBuilder();

+            result.hasInsertionPoint = false;

+            result.insertionPoint_ = "";

+            return this;

+          }

+

+          public bool HasContent {

+            get { return result.hasContent; }

+          }

+          public string Content {

+            get { return result.Content; }

+            set { SetContent(value); }

+          }

+          public Builder SetContent(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasContent = true;

+            result.content_ = value;

+            return this;

+          }

+          public Builder ClearContent() {

+            PrepareBuilder();

+            result.hasContent = false;

+            result.content_ = "";

+            return this;

+          }

+        }

+        static File() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.Compiler.PluginProto.Plugin.Descriptor, null);

+        }

+      }

+

+    }

+    #endregion

+

+    public const int ErrorFieldNumber = 1;

+    private bool hasError;

+    private string error_ = "";

+    public bool HasError {

+      get { return hasError; }

+    }

+    public string Error {

+      get { return error_; }

+    }

+

+    public const int FileFieldNumber = 15;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File> file_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File>();

+    public scg::IList<global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File> FileList {

+      get { return file_; }

+    }

+    public int FileCount {

+      get { return file_.Count; }

+    }

+    public global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File GetFile(int index) {

+      return file_[index];

+    }

+

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      int size = SerializedSize;

+      string[] field_names = _codeGeneratorResponseFieldNames;

+      if (hasError) {

+        output.WriteString(1, field_names[0], Error);

+      }

+      if (file_.Count > 0) {

+        output.WriteMessageArray(15, field_names[1], file_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+

+        size = 0;

+        if (hasError) {

+          size += pb::CodedOutputStream.ComputeStringSize(1, Error);

+        }

+        foreach (global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File element in FileList) {

+          size += pb::CodedOutputStream.ComputeMessageSize(15, element);

+        }

+        size += UnknownFields.SerializedSize;

+        memoizedSerializedSize = size;

+        return size;

+      }

+    }

+

+    public static CodeGeneratorResponse ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CodeGeneratorResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CodeGeneratorResponse ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CodeGeneratorResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CodeGeneratorResponse ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CodeGeneratorResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static CodeGeneratorResponse ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static CodeGeneratorResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static CodeGeneratorResponse ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CodeGeneratorResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private CodeGeneratorResponse MakeReadOnly() {

+      file_.MakeReadOnly();

+      return this;

+    }

+

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(CodeGeneratorResponse prototype) {

+      return new Builder(prototype);

+    }

+

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<CodeGeneratorResponse, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(CodeGeneratorResponse cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+

+      private bool resultIsReadOnly;

+      private CodeGeneratorResponse result;

+

+      private CodeGeneratorResponse PrepareBuilder() {

+        if (resultIsReadOnly) {

+          CodeGeneratorResponse original = result;

+          result = new CodeGeneratorResponse();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+

+      protected override CodeGeneratorResponse MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Descriptor; }

+      }

+

+      public override CodeGeneratorResponse DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.DefaultInstance; }

+      }

+

+      public override CodeGeneratorResponse BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is CodeGeneratorResponse) {

+          return MergeFrom((CodeGeneratorResponse) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+

+      public override Builder MergeFrom(CodeGeneratorResponse other) {

+        if (other == global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasError) {

+          Error = other.Error;

+        }

+        if (other.file_.Count != 0) {

+          result.file_.Add(other.file_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_codeGeneratorResponseFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _codeGeneratorResponseFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasError = input.ReadString(ref result.error_);

+              break;

+            }

+            case 122: {

+              input.ReadMessageArray(tag, field_name, result.file_, global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+

+

+      public bool HasError {

+        get { return result.hasError; }

+      }

+      public string Error {

+        get { return result.Error; }

+        set { SetError(value); }

+      }

+      public Builder SetError(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasError = true;

+        result.error_ = value;

+        return this;

+      }

+      public Builder ClearError() {

+        PrepareBuilder();

+        result.hasError = false;

+        result.error_ = "";

+        return this;

+      }

+

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File> FileList {

+        get { return PrepareBuilder().file_; }

+      }

+      public int FileCount {

+        get { return result.FileCount; }

+      }

+      public global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File GetFile(int index) {

+        return result.GetFile(index);

+      }

+      public Builder SetFile(int index, global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.file_[index] = value;

+        return this;

+      }

+      public Builder SetFile(int index, global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.file_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddFile(global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.file_.Add(value);

+        return this;

+      }

+      public Builder AddFile(global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.file_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeFile(scg::IEnumerable<global::Google.ProtocolBuffers.Compiler.PluginProto.CodeGeneratorResponse.Types.File> values) {

+        PrepareBuilder();

+        result.file_.Add(values);

+        return this;

+      }

+      public Builder ClearFile() {

+        PrepareBuilder();

+        result.file_.Clear();

+        return this;

+      }

+    }

+    static CodeGeneratorResponse() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.Compiler.PluginProto.Plugin.Descriptor, null);

+    }

+  }

+

+  #endregion

+

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtoGen/PrimitiveFieldGenerator.cs b/csharp/src/ProtoGen/PrimitiveFieldGenerator.cs
new file mode 100644
index 0000000..69e0d4d
--- /dev/null
+++ b/csharp/src/ProtoGen/PrimitiveFieldGenerator.cs
@@ -0,0 +1,140 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    // TODO(jonskeet): Refactor this. There's loads of common code here.

+    internal class PrimitiveFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator

+    {

+        internal PrimitiveFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal)

+            : base(descriptor, fieldOrdinal)

+        {

+        }

+

+        public void GenerateMembers(TextGenerator writer)

+        {

+            writer.WriteLine("private bool has{0};", PropertyName);

+            writer.WriteLine("private {0} {1}_{2};", TypeName, Name, HasDefaultValue ? " = " + DefaultValue : "");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public bool Has{0} {{", PropertyName);

+            writer.WriteLine("  get {{ return has{0}; }}", PropertyName);

+            writer.WriteLine("}");

+            AddPublicMemberAttributes(writer);

+            writer.WriteLine("public {0} {1} {{", TypeName, PropertyName);

+            writer.WriteLine("  get {{ return {0}_; }}", Name);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateBuilderMembers(TextGenerator writer)

+        {

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public bool Has{0} {{", PropertyName);

+            writer.WriteLine("  get {{ return result.has{0}; }}", PropertyName);

+            writer.WriteLine("}");

+            AddPublicMemberAttributes(writer);

+            writer.WriteLine("public {0} {1} {{", TypeName, PropertyName);

+            writer.WriteLine("  get {{ return result.{0}; }}", PropertyName);

+            writer.WriteLine("  set {{ Set{0}(value); }}", PropertyName);

+            writer.WriteLine("}");

+            AddPublicMemberAttributes(writer);

+            writer.WriteLine("public Builder Set{0}({1} value) {{", PropertyName, TypeName);

+            AddNullCheck(writer);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.has{0} = true;", PropertyName);

+            writer.WriteLine("  result.{0}_ = value;", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Clear{0}() {{", PropertyName);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.has{0} = false;", PropertyName);

+            writer.WriteLine("  result.{0}_ = {1};", Name, DefaultValue);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+        }

+

+        public void GenerateMergingCode(TextGenerator writer)

+        {

+            writer.WriteLine("if (other.Has{0}) {{", PropertyName);

+            writer.WriteLine("  {0} = other.{0};", PropertyName);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateBuildingCode(TextGenerator writer)

+        {

+            // Nothing to do here for primitive types

+        }

+

+        public void GenerateParsingCode(TextGenerator writer)

+        {

+            writer.WriteLine("result.has{0} = input.Read{1}(ref result.{2}_);", PropertyName, CapitalizedTypeName, Name);

+        }

+

+        public void GenerateSerializationCode(TextGenerator writer)

+        {

+            writer.WriteLine("if (has{0}) {{", PropertyName);

+            writer.WriteLine("  output.Write{0}({1}, field_names[{3}], {2});", CapitalizedTypeName, Number, PropertyName,

+                             FieldOrdinal);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateSerializedSizeCode(TextGenerator writer)

+        {

+            writer.WriteLine("if (has{0}) {{", PropertyName);

+            writer.WriteLine("  size += pb::CodedOutputStream.Compute{0}Size({1}, {2});",

+                             CapitalizedTypeName, Number, PropertyName);

+            writer.WriteLine("}");

+        }

+

+        public override void WriteHash(TextGenerator writer)

+        {

+            writer.WriteLine("if (has{0}) hash ^= {1}_.GetHashCode();", PropertyName, Name);

+        }

+

+        public override void WriteEquals(TextGenerator writer)

+        {

+            writer.WriteLine("if (has{0} != other.has{0} || (has{0} && !{1}_.Equals(other.{1}_))) return false;",

+                             PropertyName, Name);

+        }

+

+        public override void WriteToString(TextGenerator writer)

+        {

+            writer.WriteLine("PrintField(\"{0}\", has{1}, {2}_, writer);", Descriptor.Name, PropertyName, Name);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/Program.cs b/csharp/src/ProtoGen/Program.cs
new file mode 100644
index 0000000..b11d32e
--- /dev/null
+++ b/csharp/src/ProtoGen/Program.cs
@@ -0,0 +1,105 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.IO;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Compiler.PluginProto;

+using Google.ProtocolBuffers.DescriptorProtos;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    /// <summary>

+    /// Entry point for the Protocol Buffers generator.

+    /// </summary>

+    internal class Program

+    {

+        internal static int Main(string[] args)

+        {

+            try

+            {

+                // Hack to make sure everything's initialized

+                DescriptorProtoFile.Descriptor.ToString();

+                GeneratorOptions options = new GeneratorOptions {Arguments = args};

+

+                IList<string> validationFailures;

+                if (!options.TryValidate(out validationFailures))

+                {

+                    // We've already got the message-building logic in the exception...

+                    InvalidOptionsException exception = new InvalidOptionsException(validationFailures);

+                    Console.WriteLine(exception.Message);

+                    return 1;

+                }

+

+                var request = new CodeGeneratorRequest.Builder();

+                foreach (string inputFile in options.InputFiles)

+                {

+                    ExtensionRegistry extensionRegistry = ExtensionRegistry.CreateInstance();

+                    CSharpOptions.RegisterAllExtensions(extensionRegistry);

+                    using (Stream inputStream = File.OpenRead(inputFile))

+                    {

+                        var fileSet = FileDescriptorSet.ParseFrom(inputStream, extensionRegistry);

+                        foreach (var fileProto in fileSet.FileList)

+                        {

+                            request.AddFileToGenerate(fileProto.Name);

+                            request.AddProtoFile(fileProto);

+                        }

+                    }

+                }

+

+                Generator generator = Generator.CreateGenerator(options);

+                var response = new CodeGeneratorResponse.Builder();

+                generator.Generate(request.Build(), response);

+                if (response.HasError)

+                {

+                    throw new Exception(response.Error);

+                }

+                foreach (var file in response.FileList)

+                {

+                    File.WriteAllText(file.Name, file.Content);

+                }

+                return 0;

+            }

+            catch (Exception e)

+            {

+                Console.Error.WriteLine("Error: {0}", e.Message);

+                Console.Error.WriteLine();

+                Console.Error.WriteLine("Detailed exception information: {0}", e);

+                return 1;

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/ProgramPreprocess.cs b/csharp/src/ProtoGen/ProgramPreprocess.cs
new file mode 100644
index 0000000..343e1f2
--- /dev/null
+++ b/csharp/src/ProtoGen/ProgramPreprocess.cs
@@ -0,0 +1,276 @@
+using System;

+using System.Collections.Generic;

+using System.Diagnostics;

+using System.IO;

+using System.Text;

+using System.Text.RegularExpressions;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    /// <summary>

+    /// Preprocesses any input files with an extension of '.proto' by running protoc.exe.  If arguments

+    /// are supplied with '--' prefix they are provided to protoc.exe, otherwise they are assumed to

+    /// be used for ProtoGen.exe which is run on the resulting output proto buffer.  If the option

+    /// --descriptor_set_out= is specified the proto buffer file is kept, otherwise it will be removed

+    /// after code generation.

+    /// </summary>

+    public class ProgramPreprocess

+    {

+        private const string ProtocExecutable = "protoc.exe";

+        private const string ProtocDirectoryArg = "--protoc_dir=";

+

+        private static int Main(string[] args)

+        {

+            try

+            {

+                return Environment.ExitCode = Run(args);

+            }

+            catch (Exception ex)

+            {

+                Console.Error.WriteLine(ex);

+                return Environment.ExitCode = 2;

+            }

+        }

+

+        public static int Run(params string[] args)

+        {

+            bool deleteFile = false;

+            string tempFile = null;

+            int result;

+            bool doHelp = args.Length == 0;

+            try

+            {

+                List<string> protocArgs = new List<string>();

+                List<string> protoGenArgs = new List<string>();

+

+                string protocFile = GuessProtocFile(args);

+

+                foreach (string arg in args)

+                {

+                    doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "/?");

+                    doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "/help");

+                    doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "-?");

+                    doHelp |= StringComparer.OrdinalIgnoreCase.Equals(arg, "-help");

+

+                    if (arg.StartsWith("--descriptor_set_out="))

+                    {

+                        tempFile = arg.Substring("--descriptor_set_out=".Length);

+                        protoGenArgs.Add(tempFile);

+                    }

+                }

+

+                if (doHelp)

+                {

+                    Console.WriteLine();

+                    Console.WriteLine("PROTOC.exe: Use any of the following options that begin with '--':");

+                    Console.WriteLine();

+                    try

+                    {

+                        RunProtoc(protocFile, "--help");

+                    }

+                    catch (Exception ex)

+                    {

+                        Console.Error.WriteLine(ex.Message);

+                    }

+                    Console.WriteLine();

+                    Console.WriteLine();

+                    Console.WriteLine(

+                        "PROTOGEN.exe: The following options are used to specify defaults for code generation.");

+                    Console.WriteLine();

+                    Program.Main(new string[0]);

+                    Console.WriteLine();

+                    Console.WriteLine("The following option enables PROTOGEN.exe to find PROTOC.exe");

+                    Console.WriteLine("{0}<directory containing protoc.exe>", ProtocDirectoryArg);

+                    return 0;

+                }

+

+                string pathRoot = Environment.CurrentDirectory;

+                foreach(string arg in args)

+                {

+                    if (arg.StartsWith("--proto_path=", StringComparison.InvariantCultureIgnoreCase))

+                    {

+                        pathRoot = arg.Substring(13);

+                    }

+                }

+

+                foreach (string arg in args)

+                {

+                    if (arg.StartsWith(ProtocDirectoryArg))

+                    {

+                        // Handled earlier

+                        continue;

+                    }

+                    if (arg.StartsWith("--"))

+                    {

+                        protocArgs.Add(arg);

+                    }

+                    else if ((File.Exists(arg) || File.Exists(Path.Combine(pathRoot, arg))) &&

+                             StringComparer.OrdinalIgnoreCase.Equals(".proto", Path.GetExtension(arg)))

+                    {

+                        if (tempFile == null)

+                        {

+                            deleteFile = true;

+                            tempFile = Path.GetTempFileName();

+                            protocArgs.Add(String.Format("--descriptor_set_out={0}", tempFile));

+                            protoGenArgs.Add(tempFile);

+                        }

+                        string patharg = arg;

+                        if (!File.Exists(patharg))

+                        {

+                            patharg = Path.Combine(pathRoot, arg);

+                        }

+

+                        protocArgs.Add(patharg);

+                    }

+                    else

+                    {

+                        protoGenArgs.Add(arg);

+                    }

+                }

+

+                if (tempFile != null)

+                {

+                    result = RunProtoc(protocFile, protocArgs.ToArray());

+                    if (result != 0)

+                    {

+                        return result;

+                    }

+                }

+

+                result = Program.Main(protoGenArgs.ToArray());

+            }

+            finally

+            {

+                if (deleteFile && tempFile != null && File.Exists(tempFile))

+                {

+                    File.Delete(tempFile);

+                }

+            }

+            return result;

+        }

+

+        /// <summary>

+        /// Tries to work out where protoc is based on command line arguments, the current

+        /// directory, the directory containing protogen, and the path.

+        /// </summary>

+        /// <returns>The path to protoc.exe, or null if it can't be found.</returns>

+        private static string GuessProtocFile(params string[] args)

+        {

+            // Why oh why is this not in System.IO.Path or Environment...?

+            List<string> searchPath = new List<string>();

+            foreach (string arg in args)

+            {

+                if (arg.StartsWith("--protoc_dir="))

+                {

+                    searchPath.Add(arg.Substring(ProtocDirectoryArg.Length));

+                }

+            }

+            searchPath.Add(Environment.CurrentDirectory);

+            searchPath.Add(AppDomain.CurrentDomain.BaseDirectory);

+            searchPath.AddRange((Environment.GetEnvironmentVariable("PATH") ?? String.Empty).Split(Path.PathSeparator));

+

+            foreach (string path in searchPath)

+            {

+                string exeFile = Path.Combine(path, ProtocExecutable);

+                if (File.Exists(exeFile))

+                {

+                    return exeFile;

+                }

+            }

+            return null;

+        }

+

+        private static int RunProtoc(string exeFile, params string[] args)

+        {

+            if (exeFile == null)

+            {

+                throw new FileNotFoundException(

+                    "Unable to locate " + ProtocExecutable +

+                    " make sure it is in the PATH, cwd, or exe dir, or use --protoc_dir=...");

+            }

+

+            ProcessStartInfo psi = new ProcessStartInfo(exeFile);

+            psi.Arguments = EscapeArguments(args);

+            psi.RedirectStandardError = true;

+            psi.RedirectStandardInput = false;

+            psi.RedirectStandardOutput = true;

+            psi.ErrorDialog = false;

+            psi.CreateNoWindow = true;

+            psi.UseShellExecute = false;

+            psi.WorkingDirectory = Environment.CurrentDirectory;

+

+            Process process = Process.Start(psi);

+            if (process == null)

+            {

+                return 1;

+            }

+

+            process.WaitForExit();

+

+            string tmp = process.StandardOutput.ReadToEnd();

+            if (tmp.Trim().Length > 0)

+            {

+                Console.Out.WriteLine(tmp);

+            }

+            tmp = process.StandardError.ReadToEnd();

+            if (tmp.Trim().Length > 0)

+            {

+                // Replace protoc output with something more amenable to Visual Studio.

+                var regexMsvs = new Regex(@"(.*)\((\d+)\).* column=(\d+)\s*:\s*(.*)");

+                tmp = regexMsvs.Replace(tmp, "$1($2,$3): error CS9999: $4");

+                var regexGcc = new Regex(@"(.*):(\d+):(\d+):\s*(.*)");

+                tmp = regexGcc.Replace(tmp, "$1($2,$3): error CS9999: $4");

+                Console.Error.WriteLine(tmp);

+            }

+            return process.ExitCode;

+        }

+

+        /// <summary>

+        /// Quotes all arguments that contain whitespace, or begin with a quote and returns a single

+        /// argument string for use with Process.Start().

+        /// </summary>

+        /// <remarks>http://csharptest.net/?p=529</remarks>

+        /// <param name="args">A list of strings for arguments, may not contain null, '\0', '\r', or '\n'</param>

+        /// <returns>The combined list of escaped/quoted strings</returns>

+        /// <exception cref="System.ArgumentNullException">Raised when one of the arguments is null</exception>

+        /// <exception cref="System.ArgumentOutOfRangeException">Raised if an argument contains '\0', '\r', or '\n'</exception>

+        public static string EscapeArguments(params string[] args)

+        {

+            StringBuilder arguments = new StringBuilder();

+            Regex invalidChar = new Regex("[\x00\x0a\x0d]");//  these can not be escaped

+            Regex needsQuotes = new Regex(@"\s|""");//          contains whitespace or two quote characters

+            Regex escapeQuote = new Regex(@"(\\*)(""|$)");//    one or more '\' followed with a quote or end of string

+            for (int carg = 0; args != null && carg < args.Length; carg++)

+            {

+                if (args[carg] == null)

+                {

+                    throw new ArgumentNullException("args[" + carg + "]");

+                }

+                if (invalidChar.IsMatch(args[carg]))

+                {

+                    throw new ArgumentOutOfRangeException("args[" + carg + "]");

+                }

+                if (args[carg] == String.Empty)

+                {

+                    arguments.Append("\"\"");

+                }

+                else if (!needsQuotes.IsMatch(args[carg])) { arguments.Append(args[carg]); }

+                else

+                {

+                    arguments.Append('"');

+                    arguments.Append(escapeQuote.Replace(args[carg],

+                                                         m =>

+                                                         m.Groups[1].Value + m.Groups[1].Value +

+                                                         (m.Groups[2].Value == "\"" ? "\\\"" : "")

+                                         ));

+                    arguments.Append('"');

+                }

+                if (carg + 1 < args.Length)

+                {

+                    arguments.Append(' ');

+                }

+            }

+            return arguments.ToString();

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/Properties/AssemblyInfo.cs b/csharp/src/ProtoGen/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..565894f
--- /dev/null
+++ b/csharp/src/ProtoGen/Properties/AssemblyInfo.cs
@@ -0,0 +1,29 @@
+using System.Reflection;

+using System.Runtime.InteropServices;

+

+// General Information about an assembly is controlled through the following 

+// set of attributes. Change these attribute values to modify the information

+// associated with an assembly.

+

+[assembly: AssemblyTitle("ProtoGen")]

+[assembly: AssemblyDescription("")]

+[assembly: AssemblyConfiguration("")]

+[assembly: AssemblyCompany("")]

+[assembly: AssemblyProduct("ProtoGen")]

+[assembly: AssemblyCopyright("Copyright ©  2008")]

+[assembly: AssemblyTrademark("")]

+[assembly: AssemblyCulture("")]

+

+// Version information for an assembly consists of the following four values:

+//

+//      Major Version

+//      Minor Version 

+//      Build Number

+//      Revision

+//

+// You can specify all the values or you can default the Build and Revision Numbers 

+// by using the '*' as shown below:

+// [assembly: AssemblyVersion("2.4.1.555")]

+

+[assembly: AssemblyVersion("2.4.1.555")]

+[assembly: AssemblyFileVersion("2.4.1.555")]
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/ProtoGen.csproj b/csharp/src/ProtoGen/ProtoGen.csproj
new file mode 100644
index 0000000..2de44ae
--- /dev/null
+++ b/csharp/src/ProtoGen/ProtoGen.csproj
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{250ADE34-82FD-4BAE-86D5-985FBE589C4A}</ProjectGuid>

+    <OutputType>Exe</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.ProtoGen</RootNamespace>

+    <AssemblyName>ProtoGen</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <StartupObject>Google.ProtocolBuffers.ProtoGen.ProgramPreprocess</StartupObject>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Data" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="DescriptorUtil.cs" />

+    <Compile Include="EnumFieldGenerator.cs" />

+    <Compile Include="EnumGenerator.cs" />

+    <Compile Include="ExtensionGenerator.cs" />

+    <Compile Include="FieldGeneratorBase.cs" />

+    <Compile Include="IFieldSourceGenerator.cs" />

+    <Compile Include="ISourceGenerator.cs" />

+    <Compile Include="MessageFieldGenerator.cs" />

+    <Compile Include="MessageGenerator.cs" />

+    <Compile Include="PluginProtoFile.cs" />

+    <Compile Include="PrimitiveFieldGenerator.cs" />

+    <Compile Include="ProgramPreprocess.cs" />

+    <Compile Include="RepeatedEnumFieldGenerator.cs" />

+    <Compile Include="RepeatedMessageFieldGenerator.cs" />

+    <Compile Include="RepeatedPrimitiveFieldGenerator.cs" />

+    <Compile Include="ServiceGenerator.cs" />

+    <Compile Include="DependencyResolutionException.cs" />

+    <Compile Include="Generator.cs" />

+    <Compile Include="GeneratorOptions.cs" />

+    <Compile Include="Helpers.cs" />

+    <Compile Include="InvalidOptionsException.cs" />

+    <Compile Include="Program.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ServiceInterfaceGenerator.cs" />

+    <Compile Include="SourceGeneratorBase.cs" />

+    <Compile Include="SourceGenerators.cs" />

+    <Compile Include="UmbrellaClassGenerator.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <None Include="app.config" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/ProtocGenCs.cs b/csharp/src/ProtoGen/ProtocGenCs.cs
new file mode 100644
index 0000000..2926420
--- /dev/null
+++ b/csharp/src/ProtoGen/ProtocGenCs.cs
@@ -0,0 +1,76 @@
+using Google.ProtocolBuffers.Compiler.PluginProto;

+using Google.ProtocolBuffers.DescriptorProtos;

+using System;

+using System.Collections.Generic;

+

+// Usage example:

+//   protoc.exe

+//     --plugin=path\to\protoc-gen-cs.exe

+//     --cs_out="-generated_code_attributes=true umbrella_namespace=TutorialProto :."

+//     --proto_path=.\protos\

+//     protos\tutorial\addressbook.proto

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    public static class ProtocGenCs

+    {

+        internal static void Run(CodeGeneratorRequest request, CodeGeneratorResponse.Builder response)

+        {

+            var arguments = new List<string>();

+            foreach (var arg in request.Parameter.Split(' '))

+            {

+                var timmedArg = (arg ?? "").Trim();

+                if (!string.IsNullOrEmpty(timmedArg))

+                {

+                    arguments.Add(timmedArg);

+                }

+            }

+            // Adding fake input file to make TryValidate happy.

+            arguments.Add(System.Reflection.Assembly.GetExecutingAssembly().Location);

+

+            GeneratorOptions options = new GeneratorOptions

+            {

+                Arguments = arguments

+            };

+            IList<string> validationFailures;

+            if (!options.TryValidate(out validationFailures))

+            {

+                response.Error += new InvalidOptionsException(validationFailures).Message;

+                return;

+            }

+

+            Generator generator = Generator.CreateGenerator(options);

+            generator.Generate(request, response);

+        }

+

+        public static int Main(string[] args)

+        {

+            // Hack to make sure everything's initialized

+            DescriptorProtoFile.Descriptor.ToString();

+            ExtensionRegistry extensionRegistry = ExtensionRegistry.CreateInstance();

+            CSharpOptions.RegisterAllExtensions(extensionRegistry);

+

+            CodeGeneratorRequest request;

+            var response = new CodeGeneratorResponse.Builder();

+            try

+            {

+                using (var input = Console.OpenStandardInput())

+                {

+                    request = CodeGeneratorRequest.ParseFrom(input, extensionRegistry);

+                }

+                Run(request, response);

+            }

+            catch (Exception e)

+            {

+                response.Error += e.ToString();

+            }

+

+            using (var output = Console.OpenStandardOutput())

+            {

+                response.Build().WriteTo(output);

+                output.Flush();

+            }

+            return 0;

+        }

+    }

+}

diff --git a/csharp/src/ProtoGen/RepeatedEnumFieldGenerator.cs b/csharp/src/ProtoGen/RepeatedEnumFieldGenerator.cs
new file mode 100644
index 0000000..8c9f17b
--- /dev/null
+++ b/csharp/src/ProtoGen/RepeatedEnumFieldGenerator.cs
@@ -0,0 +1,212 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal class RepeatedEnumFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator

+    {

+        internal RepeatedEnumFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal)

+            : base(descriptor, fieldOrdinal)

+        {

+        }

+

+        public void GenerateMembers(TextGenerator writer)

+        {

+            if (Descriptor.IsPacked && OptimizeSpeed)

+            {

+                writer.WriteLine("private int {0}MemoizedSerializedSize;", Name);

+            }

+            writer.WriteLine("private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();", TypeName, Name);

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public scg::IList<{0}> {1}List {{", TypeName, PropertyName);

+            writer.WriteLine("  get {{ return pbc::Lists.AsReadOnly({0}_); }}", Name);

+            writer.WriteLine("}");

+

+            // TODO(jonskeet): Redundant API calls? Possibly - include for portability though. Maybe create an option.

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public int {0}Count {{", PropertyName);

+            writer.WriteLine("  get {{ return {0}_.Count; }}", Name);

+            writer.WriteLine("}");

+

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName);

+            writer.WriteLine("  return {0}_[index];", Name);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateBuilderMembers(TextGenerator writer)

+        {

+            // Note:  We can return the original list here, because we make it unmodifiable when we build

+            // We return it via IPopsicleList so that collection initializers work more pleasantly.

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public pbc::IPopsicleList<{0}> {1}List {{", TypeName, PropertyName);

+            writer.WriteLine("  get {{ return PrepareBuilder().{0}_; }}", Name);

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public int {0}Count {{", PropertyName);

+            writer.WriteLine("  get {{ return result.{0}Count; }}", PropertyName);

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName);

+            writer.WriteLine("  return result.Get{0}(index);", PropertyName);

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_[index] = value;", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_.Add(value);", Name, TypeName);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder AddRange{0}(scg::IEnumerable<{1}> values) {{", PropertyName, TypeName);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_.Add(values);", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Clear{0}() {{", PropertyName);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_.Clear();", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+        }

+

+        public void GenerateMergingCode(TextGenerator writer)

+        {

+            writer.WriteLine("if (other.{0}_.Count != 0) {{", Name);

+            writer.WriteLine("  result.{0}_.Add(other.{0}_);", Name);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateBuildingCode(TextGenerator writer)

+        {

+            writer.WriteLine("{0}_.MakeReadOnly();", Name);

+        }

+

+        public void GenerateParsingCode(TextGenerator writer)

+        {

+            writer.WriteLine("scg::ICollection<object> unknownItems;");

+            writer.WriteLine("input.ReadEnumArray<{0}>(tag, field_name, result.{1}_, out unknownItems);", TypeName, Name);

+            if (!UseLiteRuntime)

+            {

+                writer.WriteLine("if (unknownItems != null) {");

+                writer.WriteLine("  if (unknownFields == null) {");

+                writer.WriteLine("    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);");

+                writer.WriteLine("  }");

+                writer.WriteLine("  foreach (object rawValue in unknownItems)");

+                writer.WriteLine("    if (rawValue is int)");

+                writer.WriteLine("      unknownFields.MergeVarintField({0}, (ulong)(int)rawValue);", Number);

+                writer.WriteLine("}");

+            }

+        }

+

+        public void GenerateSerializationCode(TextGenerator writer)

+        {

+            writer.WriteLine("if ({0}_.Count > 0) {{", Name);

+            writer.Indent();

+            if (Descriptor.IsPacked)

+            {

+                writer.WriteLine(

+                    "output.WritePackedEnumArray({0}, field_names[{2}], {1}MemoizedSerializedSize, {1}_);", Number, Name,

+                    FieldOrdinal, Descriptor.FieldType);

+            }

+            else

+            {

+                writer.WriteLine("output.WriteEnumArray({0}, field_names[{2}], {1}_);", Number, Name, FieldOrdinal,

+                                 Descriptor.FieldType);

+            }

+            writer.Outdent();

+            writer.WriteLine("}");

+        }

+

+        public void GenerateSerializedSizeCode(TextGenerator writer)

+        {

+            writer.WriteLine("{");

+            writer.Indent();

+            writer.WriteLine("int dataSize = 0;");

+            writer.WriteLine("if ({0}_.Count > 0) {{", Name);

+            writer.Indent();

+            writer.WriteLine("foreach ({0} element in {1}_) {{", TypeName, Name);

+            writer.WriteLine("  dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);");

+            writer.WriteLine("}");

+            writer.WriteLine("size += dataSize;");

+            int tagSize = CodedOutputStream.ComputeTagSize(Descriptor.FieldNumber);

+            if (Descriptor.IsPacked)

+            {

+                writer.WriteLine("size += {0};", tagSize);

+                writer.WriteLine("size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);");

+            }

+            else

+            {

+                writer.WriteLine("size += {0} * {1}_.Count;", tagSize, Name);

+            }

+            writer.Outdent();

+            writer.WriteLine("}");

+            // cache the data size for packed fields.

+            if (Descriptor.IsPacked)

+            {

+                writer.WriteLine("{0}MemoizedSerializedSize = dataSize;", Name);

+            }

+            writer.Outdent();

+            writer.WriteLine("}");

+        }

+

+        public override void WriteHash(TextGenerator writer)

+        {

+            writer.WriteLine("foreach({0} i in {1}_)", TypeName, Name);

+            writer.WriteLine("  hash ^= i.GetHashCode();");

+        }

+

+        public override void WriteEquals(TextGenerator writer)

+        {

+            writer.WriteLine("if({0}_.Count != other.{0}_.Count) return false;", Name);

+            writer.WriteLine("for(int ix=0; ix < {0}_.Count; ix++)", Name);

+            writer.WriteLine("  if(!{0}_[ix].Equals(other.{0}_[ix])) return false;", Name);

+        }

+

+        public override void WriteToString(TextGenerator writer)

+        {

+            writer.WriteLine("PrintField(\"{0}\", {1}_, writer);", Descriptor.Name, Name);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/RepeatedMessageFieldGenerator.cs b/csharp/src/ProtoGen/RepeatedMessageFieldGenerator.cs
new file mode 100644
index 0000000..a9a0143
--- /dev/null
+++ b/csharp/src/ProtoGen/RepeatedMessageFieldGenerator.cs
@@ -0,0 +1,184 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal class RepeatedMessageFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator

+    {

+        internal RepeatedMessageFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal)

+            : base(descriptor, fieldOrdinal)

+        {

+        }

+

+        public void GenerateMembers(TextGenerator writer)

+        {

+            writer.WriteLine("private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();", TypeName, Name);

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public scg::IList<{0}> {1}List {{", TypeName, PropertyName);

+            writer.WriteLine("  get {{ return {0}_; }}", Name);

+            writer.WriteLine("}");

+

+            // TODO(jonskeet): Redundant API calls? Possibly - include for portability though. Maybe create an option.

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public int {0}Count {{", PropertyName);

+            writer.WriteLine("  get {{ return {0}_.Count; }}", Name);

+            writer.WriteLine("}");

+

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName);

+            writer.WriteLine("  return {0}_[index];", Name);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateBuilderMembers(TextGenerator writer)

+        {

+            // Note:  We can return the original list here, because we make it unmodifiable when we build

+            // We return it via IPopsicleList so that collection initializers work more pleasantly.

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public pbc::IPopsicleList<{0}> {1}List {{", TypeName, PropertyName);

+            writer.WriteLine("  get {{ return PrepareBuilder().{0}_; }}", Name);

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public int {0}Count {{", PropertyName);

+            writer.WriteLine("  get {{ return result.{0}Count; }}", PropertyName);

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName);

+            writer.WriteLine("  return result.Get{0}(index);", PropertyName);

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName);

+            AddNullCheck(writer);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_[index] = value;", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            // Extra overload for builder (just on messages)

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Set{0}(int index, {1}.Builder builderForValue) {{", PropertyName, TypeName);

+            AddNullCheck(writer, "builderForValue");

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_[index] = builderForValue.Build();", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName);

+            AddNullCheck(writer);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_.Add(value);", Name, TypeName);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            // Extra overload for builder (just on messages)

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Add{0}({1}.Builder builderForValue) {{", PropertyName, TypeName);

+            AddNullCheck(writer, "builderForValue");

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_.Add(builderForValue.Build());", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder AddRange{0}(scg::IEnumerable<{1}> values) {{", PropertyName, TypeName);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_.Add(values);", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Clear{0}() {{", PropertyName);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_.Clear();", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+        }

+

+        public void GenerateMergingCode(TextGenerator writer)

+        {

+            writer.WriteLine("if (other.{0}_.Count != 0) {{", Name);

+            writer.WriteLine("  result.{0}_.Add(other.{0}_);", Name);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateBuildingCode(TextGenerator writer)

+        {

+            writer.WriteLine("{0}_.MakeReadOnly();", Name);

+        }

+

+        public void GenerateParsingCode(TextGenerator writer)

+        {

+            writer.WriteLine(

+                "input.Read{0}Array(tag, field_name, result.{1}_, {2}.DefaultInstance, extensionRegistry);",

+                MessageOrGroup, Name, TypeName);

+        }

+

+        public void GenerateSerializationCode(TextGenerator writer)

+        {

+            writer.WriteLine("if ({0}_.Count > 0) {{", Name);

+            writer.Indent();

+            writer.WriteLine("output.Write{0}Array({1}, field_names[{3}], {2}_);", MessageOrGroup, Number, Name,

+                             FieldOrdinal, Descriptor.FieldType);

+            writer.Outdent();

+            writer.WriteLine("}");

+        }

+

+        public void GenerateSerializedSizeCode(TextGenerator writer)

+        {

+            writer.WriteLine("foreach ({0} element in {1}List) {{", TypeName, PropertyName);

+            writer.WriteLine("  size += pb::CodedOutputStream.Compute{0}Size({1}, element);", MessageOrGroup, Number);

+            writer.WriteLine("}");

+        }

+

+        public override void WriteHash(TextGenerator writer)

+        {

+            writer.WriteLine("foreach({0} i in {1}_)", TypeName, Name);

+            writer.WriteLine("  hash ^= i.GetHashCode();");

+        }

+

+        public override void WriteEquals(TextGenerator writer)

+        {

+            writer.WriteLine("if({0}_.Count != other.{0}_.Count) return false;", Name);

+            writer.WriteLine("for(int ix=0; ix < {0}_.Count; ix++)", Name);

+            writer.WriteLine("  if(!{0}_[ix].Equals(other.{0}_[ix])) return false;", Name);

+        }

+

+        public override void WriteToString(TextGenerator writer)

+        {

+            writer.WriteLine("PrintField(\"{0}\", {1}_, writer);",

+                             Descriptor.FieldType == FieldType.Group ? Descriptor.MessageType.Name : Descriptor.Name,

+                             Name);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/RepeatedPrimitiveFieldGenerator.cs b/csharp/src/ProtoGen/RepeatedPrimitiveFieldGenerator.cs
new file mode 100644
index 0000000..b795f3b
--- /dev/null
+++ b/csharp/src/ProtoGen/RepeatedPrimitiveFieldGenerator.cs
@@ -0,0 +1,207 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal class RepeatedPrimitiveFieldGenerator : FieldGeneratorBase, IFieldSourceGenerator

+    {

+        internal RepeatedPrimitiveFieldGenerator(FieldDescriptor descriptor, int fieldOrdinal)

+            : base(descriptor, fieldOrdinal)

+        {

+        }

+

+        public void GenerateMembers(TextGenerator writer)

+        {

+            if (Descriptor.IsPacked && OptimizeSpeed)

+            {

+                writer.WriteLine("private int {0}MemoizedSerializedSize;", Name);

+            }

+            writer.WriteLine("private pbc::PopsicleList<{0}> {1}_ = new pbc::PopsicleList<{0}>();", TypeName, Name);

+            AddPublicMemberAttributes(writer);

+            writer.WriteLine("public scg::IList<{0}> {1}List {{", TypeName, PropertyName);

+            writer.WriteLine("  get {{ return pbc::Lists.AsReadOnly({0}_); }}", Name);

+            writer.WriteLine("}");

+

+            // TODO(jonskeet): Redundant API calls? Possibly - include for portability though. Maybe create an option.

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public int {0}Count {{", PropertyName);

+            writer.WriteLine("  get {{ return {0}_.Count; }}", Name);

+            writer.WriteLine("}");

+

+            AddPublicMemberAttributes(writer);

+            writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName);

+            writer.WriteLine("  return {0}_[index];", Name);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateBuilderMembers(TextGenerator writer)

+        {

+            // Note:  We can return the original list here, because we make it unmodifiable when we build

+            // We return it via IPopsicleList so that collection initializers work more pleasantly.

+            AddPublicMemberAttributes(writer);

+            writer.WriteLine("public pbc::IPopsicleList<{0}> {1}List {{", TypeName, PropertyName);

+            writer.WriteLine("  get {{ return PrepareBuilder().{0}_; }}", Name);

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public int {0}Count {{", PropertyName);

+            writer.WriteLine("  get {{ return result.{0}Count; }}", PropertyName);

+            writer.WriteLine("}");

+            AddPublicMemberAttributes(writer);

+            writer.WriteLine("public {0} Get{1}(int index) {{", TypeName, PropertyName);

+            writer.WriteLine("  return result.Get{0}(index);", PropertyName);

+            writer.WriteLine("}");

+            AddPublicMemberAttributes(writer);

+            writer.WriteLine("public Builder Set{0}(int index, {1} value) {{", PropertyName, TypeName);

+            AddNullCheck(writer);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_[index] = value;", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddPublicMemberAttributes(writer);

+            writer.WriteLine("public Builder Add{0}({1} value) {{", PropertyName, TypeName);

+            AddNullCheck(writer);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_.Add(value);", Name, TypeName);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddPublicMemberAttributes(writer);

+            writer.WriteLine("public Builder AddRange{0}(scg::IEnumerable<{1}> values) {{", PropertyName, TypeName);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_.Add(values);", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+            AddDeprecatedFlag(writer);

+            writer.WriteLine("public Builder Clear{0}() {{", PropertyName);

+            writer.WriteLine("  PrepareBuilder();");

+            writer.WriteLine("  result.{0}_.Clear();", Name);

+            writer.WriteLine("  return this;");

+            writer.WriteLine("}");

+        }

+

+        public void GenerateMergingCode(TextGenerator writer)

+        {

+            writer.WriteLine("if (other.{0}_.Count != 0) {{", Name);

+            writer.WriteLine("  result.{0}_.Add(other.{0}_);", Name);

+            writer.WriteLine("}");

+        }

+

+        public void GenerateBuildingCode(TextGenerator writer)

+        {

+            writer.WriteLine("{0}_.MakeReadOnly();", Name);

+        }

+

+        public void GenerateParsingCode(TextGenerator writer)

+        {

+            writer.WriteLine("input.Read{0}Array(tag, field_name, result.{1}_);", CapitalizedTypeName, Name,

+                             Descriptor.FieldType);

+        }

+

+        public void GenerateSerializationCode(TextGenerator writer)

+        {

+            writer.WriteLine("if ({0}_.Count > 0) {{", Name);

+            writer.Indent();

+            if (Descriptor.IsPacked)

+            {

+                writer.WriteLine("output.WritePacked{0}Array({1}, field_names[{3}], {2}MemoizedSerializedSize, {2}_);",

+                                 CapitalizedTypeName, Number, Name, FieldOrdinal, Descriptor.FieldType);

+            }

+            else

+            {

+                writer.WriteLine("output.Write{0}Array({1}, field_names[{3}], {2}_);", CapitalizedTypeName, Number, Name,

+                                 FieldOrdinal, Descriptor.FieldType);

+            }

+            writer.Outdent();

+            writer.WriteLine("}");

+        }

+

+        public void GenerateSerializedSizeCode(TextGenerator writer)

+        {

+            writer.WriteLine("{");

+            writer.Indent();

+            writer.WriteLine("int dataSize = 0;");

+            if (FixedSize == -1)

+            {

+                writer.WriteLine("foreach ({0} element in {1}List) {{", TypeName, PropertyName);

+                writer.WriteLine("  dataSize += pb::CodedOutputStream.Compute{0}SizeNoTag(element);",

+                                 CapitalizedTypeName, Number);

+                writer.WriteLine("}");

+            }

+            else

+            {

+                writer.WriteLine("dataSize = {0} * {1}_.Count;", FixedSize, Name);

+            }

+            writer.WriteLine("size += dataSize;");

+            int tagSize = CodedOutputStream.ComputeTagSize(Descriptor.FieldNumber);

+            if (Descriptor.IsPacked)

+            {

+                writer.WriteLine("if ({0}_.Count != 0) {{", Name);

+                writer.WriteLine("  size += {0} + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);", tagSize);

+                writer.WriteLine("}");

+            }

+            else

+            {

+                writer.WriteLine("size += {0} * {1}_.Count;", tagSize, Name);

+            }

+            // cache the data size for packed fields.

+            if (Descriptor.IsPacked)

+            {

+                writer.WriteLine("{0}MemoizedSerializedSize = dataSize;", Name);

+            }

+            writer.Outdent();

+            writer.WriteLine("}");

+        }

+

+        public override void WriteHash(TextGenerator writer)

+        {

+            writer.WriteLine("foreach({0} i in {1}_)", TypeName, Name);

+            writer.WriteLine("  hash ^= i.GetHashCode();");

+        }

+

+        public override void WriteEquals(TextGenerator writer)

+        {

+            writer.WriteLine("if({0}_.Count != other.{0}_.Count) return false;", Name);

+            writer.WriteLine("for(int ix=0; ix < {0}_.Count; ix++)", Name);

+            writer.WriteLine("  if(!{0}_[ix].Equals(other.{0}_[ix])) return false;", Name);

+        }

+

+        public override void WriteToString(TextGenerator writer)

+        {

+            writer.WriteLine("PrintField(\"{0}\", {1}_, writer);", Descriptor.Name, Name);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/ServiceGenerator.cs b/csharp/src/ProtoGen/ServiceGenerator.cs
new file mode 100644
index 0000000..a6b9eb2
--- /dev/null
+++ b/csharp/src/ProtoGen/ServiceGenerator.cs
@@ -0,0 +1,190 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal class GenericServiceGenerator : SourceGeneratorBase<ServiceDescriptor>, ISourceGenerator

+    {

+        private enum RequestOrResponse

+        {

+            Request,

+            Response

+        }

+

+        internal GenericServiceGenerator(ServiceDescriptor descriptor)

+            : base(descriptor)

+        {

+        }

+

+        public void Generate(TextGenerator writer)

+        {

+            writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");

+            WriteGeneratedCodeAttributes(writer);

+            writer.WriteLine("{0} abstract class {1} : pb::IService {{", ClassAccessLevel, Descriptor.Name);

+            writer.Indent();

+

+            foreach (MethodDescriptor method in Descriptor.Methods)

+            {

+                writer.WriteLine("{0} abstract void {1}(", ClassAccessLevel,

+                                 NameHelpers.UnderscoresToPascalCase(method.Name));

+                writer.WriteLine("    pb::IRpcController controller,");

+                writer.WriteLine("    {0} request,", GetClassName(method.InputType));

+                writer.WriteLine("    global::System.Action<{0}> done);", GetClassName(method.OutputType));

+            }

+

+            // Generate Descriptor and DescriptorForType.

+            writer.WriteLine();

+            writer.WriteLine("{0} static pbd::ServiceDescriptor Descriptor {{", ClassAccessLevel);

+            writer.WriteLine("  get {{ return {0}.Descriptor.Services[{1}]; }}",

+                             DescriptorUtil.GetQualifiedUmbrellaClassName(Descriptor.File.CSharpOptions),

+                             Descriptor.Index);

+            writer.WriteLine("}");

+            writer.WriteLine("public pbd::ServiceDescriptor DescriptorForType {");

+            writer.WriteLine("  get { return Descriptor; }");

+            writer.WriteLine("}");

+

+            GenerateCallMethod(writer);

+            GenerateGetPrototype(RequestOrResponse.Request, writer);

+            GenerateGetPrototype(RequestOrResponse.Response, writer);

+            GenerateStub(writer);

+

+            writer.Outdent();

+            writer.WriteLine("}");

+        }

+

+        private void GenerateCallMethod(TextGenerator writer)

+        {

+            writer.WriteLine();

+            writer.WriteLine("public void CallMethod(");

+            writer.WriteLine("    pbd::MethodDescriptor method,");

+            writer.WriteLine("    pb::IRpcController controller,");

+            writer.WriteLine("    pb::IMessage request,");

+            writer.WriteLine("    global::System.Action<pb::IMessage> done) {");

+            writer.Indent();

+            writer.WriteLine("if (method.Service != Descriptor) {");

+            writer.WriteLine("  throw new global::System.ArgumentException(");

+            writer.WriteLine("      \"Service.CallMethod() given method descriptor for wrong service type.\");");

+            writer.WriteLine("}");

+            writer.WriteLine("switch(method.Index) {");

+            writer.Indent();

+            foreach (MethodDescriptor method in Descriptor.Methods)

+            {

+                writer.WriteLine("case {0}:", method.Index);

+                writer.WriteLine("  this.{0}(controller, ({1}) request,",

+                                 NameHelpers.UnderscoresToPascalCase(method.Name), GetClassName(method.InputType));

+                writer.WriteLine("      pb::RpcUtil.SpecializeCallback<{0}>(", GetClassName(method.OutputType));

+                writer.WriteLine("      done));");

+                writer.WriteLine("  return;");

+            }

+            writer.WriteLine("default:");

+            writer.WriteLine("  throw new global::System.InvalidOperationException(\"Can't get here.\");");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine();

+        }

+

+        private void GenerateGetPrototype(RequestOrResponse which, TextGenerator writer)

+        {

+            writer.WriteLine("public pb::IMessage Get{0}Prototype(pbd::MethodDescriptor method) {{", which);

+            writer.Indent();

+            writer.WriteLine("if (method.Service != Descriptor) {");

+            writer.WriteLine("  throw new global::System.ArgumentException(");

+            writer.WriteLine("      \"Service.Get{0}Prototype() given method descriptor for wrong service type.\");",

+                             which);

+            writer.WriteLine("}");

+            writer.WriteLine("switch(method.Index) {");

+            writer.Indent();

+

+            foreach (MethodDescriptor method in Descriptor.Methods)

+            {

+                writer.WriteLine("case {0}:", method.Index);

+                writer.WriteLine("  return {0}.DefaultInstance;",

+                                 GetClassName(which == RequestOrResponse.Request ? method.InputType : method.OutputType));

+            }

+            writer.WriteLine("default:");

+            writer.WriteLine("  throw new global::System.InvalidOperationException(\"Can't get here.\");");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine();

+        }

+

+        private void GenerateStub(TextGenerator writer)

+        {

+            writer.WriteLine("public static Stub CreateStub(pb::IRpcChannel channel) {");

+            writer.WriteLine("  return new Stub(channel);");

+            writer.WriteLine("}");

+            writer.WriteLine();

+            writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");

+            WriteGeneratedCodeAttributes(writer);

+            writer.WriteLine("{0} class Stub : {1} {{", ClassAccessLevel, GetClassName(Descriptor));

+            writer.Indent();

+            writer.WriteLine("internal Stub(pb::IRpcChannel channel) {");

+            writer.WriteLine("  this.channel = channel;");

+            writer.WriteLine("}");

+            writer.WriteLine();

+            writer.WriteLine("private readonly pb::IRpcChannel channel;");

+            writer.WriteLine();

+            writer.WriteLine("public pb::IRpcChannel Channel {");

+            writer.WriteLine("  get { return channel; }");

+            writer.WriteLine("}");

+

+            foreach (MethodDescriptor method in Descriptor.Methods)

+            {

+                writer.WriteLine();

+                writer.WriteLine("{0} override void {1}(", ClassAccessLevel, 

+                                 NameHelpers.UnderscoresToPascalCase(method.Name));

+                writer.WriteLine("    pb::IRpcController controller,");

+                writer.WriteLine("    {0} request,", GetClassName(method.InputType));

+                writer.WriteLine("    global::System.Action<{0}> done) {{", GetClassName(method.OutputType));

+                writer.Indent();

+                writer.WriteLine("channel.CallMethod(Descriptor.Methods[{0}],", method.Index);

+                writer.WriteLine("    controller, request, {0}.DefaultInstance,", GetClassName(method.OutputType));

+                writer.WriteLine("    pb::RpcUtil.GeneralizeCallback<{0}, {0}.Builder>(done, {0}.DefaultInstance));",

+                                 GetClassName(method.OutputType));

+                writer.Outdent();

+                writer.WriteLine("}");

+            }

+            writer.Outdent();

+            writer.WriteLine("}");

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/ServiceInterfaceGenerator.cs b/csharp/src/ProtoGen/ServiceInterfaceGenerator.cs
new file mode 100644
index 0000000..11e3d3d
--- /dev/null
+++ b/csharp/src/ProtoGen/ServiceInterfaceGenerator.cs
@@ -0,0 +1,300 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using Google.ProtocolBuffers.DescriptorProtos;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal class ServiceGenerator : SourceGeneratorBase<ServiceDescriptor>, ISourceGenerator

+    {

+        private readonly CSharpServiceType svcType;

+        private ISourceGenerator _generator;

+

+        internal ServiceGenerator(ServiceDescriptor descriptor)

+            : base(descriptor)

+        {

+            svcType = descriptor.File.CSharpOptions.ServiceGeneratorType;

+            switch (svcType)

+            {

+                case CSharpServiceType.NONE:

+                    _generator = new NoServicesGenerator(descriptor);

+                    break;

+                case CSharpServiceType.GENERIC:

+                    _generator = new GenericServiceGenerator(descriptor);

+                    break;

+                case CSharpServiceType.INTERFACE:

+                    _generator = new ServiceInterfaceGenerator(descriptor);

+                    break;

+                case CSharpServiceType.IRPCDISPATCH:

+                    _generator = new RpcServiceGenerator(descriptor);

+                    break;

+                default:

+                    throw new ApplicationException("Unknown ServiceGeneratorType = " + svcType.ToString());

+            }

+        }

+

+        public void Generate(TextGenerator writer)

+        {

+            _generator.Generate(writer);

+        }

+

+        private class NoServicesGenerator : SourceGeneratorBase<ServiceDescriptor>, ISourceGenerator

+        {

+            public NoServicesGenerator(ServiceDescriptor descriptor)

+                : base(descriptor)

+            {

+            }

+

+            public virtual void Generate(TextGenerator writer)

+            {

+                writer.WriteLine("/*");

+                writer.WriteLine("* Service generation is now disabled by default, use the following option to enable:");

+                writer.WriteLine("* option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;");

+                writer.WriteLine("*/");

+            }

+        }

+

+        private class ServiceInterfaceGenerator : SourceGeneratorBase<ServiceDescriptor>, ISourceGenerator

+        {

+            public ServiceInterfaceGenerator(ServiceDescriptor descriptor)

+                : base(descriptor)

+            {

+            }

+

+            public virtual void Generate(TextGenerator writer)

+            {

+                CSharpServiceOptions options = Descriptor.Options.GetExtension(CSharpOptions.CsharpServiceOptions);

+                if (options != null && options.HasInterfaceId)

+                {

+                    writer.WriteLine("[global::System.Runtime.InteropServices.GuidAttribute(\"{0}\")]",

+                                     new Guid(options.InterfaceId));

+                }

+                WriteGeneratedCodeAttributes(writer);

+                writer.WriteLine("{0} partial interface I{1} {{", ClassAccessLevel, Descriptor.Name);

+                writer.Indent();

+

+                foreach (MethodDescriptor method in Descriptor.Methods)

+                {

+                    CSharpMethodOptions mth = method.Options.GetExtension(CSharpOptions.CsharpMethodOptions);

+                    if (mth.HasDispatchId)

+                    {

+                        writer.WriteLine("[global::System.Runtime.InteropServices.DispId({0})]", mth.DispatchId);

+                    }

+                    writer.WriteLine("{0} {1}({2} {3});", GetClassName(method.OutputType),

+                                     NameHelpers.UnderscoresToPascalCase(method.Name), GetClassName(method.InputType),

+                                     NameHelpers.UnderscoresToCamelCase(method.InputType.Name));

+                }

+

+                writer.Outdent();

+                writer.WriteLine("}");

+            }

+        }

+

+        private class RpcServiceGenerator : ServiceInterfaceGenerator

+        {

+            public RpcServiceGenerator(ServiceDescriptor descriptor)

+                : base(descriptor)

+            {

+            }

+

+            public override void Generate(TextGenerator writer)

+            {

+                base.Generate(writer);

+

+                writer.WriteLine();

+

+                // CLIENT Proxy

+                {

+                    if (Descriptor.File.CSharpOptions.ClsCompliance)

+                    {

+                        writer.WriteLine("[global::System.CLSCompliant(false)]");

+                    }

+                    writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");

+                    WriteGeneratedCodeAttributes(writer);

+                    writer.WriteLine("{0} partial class {1} : I{1}, pb::IRpcDispatch, global::System.IDisposable {{",

+                                     ClassAccessLevel, Descriptor.Name);

+                    writer.Indent();

+                    writer.WriteLine("private readonly bool dispose;");

+                    writer.WriteLine("private readonly pb::IRpcDispatch dispatch;");

+

+                    writer.WriteLine("public {0}(pb::IRpcDispatch dispatch) : this(dispatch, true) {{", Descriptor.Name);

+                    writer.WriteLine("}");

+                    writer.WriteLine("public {0}(pb::IRpcDispatch dispatch, bool dispose) {{", Descriptor.Name);

+                    writer.WriteLine("  pb::ThrowHelper.ThrowIfNull(this.dispatch = dispatch, \"dispatch\");");

+                    writer.WriteLine("  this.dispose = dispose && dispatch is global::System.IDisposable;");

+                    writer.WriteLine("}");

+                    writer.WriteLine();

+

+                    writer.WriteLine("public void Dispose() {");

+                    writer.WriteLine("  if (dispose) ((global::System.IDisposable)dispatch).Dispose();");

+                    writer.WriteLine("}");

+                    writer.WriteLine();

+                    writer.WriteLine(

+                        "TMessage pb::IRpcDispatch.CallMethod<TMessage, TBuilder>(string method, pb::IMessageLite request, pb::IBuilderLite<TMessage, TBuilder> response) {");

+                    writer.WriteLine("  return dispatch.CallMethod(method, request, response);");

+                    writer.WriteLine("}");

+                    writer.WriteLine();

+

+                    foreach (MethodDescriptor method in Descriptor.Methods)

+                    {

+                        writer.WriteLine("public {0} {1}({2} {3}) {{", GetClassName(method.OutputType),

+                                         NameHelpers.UnderscoresToPascalCase(method.Name),

+                                         GetClassName(method.InputType),

+                                         NameHelpers.UnderscoresToCamelCase(method.InputType.Name));

+                        writer.WriteLine("   return dispatch.CallMethod(\"{0}\", {1}, {2}.CreateBuilder());",

+                                         method.Name,

+                                         NameHelpers.UnderscoresToCamelCase(method.InputType.Name),

+                                         GetClassName(method.OutputType)

+                            );

+                        writer.WriteLine("}");

+                        writer.WriteLine();

+                    }

+                }

+                // SERVER - DISPATCH

+                {

+                    if (Descriptor.File.CSharpOptions.ClsCompliance)

+                    {

+                        writer.WriteLine("[global::System.CLSCompliant(false)]");

+                    }

+                    writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");

+                    WriteGeneratedCodeAttributes(writer);

+                    writer.WriteLine("public partial class Dispatch : pb::IRpcDispatch, global::System.IDisposable {");

+                    writer.Indent();

+                    writer.WriteLine("private readonly bool dispose;");

+                    writer.WriteLine("private readonly I{0} implementation;", Descriptor.Name);

+

+                    writer.WriteLine("public Dispatch(I{0} implementation) : this(implementation, true) {{",

+                                     Descriptor.Name);

+                    writer.WriteLine("}");

+                    writer.WriteLine("public Dispatch(I{0} implementation, bool dispose) {{", Descriptor.Name);

+                    writer.WriteLine("  pb::ThrowHelper.ThrowIfNull(this.implementation = implementation, \"implementation\");");

+                    writer.WriteLine("  this.dispose = dispose && implementation is global::System.IDisposable;");

+                    writer.WriteLine("}");

+                    writer.WriteLine();

+

+                    writer.WriteLine("public void Dispose() {");

+                    writer.WriteLine("  if (dispose) ((global::System.IDisposable)implementation).Dispose();");

+                    writer.WriteLine("}");

+                    writer.WriteLine();

+

+                    writer.WriteLine(

+                        "public TMessage CallMethod<TMessage, TBuilder>(string methodName, pb::IMessageLite request, pb::IBuilderLite<TMessage, TBuilder> response)");

+                    writer.WriteLine("  where TMessage : pb::IMessageLite<TMessage, TBuilder>");

+                    writer.WriteLine("  where TBuilder : pb::IBuilderLite<TMessage, TBuilder> {");

+                    writer.Indent();

+                    writer.WriteLine("switch(methodName) {");

+                    writer.Indent();

+

+                    foreach (MethodDescriptor method in Descriptor.Methods)

+                    {

+                        writer.WriteLine(

+                            "case \"{0}\": return response.MergeFrom(implementation.{1}(({2})request)).Build();",

+                            method.Name, NameHelpers.UnderscoresToPascalCase(method.Name),

+                            GetClassName(method.InputType));

+                    }

+                    writer.WriteLine("default: throw pb::ThrowHelper.CreateMissingMethod(typeof(I{0}), methodName);", Descriptor.Name);

+                    writer.Outdent();

+                    writer.WriteLine("}"); //end switch

+                    writer.Outdent();

+                    writer.WriteLine("}"); //end invoke

+                    writer.Outdent();

+                    writer.WriteLine("}"); //end server

+                }

+                // SERVER - STUB

+                {

+                    if (Descriptor.File.CSharpOptions.ClsCompliance)

+                    {

+                        writer.WriteLine("[global::System.CLSCompliant(false)]");

+                    }

+                    writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");

+                    WriteGeneratedCodeAttributes(writer);

+                    writer.WriteLine(

+                        "public partial class ServerStub : pb::IRpcServerStub, global::System.IDisposable {");

+                    writer.Indent();

+                    writer.WriteLine("private readonly bool dispose;");

+                    writer.WriteLine("private readonly pb::IRpcDispatch implementation;", Descriptor.Name);

+

+                    writer.WriteLine("public ServerStub(I{0} implementation) : this(implementation, true) {{",

+                                     Descriptor.Name);

+                    writer.WriteLine("}");

+                    writer.WriteLine(

+                        "public ServerStub(I{0} implementation, bool dispose) : this(new Dispatch(implementation, dispose), dispose) {{",

+                        Descriptor.Name);

+                    writer.WriteLine("}");

+

+                    writer.WriteLine("public ServerStub(pb::IRpcDispatch implementation) : this(implementation, true) {");

+                    writer.WriteLine("}");

+                    writer.WriteLine("public ServerStub(pb::IRpcDispatch implementation, bool dispose) {");

+                    writer.WriteLine("  pb::ThrowHelper.ThrowIfNull(this.implementation = implementation, \"implementation\");");

+                    writer.WriteLine("  this.dispose = dispose && implementation is global::System.IDisposable;");

+                    writer.WriteLine("}");

+                    writer.WriteLine();

+

+                    writer.WriteLine("public void Dispose() {");

+                    writer.WriteLine("  if (dispose) ((global::System.IDisposable)implementation).Dispose();");

+                    writer.WriteLine("}");

+                    writer.WriteLine();

+

+                    writer.WriteLine(

+                        "public pb::IMessageLite CallMethod(string methodName, pb::ICodedInputStream input, pb::ExtensionRegistry registry) {{",

+                        Descriptor.Name);

+                    writer.Indent();

+                    writer.WriteLine("switch(methodName) {");

+                    writer.Indent();

+

+                    foreach (MethodDescriptor method in Descriptor.Methods)

+                    {

+                        writer.WriteLine(

+                            "case \"{0}\": return implementation.CallMethod(methodName, {1}.ParseFrom(input, registry), {2}.CreateBuilder());",

+                            method.Name, GetClassName(method.InputType), GetClassName(method.OutputType));

+                    }

+                    writer.WriteLine("default: throw pb::ThrowHelper.CreateMissingMethod(typeof(I{0}), methodName);", Descriptor.Name);

+                    writer.Outdent();

+                    writer.WriteLine("}"); //end switch

+                    writer.Outdent();

+                    writer.WriteLine("}"); //end invoke

+                    writer.Outdent();

+                    writer.WriteLine("}"); //end server

+                }

+

+                writer.Outdent();

+                writer.WriteLine("}");

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/SourceGeneratorBase.cs b/csharp/src/ProtoGen/SourceGeneratorBase.cs
new file mode 100644
index 0000000..535c6f7
--- /dev/null
+++ b/csharp/src/ProtoGen/SourceGeneratorBase.cs
@@ -0,0 +1,167 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.Collections.Generic;

+using Google.ProtocolBuffers.DescriptorProtos;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    internal abstract class SourceGeneratorBase<T> where T : IDescriptor

+    {

+        private readonly T descriptor;

+

+        protected readonly bool OptimizeSpeed;

+        protected readonly bool OptimizeSize;

+        protected readonly bool UseLiteRuntime;

+        protected readonly string RuntimeSuffix;

+

+        protected SourceGeneratorBase(T descriptor)

+        {

+            this.descriptor = descriptor;

+

+            OptimizeSize = descriptor.File.Options.OptimizeFor ==

+                           FileOptions.Types.OptimizeMode.CODE_SIZE;

+            OptimizeSpeed = descriptor.File.Options.OptimizeFor ==

+                            FileOptions.Types.OptimizeMode.SPEED;

+            UseLiteRuntime = descriptor.File.Options.OptimizeFor ==

+                             FileOptions.Types.OptimizeMode.LITE_RUNTIME;

+            //Lite runtime uses OptimizeSpeed code branches

+            OptimizeSpeed |= UseLiteRuntime;

+            RuntimeSuffix = UseLiteRuntime ? "Lite" : "";

+        }

+

+        protected T Descriptor

+        {

+            get { return descriptor; }

+        }

+

+        internal static string GetClassName(IDescriptor descriptor)

+        {

+            return ToCSharpName(descriptor.FullName, descriptor.File);

+        }

+

+        // Groups are hacky:  The name of the field is just the lower-cased name

+        // of the group type.  In C#, though, we would like to retain the original

+        // capitalization of the type name.

+        internal static string GetFieldName(FieldDescriptor descriptor)

+        {

+            if (descriptor.FieldType == FieldType.Group)

+            {

+                return descriptor.MessageType.Name;

+            }

+            else

+            {

+                return descriptor.Name;

+            }

+        }

+

+        internal static string GetFieldConstantName(FieldDescriptor field)

+        {

+            return field.CSharpOptions.PropertyName + "FieldNumber";

+        }

+

+        private static string ToCSharpName(string name, FileDescriptor file)

+        {

+            string result = file.CSharpOptions.Namespace;

+            if (file.CSharpOptions.NestClasses)

+            {

+                if (result != "")

+                {

+                    result += ".";

+                }

+                result += file.CSharpOptions.UmbrellaClassname;

+            }

+            if (result != "")

+            {

+                result += '.';

+            }

+            string classname;

+            if (file.Package == "")

+            {

+                classname = name;

+            }

+            else

+            {

+                // Strip the proto package from full_name since we've replaced it with

+                // the C# namespace.

+                classname = name.Substring(file.Package.Length + 1);

+            }

+            result += classname.Replace(".", ".Types.");

+            return "global::" + result;

+        }

+

+        protected string ClassAccessLevel

+        {

+            get { return descriptor.File.CSharpOptions.PublicClasses ? "public" : "internal"; }

+        }

+

+        protected void WriteGeneratedCodeAttributes(TextGenerator writer)

+        {

+            if (descriptor.File.CSharpOptions.GeneratedCodeAttributes)

+            {

+                writer.WriteLine("[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]");

+                writer.WriteLine("[global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"{0}\", \"{1}\")]",

+                                 GetType().Assembly.GetName().Name, GetType().Assembly.GetName().Version);

+            }

+        }

+

+        protected void WriteChildren<TChild>(TextGenerator writer, string region, IEnumerable<TChild> children)

+            where TChild : IDescriptor

+        {

+            // Copy the set of children; makes access easier

+            List<TChild> copy = new List<TChild>(children);

+            if (copy.Count == 0)

+            {

+                return;

+            }

+

+            if (region != null)

+            {

+                writer.WriteLine("#region {0}", region);

+            }

+            foreach (TChild child in children)

+            {

+                SourceGenerators.CreateGenerator(child).Generate(writer);

+            }

+            if (region != null)

+            {

+                writer.WriteLine("#endregion");

+                writer.WriteLine();

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/SourceGenerators.cs b/csharp/src/ProtoGen/SourceGenerators.cs
new file mode 100644
index 0000000..38458f0
--- /dev/null
+++ b/csharp/src/ProtoGen/SourceGenerators.cs
@@ -0,0 +1,87 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    public delegate TResult Func<T, TResult>(T arg);

+

+    internal static class SourceGenerators

+    {

+        private static readonly Dictionary<Type, Func<IDescriptor, ISourceGenerator>> GeneratorFactories =

+            new Dictionary<Type, Func<IDescriptor, ISourceGenerator>>

+                {

+                    {typeof(FileDescriptor), descriptor => new UmbrellaClassGenerator((FileDescriptor) descriptor)},

+                    {typeof(EnumDescriptor), descriptor => new EnumGenerator((EnumDescriptor) descriptor)},

+                    {typeof(ServiceDescriptor), descriptor => new ServiceGenerator((ServiceDescriptor) descriptor)},

+                    {typeof(MessageDescriptor), descriptor => new MessageGenerator((MessageDescriptor) descriptor)},

+                    // For other fields, we have IFieldSourceGenerators.

+                    {typeof(FieldDescriptor), descriptor => new ExtensionGenerator((FieldDescriptor) descriptor)}

+                };

+

+        public static IFieldSourceGenerator CreateFieldGenerator(FieldDescriptor field, int fieldOrdinal)

+        {

+            switch (field.MappedType)

+            {

+                case MappedType.Message:

+                    return field.IsRepeated

+                               ? (IFieldSourceGenerator) new RepeatedMessageFieldGenerator(field, fieldOrdinal)

+                               : new MessageFieldGenerator(field, fieldOrdinal);

+                case MappedType.Enum:

+                    return field.IsRepeated

+                               ? (IFieldSourceGenerator) new RepeatedEnumFieldGenerator(field, fieldOrdinal)

+                               : new EnumFieldGenerator(field, fieldOrdinal);

+                default:

+                    return field.IsRepeated

+                               ? (IFieldSourceGenerator) new RepeatedPrimitiveFieldGenerator(field, fieldOrdinal)

+                               : new PrimitiveFieldGenerator(field, fieldOrdinal);

+            }

+        }

+

+        public static ISourceGenerator CreateGenerator<T>(T descriptor) where T : IDescriptor

+        {

+            Func<IDescriptor, ISourceGenerator> factory;

+            if (!GeneratorFactories.TryGetValue(typeof(T), out factory))

+            {

+                throw new ArgumentException("No generator registered for " + typeof(T).Name);

+            }

+            return factory(descriptor);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/UmbrellaClassGenerator.cs b/csharp/src/ProtoGen/UmbrellaClassGenerator.cs
new file mode 100644
index 0000000..d83b2db
--- /dev/null
+++ b/csharp/src/ProtoGen/UmbrellaClassGenerator.cs
@@ -0,0 +1,294 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoGen

+{

+    /// <summary>

+    /// Generator for the class describing the .proto file in general,

+    /// containing things like the message descriptor.

+    /// </summary>

+    internal sealed class UmbrellaClassGenerator : SourceGeneratorBase<FileDescriptor>, ISourceGenerator

+    {

+        internal UmbrellaClassGenerator(FileDescriptor descriptor)

+            : base(descriptor)

+        {

+        }

+

+        // Recursively searches the given message to see if it contains any extensions.

+        private static bool UsesExtensions(IMessage message)

+        {

+            // We conservatively assume that unknown fields are extensions.

+            if (message.UnknownFields.FieldDictionary.Count > 0)

+            {

+                return true;

+            }

+

+            foreach (KeyValuePair<FieldDescriptor, object> keyValue in message.AllFields)

+            {

+                FieldDescriptor field = keyValue.Key;

+                if (field.IsExtension)

+                {

+                    return true;

+                }

+                if (field.MappedType == MappedType.Message)

+                {

+                    if (field.IsRepeated)

+                    {

+                        foreach (IMessage subMessage in (IEnumerable) keyValue.Value)

+                        {

+                            if (UsesExtensions(subMessage))

+                            {

+                                return true;

+                            }

+                        }

+                    }

+                    else

+                    {

+                        if (UsesExtensions((IMessage) keyValue.Value))

+                        {

+                            return true;

+                        }

+                    }

+                }

+            }

+            return false;

+        }

+

+        public void Generate(TextGenerator writer)

+        {

+            WriteIntroduction(writer);

+            WriteExtensionRegistration(writer);

+            WriteChildren(writer, "Extensions", Descriptor.Extensions);

+            writer.WriteLine("#region Static variables");

+            foreach (MessageDescriptor message in Descriptor.MessageTypes)

+            {

+                new MessageGenerator(message).GenerateStaticVariables(writer);

+            }

+            writer.WriteLine("#endregion");

+            if (!UseLiteRuntime)

+            {

+                WriteDescriptor(writer);

+            }

+            else

+            {

+                WriteLiteExtensions(writer);

+            }

+            // The class declaration either gets closed before or after the children are written.

+            if (!Descriptor.CSharpOptions.NestClasses)

+            {

+                writer.Outdent();

+                writer.WriteLine("}");

+

+                // Close the namespace around the umbrella class if defined

+                if (!Descriptor.CSharpOptions.NestClasses && Descriptor.CSharpOptions.UmbrellaNamespace != "")

+                {

+                    writer.Outdent();

+                    writer.WriteLine("}");

+                }

+            }

+            WriteChildren(writer, "Enums", Descriptor.EnumTypes);

+            WriteChildren(writer, "Messages", Descriptor.MessageTypes);

+            WriteChildren(writer, "Services", Descriptor.Services);

+            if (Descriptor.CSharpOptions.NestClasses)

+            {

+                writer.Outdent();

+                writer.WriteLine("}");

+            }

+            if (Descriptor.CSharpOptions.Namespace != "")

+            {

+                writer.Outdent();

+                writer.WriteLine("}");

+            }

+            writer.WriteLine();

+            writer.WriteLine("#endregion Designer generated code");

+        }

+

+        private void WriteIntroduction(TextGenerator writer)

+        {

+            writer.WriteLine("// Generated by {0}.  DO NOT EDIT!", this.GetType().Assembly.FullName);

+            writer.WriteLine("#pragma warning disable 1591, 0612, 3021");

+            writer.WriteLine("#region Designer generated code");

+

+            writer.WriteLine();

+            writer.WriteLine("using pb = global::Google.ProtocolBuffers;");

+            writer.WriteLine("using pbc = global::Google.ProtocolBuffers.Collections;");

+            writer.WriteLine("using pbd = global::Google.ProtocolBuffers.Descriptors;");

+            writer.WriteLine("using scg = global::System.Collections.Generic;");

+

+            if (Descriptor.CSharpOptions.Namespace != "")

+            {

+                writer.WriteLine("namespace {0} {{", Descriptor.CSharpOptions.Namespace);

+                writer.Indent();

+                writer.WriteLine();

+            }

+            // Add the namespace around the umbrella class if defined

+            if (!Descriptor.CSharpOptions.NestClasses && Descriptor.CSharpOptions.UmbrellaNamespace != "")

+            {

+                writer.WriteLine("namespace {0} {{", Descriptor.CSharpOptions.UmbrellaNamespace);

+                writer.Indent();

+                writer.WriteLine();

+            }

+

+            if (Descriptor.CSharpOptions.CodeContracts)

+            {

+                writer.WriteLine("[global::System.Diagnostics.Contracts.ContractVerificationAttribute(false)]");

+            }

+            writer.WriteLine("[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]");

+            WriteGeneratedCodeAttributes(writer);

+            writer.WriteLine("{0} static partial class {1} {{", ClassAccessLevel,

+                             Descriptor.CSharpOptions.UmbrellaClassname);

+            writer.WriteLine();

+            writer.Indent();

+        }

+

+        private void WriteExtensionRegistration(TextGenerator writer)

+        {

+            writer.WriteLine("#region Extension registration");

+            writer.WriteLine("public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {");

+            writer.Indent();

+            foreach (FieldDescriptor extension in Descriptor.Extensions)

+            {

+                new ExtensionGenerator(extension).GenerateExtensionRegistrationCode(writer);

+            }

+            foreach (MessageDescriptor message in Descriptor.MessageTypes)

+            {

+                new MessageGenerator(message).GenerateExtensionRegistrationCode(writer);

+            }

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine("#endregion");

+        }

+

+        private void WriteDescriptor(TextGenerator writer)

+        {

+            writer.WriteLine("#region Descriptor");

+

+            writer.WriteLine("public static pbd::FileDescriptor Descriptor {");

+            writer.WriteLine("  get { return descriptor; }");

+            writer.WriteLine("}");

+            writer.WriteLine("private static pbd::FileDescriptor descriptor;");

+            writer.WriteLine();

+            writer.WriteLine("static {0}() {{", Descriptor.CSharpOptions.UmbrellaClassname);

+            writer.Indent();

+            writer.WriteLine("byte[] descriptorData = global::System.Convert.FromBase64String(");

+            writer.Indent();

+            writer.Indent();

+            writer.WriteLine("string.Concat(");

+            writer.Indent();

+            // TODO(jonskeet): Consider a C#-escaping format here instead of just Base64.

+            byte[] bytes = Descriptor.Proto.ToByteArray();

+            string base64 = Convert.ToBase64String(bytes);

+

+            while (base64.Length > 60)

+            {

+                writer.WriteLine("\"{0}\", ", base64.Substring(0, 60));

+                base64 = base64.Substring(60);

+            }

+            writer.Outdent();

+            writer.WriteLine("\"{0}\"));", base64);

+            writer.Outdent();

+            writer.Outdent();

+            writer.WriteLine(

+                "pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {");

+            writer.Indent();

+            writer.WriteLine("descriptor = root;");

+            foreach (MessageDescriptor message in Descriptor.MessageTypes)

+            {

+                new MessageGenerator(message).GenerateStaticVariableInitializers(writer);

+            }

+            foreach (FieldDescriptor extension in Descriptor.Extensions)

+            {

+                new ExtensionGenerator(extension).GenerateStaticVariableInitializers(writer);

+            }

+

+            if (UsesExtensions(Descriptor.Proto))

+            {

+                // Must construct an ExtensionRegistry containing all possible extensions

+                // and return it.

+                writer.WriteLine("pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();");

+                writer.WriteLine("RegisterAllExtensions(registry);");

+                foreach (FileDescriptor dependency in Descriptor.Dependencies)

+                {

+                    writer.WriteLine("{0}.RegisterAllExtensions(registry);",

+                                     DescriptorUtil.GetFullUmbrellaClassName(dependency));

+                }

+                writer.WriteLine("return registry;");

+            }

+            else

+            {

+                writer.WriteLine("return null;");

+            }

+            writer.Outdent();

+            writer.WriteLine("};");

+

+            // -----------------------------------------------------------------

+            // Invoke internalBuildGeneratedFileFrom() to build the file.

+            writer.WriteLine("pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,");

+            writer.WriteLine("    new pbd::FileDescriptor[] {");

+            foreach (FileDescriptor dependency in Descriptor.Dependencies)

+            {

+                writer.WriteLine("    {0}.Descriptor, ", DescriptorUtil.GetFullUmbrellaClassName(dependency));

+            }

+            writer.WriteLine("    }, assigner);");

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine("#endregion");

+            writer.WriteLine();

+        }

+

+        private void WriteLiteExtensions(TextGenerator writer)

+        {

+            writer.WriteLine("#region Extensions");

+            writer.WriteLine("internal static readonly object Descriptor;");

+            writer.WriteLine("static {0}() {{", Descriptor.CSharpOptions.UmbrellaClassname);

+            writer.Indent();

+            writer.WriteLine("Descriptor = null;");

+

+            foreach (MessageDescriptor message in Descriptor.MessageTypes)

+            {

+                new MessageGenerator(message).GenerateStaticVariableInitializers(writer);

+            }

+            foreach (FieldDescriptor extension in Descriptor.Extensions)

+            {

+                new ExtensionGenerator(extension).GenerateStaticVariableInitializers(writer);

+            }

+            writer.Outdent();

+            writer.WriteLine("}");

+            writer.WriteLine("#endregion");

+            writer.WriteLine();

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/app.config b/csharp/src/ProtoGen/app.config
new file mode 100644
index 0000000..89b324b
--- /dev/null
+++ b/csharp/src/ProtoGen/app.config
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" ?>

+<configuration>

+  <startup useLegacyV2RuntimeActivationPolicy="true">

+    <supportedRuntime version="v2.0.50727" />

+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />

+  </startup>

+</configuration>
\ No newline at end of file
diff --git a/csharp/src/ProtoGen/protoc-gen-cs.csproj b/csharp/src/ProtoGen/protoc-gen-cs.csproj
new file mode 100644
index 0000000..fdc88cc
--- /dev/null
+++ b/csharp/src/ProtoGen/protoc-gen-cs.csproj
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{250ADE34-82FD-4BAE-86D5-985FBE589C4B}</ProjectGuid>

+    <OutputType>Exe</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.ProtoGen</RootNamespace>

+    <AssemblyName>protoc-gen-cs</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <StartupObject>Google.ProtocolBuffers.ProtoGen.ProtocGenCs</StartupObject>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Data" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="DescriptorUtil.cs" />

+    <Compile Include="EnumFieldGenerator.cs" />

+    <Compile Include="EnumGenerator.cs" />

+    <Compile Include="ExtensionGenerator.cs" />

+    <Compile Include="FieldGeneratorBase.cs" />

+    <Compile Include="IFieldSourceGenerator.cs" />

+    <Compile Include="ISourceGenerator.cs" />

+    <Compile Include="MessageFieldGenerator.cs" />

+    <Compile Include="MessageGenerator.cs" />

+    <Compile Include="PluginProtoFile.cs" />

+    <Compile Include="PrimitiveFieldGenerator.cs" />

+    <Compile Include="ProtocGenCs.cs" />

+    <Compile Include="RepeatedEnumFieldGenerator.cs" />

+    <Compile Include="RepeatedMessageFieldGenerator.cs" />

+    <Compile Include="RepeatedPrimitiveFieldGenerator.cs" />

+    <Compile Include="ServiceGenerator.cs" />

+    <Compile Include="DependencyResolutionException.cs" />

+    <Compile Include="Generator.cs" />

+    <Compile Include="GeneratorOptions.cs" />

+    <Compile Include="Helpers.cs" />

+    <Compile Include="InvalidOptionsException.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ServiceInterfaceGenerator.cs" />

+    <Compile Include="SourceGeneratorBase.cs" />

+    <Compile Include="SourceGenerators.cs" />

+    <Compile Include="UmbrellaClassGenerator.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.csproj">

+      <Project>{231391af-449c-4a39-986c-ad7f270f4750}</Project>

+      <Name>ProtocolBuffers.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <None Include="app.config" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtoMunge/Program.cs b/csharp/src/ProtoMunge/Program.cs
new file mode 100644
index 0000000..53dc350
--- /dev/null
+++ b/csharp/src/ProtoMunge/Program.cs
@@ -0,0 +1,305 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using System.IO;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.ProtoMunge

+{

+    /// <summary>

+    /// Utility console application which takes a message descriptor and a corresponding message,

+    /// and produces a new message with similar but random data. The data is the same length

+    /// as the original, but with random values within appropriate bands. (For instance, a compressed

+    /// integer in the range 0-127 will end up as another integer in the same range, to keep the length

+    /// the same.)

+    /// TODO(jonskeet): Potentially refactor to use an instance instead, making it simpler to

+    /// be thread-safe for external use.

+    /// </summary>

+    public sealed class Program

+    {

+        private static readonly Random rng = new Random();

+

+        private static int Main(string[] args)

+        {

+            if (args.Length != 3)

+            {

+                Console.Error.WriteLine("Usage: ProtoMunge <descriptor type name> <input data> <output file>");

+                Console.Error.WriteLine(

+                    "The descriptor type name is the fully-qualified message name, including assembly.");

+                Console.Error.WriteLine(

+                    "(At a future date it may be possible to do this without building the .NET assembly at all.)");

+                return 1;

+            }

+            IMessage defaultMessage;

+            try

+            {

+                defaultMessage = MessageUtil.GetDefaultMessage(args[0]);

+            }

+            catch (ArgumentException e)

+            {

+                Console.Error.WriteLine(e.Message);

+                return 1;

+            }

+            try

+            {

+                IBuilder builder = defaultMessage.WeakCreateBuilderForType();

+                byte[] inputData = File.ReadAllBytes(args[1]);

+                builder.WeakMergeFrom(ByteString.CopyFrom(inputData));

+                IMessage original = builder.WeakBuild();

+                IMessage munged = Munge(original);

+                if (original.SerializedSize != munged.SerializedSize)

+                {

+                    throw new Exception("Serialized sizes don't match");

+                }

+                File.WriteAllBytes(args[2], munged.ToByteArray());

+                return 0;

+            }

+            catch (Exception e)

+            {

+                Console.Error.WriteLine("Error: {0}", e.Message);

+                Console.Error.WriteLine();

+                Console.Error.WriteLine("Detailed exception information: {0}", e);

+                return 1;

+            }

+        }

+

+        /// <summary>

+        /// Munges a message recursively.

+        /// </summary>

+        /// <returns>A new message of the same type as the original message,

+        /// but munged so that all the data is desensitised.</returns>

+        private static IMessage Munge(IMessage message)

+        {

+            IBuilder builder = message.WeakCreateBuilderForType();

+            foreach (var pair in message.AllFields)

+            {

+                if (pair.Key.IsRepeated)

+                {

+                    foreach (object singleValue in (IEnumerable) pair.Value)

+                    {

+                        builder.WeakAddRepeatedField(pair.Key, CheckedMungeValue(pair.Key, singleValue));

+                    }

+                }

+                else

+                {

+                    builder[pair.Key] = CheckedMungeValue(pair.Key, pair.Value);

+                }

+            }

+            IMessage munged = builder.WeakBuild();

+            if (message.SerializedSize != munged.SerializedSize)

+            {

+                Console.WriteLine("Sub message sizes: {0}/{1}", message.SerializedSize, munged.SerializedSize);

+            }

+            return munged;

+        }

+

+        /// <summary>

+        /// Munges a single value and checks that the length ends up the same as it was before.

+        /// </summary>

+        private static object CheckedMungeValue(FieldDescriptor fieldDescriptor, object value)

+        {

+            int currentSize = CodedOutputStream.ComputeFieldSize(fieldDescriptor.FieldType, fieldDescriptor.FieldNumber,

+                                                                 value);

+            object mungedValue = MungeValue(fieldDescriptor, value);

+            int mungedSize = CodedOutputStream.ComputeFieldSize(fieldDescriptor.FieldType, fieldDescriptor.FieldNumber,

+                                                                mungedValue);

+            // Exceptions log more easily than assertions

+            if (currentSize != mungedSize)

+            {

+                throw new Exception("Munged value had wrong size. Field type: " + fieldDescriptor.FieldType

+                                    + "; old value: " + value + "; new value: " + mungedValue);

+            }

+            return mungedValue;

+        }

+

+        /// <summary>

+        /// Munges a single value of the specified field descriptor. (i.e. if the field is

+        /// actually a repeated int, this method receives a single int value to munge, and

+        /// is called multiple times).

+        /// </summary>

+        private static object MungeValue(FieldDescriptor fieldDescriptor, object value)

+        {

+            switch (fieldDescriptor.FieldType)

+            {

+                case FieldType.SInt64:

+                case FieldType.Int64:

+                    return (long) MungeVarint64((ulong) (long) value);

+                case FieldType.UInt64:

+                    return MungeVarint64((ulong) value);

+                case FieldType.SInt32:

+                    return (int) MungeVarint32((uint) (int) value);

+                case FieldType.Int32:

+                    return MungeInt32((int) value);

+                case FieldType.UInt32:

+                    return MungeVarint32((uint) value);

+                case FieldType.Double:

+                    return rng.NextDouble();

+                case FieldType.Float:

+                    return (float) rng.NextDouble();

+                case FieldType.Fixed64:

+                    {

+                        byte[] data = new byte[8];

+                        rng.NextBytes(data);

+                        return BitConverter.ToUInt64(data, 0);

+                    }

+                case FieldType.Fixed32:

+                    {

+                        byte[] data = new byte[4];

+                        rng.NextBytes(data);

+                        return BitConverter.ToUInt32(data, 0);

+                    }

+                case FieldType.Bool:

+                    return rng.Next(2) == 1;

+                case FieldType.String:

+                    return MungeString((string) value);

+                case FieldType.Group:

+                case FieldType.Message:

+                    return Munge((IMessage) value);

+                case FieldType.Bytes:

+                    return MungeByteString((ByteString) value);

+                case FieldType.SFixed64:

+                    {

+                        byte[] data = new byte[8];

+                        rng.NextBytes(data);

+                        return BitConverter.ToInt64(data, 0);

+                    }

+                case FieldType.SFixed32:

+                    {

+                        byte[] data = new byte[4];

+                        rng.NextBytes(data);

+                        return BitConverter.ToInt32(data, 0);

+                    }

+                case FieldType.Enum:

+                    return MungeEnum(fieldDescriptor, (EnumValueDescriptor) value);

+                default:

+                    // TODO(jonskeet): Different exception?

+                    throw new ArgumentException("Invalid field descriptor");

+            }

+        }

+

+        private static object MungeString(string original)

+        {

+            foreach (char c in original)

+            {

+                if (c > 127)

+                {

+                    throw new ArgumentException("Can't handle non-ascii yet");

+                }

+            }

+            char[] chars = new char[original.Length];

+            // Convert to pure ASCII - no control characters.

+            for (int i = 0; i < chars.Length; i++)

+            {

+                chars[i] = (char) rng.Next(32, 127);

+            }

+            return new string(chars);

+        }

+

+        /// <summary>

+        /// Int32 fields are slightly strange - we need to keep the sign the same way it is:

+        /// negative numbers can munge to any other negative number (it'll always take

+        /// 10 bytes) but positive numbers have to stay positive, so we can't use the

+        /// full range of 32 bits.

+        /// </summary>

+        private static int MungeInt32(int value)

+        {

+            if (value < 0)

+            {

+                return rng.Next(int.MinValue, 0);

+            }

+            int length = CodedOutputStream.ComputeRawVarint32Size((uint) value);

+            uint min = length == 1 ? 0 : 1U << ((length - 1)*7);

+            uint max = length == 5 ? int.MaxValue : (1U << (length*7)) - 1;

+            return (int) NextRandomUInt64(min, max);

+        }

+

+        private static uint MungeVarint32(uint original)

+        {

+            int length = CodedOutputStream.ComputeRawVarint32Size(original);

+            uint min = length == 1 ? 0 : 1U << ((length - 1)*7);

+            uint max = length == 5 ? uint.MaxValue : (1U << (length*7)) - 1;

+            return (uint) NextRandomUInt64(min, max);

+        }

+

+        private static ulong MungeVarint64(ulong original)

+        {

+            int length = CodedOutputStream.ComputeRawVarint64Size(original);

+            ulong min = length == 1 ? 0 : 1UL << ((length - 1)*7);

+            ulong max = length == 10 ? ulong.MaxValue : (1UL << (length*7)) - 1;

+            return NextRandomUInt64(min, max);

+        }

+

+        /// <summary>

+        /// Returns a random number in the range [min, max] (both inclusive).

+        /// </summary>    

+        private static ulong NextRandomUInt64(ulong min, ulong max)

+        {

+            if (min > max)

+            {

+                throw new ArgumentException("min must be <= max; min=" + min + "; max = " + max);

+            }

+            ulong range = max - min;

+            // This isn't actually terribly good at very large ranges - but it doesn't really matter for the sake

+            // of this program.

+            return min + (ulong) (range*rng.NextDouble());

+        }

+

+        private static object MungeEnum(FieldDescriptor fieldDescriptor, EnumValueDescriptor original)

+        {

+            // Find all the values which get encoded to the same size as the current value, and pick one at random

+            int originalSize = CodedOutputStream.ComputeRawVarint32Size((uint) original.Number);

+            List<EnumValueDescriptor> sameSizeValues = new List<EnumValueDescriptor>();

+            foreach (EnumValueDescriptor candidate in fieldDescriptor.EnumType.Values)

+            {

+                if (CodedOutputStream.ComputeRawVarint32Size((uint) candidate.Number) == originalSize)

+                {

+                    sameSizeValues.Add(candidate);

+                }

+            }

+            return sameSizeValues[rng.Next(sameSizeValues.Count)];

+        }

+

+        private static object MungeByteString(ByteString byteString)

+        {

+            byte[] data = new byte[byteString.Length];

+            rng.NextBytes(data);

+            return ByteString.CopyFrom(data);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtoMunge/Properties/AssemblyInfo.cs b/csharp/src/ProtoMunge/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..b78271b
--- /dev/null
+++ b/csharp/src/ProtoMunge/Properties/AssemblyInfo.cs
@@ -0,0 +1,30 @@
+using System.Reflection;

+using System.Runtime.CompilerServices;

+using System.Runtime.InteropServices;

+

+// General Information about an assembly is controlled through the following 

+// set of attributes. Change these attribute values to modify the information

+// associated with an assembly.

+

+[assembly: AssemblyTitle("ProtoMunge")]

+[assembly: AssemblyDescription("")]

+[assembly: AssemblyConfiguration("")]

+[assembly: AssemblyCompany("")]

+[assembly: AssemblyProduct("ProtoMunge")]

+[assembly: AssemblyCopyright("Copyright ©  2008")]

+[assembly: AssemblyTrademark("")]

+[assembly: AssemblyCulture("")]

+

+// Version information for an assembly consists of the following four values:

+//

+//      Major Version

+//      Minor Version 

+//      Build Number

+//      Revision

+//

+// You can specify all the values or you can default the Build and Revision Numbers 

+// by using the '*' as shown below:

+// [assembly: AssemblyVersion("2.4.1.555")]

+

+[assembly: AssemblyVersion("2.4.1.555")]

+[assembly: AssemblyFileVersion("2.4.1.555")]
\ No newline at end of file
diff --git a/csharp/src/ProtoMunge/ProtoMunge.csproj b/csharp/src/ProtoMunge/ProtoMunge.csproj
new file mode 100644
index 0000000..dae1a9a
--- /dev/null
+++ b/csharp/src/ProtoMunge/ProtoMunge.csproj
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{8F09AF72-3327-4FA7-BC09-070B80221AB9}</ProjectGuid>

+    <OutputType>Exe</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.ProtoMunge</RootNamespace>

+    <AssemblyName>ProtoMunge</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="Program.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/AbstractReader.cs b/csharp/src/ProtocolBuffers.Serialization/AbstractReader.cs
new file mode 100644
index 0000000..e198d0b
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/AbstractReader.cs
@@ -0,0 +1,688 @@
+using System;

+using System.Collections.Generic;

+using System.Globalization;

+using Google.ProtocolBuffers.Descriptors;

+

+//Disable CS3011: only CLS-compliant members can be abstract

+#pragma warning disable 3011

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// Provides a base-class that provides some basic functionality for handling type dispatching

+    /// </summary>

+    public abstract class AbstractReader : ICodedInputStream

+    {

+        private const int DefaultMaxDepth = 64;

+        private int _depth;

+        

+        /// <summary> Constructs a new reader </summary>

+        protected AbstractReader() { MaxDepth = DefaultMaxDepth; }

+

+        /// <summary> Gets or sets the maximum recursion depth allowed </summary>

+        public int MaxDepth { get; set; }

+

+        /// <summary>

+        /// Merges the contents of stream into the provided message builder

+        /// </summary>

+        public TBuilder Merge<TBuilder>(TBuilder builder) where TBuilder : IBuilderLite

+        {

+            return Merge(builder, ExtensionRegistry.Empty);

+        }

+

+        /// <summary>

+        /// Merges the contents of stream into the provided message builder

+        /// </summary>

+        public abstract TBuilder Merge<TBuilder>(TBuilder builder, ExtensionRegistry registry)

+            where TBuilder : IBuilderLite;

+

+        /// <summary>

+        /// Peeks at the next field in the input stream and returns what information is available.

+        /// </summary>

+        /// <remarks>

+        /// This may be called multiple times without actually reading the field.  Only after the field

+        /// is either read, or skipped, should PeekNext return a different value.

+        /// </remarks>

+        protected abstract bool PeekNext(out string field);

+

+        /// <summary>

+        /// Causes the reader to skip past this field

+        /// </summary>

+        protected abstract void Skip();

+

+        /// <summary>

+        /// Returns true if it was able to read a Boolean from the input

+        /// </summary>

+        protected abstract bool Read(ref bool value);

+

+        /// <summary>

+        /// Returns true if it was able to read a Int32 from the input

+        /// </summary>

+        protected abstract bool Read(ref int value);

+

+        /// <summary>

+        /// Returns true if it was able to read a UInt32 from the input

+        /// </summary>

+        [CLSCompliant(false)]

+        protected abstract bool Read(ref uint value);

+

+        /// <summary>

+        /// Returns true if it was able to read a Int64 from the input

+        /// </summary>

+        protected abstract bool Read(ref long value);

+

+        /// <summary>

+        /// Returns true if it was able to read a UInt64 from the input

+        /// </summary>

+        [CLSCompliant(false)]

+        protected abstract bool Read(ref ulong value);

+

+        /// <summary>

+        /// Returns true if it was able to read a Single from the input

+        /// </summary>

+        protected abstract bool Read(ref float value);

+

+        /// <summary>

+        /// Returns true if it was able to read a Double from the input

+        /// </summary>

+        protected abstract bool Read(ref double value);

+

+        /// <summary>

+        /// Returns true if it was able to read a String from the input

+        /// </summary>

+        protected abstract bool Read(ref string value);

+

+        /// <summary>

+        /// Returns true if it was able to read a ByteString from the input

+        /// </summary>

+        protected abstract bool Read(ref ByteString value);

+

+        /// <summary>

+        /// returns true if it was able to read a single value into the value reference.  The value

+        /// stored may be of type System.String, System.Int32, or an IEnumLite from the IEnumLiteMap.

+        /// </summary>

+        protected abstract bool ReadEnum(ref object value);

+

+        /// <summary>

+        /// Merges the input stream into the provided IBuilderLite 

+        /// </summary>

+        protected abstract bool ReadMessage(IBuilderLite builder, ExtensionRegistry registry);

+        

+        /// <summary>

+        /// Reads the root-message preamble specific to this formatter

+        /// </summary>

+        public abstract void ReadMessageStart();

+

+        /// <summary>

+        /// Reads the root-message close specific to this formatter

+        /// </summary>

+        public abstract void ReadMessageEnd();

+

+        /// <summary>

+        /// Merges the input stream into the provided IBuilderLite 

+        /// </summary>

+        public virtual bool ReadGroup(IBuilderLite value, ExtensionRegistry registry)

+        {

+            return ReadMessage(value, registry);

+        }

+

+        /// <summary>

+        /// Cursors through the array elements and stops at the end of the array

+        /// </summary>

+        protected virtual IEnumerable<string> ForeachArrayItem(string field)

+        {

+            string next = field;

+            while (true)

+            {

+                yield return next;

+

+                if (!PeekNext(out next) || next != field)

+                {

+                    break;

+                }

+            }

+        }

+

+        /// <summary>

+        /// Reads an array of T messages

+        /// </summary>

+        public virtual bool ReadMessageArray<T>(string field, ICollection<T> items, IMessageLite messageType,

+                                                ExtensionRegistry registry)

+        {

+            bool success = false;

+            foreach (string next in ForeachArrayItem(field))

+            {

+                IBuilderLite builder = messageType.WeakCreateBuilderForType();

+                if (ReadMessage(builder, registry))

+                {

+                    items.Add((T) builder.WeakBuild());

+                    success |= true;

+                }

+            }

+            return success;

+        }

+

+        /// <summary>

+        /// Reads an array of T messages as a proto-buffer group

+        /// </summary>

+        public virtual bool ReadGroupArray<T>(string field, ICollection<T> items, IMessageLite messageType,

+                                              ExtensionRegistry registry)

+        {

+            bool success = false;

+            foreach (string next in ForeachArrayItem(field))

+            {

+                IBuilderLite builder = messageType.WeakCreateBuilderForType();

+                if (ReadGroup(builder, registry))

+                {

+                    items.Add((T) builder.WeakBuild());

+                    success |= true;

+                }

+            }

+            return success;

+        }

+

+        /// <summary>

+        /// Reads an array of System.Enum type T and adds them to the collection

+        /// </summary>

+        public virtual bool ReadEnumArray(string field, ICollection<object> items)

+        {

+            bool success = false;

+            foreach (string next in ForeachArrayItem(field))

+            {

+                object temp = null;

+                if (ReadEnum(ref temp))

+                {

+                    items.Add(temp);

+                    success |= true;

+                }

+            }

+            return success;

+        }

+

+        /// <summary>

+        /// Reads an array of T, where T is a primitive type defined by FieldType

+        /// </summary>

+        public virtual bool ReadArray<T>(FieldType type, string field, ICollection<T> items)

+        {

+            bool success = false;

+            foreach (string next in ForeachArrayItem(field))

+            {

+                object temp = null;

+                if (ReadField(type, ref temp))

+                {

+                    items.Add((T) temp);

+                    success |= true;

+                }

+            }

+            return success;

+        }

+

+        /// <summary>

+        /// returns true if it was able to read a single primitive value of FieldType into the value reference

+        /// </summary>

+        public virtual bool ReadField(FieldType type, ref object value)

+        {

+            switch (type)

+            {

+                case FieldType.Bool:

+                    {

+                        bool temp = false;

+                        if (Read(ref temp))

+                        {

+                            value = temp;

+                        }

+                        else

+                        {

+                            return false;

+                        }

+                        break;

+                    }

+                case FieldType.Int64:

+                case FieldType.SInt64:

+                case FieldType.SFixed64:

+                    {

+                        long temp = 0;

+                        if (Read(ref temp))

+                        {

+                            value = temp;

+                        }

+                        else

+                        {

+                            return false;

+                        }

+                        break;

+                    }

+                case FieldType.UInt64:

+                case FieldType.Fixed64:

+                    {

+                        ulong temp = 0;

+                        if (Read(ref temp))

+                        {

+                            value = temp;

+                        }

+                        else

+                        {

+                            return false;

+                        }

+                        break;

+                    }

+                case FieldType.Int32:

+                case FieldType.SInt32:

+                case FieldType.SFixed32:

+                    {

+                        int temp = 0;

+                        if (Read(ref temp))

+                        {

+                            value = temp;

+                        }

+                        else

+                        {

+                            return false;

+                        }

+                        break;

+                    }

+                case FieldType.UInt32:

+                case FieldType.Fixed32:

+                    {

+                        uint temp = 0;

+                        if (Read(ref temp))

+                        {

+                            value = temp;

+                        }

+                        else

+                        {

+                            return false;

+                        }

+                        break;

+                    }

+                case FieldType.Float:

+                    {

+                        float temp = float.NaN;

+                        if (Read(ref temp))

+                        {

+                            value = temp;

+                        }

+                        else

+                        {

+                            return false;

+                        }

+                        break;

+                    }

+                case FieldType.Double:

+                    {

+                        double temp = float.NaN;

+                        if (Read(ref temp))

+                        {

+                            value = temp;

+                        }

+                        else

+                        {

+                            return false;

+                        }

+                        break;

+                    }

+                case FieldType.String:

+                    {

+                        string temp = null;

+                        if (Read(ref temp))

+                        {

+                            value = temp;

+                        }

+                        else

+                        {

+                            return false;

+                        }

+                        break;

+                    }

+                case FieldType.Bytes:

+                    {

+                        ByteString temp = null;

+                        if (Read(ref temp))

+                        {

+                            value = temp;

+                        }

+                        else

+                        {

+                            return false;

+                        }

+                        break;

+                    }

+                default:

+                    throw InvalidProtocolBufferException.InvalidTag();

+            }

+            return true;

+        }

+

+        #region ICodedInputStream Members

+

+        bool ICodedInputStream.ReadTag(out uint fieldTag, out string fieldName)

+        {

+            fieldTag = 0;

+            if (PeekNext(out fieldName))

+            {

+                return true;

+            }

+            return false;

+        }

+

+        bool ICodedInputStream.ReadDouble(ref double value)

+        {

+            return Read(ref value);

+        }

+

+        bool ICodedInputStream.ReadFloat(ref float value)

+        {

+            return Read(ref value);

+        }

+

+        bool ICodedInputStream.ReadUInt64(ref ulong value)

+        {

+            return Read(ref value);

+        }

+

+        bool ICodedInputStream.ReadInt64(ref long value)

+        {

+            return Read(ref value);

+        }

+

+        bool ICodedInputStream.ReadInt32(ref int value)

+        {

+            return Read(ref value);

+        }

+

+        bool ICodedInputStream.ReadFixed64(ref ulong value)

+        {

+            return Read(ref value);

+        }

+

+        bool ICodedInputStream.ReadFixed32(ref uint value)

+        {

+            return Read(ref value);

+        }

+

+        bool ICodedInputStream.ReadBool(ref bool value)

+        {

+            return Read(ref value);

+        }

+

+        bool ICodedInputStream.ReadString(ref string value)

+        {

+            return Read(ref value);

+        }

+

+        void ICodedInputStream.ReadGroup(int fieldNumber, IBuilderLite builder, ExtensionRegistry extensionRegistry)

+        {

+            if (_depth++ > MaxDepth)

+            {

+                throw new RecursionLimitExceededException();

+            }

+            ReadGroup(builder, extensionRegistry);

+            _depth--;

+        }

+

+        void ICodedInputStream.ReadUnknownGroup(int fieldNumber, IBuilderLite builder)

+        {

+            throw new NotSupportedException();

+        }

+

+        void ICodedInputStream.ReadMessage(IBuilderLite builder, ExtensionRegistry extensionRegistry)

+        {

+            if (_depth++ > MaxDepth)

+            {

+                throw new RecursionLimitExceededException();

+            }

+            ReadMessage(builder, extensionRegistry);

+            _depth--;

+        }

+

+        bool ICodedInputStream.ReadBytes(ref ByteString value)

+        {

+            return Read(ref value);

+        }

+

+        bool ICodedInputStream.ReadUInt32(ref uint value)

+        {

+            return Read(ref value);

+        }

+

+        bool ICodedInputStream.ReadEnum(ref IEnumLite value, out object unknown, IEnumLiteMap mapping)

+        {

+            value = null;

+            unknown = null;

+            if (ReadEnum(ref unknown))

+            {

+                if (unknown is int)

+                {

+                    value = mapping.FindValueByNumber((int) unknown);

+                }

+                else if (unknown is string)

+                {

+                    value = mapping.FindValueByName((string) unknown);

+                }

+                return value != null;

+            }

+            return false;

+        }

+

+        bool ICodedInputStream.ReadEnum<T>(ref T value, out object rawValue)

+        {

+            rawValue = null;

+            if (ReadEnum(ref rawValue))

+            {

+                if (!EnumParser<T>.TryConvert(rawValue, ref value))

+                {

+                    value = default(T);

+                    return false;

+                }

+                return true;

+            }

+            return false;

+        }

+

+        bool ICodedInputStream.ReadSFixed32(ref int value)

+        {

+            return Read(ref value);

+        }

+

+        bool ICodedInputStream.ReadSFixed64(ref long value)

+        {

+            return Read(ref value);

+        }

+

+        bool ICodedInputStream.ReadSInt32(ref int value)

+        {

+            return Read(ref value);

+        }

+

+        bool ICodedInputStream.ReadSInt64(ref long value)

+        {

+            return Read(ref value);

+        }

+

+        void ICodedInputStream.ReadPrimitiveArray(FieldType fieldType, uint fieldTag, string fieldName,

+                                                  ICollection<object> list)

+        {

+            ReadArray(fieldType, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadEnumArray(uint fieldTag, string fieldName, ICollection<IEnumLite> list,

+                                             out ICollection<object> unknown, IEnumLiteMap mapping)

+        {

+            unknown = null;

+            List<object> array = new List<object>();

+            if (ReadEnumArray(fieldName, array))

+            {

+                foreach (object rawValue in array)

+                {

+                    IEnumLite item = null;

+                    if (rawValue is int)

+                    {

+                        item = mapping.FindValueByNumber((int) rawValue);

+                    }

+                    else if (rawValue is string)

+                    {

+                        item = mapping.FindValueByName((string) rawValue);

+                    }

+

+                    if (item != null)

+                    {

+                        list.Add(item);

+                    }

+                    else

+                    {

+                        if (unknown == null)

+                        {

+                            unknown = new List<object>();

+                        }

+                        unknown.Add(rawValue);

+                    }

+                }

+            }

+        }

+

+        void ICodedInputStream.ReadEnumArray<T>(uint fieldTag, string fieldName, ICollection<T> list,

+                                                out ICollection<object> unknown)

+        {

+            unknown = null;

+            List<object> array = new List<object>();

+            if (ReadEnumArray(fieldName, array))

+            {

+                foreach (object rawValue in array)

+                {

+                    T val = default(T);

+                    if (EnumParser<T>.TryConvert(rawValue, ref val))

+                    {

+                        list.Add(val);

+                    }

+                    else

+                    {

+                        if (unknown == null)

+                        {

+                            unknown = new List<object>();

+                        }

+                        unknown.Add(rawValue);

+                    }

+                }

+            }

+        }

+

+        void ICodedInputStream.ReadMessageArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType,

+                                                   ExtensionRegistry registry)

+        {

+            if (_depth++ > MaxDepth)

+            {

+                throw new RecursionLimitExceededException();

+            }

+            ReadMessageArray(fieldName, list, messageType, registry);

+            _depth--;

+        }

+

+        void ICodedInputStream.ReadGroupArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType,

+                                                 ExtensionRegistry registry)

+        {

+            if (_depth++ > MaxDepth)

+            {

+                throw new RecursionLimitExceededException();

+            }

+            ReadGroupArray(fieldName, list, messageType, registry);

+            _depth--;

+        }

+

+        bool ICodedInputStream.ReadPrimitiveField(FieldType fieldType, ref object value)

+        {

+            return ReadField(fieldType, ref value);

+        }

+

+        bool ICodedInputStream.IsAtEnd

+        {

+            get

+            {

+                string next;

+                return PeekNext(out next) == false;

+            }

+        }

+

+        bool ICodedInputStream.SkipField()

+        {

+            Skip();

+            return true;

+        }

+

+        void ICodedInputStream.ReadStringArray(uint fieldTag, string fieldName, ICollection<string> list)

+        {

+            ReadArray(FieldType.String, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadBytesArray(uint fieldTag, string fieldName, ICollection<ByteString> list)

+        {

+            ReadArray(FieldType.Bytes, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadBoolArray(uint fieldTag, string fieldName, ICollection<bool> list)

+        {

+            ReadArray(FieldType.Bool, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadInt32Array(uint fieldTag, string fieldName, ICollection<int> list)

+        {

+            ReadArray(FieldType.Int32, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadSInt32Array(uint fieldTag, string fieldName, ICollection<int> list)

+        {

+            ReadArray(FieldType.SInt32, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadUInt32Array(uint fieldTag, string fieldName, ICollection<uint> list)

+        {

+            ReadArray(FieldType.UInt32, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadFixed32Array(uint fieldTag, string fieldName, ICollection<uint> list)

+        {

+            ReadArray(FieldType.Fixed32, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadSFixed32Array(uint fieldTag, string fieldName, ICollection<int> list)

+        {

+            ReadArray(FieldType.SFixed32, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadInt64Array(uint fieldTag, string fieldName, ICollection<long> list)

+        {

+            ReadArray(FieldType.Int64, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadSInt64Array(uint fieldTag, string fieldName, ICollection<long> list)

+        {

+            ReadArray(FieldType.SInt64, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadUInt64Array(uint fieldTag, string fieldName, ICollection<ulong> list)

+        {

+            ReadArray(FieldType.UInt64, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadFixed64Array(uint fieldTag, string fieldName, ICollection<ulong> list)

+        {

+            ReadArray(FieldType.Fixed64, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadSFixed64Array(uint fieldTag, string fieldName, ICollection<long> list)

+        {

+            ReadArray(FieldType.SFixed64, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadDoubleArray(uint fieldTag, string fieldName, ICollection<double> list)

+        {

+            ReadArray(FieldType.Double, fieldName, list);

+        }

+

+        void ICodedInputStream.ReadFloatArray(uint fieldTag, string fieldName, ICollection<float> list)

+        {

+            ReadArray(FieldType.Float, fieldName, list);

+        }

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/AbstractTextReader.cs b/csharp/src/ProtocolBuffers.Serialization/AbstractTextReader.cs
new file mode 100644
index 0000000..b40a560
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/AbstractTextReader.cs
@@ -0,0 +1,177 @@
+using System;

+using System.Globalization;

+using System.Xml;

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// Provides a base class for text-parsing readers

+    /// </summary>

+    public abstract class AbstractTextReader : AbstractReader

+    {

+        /// <summary> Constructs a new reader </summary>

+        protected AbstractTextReader() { }

+

+        /// <summary>

+        /// Reads a typed field as a string

+        /// </summary>

+        protected abstract bool ReadAsText(ref string textValue, Type type);

+

+        /// <summary>

+        /// Returns true if it was able to read a String from the input

+        /// </summary>

+        protected override bool Read(ref string value)

+        {

+            string text = null;

+            if (ReadAsText(ref text, typeof(string)))

+            {

+                value = text;

+                return true;

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a Boolean from the input

+        /// </summary>

+        protected override bool Read(ref bool value)

+        {

+            string text = null;

+            if (ReadAsText(ref text, typeof(bool)))

+            {

+                value = XmlConvert.ToBoolean(text);

+                return true;

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a Int32 from the input

+        /// </summary>

+        protected override bool Read(ref int value)

+        {

+            string text = null;

+            if (ReadAsText(ref text, typeof(int)))

+            {

+                value = XmlConvert.ToInt32(text);

+                return true;

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a UInt32 from the input

+        /// </summary>

+        [CLSCompliant(false)]

+        protected override bool Read(ref uint value)

+        {

+            string text = null;

+            if (ReadAsText(ref text, typeof(uint)))

+            {

+                value = XmlConvert.ToUInt32(text);

+                return true;

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a Int64 from the input

+        /// </summary>

+        protected override bool Read(ref long value)

+        {

+            string text = null;

+            if (ReadAsText(ref text, typeof(long)))

+            {

+                value = XmlConvert.ToInt64(text);

+                return true;

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a UInt64 from the input

+        /// </summary>

+        [CLSCompliant(false)]

+        protected override bool Read(ref ulong value)

+        {

+            string text = null;

+            if (ReadAsText(ref text, typeof(ulong)))

+            {

+                value = XmlConvert.ToUInt64(text);

+                return true;

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a Single from the input

+        /// </summary>

+        protected override bool Read(ref float value)

+        {

+            string text = null;

+            if (ReadAsText(ref text, typeof(float)))

+            {

+                value = XmlConvert.ToSingle(text);

+                return true;

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a Double from the input

+        /// </summary>

+        protected override bool Read(ref double value)

+        {

+            string text = null;

+            if (ReadAsText(ref text, typeof(double)))

+            {

+                value = XmlConvert.ToDouble(text);

+                return true;

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// Provides decoding of bytes read from the input stream

+        /// </summary>

+        protected virtual ByteString DecodeBytes(string bytes)

+        {

+            return ByteString.FromBase64(bytes);

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a ByteString from the input

+        /// </summary>

+        protected override bool Read(ref ByteString value)

+        {

+            string text = null;

+            if (ReadAsText(ref text, typeof(ByteString)))

+            {

+                value = DecodeBytes(text);

+                return true;

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// returns true if it was able to read a single value into the value reference.  The value

+        /// stored may be of type System.String, System.Int32, or an IEnumLite from the IEnumLiteMap.

+        /// </summary>

+        protected override bool ReadEnum(ref object value)

+        {

+            string text = null;

+            if (ReadAsText(ref text, typeof(Enum)))

+            {

+                int number;

+                if (FrameworkPortability.TryParseInt32(text, NumberStyles.Integer, FrameworkPortability.InvariantCulture, out number))

+                {

+                    value = number;

+                    return true;

+                }

+                value = text;

+                return true;

+            }

+            return false;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/AbstractTextWriter.cs b/csharp/src/ProtocolBuffers.Serialization/AbstractTextWriter.cs
new file mode 100644
index 0000000..2c778df
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/AbstractTextWriter.cs
@@ -0,0 +1,106 @@
+using System;

+using System.Xml;

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// Provides a base class for text writers

+    /// </summary>

+    public abstract class AbstractTextWriter : AbstractWriter

+    {

+        /// <summary>

+        /// Encodes raw bytes to be written to the stream

+        /// </summary>

+        protected virtual string EncodeBytes(ByteString bytes)

+        {

+            return bytes.ToBase64();

+        }

+

+        /// <summary>

+        /// Writes a typed field as a text value

+        /// </summary>

+        protected abstract void WriteAsText(string field, string textValue, object typedValue);

+

+        /// <summary>

+        /// Writes a String value

+        /// </summary>

+        protected override void Write(string field, string value)

+        {

+            WriteAsText(field, value, value);

+        }

+

+        /// <summary>

+        /// Writes a Boolean value

+        /// </summary>

+        protected override void Write(string field, bool value)

+        {

+            WriteAsText(field, XmlConvert.ToString(value), value);

+        }

+

+        /// <summary>

+        /// Writes a Int32 value

+        /// </summary>

+        protected override void Write(string field, int value)

+        {

+            WriteAsText(field, XmlConvert.ToString(value), value);

+        }

+

+        /// <summary>

+        /// Writes a UInt32 value

+        /// </summary>

+        [CLSCompliant(false)]

+        protected override void Write(string field, uint value)

+        {

+            WriteAsText(field, XmlConvert.ToString(value), value);

+        }

+

+        /// <summary>

+        /// Writes a Int64 value

+        /// </summary>

+        protected override void Write(string field, long value)

+        {

+            WriteAsText(field, XmlConvert.ToString(value), value);

+        }

+

+        /// <summary>

+        /// Writes a UInt64 value

+        /// </summary>

+        [CLSCompliant(false)]

+        protected override void Write(string field, ulong value)

+        {

+            WriteAsText(field, XmlConvert.ToString(value), value);

+        }

+

+        /// <summary>

+        /// Writes a Single value

+        /// </summary>

+        protected override void Write(string field, float value)

+        {

+            WriteAsText(field, XmlConvert.ToString(value), value);

+        }

+

+        /// <summary>

+        /// Writes a Double value

+        /// </summary>

+        protected override void Write(string field, double value)

+        {

+            WriteAsText(field, XmlConvert.ToString(value), value);

+        }

+

+        /// <summary>

+        /// Writes a set of bytes

+        /// </summary>

+        protected override void Write(string field, ByteString value)

+        {

+            WriteAsText(field, EncodeBytes(value), value);

+        }

+

+        /// <summary>

+        /// Writes a System.Enum by the numeric and textual value

+        /// </summary>

+        protected override void WriteEnum(string field, int number, string name)

+        {

+            WriteAsText(field, name, number);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/AbstractWriter.cs b/csharp/src/ProtocolBuffers.Serialization/AbstractWriter.cs
new file mode 100644
index 0000000..2dc6b88
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/AbstractWriter.cs
@@ -0,0 +1,507 @@
+using System;

+using System.Collections;

+using System.Collections.Generic;

+using System.Globalization;

+using Google.ProtocolBuffers.Descriptors;

+

+//Disable CS3011: only CLS-compliant members can be abstract

+#pragma warning disable 3011

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// Provides a base class for writers that performs some basic type dispatching

+    /// </summary>

+    public abstract class AbstractWriter : ICodedOutputStream

+    {

+        /// <summary>

+        /// Completes any pending write operations

+        /// </summary>

+        public virtual void Flush()

+        {

+        }

+

+        /// <summary>

+        /// Writes the message to the the formatted stream.

+        /// </summary>

+        public abstract void WriteMessage(IMessageLite message);

+

+        /// <summary>

+        /// Used to write any nessary root-message preamble. After this call you can call 

+        /// IMessageLite.MergeTo(...) and complete the message with a call to WriteMessageEnd().

+        /// These three calls are identical to just calling WriteMessage(message);

+        /// </summary>

+        /// <example>

+        /// AbstractWriter writer;

+        /// writer.WriteMessageStart();

+        /// message.WriteTo(writer);

+        /// writer.WriteMessageEnd();

+        /// // ... or, but not both ...

+        /// writer.WriteMessage(message);

+        /// </example>

+        public abstract void WriteMessageStart();

+

+        /// <summary>

+        /// Used to complete a root-message previously started with a call to WriteMessageStart()

+        /// </summary>

+        public abstract void WriteMessageEnd();

+

+        /// <summary>

+        /// Writes a Boolean value

+        /// </summary>

+        protected abstract void Write(string field, Boolean value);

+

+        /// <summary>

+        /// Writes a Int32 value

+        /// </summary>

+        protected abstract void Write(string field, Int32 value);

+

+        /// <summary>

+        /// Writes a UInt32 value

+        /// </summary>

+        [CLSCompliant(false)]

+        protected abstract void Write(string field, UInt32 value);

+

+        /// <summary>

+        /// Writes a Int64 value

+        /// </summary>

+        protected abstract void Write(string field, Int64 value);

+

+        /// <summary>

+        /// Writes a UInt64 value

+        /// </summary>

+        [CLSCompliant(false)]

+        protected abstract void Write(string field, UInt64 value);

+

+        /// <summary>

+        /// Writes a Single value

+        /// </summary>

+        protected abstract void Write(string field, Single value);

+

+        /// <summary>

+        /// Writes a Double value

+        /// </summary>

+        protected abstract void Write(string field, Double value);

+

+        /// <summary>

+        /// Writes a String value

+        /// </summary>

+        protected abstract void Write(string field, String value);

+

+        /// <summary>

+        /// Writes a set of bytes

+        /// </summary>

+        protected abstract void Write(string field, ByteString value);

+

+        /// <summary>

+        /// Writes a message or group as a field

+        /// </summary>

+        protected abstract void WriteMessageOrGroup(string field, IMessageLite message);

+

+        /// <summary>

+        /// Writes a System.Enum by the numeric and textual value

+        /// </summary>

+        protected abstract void WriteEnum(string field, int number, string name);

+

+        /// <summary>

+        /// Writes a field of the type determined by field.FieldType

+        /// </summary>

+        protected virtual void WriteField(FieldType fieldType, string field, object value)

+        {

+            switch (fieldType)

+            {

+                case FieldType.Bool:

+                    Write(field, (bool) value);

+                    break;

+                case FieldType.Int64:

+                case FieldType.SInt64:

+                case FieldType.SFixed64:

+                    Write(field, (long) value);

+                    break;

+                case FieldType.UInt64:

+                case FieldType.Fixed64:

+                    Write(field, (ulong) value);

+                    break;

+                case FieldType.Int32:

+                case FieldType.SInt32:

+                case FieldType.SFixed32:

+                    Write(field, (int) value);

+                    break;

+                case FieldType.UInt32:

+                case FieldType.Fixed32:

+                    Write(field, (uint) value);

+                    break;

+                case FieldType.Float:

+                    Write(field, (float) value);

+                    break;

+                case FieldType.Double:

+                    Write(field, (double) value);

+                    break;

+                case FieldType.String:

+                    Write(field, (string) value);

+                    break;

+                case FieldType.Bytes:

+                    Write(field, (ByteString) value);

+                    break;

+                case FieldType.Group:

+                    WriteMessageOrGroup(field, (IMessageLite) value);

+                    break;

+                case FieldType.Message:

+                    WriteMessageOrGroup(field, (IMessageLite) value);

+                    break;

+                case FieldType.Enum:

+                    {

+                        if (value is IEnumLite)

+                        {

+                            WriteEnum(field, ((IEnumLite) value).Number, ((IEnumLite) value).Name);

+                        }

+                        else if (value is IConvertible)

+                        {

+                            WriteEnum(field, ((IConvertible)value).ToInt32(FrameworkPortability.InvariantCulture),

+                                      ((IConvertible)value).ToString(FrameworkPortability.InvariantCulture));

+                        }

+                        else

+                        {

+                            throw new ArgumentException("Expected an Enum type for field " + field);

+                        }

+                        break;

+                    }

+                default:

+                    throw InvalidProtocolBufferException.InvalidTag();

+            }

+        }

+

+        /// <summary>

+        /// Writes an array of field values

+        /// </summary>

+        protected virtual void WriteArray(FieldType fieldType, string field, IEnumerable items)

+        {

+            foreach (object obj in items)

+            {

+                WriteField(fieldType, field, obj);

+            }

+        }

+

+        /// <summary>

+        /// Writes a numeric unknown field of wire type: Fixed32, Fixed64, or Variant

+        /// </summary>

+        [CLSCompliant(false)]

+        protected virtual void WriteUnknown(WireFormat.WireType wireType, int fieldNumber, ulong value)

+        {

+        }

+

+        /// <summary>

+        /// Writes an unknown field, Expect WireType of GroupStart or LengthPrefix

+        /// </summary>

+        [CLSCompliant(false)]

+        protected virtual void WriteUnknown(WireFormat.WireType wireType, int fieldNumber, ByteString value)

+        {

+        }

+

+        #region ICodedOutputStream Members

+

+        void ICodedOutputStream.WriteUnknownGroup(int fieldNumber, IMessageLite value)

+        {

+        }

+

+        void ICodedOutputStream.WriteUnknownBytes(int fieldNumber, ByteString value)

+        {

+        }

+

+        void ICodedOutputStream.WriteUnknownField(int fieldNumber, WireFormat.WireType type, ulong value)

+        {

+        }

+

+        void ICodedOutputStream.WriteMessageSetExtension(int fieldNumber, string fieldName, IMessageLite value)

+        {

+        }

+

+        void ICodedOutputStream.WriteMessageSetExtension(int fieldNumber, string fieldName, ByteString value)

+        {

+        }

+

+        void ICodedOutputStream.WriteField(FieldType fieldType, int fieldNumber, string fieldName, object value)

+        {

+            WriteField(fieldType, fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteDouble(int fieldNumber, string fieldName, double value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteFloat(int fieldNumber, string fieldName, float value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteUInt64(int fieldNumber, string fieldName, ulong value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteInt64(int fieldNumber, string fieldName, long value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteInt32(int fieldNumber, string fieldName, int value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteFixed64(int fieldNumber, string fieldName, ulong value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteFixed32(int fieldNumber, string fieldName, uint value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteBool(int fieldNumber, string fieldName, bool value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteString(int fieldNumber, string fieldName, string value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteGroup(int fieldNumber, string fieldName, IMessageLite value)

+        {

+            WriteMessageOrGroup(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteMessage(int fieldNumber, string fieldName, IMessageLite value)

+        {

+            WriteMessageOrGroup(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteBytes(int fieldNumber, string fieldName, ByteString value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteUInt32(int fieldNumber, string fieldName, uint value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteEnum(int fieldNumber, string fieldName, int value, object rawValue)

+        {

+            WriteEnum(fieldName, value, rawValue.ToString());

+        }

+

+        void ICodedOutputStream.WriteSFixed32(int fieldNumber, string fieldName, int value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteSFixed64(int fieldNumber, string fieldName, long value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteSInt32(int fieldNumber, string fieldName, int value)

+        {

+            Write(fieldName, value);

+        }

+

+        void ICodedOutputStream.WriteSInt64(int fieldNumber, string fieldName, long value)

+        {

+            Write(fieldName, value);

+        }

+

+

+        void ICodedOutputStream.WriteArray(FieldType fieldType, int fieldNumber, string fieldName, IEnumerable list)

+        {

+            WriteArray(fieldType, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteGroupArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)

+        {

+            WriteArray(FieldType.Group, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteMessageArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)

+        {

+            WriteArray(FieldType.Message, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteStringArray(int fieldNumber, string fieldName, IEnumerable<string> list)

+        {

+            WriteArray(FieldType.String, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteBytesArray(int fieldNumber, string fieldName, IEnumerable<ByteString> list)

+        {

+            WriteArray(FieldType.Bytes, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteBoolArray(int fieldNumber, string fieldName, IEnumerable<bool> list)

+        {

+            WriteArray(FieldType.Bool, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteInt32Array(int fieldNumber, string fieldName, IEnumerable<int> list)

+        {

+            WriteArray(FieldType.Int32, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteSInt32Array(int fieldNumber, string fieldName, IEnumerable<int> list)

+        {

+            WriteArray(FieldType.SInt32, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteUInt32Array(int fieldNumber, string fieldName, IEnumerable<uint> list)

+        {

+            WriteArray(FieldType.UInt32, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteFixed32Array(int fieldNumber, string fieldName, IEnumerable<uint> list)

+        {

+            WriteArray(FieldType.Fixed32, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteSFixed32Array(int fieldNumber, string fieldName, IEnumerable<int> list)

+        {

+            WriteArray(FieldType.SFixed32, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteInt64Array(int fieldNumber, string fieldName, IEnumerable<long> list)

+        {

+            WriteArray(FieldType.Int64, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteSInt64Array(int fieldNumber, string fieldName, IEnumerable<long> list)

+        {

+            WriteArray(FieldType.SInt64, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteUInt64Array(int fieldNumber, string fieldName, IEnumerable<ulong> list)

+        {

+            WriteArray(FieldType.UInt64, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteFixed64Array(int fieldNumber, string fieldName, IEnumerable<ulong> list)

+        {

+            WriteArray(FieldType.Fixed64, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteSFixed64Array(int fieldNumber, string fieldName, IEnumerable<long> list)

+        {

+            WriteArray(FieldType.SFixed64, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteDoubleArray(int fieldNumber, string fieldName, IEnumerable<double> list)

+        {

+            WriteArray(FieldType.Double, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteFloatArray(int fieldNumber, string fieldName, IEnumerable<float> list)

+        {

+            WriteArray(FieldType.Float, fieldName, list);

+        }

+

+        void ICodedOutputStream.WriteEnumArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)

+        {

+            WriteArray(FieldType.Enum, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedArray(FieldType fieldType, int fieldNumber, string fieldName,

+                                                 IEnumerable list)

+        {

+            WriteArray(fieldType, fieldName, list);

+        }

+

+

+        void ICodedOutputStream.WritePackedBoolArray(int fieldNumber, string fieldName, int computedSize,

+                                                     IEnumerable<bool> list)

+        {

+            WriteArray(FieldType.Bool, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedInt32Array(int fieldNumber, string fieldName, int computedSize,

+                                                      IEnumerable<int> list)

+        {

+            WriteArray(FieldType.Int32, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedSInt32Array(int fieldNumber, string fieldName, int computedSize,

+                                                       IEnumerable<int> list)

+        {

+            WriteArray(FieldType.SInt32, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedUInt32Array(int fieldNumber, string fieldName, int computedSize,

+                                                       IEnumerable<uint> list)

+        {

+            WriteArray(FieldType.UInt32, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedFixed32Array(int fieldNumber, string fieldName, int computedSize,

+                                                        IEnumerable<uint> list)

+        {

+            WriteArray(FieldType.Fixed32, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedSFixed32Array(int fieldNumber, string fieldName, int computedSize,

+                                                         IEnumerable<int> list)

+        {

+            WriteArray(FieldType.SFixed32, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedInt64Array(int fieldNumber, string fieldName, int computedSize,

+                                                      IEnumerable<long> list)

+        {

+            WriteArray(FieldType.Int64, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedSInt64Array(int fieldNumber, string fieldName, int computedSize,

+                                                       IEnumerable<long> list)

+        {

+            WriteArray(FieldType.SInt64, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedUInt64Array(int fieldNumber, string fieldName, int computedSize,

+                                                       IEnumerable<ulong> list)

+        {

+            WriteArray(FieldType.UInt64, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedFixed64Array(int fieldNumber, string fieldName, int computedSize,

+                                                        IEnumerable<ulong> list)

+        {

+            WriteArray(FieldType.Fixed64, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedSFixed64Array(int fieldNumber, string fieldName, int computedSize,

+                                                         IEnumerable<long> list)

+        {

+            WriteArray(FieldType.SFixed64, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedDoubleArray(int fieldNumber, string fieldName, int computedSize,

+                                                       IEnumerable<double> list)

+        {

+            WriteArray(FieldType.Double, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedFloatArray(int fieldNumber, string fieldName, int computedSize,

+                                                      IEnumerable<float> list)

+        {

+            WriteArray(FieldType.Float, fieldName, list);

+        }

+

+        void ICodedOutputStream.WritePackedEnumArray<T>(int fieldNumber, string fieldName, int computedSize,

+                                                        IEnumerable<T> list)

+        {

+            WriteArray(FieldType.Enum, fieldName, list);

+        }

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/DictionaryReader.cs b/csharp/src/ProtocolBuffers.Serialization/DictionaryReader.cs
new file mode 100644
index 0000000..c460523
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/DictionaryReader.cs
@@ -0,0 +1,267 @@
+using System;

+using System.Collections.Generic;

+using System.Globalization;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// Allows reading messages from a name/value dictionary

+    /// </summary>

+    public class DictionaryReader : AbstractReader

+    {

+        private readonly IEnumerator<KeyValuePair<string, object>> _input;

+        private bool _ready;

+

+        /// <summary>

+        /// Creates a dictionary reader from an enumeration of KeyValuePair data, like an IDictionary

+        /// </summary>

+        public DictionaryReader(IEnumerable<KeyValuePair<string, object>> input)

+        {

+            _input = input.GetEnumerator();

+            _ready = _input.MoveNext();

+        }

+

+        /// <summary>

+        /// No-op

+        /// </summary>

+        public override void ReadMessageStart()

+        { }

+

+        /// <summary>

+        /// No-op

+        /// </summary>

+        public override void ReadMessageEnd()

+        { }

+

+        /// <summary>

+        /// Merges the contents of stream into the provided message builder

+        /// </summary>

+        public override TBuilder Merge<TBuilder>(TBuilder builder, ExtensionRegistry registry)

+        {

+            builder.WeakMergeFrom(this, registry);

+            return builder;

+        }

+

+        /// <summary>

+        /// Peeks at the next field in the input stream and returns what information is available.

+        /// </summary>

+        /// <remarks>

+        /// This may be called multiple times without actually reading the field.  Only after the field

+        /// is either read, or skipped, should PeekNext return a different value.

+        /// </remarks>

+        protected override bool PeekNext(out string field)

+        {

+            field = _ready ? _input.Current.Key : null;

+            return _ready;

+        }

+

+        /// <summary>

+        /// Causes the reader to skip past this field

+        /// </summary>

+        protected override void Skip()

+        {

+            _ready = _input.MoveNext();

+        }

+

+        private bool GetValue<T>(ref T value)

+        {

+            if (!_ready)

+            {

+                return false;

+            }

+

+            object obj = _input.Current.Value;

+            if (obj is T)

+            {

+                value = (T) obj;

+            }

+            else

+            {

+                try

+                {

+                    if (obj is IConvertible)

+                    {

+                        value = (T)Convert.ChangeType(obj, typeof(T), FrameworkPortability.InvariantCulture);

+                    }

+                    else

+                    {

+                        value = (T) obj;

+                    }

+                }

+                catch

+                {

+                    _ready = _input.MoveNext();

+                    return false;

+                }

+            }

+            _ready = _input.MoveNext();

+            return true;

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a Boolean from the input

+        /// </summary>

+        protected override bool Read(ref bool value)

+        {

+            return GetValue(ref value);

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a Int32 from the input

+        /// </summary>

+        protected override bool Read(ref int value)

+        {

+            return GetValue(ref value);

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a UInt32 from the input

+        /// </summary>

+        [CLSCompliant(false)]

+        protected override bool Read(ref uint value)

+        {

+            return GetValue(ref value);

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a Int64 from the input

+        /// </summary>

+        protected override bool Read(ref long value)

+        {

+            return GetValue(ref value);

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a UInt64 from the input

+        /// </summary>

+        [CLSCompliant(false)]

+        protected override bool Read(ref ulong value)

+        {

+            return GetValue(ref value);

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a Single from the input

+        /// </summary>

+        protected override bool Read(ref float value)

+        {

+            return GetValue(ref value);

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a Double from the input

+        /// </summary>

+        protected override bool Read(ref double value)

+        {

+            return GetValue(ref value);

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a String from the input

+        /// </summary>

+        protected override bool Read(ref string value)

+        {

+            return GetValue(ref value);

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a ByteString from the input

+        /// </summary>

+        protected override bool Read(ref ByteString value)

+        {

+            byte[] rawbytes = null;

+            if (GetValue(ref rawbytes))

+            {

+                value = ByteString.CopyFrom(rawbytes);

+                return true;

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// returns true if it was able to read a single value into the value reference.  The value

+        /// stored may be of type System.String, System.Int32, or an IEnumLite from the IEnumLiteMap.

+        /// </summary>

+        protected override bool ReadEnum(ref object value)

+        {

+            return GetValue(ref value);

+        }

+

+        /// <summary>

+        /// Merges the input stream into the provided IBuilderLite 

+        /// </summary>

+        protected override bool ReadMessage(IBuilderLite builder, ExtensionRegistry registry)

+        {

+            IDictionary<string, object> values = null;

+            if (GetValue(ref values))

+            {

+                new DictionaryReader(values).Merge(builder, registry);

+                return true;

+            }

+            return false;

+        }

+

+        public override bool ReadArray<T>(FieldType type, string field, ICollection<T> items)

+        {

+            object[] array = null;

+            if (GetValue(ref array))

+            {

+                if (typeof(T) == typeof(ByteString))

+                {

+                    ICollection<ByteString> output = (ICollection<ByteString>) items;

+                    foreach (byte[] item in array)

+                    {

+                        output.Add(ByteString.CopyFrom(item));

+                    }

+                }

+                else

+                {

+                    foreach (T item in array)

+                    {

+                        items.Add(item);

+                    }

+                }

+                return true;

+            }

+            return false;

+        }

+

+        public override bool ReadEnumArray(string field, ICollection<object> items)

+        {

+            object[] array = null;

+            if (GetValue(ref array))

+            {

+                foreach (object item in array)

+                {

+                    items.Add(item);

+                }

+                return true;

+            }

+            return false;

+        }

+

+        public override bool ReadMessageArray<T>(string field, ICollection<T> items, IMessageLite messageType,

+                                                 ExtensionRegistry registry)

+        {

+            object[] array = null;

+            if (GetValue(ref array))

+            {

+                foreach (IDictionary<string, object> item in array)

+                {

+                    IBuilderLite builder = messageType.WeakCreateBuilderForType();

+                    new DictionaryReader(item).Merge(builder);

+                    items.Add((T) builder.WeakBuild());

+                }

+                return true;

+            }

+            return false;

+        }

+

+        public override bool ReadGroupArray<T>(string field, ICollection<T> items, IMessageLite messageType,

+                                               ExtensionRegistry registry)

+        {

+            return ReadMessageArray(field, items, messageType, registry);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/DictionaryWriter.cs b/csharp/src/ProtocolBuffers.Serialization/DictionaryWriter.cs
new file mode 100644
index 0000000..6d82330
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/DictionaryWriter.cs
@@ -0,0 +1,202 @@
+using System;

+using System.Collections;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// Allows writing messages to a name/value dictionary

+    /// </summary>

+    public class DictionaryWriter : AbstractWriter

+    {

+        private readonly IDictionary<string, object> _output;

+

+        /// <summary>

+        /// Constructs a writer using a new dictionary

+        /// </summary>

+        public DictionaryWriter()

+            : this(new Dictionary<string, object>(StringComparer.Ordinal))

+        {

+        }

+

+        /// <summary>

+        /// Constructs a writer using an existing dictionary

+        /// </summary>

+        public DictionaryWriter(IDictionary<string, object> output)

+        {

+            ThrowHelper.ThrowIfNull(output, "output");

+            _output = output;

+        }

+

+        /// <summary>

+        /// Creates the dictionary instance for a child message.

+        /// </summary>

+        protected virtual DictionaryWriter Create()

+        {

+            return new DictionaryWriter();

+        }

+

+        /// <summary>

+        /// Accesses the dictionary that is backing this writer

+        /// </summary>

+        public IDictionary<string, object> ToDictionary()

+        {

+            return _output;

+        }

+

+        /// <summary>

+        /// Writes the message to the the formatted stream.

+        /// </summary>

+        public override void WriteMessage(IMessageLite message)

+        {

+            message.WriteTo(this);

+        }

+

+

+        /// <summary>

+        /// No-op

+        /// </summary>

+        public override void WriteMessageStart()

+        { }

+

+        /// <summary>

+        /// No-op

+        /// </summary>

+        public override void WriteMessageEnd()

+        { }

+

+        /// <summary>

+        /// Writes a Boolean value

+        /// </summary>

+        protected override void Write(string field, bool value)

+        {

+            _output[field] = value;

+        }

+

+        /// <summary>

+        /// Writes a Int32 value

+        /// </summary>

+        protected override void Write(string field, int value)

+        {

+            _output[field] = value;

+        }

+

+        /// <summary>

+        /// Writes a UInt32 value

+        /// </summary>

+        [CLSCompliant(false)]

+        protected override void Write(string field, uint value)

+        {

+            _output[field] = value;

+        }

+

+        /// <summary>

+        /// Writes a Int64 value

+        /// </summary>

+        protected override void Write(string field, long value)

+        {

+            _output[field] = value;

+        }

+

+        /// <summary>

+        /// Writes a UInt64 value

+        /// </summary>

+        [CLSCompliant(false)]

+        protected override void Write(string field, ulong value)

+        {

+            _output[field] = value;

+        }

+

+        /// <summary>

+        /// Writes a Single value

+        /// </summary>

+        protected override void Write(string field, float value)

+        {

+            _output[field] = value;

+        }

+

+        /// <summary>

+        /// Writes a Double value

+        /// </summary>

+        protected override void Write(string field, double value)

+        {

+            _output[field] = value;

+        }

+

+        /// <summary>

+        /// Writes a String value

+        /// </summary>

+        protected override void Write(string field, string value)

+        {

+            _output[field] = value;

+        }

+

+        /// <summary>

+        /// Writes a set of bytes

+        /// </summary>

+        protected override void Write(string field, ByteString value)

+        {

+            _output[field] = value.ToByteArray();

+        }

+

+        /// <summary>

+        /// Writes a message or group as a field

+        /// </summary>

+        protected override void WriteMessageOrGroup(string field, IMessageLite message)

+        {

+            DictionaryWriter writer = Create();

+            writer.WriteMessage(message);

+

+            _output[field] = writer.ToDictionary();

+        }

+

+        /// <summary>

+        /// Writes a System.Enum by the numeric and textual value

+        /// </summary>

+        protected override void WriteEnum(string field, int number, string name)

+        {

+            _output[field] = number;

+        }

+

+        /// <summary>

+        /// Writes an array of field values

+        /// </summary>

+        protected override void WriteArray(FieldType fieldType, string field, IEnumerable items)

+        {

+            List<object> objects = new List<object>();

+            foreach (object o in items)

+            {

+                switch (fieldType)

+                {

+                    case FieldType.Group:

+                    case FieldType.Message:

+                        {

+                            DictionaryWriter writer = Create();

+                            writer.WriteMessage((IMessageLite) o);

+                            objects.Add(writer.ToDictionary());

+                        }

+                        break;

+                    case FieldType.Bytes:

+                        objects.Add(((ByteString) o).ToByteArray());

+                        break;

+                    case FieldType.Enum:

+                        if (o is IEnumLite)

+                        {

+                            objects.Add(((IEnumLite) o).Number);

+                        }

+                        else

+                        {

+                            objects.Add((int) o);

+                        }

+                        break;

+                    default:

+                        objects.Add(o);

+                        break;

+                }

+            }

+

+            _output[field] = objects.ToArray();

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/Extensions.cs b/csharp/src/ProtocolBuffers.Serialization/Extensions.cs
new file mode 100644
index 0000000..8aef0a9
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/Extensions.cs
@@ -0,0 +1,213 @@
+using System;

+using System.Text;

+using System.IO;

+using System.Xml;

+using Google.ProtocolBuffers.Serialization;

+using Google.ProtocolBuffers.Serialization.Http;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Extension methods for using serializers on instances of IMessageLite/IBuilderLite

+    /// </summary>

+    public static class Extensions

+    {

+        #region IMessageLite Extension

+        /// <summary>

+        /// Serializes the message to JSON text.  This is a trivial wrapper

+        /// around Serialization.JsonFormatWriter.WriteMessage.

+        /// </summary>

+        public static string ToJson(

+#if !NOEXTENSIONS

+            this

+#endif

+            IMessageLite message)

+        {

+            JsonFormatWriter w = JsonFormatWriter.CreateInstance();

+            w.WriteMessage(message);

+            return w.ToString();

+        }

+        /// <summary>

+        /// Serializes the message to XML text.  This is a trivial wrapper

+        /// around Serialization.XmlFormatWriter.WriteMessage.

+        /// </summary>

+        public static string ToXml(

+#if !NOEXTENSIONS

+            this

+#endif

+            IMessageLite message)

+        {

+            StringWriter w = new StringWriter(new StringBuilder(4096));

+            XmlFormatWriter.CreateInstance(w).WriteMessage(message);

+            return w.ToString();

+        }

+        /// <summary>

+        /// Serializes the message to XML text using the element name provided.

+        /// This is a trivial wrapper around Serialization.XmlFormatWriter.WriteMessage.

+        /// </summary>

+        public static string ToXml(

+#if !NOEXTENSIONS

+            this

+#endif

+            IMessageLite message, string rootElementName)

+        {

+            StringWriter w = new StringWriter(new StringBuilder(4096));

+            XmlFormatWriter.CreateInstance(w).WriteMessage(rootElementName, message);

+            return w.ToString();

+        }

+

+        /// <summary>

+        /// Writes the message instance to the stream using the content type provided

+        /// </summary>

+        /// <param name="message">An instance of a message</param>

+        /// <param name="options">Options specific to writing this message and/or content type</param>

+        /// <param name="contentType">The mime type of the content to be written</param>

+        /// <param name="output">The stream to write the message to</param>

+        public static void WriteTo(

+#if !NOEXTENSIONS

+            this

+#endif

+            IMessageLite message, MessageFormatOptions options, string contentType, Stream output)

+        {

+            ICodedOutputStream codedOutput = MessageFormatFactory.CreateOutputStream(options, contentType, output);

+

+            // Output the appropriate message preamble

+            codedOutput.WriteMessageStart();

+

+            // Write the message content to the output

+            message.WriteTo(codedOutput);

+

+            // Write the closing message fragment

+            codedOutput.WriteMessageEnd();

+            codedOutput.Flush();

+        }

+

+        #endregion

+        #region IBuilderLite Extensions

+        /// <summary>

+        /// Merges a JSON object into this builder and returns

+        /// </summary>

+        public static TBuilder MergeFromJson<TBuilder>(

+#if !NOEXTENSIONS

+            this

+#endif

+            TBuilder builder, string jsonText) where TBuilder : IBuilderLite

+        {

+            return JsonFormatReader.CreateInstance(jsonText)

+                .Merge(builder);

+        }

+        /// <summary>

+        /// Merges a JSON object into this builder and returns

+        /// </summary>

+        public static TBuilder MergeFromJson<TBuilder>(

+#if !NOEXTENSIONS

+            this

+#endif

+            TBuilder builder, TextReader reader) where TBuilder : IBuilderLite

+        {

+            return MergeFromJson(builder, reader, ExtensionRegistry.Empty);

+        }

+        /// <summary>

+        /// Merges a JSON object into this builder using the extensions provided and returns

+        /// </summary>

+        public static TBuilder MergeFromJson<TBuilder>(

+#if !NOEXTENSIONS

+            this

+#endif

+            TBuilder builder, TextReader reader, ExtensionRegistry extensionRegistry) where TBuilder : IBuilderLite

+        {

+            return JsonFormatReader.CreateInstance(reader)

+                .Merge(builder, extensionRegistry);

+        }

+

+        /// <summary>

+        /// Merges an XML object into this builder and returns

+        /// </summary>

+        public static TBuilder MergeFromXml<TBuilder>(

+#if !NOEXTENSIONS

+            this

+#endif

+            TBuilder builder, XmlReader reader) where TBuilder : IBuilderLite

+        {

+            return MergeFromXml(builder, XmlFormatReader.DefaultRootElementName, reader, ExtensionRegistry.Empty);

+        }

+

+        /// <summary>

+        /// Merges an XML object into this builder and returns

+        /// </summary>

+        public static TBuilder MergeFromXml<TBuilder>(

+#if !NOEXTENSIONS

+            this

+#endif

+            TBuilder builder, string rootElementName, XmlReader reader) where TBuilder : IBuilderLite

+        {

+            return MergeFromXml(builder, rootElementName, reader, ExtensionRegistry.Empty);

+        }

+

+        /// <summary>

+        /// Merges an XML object into this builder using the extensions provided and returns

+        /// </summary>

+        public static TBuilder MergeFromXml<TBuilder>(

+#if !NOEXTENSIONS

+            this

+#endif

+            TBuilder builder, string rootElementName, XmlReader reader,

+            ExtensionRegistry extensionRegistry) where TBuilder : IBuilderLite

+        {

+            return XmlFormatReader.CreateInstance(reader)

+                .Merge(rootElementName, builder, extensionRegistry);

+        }

+

+        /// <summary>

+        /// Merges the message from the input stream based on the contentType provided

+        /// </summary>

+        /// <typeparam name="TBuilder">A type derived from IBuilderLite</typeparam>

+        /// <param name="builder">An instance of a message builder</param>

+        /// <param name="options">Options specific to reading this message and/or content type</param>

+        /// <param name="contentType">The mime type of the input stream content</param>

+        /// <param name="input">The stream to read the message from</param>

+        /// <returns>The same builder instance that was supplied in the builder parameter</returns>

+        public static TBuilder MergeFrom<TBuilder>(

+#if !NOEXTENSIONS

+            this

+#endif

+            TBuilder builder, MessageFormatOptions options, string contentType, Stream input) where TBuilder : IBuilderLite

+        {

+            ICodedInputStream codedInput = MessageFormatFactory.CreateInputStream(options, contentType, input);

+            codedInput.ReadMessageStart();

+            builder.WeakMergeFrom(codedInput, options.ExtensionRegistry);

+            codedInput.ReadMessageEnd();

+            return builder;

+        }

+

+        #endregion

+        #region IRpcServerStub Extensions

+

+        /// <summary>

+        /// Used to implement a service endpoint on an HTTP server.  This works with services generated with the

+        /// service_generator_type option set to IRPCDISPATCH.

+        /// </summary>

+        /// <param name="stub">The service execution stub</param>

+        /// <param name="methodName">The name of the method being invoked</param>

+        /// <param name="options">optional arguments for the format reader/writer</param>

+        /// <param name="contentType">The mime type for the input stream</param>

+        /// <param name="input">The input stream</param>

+        /// <param name="responseType">The mime type for the output stream</param>

+        /// <param name="output">The output stream</param>

+        public static void HttpCallMethod(

+#if !NOEXTENSIONS

+            this

+#endif

+            IRpcServerStub stub, string methodName, MessageFormatOptions options,

+            string contentType, Stream input, string responseType, Stream output)

+        {

+            ICodedInputStream codedInput = MessageFormatFactory.CreateInputStream(options, contentType, input);

+            codedInput.ReadMessageStart();

+            IMessageLite response = stub.CallMethod(methodName, codedInput, options.ExtensionRegistry);

+            codedInput.ReadMessageEnd();

+            WriteTo(response, options, responseType, output);

+        }

+

+        #endregion

+    }

+}

diff --git a/csharp/src/ProtocolBuffers.Serialization/Http/FormUrlEncodedReader.cs b/csharp/src/ProtocolBuffers.Serialization/Http/FormUrlEncodedReader.cs
new file mode 100644
index 0000000..508d76a
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/Http/FormUrlEncodedReader.cs
@@ -0,0 +1,162 @@
+using System;

+using System.IO;

+using System.Text;

+

+namespace Google.ProtocolBuffers.Serialization.Http

+{

+    /// <summary>

+    /// Allows reading messages from a name/value dictionary

+    /// </summary>

+    public class FormUrlEncodedReader : AbstractTextReader

+    {

+        private readonly TextReader _input;

+        private string _fieldName, _fieldValue;

+        private bool _ready;

+

+        /// <summary>

+        /// Creates a dictionary reader from an enumeration of KeyValuePair data, like an IDictionary

+        /// </summary>

+        FormUrlEncodedReader(TextReader input)

+        {

+            _input = input;

+            int ch = input.Peek();

+            if (ch == '?')

+            {

+                input.Read();

+            }

+            _ready = ReadNext();

+        }

+

+        #region CreateInstance overloads

+        /// <summary>

+        /// Constructs a FormUrlEncodedReader to parse form data, or url query text into a message.

+        /// </summary>

+        public static FormUrlEncodedReader CreateInstance(Stream stream)

+        {

+            return new FormUrlEncodedReader(new StreamReader(stream, Encoding.UTF8, false));

+        }

+

+        /// <summary>

+        /// Constructs a FormUrlEncodedReader to parse form data, or url query text into a message.

+        /// </summary>

+        public static FormUrlEncodedReader CreateInstance(byte[] bytes)

+        {

+            return new FormUrlEncodedReader(new StreamReader(new MemoryStream(bytes, false), Encoding.UTF8, false));

+        }

+

+        /// <summary>

+        /// Constructs a FormUrlEncodedReader to parse form data, or url query text into a message.

+        /// </summary>

+        public static FormUrlEncodedReader CreateInstance(string text)

+        {

+            return new FormUrlEncodedReader(new StringReader(text));

+        }

+

+        /// <summary>

+        /// Constructs a FormUrlEncodedReader to parse form data, or url query text into a message.

+        /// </summary>

+        public static FormUrlEncodedReader CreateInstance(TextReader input)

+        {

+            return new FormUrlEncodedReader(input);

+        }

+        #endregion

+

+        private bool ReadNext()

+        {

+            StringBuilder field = new StringBuilder(32);

+            StringBuilder value = new StringBuilder(64);

+            int ch;

+            while (-1 != (ch = _input.Read()) && ch != '=' && ch != '&')

+            {

+                field.Append((char)ch);

+            }

+

+            if (ch != -1 && ch != '&')

+            {

+                while (-1 != (ch = _input.Read()) && ch != '&')

+                {

+                    value.Append((char)ch);

+                }

+            }

+

+            _fieldName = field.ToString();

+            _fieldValue = Uri.UnescapeDataString(value.Replace('+', ' ').ToString());

+            

+            return !String.IsNullOrEmpty(_fieldName);

+        }

+

+        /// <summary>

+        /// No-op

+        /// </summary>

+        public override void ReadMessageStart()

+        { }

+

+        /// <summary>

+        /// No-op

+        /// </summary>

+        public override void ReadMessageEnd()

+        { }

+

+        /// <summary>

+        /// Merges the contents of stream into the provided message builder

+        /// </summary>

+        public override TBuilder Merge<TBuilder>(TBuilder builder, ExtensionRegistry registry)

+        {

+            builder.WeakMergeFrom(this, registry);

+            return builder;

+        }

+

+        /// <summary>

+        /// Causes the reader to skip past this field

+        /// </summary>

+        protected override void Skip()

+        {

+            _ready = ReadNext();

+        }

+

+        /// <summary>

+        /// Peeks at the next field in the input stream and returns what information is available.

+        /// </summary>

+        /// <remarks>

+        /// This may be called multiple times without actually reading the field.  Only after the field

+        /// is either read, or skipped, should PeekNext return a different value.

+        /// </remarks>

+        protected override bool PeekNext(out string field)

+        {

+            field = _ready ? _fieldName : null;

+            return field != null;

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a String from the input

+        /// </summary>

+        protected override bool ReadAsText(ref string value, Type typeInfo)

+        {

+            if (_ready)

+            {

+                value = _fieldValue;

+                _ready = ReadNext();

+                return true;

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// It's unlikely this will work for anything but text data as bytes UTF8 are transformed to text and back to bytes

+        /// </summary>

+        protected override ByteString DecodeBytes(string bytes)

+        { return ByteString.CopyFromUtf8(bytes); }

+

+        /// <summary>

+        /// Not Supported

+        /// </summary>

+        public override bool ReadGroup(IBuilderLite value, ExtensionRegistry registry)

+        { throw new NotSupportedException(); }

+

+        /// <summary>

+        /// Not Supported

+        /// </summary>

+        protected override bool ReadMessage(IBuilderLite builder, ExtensionRegistry registry)

+        { throw new NotSupportedException(); }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/Http/MessageFormatFactory.cs b/csharp/src/ProtocolBuffers.Serialization/Http/MessageFormatFactory.cs
new file mode 100644
index 0000000..270af64
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/Http/MessageFormatFactory.cs
@@ -0,0 +1,112 @@
+using System;

+using System.IO;

+using System.Xml;

+using System.Text;

+

+namespace Google.ProtocolBuffers.Serialization.Http

+{

+    /// <summary>

+    /// Extensions and helpers to abstract the reading/writing of messages by a client-specified content type.

+    /// </summary>

+    public static class MessageFormatFactory

+    {

+        /// <summary>

+        /// Constructs an ICodedInputStream from the input stream based on the contentType provided

+        /// </summary>

+        /// <param name="options">Options specific to reading this message and/or content type</param>

+        /// <param name="contentType">The mime type of the input stream content</param>

+        /// <param name="input">The stream to read the message from</param>

+        /// <returns>The ICodedInputStream that can be given to the IBuilder.MergeFrom(...) method</returns>

+        public static ICodedInputStream CreateInputStream(MessageFormatOptions options, string contentType, Stream input)

+        {

+            ICodedInputStream codedInput = ContentTypeToInputStream(contentType, options, input);

+

+            if (codedInput is XmlFormatReader)

+            {

+                XmlFormatReader reader = (XmlFormatReader)codedInput;

+                reader.RootElementName = options.XmlReaderRootElementName;

+                reader.Options = options.XmlReaderOptions;

+            }

+

+            return codedInput;

+        }

+        

+        /// <summary>

+        /// Writes the message instance to the stream using the content type provided

+        /// </summary>

+        /// <param name="options">Options specific to writing this message and/or content type</param>

+        /// <param name="contentType">The mime type of the content to be written</param>

+        /// <param name="output">The stream to write the message to</param>

+        /// <remarks> If you do not dispose of ICodedOutputStream some formats may yield incomplete output </remarks>

+        public static ICodedOutputStream CreateOutputStream(MessageFormatOptions options, string contentType, Stream output)

+        {

+            ICodedOutputStream codedOutput = ContentTypeToOutputStream(contentType, options, output);

+

+            if (codedOutput is JsonFormatWriter)

+            {

+                JsonFormatWriter writer = (JsonFormatWriter)codedOutput;

+                if (options.FormattedOutput)

+                {

+                    writer.Formatted();

+                }

+            }

+            else if (codedOutput is XmlFormatWriter)

+            {

+                XmlFormatWriter writer = (XmlFormatWriter)codedOutput;

+                if (options.FormattedOutput)

+                {

+                    XmlWriterSettings settings = new XmlWriterSettings()

+                                                     {

+                                                         CheckCharacters = false,

+                                                         NewLineHandling = NewLineHandling.Entitize,

+                                                         OmitXmlDeclaration = true,

+                                                         Encoding = new UTF8Encoding(false),

+                                                         Indent = true,

+                                                         IndentChars = "    ",

+                                                     };

+                    // Don't know how else to change xml writer options?

+                    codedOutput = writer = XmlFormatWriter.CreateInstance(XmlWriter.Create(output, settings));

+                }

+                writer.RootElementName = options.XmlWriterRootElementName;

+                writer.Options = options.XmlWriterOptions;

+            }

+

+            return codedOutput;

+        }

+

+        private static ICodedInputStream ContentTypeToInputStream(string contentType, MessageFormatOptions options, Stream input)

+        {

+            contentType = (contentType ?? String.Empty).Split(';')[0].Trim();

+

+            CodedInputBuilder factory;

+            if(!options.MimeInputTypesReadOnly.TryGetValue(contentType, out factory) || factory == null)

+            {

+                if(String.IsNullOrEmpty(options.DefaultContentType) ||

+                    !options.MimeInputTypesReadOnly.TryGetValue(options.DefaultContentType, out factory) || factory == null)

+                {

+                    throw new ArgumentOutOfRangeException("contentType");

+                }

+            }

+

+            return factory(input);

+        }

+

+        private static ICodedOutputStream ContentTypeToOutputStream(string contentType, MessageFormatOptions options, Stream output)

+        {

+            contentType = (contentType ?? String.Empty).Split(';')[0].Trim();

+

+            CodedOutputBuilder factory;

+            if (!options.MimeOutputTypesReadOnly.TryGetValue(contentType, out factory) || factory == null)

+            {

+                if (String.IsNullOrEmpty(options.DefaultContentType) ||

+                    !options.MimeOutputTypesReadOnly.TryGetValue(options.DefaultContentType, out factory) || factory == null)

+                {

+                    throw new ArgumentOutOfRangeException("contentType");

+                }

+            }

+

+            return factory(output);

+        }

+

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/Http/MessageFormatOptions.cs b/csharp/src/ProtocolBuffers.Serialization/Http/MessageFormatOptions.cs
new file mode 100644
index 0000000..1480e50
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/Http/MessageFormatOptions.cs
@@ -0,0 +1,176 @@
+using System;

+using System.IO;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Collections;

+

+namespace Google.ProtocolBuffers.Serialization.Http

+{

+    /// <summary>

+    /// A delegate used to specify a method that constructs an ICodedInputStream from a .NET Stream.

+    /// </summary>

+    public delegate ICodedInputStream CodedInputBuilder(Stream stream);

+    /// <summary>

+    /// A delegate used to specify a method that constructs an ICodedOutputStream from a .NET Stream.

+    /// </summary>

+    public delegate ICodedOutputStream CodedOutputBuilder(Stream stream);

+

+    /// <summary>

+    /// Defines control information for the various formatting used with HTTP services

+    /// </summary>

+    public class MessageFormatOptions

+    {

+        /// <summary>The mime type for xml content</summary>

+        /// <remarks>Other valid xml mime types include: application/binary, application/x-protobuf</remarks>

+        public const string ContentTypeProtoBuffer = "application/vnd.google.protobuf";

+

+        /// <summary>The mime type for xml content</summary>

+        /// <remarks>Other valid xml mime types include: text/xml</remarks>

+        public const string ContentTypeXml = "application/xml";

+        

+        /// <summary>The mime type for json content</summary>

+        /// <remarks>

+        /// Other valid json mime types include: application/json, application/x-json, 

+        /// application/x-javascript, text/javascript, text/x-javascript, text/x-json, text/json

+        /// </remarks>

+        public const string ContentTypeJson = "application/json";

+

+        /// <summary>The mime type for query strings and x-www-form-urlencoded content</summary>

+        /// <remarks>This mime type is input-only</remarks>

+        public const string ContentFormUrlEncoded = "application/x-www-form-urlencoded";

+

+        /// <summary>

+        /// Default mime-type handling for input

+        /// </summary>

+        private static readonly IDictionary<string, CodedInputBuilder> MimeInputDefaults =

+            new ReadOnlyDictionary<string, CodedInputBuilder>(

+            new Dictionary<string, CodedInputBuilder>(StringComparer.OrdinalIgnoreCase)

+                {

+                    {"application/json", JsonFormatReader.CreateInstance},

+                    {"application/x-json", JsonFormatReader.CreateInstance},

+                    {"application/x-javascript", JsonFormatReader.CreateInstance},

+                    {"text/javascript", JsonFormatReader.CreateInstance},

+                    {"text/x-javascript", JsonFormatReader.CreateInstance},

+                    {"text/x-json", JsonFormatReader.CreateInstance},

+                    {"text/json", JsonFormatReader.CreateInstance},

+                    {"text/xml", XmlFormatReader.CreateInstance},

+                    {"application/xml", XmlFormatReader.CreateInstance},

+                    {"application/binary", CodedInputStream.CreateInstance},

+                    {"application/x-protobuf", CodedInputStream.CreateInstance},

+                    {"application/vnd.google.protobuf", CodedInputStream.CreateInstance},

+                    {"application/x-www-form-urlencoded", FormUrlEncodedReader.CreateInstance},

+                }

+            );

+

+        /// <summary>

+        /// Default mime-type handling for output

+        /// </summary>

+        private static readonly IDictionary<string, CodedOutputBuilder> MimeOutputDefaults =

+            new ReadOnlyDictionary<string, CodedOutputBuilder>(

+            new Dictionary<string, CodedOutputBuilder>(StringComparer.OrdinalIgnoreCase)

+                {

+                    {"application/json", JsonFormatWriter.CreateInstance},

+                    {"application/x-json", JsonFormatWriter.CreateInstance},

+                    {"application/x-javascript", JsonFormatWriter.CreateInstance},

+                    {"text/javascript", JsonFormatWriter.CreateInstance},

+                    {"text/x-javascript", JsonFormatWriter.CreateInstance},

+                    {"text/x-json", JsonFormatWriter.CreateInstance},

+                    {"text/json", JsonFormatWriter.CreateInstance},

+                    {"text/xml", XmlFormatWriter.CreateInstance},

+                    {"application/xml", XmlFormatWriter.CreateInstance},

+                    {"application/binary", CodedOutputStream.CreateInstance},

+                    {"application/x-protobuf", CodedOutputStream.CreateInstance},

+                    {"application/vnd.google.protobuf", CodedOutputStream.CreateInstance},

+                }

+            );

+

+

+

+

+        private string _defaultContentType;

+        private string _xmlReaderRootElementName;

+        private string _xmlWriterRootElementName;

+        private ExtensionRegistry _extensionRegistry;

+        private Dictionary<string, CodedInputBuilder> _mimeInputTypes;

+        private Dictionary<string, CodedOutputBuilder> _mimeOutputTypes;

+

+        /// <summary> Provides access to modify the mime-type input stream construction </summary>

+        public IDictionary<string, CodedInputBuilder> MimeInputTypes

+        {

+            get

+            {

+                return _mimeInputTypes ??

+                    (_mimeInputTypes = new Dictionary<string, CodedInputBuilder>(

+                                           MimeInputDefaults, StringComparer.OrdinalIgnoreCase));

+            }

+        }

+

+        /// <summary> Provides access to modify the mime-type input stream construction </summary>

+        public IDictionary<string, CodedOutputBuilder> MimeOutputTypes

+        {

+            get

+            {

+                return _mimeOutputTypes ??

+                    (_mimeOutputTypes = new Dictionary<string, CodedOutputBuilder>(

+                                           MimeOutputDefaults, StringComparer.OrdinalIgnoreCase));

+            }

+        }

+

+        internal IDictionary<string, CodedInputBuilder> MimeInputTypesReadOnly

+        { get { return _mimeInputTypes ?? MimeInputDefaults; } }

+

+        internal IDictionary<string, CodedOutputBuilder> MimeOutputTypesReadOnly

+        { get { return _mimeOutputTypes ?? MimeOutputDefaults; } }

+

+        /// <summary>

+        /// The default content type to use if the input type is null or empty.  If this

+        /// value is not supplied an ArgumentOutOfRangeException exception will be raised.

+        /// </summary>

+        public string DefaultContentType

+        {

+            get { return _defaultContentType ?? String.Empty; }

+            set { _defaultContentType = value; }

+        }

+

+        /// <summary>

+        /// The extension registry to use when reading messages

+        /// </summary>

+        public ExtensionRegistry ExtensionRegistry

+        {

+            get { return _extensionRegistry ?? ExtensionRegistry.Empty; }

+            set { _extensionRegistry = value; }

+        }

+

+        /// <summary>

+        /// The name of the xml root element when reading messages

+        /// </summary>

+        public string XmlReaderRootElementName

+        {

+            get { return _xmlReaderRootElementName ?? XmlFormatReader.DefaultRootElementName; }

+            set { _xmlReaderRootElementName = value; }

+        }

+

+        /// <summary>

+        /// Xml reader options

+        /// </summary>

+        public XmlReaderOptions XmlReaderOptions { get; set; }

+

+        /// <summary>

+        /// True to use formatted output including new-lines and default indentation

+        /// </summary>

+        public bool FormattedOutput { get; set; }

+

+        /// <summary>

+        /// The name of the xml root element when writing messages

+        /// </summary>

+        public string XmlWriterRootElementName

+        {

+            get { return _xmlWriterRootElementName ?? XmlFormatWriter.DefaultRootElementName; }

+            set { _xmlWriterRootElementName = value; }

+        }

+

+        /// <summary>

+        /// Xml writer options

+        /// </summary>

+        public XmlWriterOptions XmlWriterOptions { get; set; }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/JsonFormatReader.cs b/csharp/src/ProtocolBuffers.Serialization/JsonFormatReader.cs
new file mode 100644
index 0000000..423196d
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/JsonFormatReader.cs
@@ -0,0 +1,262 @@
+using System;

+using System.Collections.Generic;

+using System.IO;

+using System.Xml;

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// JsonFormatReader is used to parse Json into a message or an array of messages

+    /// </summary>

+    public class JsonFormatReader : AbstractTextReader

+    {

+        private readonly JsonCursor _input;

+        // The expected token that ends the current item, either ']' or '}'

+        private readonly Stack<int> _stopChar;

+

+        private enum ReaderState

+        {

+            Start,

+            BeginValue,

+            EndValue,

+            BeginObject,

+            BeginArray

+        }

+

+        private string _current;

+        private ReaderState _state;

+

+        /// <summary>

+        /// Constructs a JsonFormatReader to parse Json into a message, this method does not use text encoding, all bytes MUST

+        /// represent ASCII character values.

+        /// </summary>

+        public static JsonFormatReader CreateInstance(Stream stream)

+        {

+            return new JsonFormatReader(JsonCursor.CreateInstance(stream));

+        }

+

+        /// <summary>

+        /// Constructs a JsonFormatReader to parse Json into a message, this method does not use text encoding, all bytes MUST

+        /// represent ASCII character values.

+        /// </summary>

+        public static JsonFormatReader CreateInstance(byte[] bytes)

+        {

+            return new JsonFormatReader(JsonCursor.CreateInstance(bytes));

+        }

+

+        /// <summary>

+        /// Constructs a JsonFormatReader to parse Json into a message

+        /// </summary>

+        public static JsonFormatReader CreateInstance(string jsonText)

+        {

+            return new JsonFormatReader(JsonCursor.CreateInstance(jsonText));

+        }

+

+        /// <summary>

+        /// Constructs a JsonFormatReader to parse Json into a message

+        /// </summary>

+        public static JsonFormatReader CreateInstance(TextReader input)

+        {

+            return new JsonFormatReader(JsonCursor.CreateInstance(input));

+        }

+

+        /// <summary>

+        /// Constructs a JsonFormatReader to parse Json into a message

+        /// </summary>

+        internal JsonFormatReader(JsonCursor input)

+        {

+            _input = input;

+            _stopChar = new Stack<int>();

+            _stopChar.Push(-1);

+            _state = ReaderState.Start;

+        }

+

+        /// <summary>

+        /// Constructs a JsonFormatReader to parse Json into a message

+        /// </summary>

+        protected JsonFormatReader(TextReader input)

+            : this(JsonCursor.CreateInstance(input))

+        {

+        }

+

+        /// <summary>

+        /// Returns true if the reader is currently on an array element

+        /// </summary>

+        public bool IsArrayMessage

+        {

+            get { return _input.NextChar == '['; }

+        }

+

+        /// <summary>

+        /// Returns an enumerator that is used to cursor over an array of messages

+        /// </summary>

+        /// <remarks>

+        /// This is generally used when receiving an array of messages rather than a single root message

+        /// </remarks>

+        public IEnumerable<JsonFormatReader> EnumerateArray()

+        {

+            foreach (string ignored in ForeachArrayItem(_current))

+            {

+                yield return this;

+            }

+        }

+

+        /// <summary>

+        /// Reads the root-message preamble specific to this formatter

+        /// </summary>

+        public override void ReadMessageStart()

+        {

+            _input.Consume('{');

+            _stopChar.Push('}');

+

+            _state = ReaderState.BeginObject;

+        }

+

+        /// <summary>

+        /// Reads the root-message close specific to this formatter

+        /// </summary>

+        public override void ReadMessageEnd()

+        {

+            _input.Consume((char)_stopChar.Pop());

+            _state = ReaderState.EndValue;

+        }

+

+        /// <summary>

+        /// Merges the contents of stream into the provided message builder

+        /// </summary>

+        public override TBuilder Merge<TBuilder>(TBuilder builder, ExtensionRegistry registry)

+        {

+            ReadMessageStart();

+            builder.WeakMergeFrom(this, registry);

+            ReadMessageEnd();

+            return builder;

+        }

+

+        /// <summary>

+        /// Causes the reader to skip past this field

+        /// </summary>

+        protected override void Skip()

+        {

+            object temp;

+            _input.ReadVariant(out temp);

+            _state = ReaderState.EndValue;

+        }

+

+        /// <summary>

+        /// Peeks at the next field in the input stream and returns what information is available.

+        /// </summary>

+        /// <remarks>

+        /// This may be called multiple times without actually reading the field.  Only after the field

+        /// is either read, or skipped, should PeekNext return a different value.

+        /// </remarks>

+        protected override bool PeekNext(out string field)

+        {

+            field = _current;

+            if (_state == ReaderState.BeginValue)

+            {

+                return true;

+            }

+

+            int next = _input.NextChar;

+            if (next == _stopChar.Peek())

+            {

+                return false;

+            }

+

+            _input.Assert(next != -1, "Unexpected end of file.");

+

+            //not sure about this yet, it will allow {, "a":true }

+            if (_state == ReaderState.EndValue && !_input.TryConsume(','))

+            {

+                return false;

+            }

+

+            field = _current = _input.ReadString();

+            _input.Consume(':');

+            _state = ReaderState.BeginValue;

+            return true;

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a String from the input

+        /// </summary>

+        protected override bool ReadAsText(ref string value, Type typeInfo)

+        {

+            object temp;

+            JsonCursor.JsType type = _input.ReadVariant(out temp);

+            _state = ReaderState.EndValue;

+

+            _input.Assert(type != JsonCursor.JsType.Array && type != JsonCursor.JsType.Object,

+                          "Encountered {0} while expecting {1}", type, typeInfo);

+            if (type == JsonCursor.JsType.Null)

+            {

+                return false;

+            }

+            if (type == JsonCursor.JsType.True)

+            {

+                value = "1";

+            }

+            else if (type == JsonCursor.JsType.False)

+            {

+                value = "0";

+            }

+            else

+            {

+                value = temp as string;

+            }

+

+            //exponent representation of integer number:

+            if (value != null && type == JsonCursor.JsType.Number &&

+                (typeInfo != typeof(double) && typeInfo != typeof(float)) &&

+                value.IndexOf("e", StringComparison.OrdinalIgnoreCase) > 0)

+            {

+                value = XmlConvert.ToString((long) Math.Round(XmlConvert.ToDouble(value), 0));

+            }

+            return value != null;

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a ByteString from the input

+        /// </summary>

+        protected override bool Read(ref ByteString value)

+        {

+            string bytes = null;

+            if (Read(ref bytes))

+            {

+                value = ByteString.FromBase64(bytes);

+                return true;

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// Cursors through the array elements and stops at the end of the array

+        /// </summary>

+        protected override IEnumerable<string> ForeachArrayItem(string field)

+        {

+            _input.Consume('[');

+            _stopChar.Push(']');

+            _state = ReaderState.BeginArray;

+            while (_input.NextChar != ']')

+            {

+                _current = field;

+                yield return field;

+                if (!_input.TryConsume(','))

+                {

+                    break;

+                }

+            }

+            _input.Consume((char) _stopChar.Pop());

+            _state = ReaderState.EndValue;

+        }

+

+        /// <summary>

+        /// Merges the input stream into the provided IBuilderLite 

+        /// </summary>

+        protected override bool ReadMessage(IBuilderLite builder, ExtensionRegistry registry)

+        {

+            Merge(builder, registry);

+            return true;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/JsonFormatWriter.cs b/csharp/src/ProtocolBuffers.Serialization/JsonFormatWriter.cs
new file mode 100644
index 0000000..15e0424
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/JsonFormatWriter.cs
@@ -0,0 +1,541 @@
+using System;

+using System.Collections;

+using System.Collections.Generic;

+using System.IO;

+using System.Text;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// JsonFormatWriter is a .NET 2.0 friendly json formatter for proto buffer messages.  For .NET 3.5

+    /// you may also use the XmlFormatWriter with an XmlWriter created by the

+    /// <see cref="System.Runtime.Serialization.Json.JsonReaderWriterFactory">JsonReaderWriterFactory</see>.

+    /// </summary>

+    public abstract class JsonFormatWriter : AbstractTextWriter

+    {

+        #region buffering implementations

+

+        private class JsonTextWriter : JsonFormatWriter

+        {

+            private readonly char[] _buffer;

+            private TextWriter _output;

+            private int _bufferPos;

+

+            public JsonTextWriter(TextWriter output)

+            {

+                _buffer = new char[4096];

+                _bufferPos = 0;

+                _output = output;

+                _counter.Add(0);

+            }

+

+            /// <summary>

+            /// Returns the output of TextWriter.ToString() where TextWriter is the ctor argument.

+            /// </summary>

+            public override string ToString()

+            {

+                Flush();

+

+                if (_output != null)

+                {

+                    return _output.ToString();

+                }

+

+                return new String(_buffer, 0, _bufferPos);

+            }

+

+            protected override void WriteToOutput(char[] chars, int offset, int len)

+            {

+                if (_bufferPos + len >= _buffer.Length)

+                {

+                    if (_output == null)

+                    {

+                        _output = new StringWriter(new StringBuilder(_buffer.Length*2 + len));

+                    }

+                    Flush();

+                }

+

+                if (len < _buffer.Length)

+                {

+                    if (len <= 12)

+                    {

+                        int stop = offset + len;

+                        for (int i = offset; i < stop; i++)

+                        {

+                            _buffer[_bufferPos++] = chars[i];

+                        }

+                    }

+                    else

+                    {

+                        Buffer.BlockCopy(chars, offset << 1, _buffer, _bufferPos << 1, len << 1);

+                        _bufferPos += len;

+                    }

+                }

+                else

+                {

+                    _output.Write(chars, offset, len);

+                }

+            }

+

+            protected override void WriteToOutput(char ch)

+            {

+                if (_bufferPos >= _buffer.Length)

+                {

+                    if (_output == null)

+                    {

+                        _output = new StringWriter(new StringBuilder(_buffer.Length * 2));

+                    }

+                    Flush();

+                }

+                _buffer[_bufferPos++] = ch;

+            }

+

+            public override void Flush()

+            {

+                if (_bufferPos > 0 && _output != null)

+                {

+                    _output.Write(_buffer, 0, _bufferPos);

+                    _bufferPos = 0;

+                }

+                base.Flush();

+            }

+        }

+

+        private class JsonStreamWriter : JsonFormatWriter

+        {

+            static readonly Encoding Encoding = new UTF8Encoding(false);

+            private readonly byte[] _buffer;

+            private Stream _output;

+            private int _bufferPos;

+

+            public JsonStreamWriter(Stream output)

+            {

+                _buffer = new byte[8192];

+                _bufferPos = 0;

+                _output = output;

+                _counter.Add(0);

+            }

+

+            protected override void WriteToOutput(char[] chars, int offset, int len)

+            {

+                if (_bufferPos + len >= _buffer.Length)

+                {

+                    Flush();

+                }

+

+                if (len < _buffer.Length)

+                {

+                    if (len <= 12)

+                    {

+                        int stop = offset + len;

+                        for (int i = offset; i < stop; i++)

+                        {

+                            _buffer[_bufferPos++] = (byte) chars[i];

+                        }

+                    }

+                    else

+                    {

+                        _bufferPos += Encoding.GetBytes(chars, offset, len, _buffer, _bufferPos);

+                    }

+                }

+                else

+                {

+                    byte[] temp = Encoding.GetBytes(chars, offset, len);

+                    _output.Write(temp, 0, temp.Length);

+                }

+            }

+

+            protected override void WriteToOutput(char ch)

+            {

+                if (_bufferPos >= _buffer.Length)

+                {

+                    Flush();

+                }

+                _buffer[_bufferPos++] = (byte) ch;

+            }

+

+            public override void Flush()

+            {

+                if (_bufferPos > 0 && _output != null)

+                {

+                    _output.Write(_buffer, 0, _bufferPos);

+                    _bufferPos = 0;

+                }

+                base.Flush();

+            }

+        }

+

+        #endregion

+

+        //Tracks the writer depth and the array element count at that depth.

+        private readonly List<int> _counter;

+        //True if the top-level of the writer is an array as opposed to a single message.

+        private bool _isArray;

+

+        /// <summary>

+        /// Constructs a JsonFormatWriter, use the ToString() member to extract the final Json on completion.

+        /// </summary>

+        protected JsonFormatWriter()

+        {

+            _counter = new List<int>();

+        }

+

+        /// <summary>

+        /// Constructs a JsonFormatWriter, use ToString() to extract the final output

+        /// </summary>

+        public static JsonFormatWriter CreateInstance()

+        {

+            return new JsonTextWriter(null);

+        }

+

+        /// <summary>

+        /// Constructs a JsonFormatWriter to output to the given text writer

+        /// </summary>

+        public static JsonFormatWriter CreateInstance(TextWriter output)

+        {

+            return new JsonTextWriter(output);

+        }

+

+        /// <summary>

+        /// Constructs a JsonFormatWriter to output to the given stream

+        /// </summary>

+        public static JsonFormatWriter CreateInstance(Stream output)

+        {

+            return new JsonStreamWriter(output);

+        }

+

+        /// <summary> Write to the output stream </summary>

+        protected void WriteToOutput(string format, params object[] args)

+        {

+            WriteToOutput(String.Format(format, args));

+        }

+

+        /// <summary> Write to the output stream </summary>

+        protected void WriteToOutput(string text)

+        {

+            WriteToOutput(text.ToCharArray(), 0, text.Length);

+        }

+

+        /// <summary> Write to the output stream </summary>

+        protected abstract void WriteToOutput(char ch);

+

+        /// <summary> Write to the output stream </summary>

+        protected abstract void WriteToOutput(char[] chars, int offset, int len);

+

+        /// <summary> Sets the output formatting to use Environment.NewLine with 4-character indentions </summary>

+        public JsonFormatWriter Formatted()

+        {

+            NewLine = FrameworkPortability.NewLine;

+            Indent = "    ";

+            Whitespace = " ";

+            return this;

+        }

+

+        /// <summary> Gets or sets the characters to use for the new-line, default = empty </summary>

+        public string NewLine { get; set; }

+

+        /// <summary> Gets or sets the text to use for indenting, default = empty </summary>

+        public string Indent { get; set; }

+

+        /// <summary> Gets or sets the whitespace to use to separate the text, default = empty </summary>

+        public string Whitespace { get; set; }

+

+        private void Seperator()

+        {

+            if (_counter.Count == 0)

+            {

+                throw new InvalidOperationException("Mismatched open/close in Json writer.");

+            }

+

+            int index = _counter.Count - 1;

+            if (_counter[index] > 0)

+            {

+                WriteToOutput(',');

+            }

+

+            WriteLine(String.Empty);

+            _counter[index] = _counter[index] + 1;

+        }

+

+        private void WriteLine(string content)

+        {

+            if (!String.IsNullOrEmpty(NewLine))

+            {

+                WriteToOutput(NewLine);

+                for (int i = 1; i < _counter.Count; i++)

+                {

+                    WriteToOutput(Indent);

+                }

+            }

+            else if (!String.IsNullOrEmpty(Whitespace))

+            {

+                WriteToOutput(Whitespace);

+            }

+

+            WriteToOutput(content);

+        }

+

+        private void WriteName(string field)

+        {

+            Seperator();

+            if (!String.IsNullOrEmpty(field))

+            {

+                WriteToOutput('"');

+                WriteToOutput(field);

+                WriteToOutput('"');

+                WriteToOutput(':');

+                if (!String.IsNullOrEmpty(Whitespace))

+                {

+                    WriteToOutput(Whitespace);

+                }

+            }

+        }

+

+        private void EncodeText(string value)

+        {

+            char[] text = value.ToCharArray();

+            int len = text.Length;

+            int pos = 0;

+

+            while (pos < len)

+            {

+                int next = pos;

+                while (next < len && text[next] >= 32 && text[next] < 127 && text[next] != '\\' && text[next] != '/' &&

+                       text[next] != '"')

+                {

+                    next++;

+                }

+                WriteToOutput(text, pos, next - pos);

+                if (next < len)

+                {

+                    switch (text[next])

+                    {

+                        case '"':

+                            WriteToOutput(@"\""");

+                            break;

+                        case '\\':

+                            WriteToOutput(@"\\");

+                            break;

+                            //odd at best to escape '/', most Json implementations don't, but it is defined in the rfc-4627

+                        case '/':

+                            WriteToOutput(@"\/");

+                            break;

+                        case '\b':

+                            WriteToOutput(@"\b");

+                            break;

+                        case '\f':

+                            WriteToOutput(@"\f");

+                            break;

+                        case '\n':

+                            WriteToOutput(@"\n");

+                            break;

+                        case '\r':

+                            WriteToOutput(@"\r");

+                            break;

+                        case '\t':

+                            WriteToOutput(@"\t");

+                            break;

+                        default:

+                            WriteToOutput(@"\u{0:x4}", (int) text[next]);

+                            break;

+                    }

+                    next++;

+                }

+                pos = next;

+            }

+        }

+

+        /// <summary>

+        /// Writes a String value

+        /// </summary>

+        protected override void WriteAsText(string field, string textValue, object typedValue)

+        {

+            WriteName(field);

+            if (typedValue is bool || typedValue is int || typedValue is uint || typedValue is long ||

+                typedValue is ulong || typedValue is double || typedValue is float)

+            {

+                WriteToOutput(textValue);

+            }

+            else

+            {

+                WriteToOutput('"');

+                if (typedValue is string)

+                {

+                    EncodeText(textValue);

+                }

+                else

+                {

+                    WriteToOutput(textValue);

+                }

+                WriteToOutput('"');

+            }

+        }

+

+        /// <summary>

+        /// Writes a Double value

+        /// </summary>

+        protected override void Write(string field, double value)

+        {

+            if (double.IsNaN(value) || double.IsNegativeInfinity(value) || double.IsPositiveInfinity(value))

+            {

+                throw new InvalidOperationException("This format does not support NaN, Infinity, or -Infinity");

+            }

+            base.Write(field, value);

+        }

+

+        /// <summary>

+        /// Writes a Single value

+        /// </summary>

+        protected override void Write(string field, float value)

+        {

+            if (float.IsNaN(value) || float.IsNegativeInfinity(value) || float.IsPositiveInfinity(value))

+            {

+                throw new InvalidOperationException("This format does not support NaN, Infinity, or -Infinity");

+            }

+            base.Write(field, value);

+        }

+

+        // Treat enum as string

+        protected override void WriteEnum(string field, int number, string name)

+        {

+            Write(field, name);

+        }

+

+        /// <summary>

+        /// Writes an array of field values

+        /// </summary>

+        protected override void WriteArray(FieldType type, string field, IEnumerable items)

+        {

+            IEnumerator enumerator = items.GetEnumerator();

+            try

+            {

+                if (!enumerator.MoveNext())

+                {

+                    return;

+                }

+            }

+            finally

+            {

+                if (enumerator is IDisposable)

+                {

+                    ((IDisposable) enumerator).Dispose();

+                }

+            }

+

+            WriteName(field);

+            WriteToOutput("[");

+            _counter.Add(0);

+

+            base.WriteArray(type, String.Empty, items);

+

+            _counter.RemoveAt(_counter.Count - 1);

+            WriteLine("]");

+        }

+

+        /// <summary>

+        /// Writes a message

+        /// </summary>

+        protected override void WriteMessageOrGroup(string field, IMessageLite message)

+        {

+            WriteName(field);

+            WriteMessage(message);

+        }

+

+        /// <summary>

+        /// Writes the message to the the formatted stream.

+        /// </summary>

+        public override void WriteMessage(IMessageLite message)

+        {

+            WriteMessageStart();

+            message.WriteTo(this);

+            WriteMessageEnd();

+        }

+

+        /// <summary>

+        /// Used to write the root-message preamble, in json this is the left-curly brace '{'.

+        /// After this call you can call IMessageLite.MergeTo(...) and complete the message with

+        /// a call to WriteMessageEnd().

+        /// </summary>

+        public override void WriteMessageStart()

+        {

+            if (_isArray)

+            {

+                Seperator();

+            }

+            WriteToOutput("{");

+            _counter.Add(0);

+        }

+

+        /// <summary>

+        /// Used to complete a root-message previously started with a call to WriteMessageStart()

+        /// </summary>

+        public override void WriteMessageEnd()

+        {

+            _counter.RemoveAt(_counter.Count - 1);

+            WriteLine("}");

+            Flush();

+        }

+

+        /// <summary>

+        /// Used in streaming arrays of objects to the writer

+        /// </summary>

+        /// <example>

+        /// <code>

+        /// using(writer.StartArray())

+        ///     foreach(IMessageLite m in messages)

+        ///         writer.WriteMessage(m);

+        /// </code>

+        /// </example>

+        public sealed class JsonArray : IDisposable

+        {

+            private JsonFormatWriter _writer;

+

+            internal JsonArray(JsonFormatWriter writer)

+            {

+                _writer = writer;

+                _writer.WriteToOutput("[");

+                _writer._counter.Add(0);

+            }

+

+            /// <summary>

+            /// Causes the end of the array character to be written.

+            /// </summary>

+            private void EndArray()

+            {

+                if (_writer != null)

+                {

+                    _writer._counter.RemoveAt(_writer._counter.Count - 1);

+                    _writer.WriteLine("]");

+                    _writer.Flush();

+                }

+                _writer = null;

+            }

+

+            void IDisposable.Dispose()

+            {

+                EndArray();

+            }

+        }

+

+        /// <summary>

+        /// Used to write an array of messages as the output rather than a single message.

+        /// </summary>

+        /// <example>

+        /// <code>

+        /// using(writer.StartArray())

+        ///     foreach(IMessageLite m in messages)

+        ///         writer.WriteMessage(m);

+        /// </code>

+        /// </example>

+        public JsonArray StartArray()

+        {

+            if (_isArray)

+            {

+                Seperator();

+            }

+            _isArray = true;

+            return new JsonArray(this);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/JsonTextCursor.cs b/csharp/src/ProtocolBuffers.Serialization/JsonTextCursor.cs
new file mode 100644
index 0000000..19c45af
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/JsonTextCursor.cs
@@ -0,0 +1,442 @@
+using System;

+using System.Collections.Generic;

+using System.Diagnostics;

+using System.Globalization;

+using System.IO;

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// JSon Tokenizer used by JsonFormatReader

+    /// </summary>

+    internal abstract class JsonCursor

+    {

+        public enum JsType

+        {

+            String,

+            Number,

+            Object,

+            Array,

+            True,

+            False,

+            Null

+        }

+

+        #region Buffering implementations

+

+        private class JsonStreamCursor : JsonCursor

+        {

+            private readonly byte[] _buffer;

+            private int _bufferPos;

+            private readonly Stream _input;

+

+            public JsonStreamCursor(Stream input)

+            {

+                _input = input;

+                _next = _input.ReadByte();

+            }

+

+            public JsonStreamCursor(byte[] input)

+            {

+                _input = null;

+                _buffer = input;

+                _next = _buffer[_bufferPos];

+            }

+

+            protected override int Peek()

+            {

+                if (_input != null)

+                {

+                    return _next;

+                }

+                else if (_bufferPos < _buffer.Length)

+                {

+                    return _buffer[_bufferPos];

+                }

+                else

+                {

+                    return -1;

+                }

+            }

+

+            protected override int Read()

+            {

+                if (_input != null)

+                {

+                    int result = _next;

+                    _next = _input.ReadByte();

+                    return result;

+                }

+                else if (_bufferPos < _buffer.Length)

+                {

+                    return _buffer[_bufferPos++];

+                }

+                else

+                {

+                    return -1;

+                }

+            }

+        }

+

+        private class JsonTextCursor : JsonCursor

+        {

+            private readonly char[] _buffer;

+            private int _bufferPos;

+            private readonly TextReader _input;

+

+            public JsonTextCursor(char[] input)

+            {

+                _input = null;

+                _buffer = input;

+                _bufferPos = 0;

+                _next = Peek();

+            }

+

+            public JsonTextCursor(TextReader input)

+            {

+                _input = input;

+                _next = Peek();

+            }

+

+            protected override int Peek()

+            {

+                if (_input != null)

+                {

+                    return _input.Peek();

+                }

+                else if (_bufferPos < _buffer.Length)

+                {

+                    return _buffer[_bufferPos];

+                }

+                else

+                {

+                    return -1;

+                }

+            }

+

+            protected override int Read()

+            {

+                if (_input != null)

+                {

+                    return _input.Read();

+                }

+                else if (_bufferPos < _buffer.Length)

+                {

+                    return _buffer[_bufferPos++];

+                }

+                else

+                {

+                    return -1;

+                }

+            }

+        }

+

+        #endregion

+

+        protected int _next;

+        private int _lineNo, _linePos;

+

+        public static JsonCursor CreateInstance(byte[] input)

+        {

+            return new JsonStreamCursor(input);

+        }

+

+        public static JsonCursor CreateInstance(Stream input)

+        {

+            return new JsonStreamCursor(input);

+        }

+

+        public static JsonCursor CreateInstance(string input)

+        {

+            return new JsonTextCursor(input.ToCharArray());

+        }

+

+        public static JsonCursor CreateInstance(TextReader input)

+        {

+            return new JsonTextCursor(input);

+        }

+

+        protected JsonCursor()

+        {

+            _lineNo = 1;

+            _linePos = 0;

+        }

+

+        /// <summary>Returns the next character without actually 'reading' it</summary>

+        protected abstract int Peek();

+

+        /// <summary>Reads the next character in the input</summary>

+        protected abstract int Read();

+

+        public Char NextChar

+        {

+            get

+            {

+                SkipWhitespace();

+                return (char) _next;

+            }

+        }

+

+        #region Assert(...)

+

+        [DebuggerNonUserCode]

+        private string CharDisplay(int ch)

+        {

+            return ch == -1

+                       ? "EOF"

+                       : (ch > 32 && ch < 127)

+                             ? String.Format("'{0}'", (char) ch)

+                             : String.Format("'\\u{0:x4}'", ch);

+        }

+

+        [DebuggerNonUserCode]

+        private void Assert(bool cond, char expected)

+        {

+            if (!cond)

+            {

+                throw new FormatException(

+                    String.Format(FrameworkPortability.InvariantCulture,

+                                  "({0}:{1}) error: Unexpected token {2}, expected: {3}.",

+                                  _lineNo, _linePos,

+                                  CharDisplay(_next),

+                                  CharDisplay(expected)

+                        ));

+            }

+        }

+

+        [DebuggerNonUserCode]

+        public void Assert(bool cond, string message)

+        {

+            if (!cond)

+            {

+                throw new FormatException(

+                    String.Format(FrameworkPortability.InvariantCulture,

+                                  "({0},{1}) error: {2}", _lineNo, _linePos, message));

+            }

+        }

+

+        [DebuggerNonUserCode]

+        public void Assert(bool cond, string format, params object[] args)

+        {

+            if (!cond)

+            {

+                if (args != null && args.Length > 0)

+                {

+                    format = String.Format(format, args);

+                }

+                throw new FormatException(

+                    String.Format(FrameworkPortability.InvariantCulture,

+                                  "({0},{1}) error: {2}", _lineNo, _linePos, format));

+            }

+        }

+

+        #endregion

+

+        private char ReadChar()

+        {

+            int ch = Read();

+            Assert(ch != -1, "Unexpected end of file.");

+            if (ch == '\n')

+            {

+                _lineNo++;

+                _linePos = 0;

+            }

+            else if (ch != '\r')

+            {

+                _linePos++;

+            }

+            _next = Peek();

+            return (char) ch;

+        }

+

+        public void Consume(char ch)

+        {

+            Assert(TryConsume(ch), ch);

+        }

+

+        public bool TryConsume(char ch)

+        {

+            SkipWhitespace();

+            if (_next == ch)

+            {

+                ReadChar();

+                return true;

+            }

+            return false;

+        }

+

+        public void Consume(string sequence)

+        {

+            SkipWhitespace();

+

+            foreach (char ch in sequence)

+            {

+                Assert(ch == ReadChar(), "Expected token '{0}'.", sequence);

+            }

+        }

+

+        public void SkipWhitespace()

+        {

+            int chnext = _next;

+            while (chnext != -1)

+            {

+                if (!Char.IsWhiteSpace((char) chnext))

+                {

+                    break;

+                }

+                ReadChar();

+                chnext = _next;

+            }

+        }

+

+        public string ReadString()

+        {

+            SkipWhitespace();

+            Consume('"');

+            List<Char> sb = new List<char>(100);

+            while (_next != '"')

+            {

+                if (_next == '\\')

+                {

+                    Consume('\\'); //skip the escape

+                    char ch = ReadChar();

+                    switch (ch)

+                    {

+                        case 'b':

+                            sb.Add('\b');

+                            break;

+                        case 'f':

+                            sb.Add('\f');

+                            break;

+                        case 'n':

+                            sb.Add('\n');

+                            break;

+                        case 'r':

+                            sb.Add('\r');

+                            break;

+                        case 't':

+                            sb.Add('\t');

+                            break;

+                        case 'u':

+                            {

+                                string hex = new string(new char[] {ReadChar(), ReadChar(), ReadChar(), ReadChar()});

+                                int result;

+                                Assert(

+                                    FrameworkPortability.TryParseInt32(hex, NumberStyles.AllowHexSpecifier, FrameworkPortability.InvariantCulture,

+                                                 out result),

+                                    "Expected a 4-character hex specifier.");

+                                sb.Add((char) result);

+                                break;

+                            }

+                        default:

+                            sb.Add(ch);

+                            break;

+                    }

+                }

+                else

+                {

+                    Assert(_next != '\n' && _next != '\r' && _next != '\f' && _next != -1, '"');

+                    sb.Add(ReadChar());

+                }

+            }

+            Consume('"');

+            return new String(sb.ToArray());

+        }

+

+        public string ReadNumber()

+        {

+            SkipWhitespace();

+            List<Char> sb = new List<char>(24);

+            if (_next == '-')

+            {

+                sb.Add(ReadChar());

+            }

+            Assert(_next >= '0' && _next <= '9', "Expected a numeric type.");

+            while ((_next >= '0' && _next <= '9') || _next == '.')

+            {

+                sb.Add(ReadChar());

+            }

+            if (_next == 'e' || _next == 'E')

+            {

+                sb.Add(ReadChar());

+                if (_next == '-' || _next == '+')

+                {

+                    sb.Add(ReadChar());

+                }

+                Assert(_next >= '0' && _next <= '9', "Expected a numeric type.");

+                while (_next >= '0' && _next <= '9')

+                {

+                    sb.Add(ReadChar());

+                }

+            }

+            return new String(sb.ToArray());

+        }

+

+        public JsType ReadVariant(out object value)

+        {

+            SkipWhitespace();

+            switch (_next)

+            {

+                case 'n':

+                    Consume("null");

+                    value = null;

+                    return JsType.Null;

+                case 't':

+                    Consume("true");

+                    value = true;

+                    return JsType.True;

+                case 'f':

+                    Consume("false");

+                    value = false;

+                    return JsType.False;

+                case '"':

+                    value = ReadString();

+                    return JsType.String;

+                case '{':

+                    {

+                        Consume('{');

+                        while (NextChar != '}')

+                        {

+                            ReadString();

+                            Consume(':');

+                            object tmp;

+                            ReadVariant(out tmp);

+                            if (!TryConsume(','))

+                            {

+                                break;

+                            }

+                        }

+                        Consume('}');

+                        value = null;

+                        return JsType.Object;

+                    }

+                case '[':

+                    {

+                        Consume('[');

+                        List<object> values = new List<object>();

+                        while (NextChar != ']')

+                        {

+                            object tmp;

+                            ReadVariant(out tmp);

+                            values.Add(tmp);

+                            if (!TryConsume(','))

+                            {

+                                break;

+                            }

+                        }

+                        Consume(']');

+                        value = values.ToArray();

+                        return JsType.Array;

+                    }

+                default:

+                    if ((_next >= '0' && _next <= '9') || _next == '-')

+                    {

+                        value = ReadNumber();

+                        return JsType.Number;

+                    }

+                    Assert(false, "Expected a value.");

+                    throw new FormatException();

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/Properties/AssemblyInfo.cs b/csharp/src/ProtocolBuffers.Serialization/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..c6420b5
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/Properties/AssemblyInfo.cs
@@ -0,0 +1,67 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Reflection;

+using System.Runtime.InteropServices;

+using System.Runtime.CompilerServices;

+

+// General Information about an assembly is controlled through the following 

+// set of attributes. Change these attribute values to modify the information

+// associated with an assembly.

+

+[assembly: AssemblyTitle("ProtocolBuffers")]

+[assembly: AssemblyDescription("")]

+[assembly: AssemblyConfiguration("")]

+[assembly: AssemblyCompany("")]

+[assembly: AssemblyProduct("ProtocolBuffers")]

+[assembly: AssemblyCopyright("Copyright ©  2008")]

+[assembly: AssemblyTrademark("")]

+[assembly: AssemblyCulture("")]

+

+// Version information for an assembly consists of the following four values:

+//

+//      Major Version

+//      Minor Version 

+//      Build Number

+//      Revision

+//

+// You can specify all the values or you can default the Build and Revision Numbers 

+// by using the '*' as shown below:

+// [assembly: AssemblyVersion("2.4.1.555")]

+

+[assembly: AssemblyVersion("2.4.1.555")]

+

+#if !NOFILEVERSION

+[assembly: AssemblyFileVersion("2.4.1.555")]

+#endif

+

+[assembly: CLSCompliant(true)]
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.CF20.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.CF20.csproj
new file mode 100644
index 0000000..0639ec6
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.CF20.csproj
@@ -0,0 +1,104 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF20</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF20\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.CF20.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.CF35.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.CF35.csproj
new file mode 100644
index 0000000..22f381f
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.CF35.csproj
@@ -0,0 +1,104 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF35\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.CF35.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.NET20.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.NET20.csproj
new file mode 100644
index 0000000..dfeab79
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.NET20.csproj
@@ -0,0 +1,92 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET20</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET20\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.NET20.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.NET35.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.NET35.csproj
new file mode 100644
index 0000000..4bed60d
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.NET35.csproj
@@ -0,0 +1,92 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.NET35.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.NET40.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.NET40.csproj
new file mode 100644
index 0000000..80b76a0
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.NET40.csproj
@@ -0,0 +1,92 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET40</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET40\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.NET40.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.PL40.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.PL40.csproj
new file mode 100644
index 0000000..60f8774
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.PL40.csproj
@@ -0,0 +1,95 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>PORTABLE_LIBRARY</EnvironmentFlavor>

+    <EnvironmentTemplate>PL40</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>

+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <TargetFrameworkProfile>Profile1</TargetFrameworkProfile>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\PL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\PL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.PL40.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.SL20.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.SL20.csproj
new file mode 100644
index 0000000..f8c4c09
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.SL20.csproj
@@ -0,0 +1,107 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL20</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL20\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.SL20.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.SL30.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.SL30.csproj
new file mode 100644
index 0000000..376c493
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.SL30.csproj
@@ -0,0 +1,107 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL30</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL30\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL30\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.SL30.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.SL40.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.SL40.csproj
new file mode 100644
index 0000000..dc675c4
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.SL40.csproj
@@ -0,0 +1,108 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL40</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <SilverlightVersion>v4.0</SilverlightVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.SL40.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.csproj
new file mode 100644
index 0000000..b9f728b
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffers.Serialization.csproj
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{231391AF-449C-4A39-986C-AD7F270F4750}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.CF20.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.CF20.csproj
new file mode 100644
index 0000000..b382dc3
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.CF20.csproj
@@ -0,0 +1,104 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF20</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF20\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.CF20.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.CF35.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.CF35.csproj
new file mode 100644
index 0000000..558931d
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.CF35.csproj
@@ -0,0 +1,104 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF35\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.CF35.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.NET20.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.NET20.csproj
new file mode 100644
index 0000000..1e145ab
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.NET20.csproj
@@ -0,0 +1,92 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET20</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET20\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.NET20.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.NET35.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.NET35.csproj
new file mode 100644
index 0000000..9fd744c
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.NET35.csproj
@@ -0,0 +1,92 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.NET35.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.NET40.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.NET40.csproj
new file mode 100644
index 0000000..1254fdf
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.NET40.csproj
@@ -0,0 +1,92 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET40</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET40\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.NET40.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.PL40.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.PL40.csproj
new file mode 100644
index 0000000..c6fbb6a
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.PL40.csproj
@@ -0,0 +1,95 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>PORTABLE_LIBRARY</EnvironmentFlavor>

+    <EnvironmentTemplate>PL40</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>

+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <TargetFrameworkProfile>Profile1</TargetFrameworkProfile>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\PL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\PL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.PL40.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.SL20.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.SL20.csproj
new file mode 100644
index 0000000..9e89107
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.SL20.csproj
@@ -0,0 +1,107 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL20</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL20\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.SL20.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.SL30.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.SL30.csproj
new file mode 100644
index 0000000..6d3ac12
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.SL30.csproj
@@ -0,0 +1,107 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL30</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL30\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL30\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.SL30.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.SL40.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.SL40.csproj
new file mode 100644
index 0000000..9b34163
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.SL40.csproj
@@ -0,0 +1,108 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL40</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <SilverlightVersion>v4.0</SilverlightVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.SL40.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.csproj b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.csproj
new file mode 100644
index 0000000..c1754cf
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/ProtocolBuffersLite.Serialization.csproj
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers.Serialization</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Serialization</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" Condition="'$(TargetFrameworkVersion)' != 'v2.0'" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\ProtocolBuffers\FrameworkPortability.cs">

+      <Link>FrameworkPortability.cs</Link>

+    </Compile>

+    <Compile Include="Extensions.cs" />

+    <Compile Include="Http\FormUrlEncodedReader.cs" />

+    <Compile Include="Http\MessageFormatFactory.cs" />

+    <Compile Include="Http\MessageFormatOptions.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="AbstractReader.cs" />

+    <Compile Include="AbstractTextReader.cs" />

+    <Compile Include="AbstractTextWriter.cs" />

+    <Compile Include="AbstractWriter.cs" />

+    <Compile Include="DictionaryReader.cs" />

+    <Compile Include="DictionaryWriter.cs" />

+    <Compile Include="JsonFormatReader.cs" />

+    <Compile Include="JsonFormatWriter.cs" />

+    <Compile Include="JsonTextCursor.cs" />

+    <Compile Include="RecursionLimitExceeded.cs" />

+    <Compile Include="XmlFormatReader.cs" />

+    <Compile Include="XmlFormatWriter.cs" />

+    <Compile Include="XmlReaderOptions.cs" />

+    <Compile Include="XmlWriterOptions.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>False</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/RecursionLimitExceeded.cs b/csharp/src/ProtocolBuffers.Serialization/RecursionLimitExceeded.cs
new file mode 100644
index 0000000..14e72ba
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/RecursionLimitExceeded.cs
@@ -0,0 +1,18 @@
+using System;

+using System.Collections.Generic;

+using System.Text;

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// The exception raised when a recursion limit is reached while parsing input.

+    /// </summary>

+    public sealed class RecursionLimitExceededException : FormatException

+    {

+        const string message = "Possible malicious message had too many levels of nesting.";

+        

+        internal RecursionLimitExceededException() : base(message)

+        {

+        }

+    }

+}

diff --git a/csharp/src/ProtocolBuffers.Serialization/XmlFormatReader.cs b/csharp/src/ProtocolBuffers.Serialization/XmlFormatReader.cs
new file mode 100644
index 0000000..a4f111d
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/XmlFormatReader.cs
@@ -0,0 +1,338 @@
+using System;

+using System.Collections.Generic;

+using System.IO;

+using System.Xml;

+using System.Diagnostics;

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// Parses a proto buffer from an XML document or fragment.  .NET 3.5 users may also

+    /// use this class to process Json by setting the options to support Json and providing

+    /// an XmlReader obtained from <see cref="System.Runtime.Serialization.Json.JsonReaderWriterFactory"/>.

+    /// </summary>

+    public class XmlFormatReader : AbstractTextReader

+    {

+        public const string DefaultRootElementName = XmlFormatWriter.DefaultRootElementName;

+        private readonly XmlReader _input;

+        // Tracks the message element for each nested message read

+        private readonly Stack<ElementStackEntry> _elements;

+        // The default element name for ReadMessageStart

+        private string _rootElementName;

+

+        private struct ElementStackEntry

+        {

+            public readonly string LocalName;

+            public readonly int Depth;

+            public readonly bool IsEmpty;

+

+            public ElementStackEntry(string localName, int depth, bool isEmpty) : this()

+            {

+                LocalName = localName;

+                IsEmpty = isEmpty;

+                Depth = depth;

+            }

+        }

+

+        private static XmlReaderSettings DefaultSettings

+        {

+            get

+            {

+                return new XmlReaderSettings()

+                           {CheckCharacters = false, IgnoreComments = true, IgnoreProcessingInstructions = true};

+            }

+        }

+

+        /// <summary>

+        /// Constructs the XmlFormatReader using the stream provided as the xml

+        /// </summary>

+        public static XmlFormatReader CreateInstance(byte[] input)

+        {

+            return new XmlFormatReader(XmlReader.Create(new MemoryStream(input, false), DefaultSettings));

+        }

+

+        /// <summary>

+        /// Constructs the XmlFormatReader using the stream provided as the xml

+        /// </summary>

+        public static XmlFormatReader CreateInstance(Stream input)

+        {

+            return new XmlFormatReader(XmlReader.Create(input, DefaultSettings));

+        }

+

+        /// <summary>

+        /// Constructs the XmlFormatReader using the string provided as the xml to be read

+        /// </summary>

+        public static XmlFormatReader CreateInstance(String input)

+        {

+            return new XmlFormatReader(XmlReader.Create(new StringReader(input), DefaultSettings));

+        }

+

+        /// <summary>

+        /// Constructs the XmlFormatReader using the xml in the TextReader

+        /// </summary>

+        public static XmlFormatReader CreateInstance(TextReader input)

+        {

+            return new XmlFormatReader(XmlReader.Create(input, DefaultSettings));

+        }

+

+        /// <summary>

+        /// Constructs the XmlFormatReader with the XmlReader

+        /// </summary>

+        public static XmlFormatReader CreateInstance(XmlReader input)

+        {

+            return new XmlFormatReader(input);

+        }

+

+        /// <summary>

+        /// Constructs the XmlFormatReader with the XmlReader and options

+        /// </summary>

+        protected XmlFormatReader(XmlReader input)

+        {

+            _input = input;

+            _rootElementName = DefaultRootElementName;

+            _elements = new Stack<ElementStackEntry>();

+            Options = XmlReaderOptions.None;

+        }

+

+        /// <summary>

+        /// Gets or sets the options to use when reading the xml

+        /// </summary>

+        public XmlReaderOptions Options { get; set; }

+

+        /// <summary>

+        /// Sets the options to use while generating the XML

+        /// </summary>

+        public XmlFormatReader SetOptions(XmlReaderOptions options)

+        {

+            Options = options;

+            return this;

+        }

+

+        /// <summary>

+        /// Gets or sets the default element name to use when using the Merge&lt;TBuilder>()

+        /// </summary>

+        public string RootElementName

+        {

+            get { return _rootElementName; }

+            set

+            {

+                ThrowHelper.ThrowIfNull(value, "RootElementName");

+                _rootElementName = value;

+            }

+        }

+

+        [DebuggerNonUserCode]

+        private static void Assert(bool cond)

+        {

+            if (!cond)

+            {

+                throw new FormatException();

+            }

+        }

+

+        /// <summary>

+        /// Reads the root-message preamble specific to this formatter

+        /// </summary>

+        public override void ReadMessageStart()

+        {

+            ReadMessageStart(_rootElementName);

+        }

+

+        /// <summary>

+        /// Reads the root-message preamble specific to this formatter

+        /// </summary>

+        public void ReadMessageStart(string element)

+        {

+            while (!_input.IsStartElement() && _input.Read())

+            {

+                continue;

+            }

+            Assert(_input.IsStartElement() && _input.LocalName == element);

+            _elements.Push(new ElementStackEntry(element, _input.Depth, _input.IsEmptyElement));

+            _input.Read();

+        }

+

+        /// <summary>

+        /// Reads the root-message close specific to this formatter, MUST be called

+        /// on the reader obtained from ReadMessageStart(string element).

+        /// </summary>

+        public override void ReadMessageEnd()

+        {

+            Assert(_elements.Count > 0);

+

+            ElementStackEntry stop = _elements.Peek();

+            while (_input.NodeType != XmlNodeType.EndElement && _input.NodeType != XmlNodeType.Element

+                   && _input.Depth > stop.Depth && _input.Read())

+            {

+                continue;

+            }

+

+            if (!stop.IsEmpty)

+            {

+                Assert(_input.NodeType == XmlNodeType.EndElement

+                       && _input.LocalName == stop.LocalName

+                       && _input.Depth == stop.Depth);

+

+                _input.Read();

+            }

+            _elements.Pop();

+        }

+

+        /// <summary>

+        /// Merge the provided builder as an element named <see cref="RootElementName"/> in the current context

+        /// </summary>

+        public override TBuilder Merge<TBuilder>(TBuilder builder, ExtensionRegistry registry)

+        {

+            return Merge(_rootElementName, builder, registry);

+        }

+

+        /// <summary>

+        /// Merge the provided builder as an element of the current context

+        /// </summary>

+        public TBuilder Merge<TBuilder>(string element, TBuilder builder) where TBuilder : IBuilderLite

+        {

+            return Merge(element, builder, ExtensionRegistry.Empty);

+        }

+

+        /// <summary>

+        /// Merge the provided builder as an element of the current context

+        /// </summary>

+        public TBuilder Merge<TBuilder>(string element, TBuilder builder, ExtensionRegistry registry)

+            where TBuilder : IBuilderLite

+        {

+            ReadMessageStart(element);

+            builder.WeakMergeFrom(this, registry);

+            ReadMessageEnd();

+            return builder;

+        }

+

+        /// <summary>

+        /// Peeks at the next field in the input stream and returns what information is available.

+        /// </summary>

+        /// <remarks>

+        /// This may be called multiple times without actually reading the field.  Only after the field

+        /// is either read, or skipped, should PeekNext return a different value.

+        /// </remarks>

+        protected override bool PeekNext(out string field)

+        {

+            ElementStackEntry stopNode;

+            if (_elements.Count == 0)

+            {

+                stopNode = new ElementStackEntry(null, _input.Depth - 1, false);

+            }

+            else

+            {

+                stopNode = _elements.Peek();

+            }

+

+            if (!stopNode.IsEmpty)

+            {

+                while (!_input.IsStartElement() && _input.Depth > stopNode.Depth && _input.Read())

+                {

+                    continue;

+                }

+

+                if (_input.IsStartElement() && _input.Depth > stopNode.Depth)

+                {

+                    field = _input.LocalName;

+                    return true;

+                }

+            }

+            field = null;

+            return false;

+        }

+

+        /// <summary>

+        /// Causes the reader to skip past this field

+        /// </summary>

+        protected override void Skip()

+        {

+            if (_input.IsStartElement())

+            {

+                if (!_input.IsEmptyElement)

+                {

+                    int depth = _input.Depth;

+                    while (_input.Depth >= depth && _input.NodeType != XmlNodeType.EndElement)

+                    {

+                        Assert(_input.Read());

+                    }

+                }

+                _input.Read();

+            }

+        }

+

+        /// <summary>

+        /// returns true if it was able to read a single value into the value reference.  The value

+        /// stored may be of type System.String, System.Int32, or an IEnumLite from the IEnumLiteMap.

+        /// </summary>

+        protected override bool ReadEnum(ref object value)

+        {

+            int number;

+            string temp;

+            if (null != (temp = _input.GetAttribute("value")) && FrameworkPortability.TryParseInt32(temp, out number))

+            {

+                Skip();

+                value = number;

+                return true;

+            }

+            return base.ReadEnum(ref value);

+        }

+

+        /// <summary>

+        /// Returns true if it was able to read a String from the input

+        /// </summary>

+        protected override bool ReadAsText(ref string value, Type type)

+        {

+            Assert(_input.NodeType == XmlNodeType.Element);

+            value = _input.ReadElementContentAsString();

+

+            return true;

+        }

+

+        /// <summary>

+        /// Merges the input stream into the provided IBuilderLite 

+        /// </summary>

+        protected override bool ReadMessage(IBuilderLite builder, ExtensionRegistry registry)

+        {

+            Assert(_input.IsStartElement());

+            ReadMessageStart(_input.LocalName);

+            builder.WeakMergeFrom(this, registry);

+            ReadMessageEnd();

+            return true;

+        }

+

+        private IEnumerable<string> NonNestedArrayItems(string field)

+        {

+            return base.ForeachArrayItem(field);

+        }

+

+        /// <summary>

+        /// Cursors through the array elements and stops at the end of the array

+        /// </summary>

+        protected override IEnumerable<string> ForeachArrayItem(string field)

+        {

+            bool isNested = (Options & XmlReaderOptions.ReadNestedArrays) != 0;

+

+            if (!isNested)

+            {

+                foreach (string item in NonNestedArrayItems(field))

+                {

+                    yield return item;

+                }

+            }

+            else

+            {

+                string found;

+                ReadMessageStart(field);

+                if (PeekNext(out found) && found == "item")

+                {

+                    foreach (string item in NonNestedArrayItems("item"))

+                    {

+                        yield return item;

+                    }

+                }

+                ReadMessageEnd();

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/XmlFormatWriter.cs b/csharp/src/ProtocolBuffers.Serialization/XmlFormatWriter.cs
new file mode 100644
index 0000000..4bd2756
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/XmlFormatWriter.cs
@@ -0,0 +1,280 @@
+using System;

+using System.Collections;

+using System.IO;

+using System.Text;

+using System.Xml;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// Writes a proto buffer to an XML document or fragment.  .NET 3.5 users may also

+    /// use this class to produce Json by setting the options to support Json and providing

+    /// an XmlWriter obtained from <see cref="System.Runtime.Serialization.Json.JsonReaderWriterFactory"/>.

+    /// </summary>

+    public class XmlFormatWriter : AbstractTextWriter

+    {

+        private static readonly Encoding DefaultEncoding = new UTF8Encoding(false);

+        public const string DefaultRootElementName = "root";

+

+        private readonly XmlWriter _output;

+        // The default element name used for WriteMessageStart

+        private string _rootElementName;

+        // Used to assert matching WriteMessageStart/WriteMessageEnd calls

+        private int _messageOpenCount;

+

+        private static XmlWriterSettings DefaultSettings(Encoding encoding)

+        {

+            return new XmlWriterSettings()

+                       {

+                           CheckCharacters = false,

+                           NewLineHandling = NewLineHandling.Entitize,

+                           OmitXmlDeclaration = true,

+                           Encoding = encoding,

+                       };

+        }

+

+        /// <summary>

+        /// Constructs the XmlFormatWriter to write to the given TextWriter

+        /// </summary>

+        public static XmlFormatWriter CreateInstance(TextWriter output)

+        {

+            return new XmlFormatWriter(XmlWriter.Create(output, DefaultSettings(output.Encoding)));

+        }

+

+        /// <summary>

+        /// Constructs the XmlFormatWriter to write to the given stream

+        /// </summary>

+        public static XmlFormatWriter CreateInstance(Stream output)

+        {

+            return new XmlFormatWriter(XmlWriter.Create(output, DefaultSettings(DefaultEncoding)));

+        }

+

+        /// <summary>

+        /// Constructs the XmlFormatWriter to write to the given stream

+        /// </summary>

+        public static XmlFormatWriter CreateInstance(Stream output, Encoding encoding)

+        {

+            return new XmlFormatWriter(XmlWriter.Create(output, DefaultSettings(encoding)));

+        }

+

+        /// <summary>

+        /// Constructs the XmlFormatWriter to write to the given XmlWriter

+        /// </summary>

+        public static XmlFormatWriter CreateInstance(XmlWriter output)

+        {

+            return new XmlFormatWriter(output);

+        }

+

+        protected XmlFormatWriter(XmlWriter output)

+        {

+            _output = output;

+            _messageOpenCount = 0;

+            _rootElementName = DefaultRootElementName;

+        }

+

+        /// <summary>

+        /// Gets or sets the default element name to use when using the Merge&lt;TBuilder>()

+        /// </summary>

+        public string RootElementName

+        {

+            get { return _rootElementName; }

+            set

+            {

+                ThrowHelper.ThrowIfNull(value, "RootElementName");

+                _rootElementName = value;

+            }

+        }

+

+        /// <summary>

+        /// Gets or sets the options to use while generating the XML

+        /// </summary>

+        public XmlWriterOptions Options { get; set; }

+

+        /// <summary>

+        /// Sets the options to use while generating the XML

+        /// </summary>

+        public XmlFormatWriter SetOptions(XmlWriterOptions options)

+        {

+            Options = options;

+            return this;

+        }

+

+        private bool TestOption(XmlWriterOptions option)

+        {

+            return (Options & option) != 0;

+        }

+

+        /// <summary>

+        /// Completes any pending write operations

+        /// </summary>

+        public override void Flush()

+        {

+            _output.Flush();

+            base.Flush();

+        }

+

+        /// <summary>

+        /// Used to write the root-message preamble, in xml this is open element for RootElementName,

+        /// by default "&lt;root&gt;". After this call you can call IMessageLite.MergeTo(...) and 

+        /// complete the message with a call to WriteMessageEnd().

+        /// </summary>

+        public override void WriteMessageStart()

+        {

+            WriteMessageStart(_rootElementName);

+        }

+

+        /// <summary>

+        /// Used to write the root-message preamble, in xml this is open element for elementName. 

+        /// After this call you can call IMessageLite.MergeTo(...) and  complete the message with 

+        /// a call to WriteMessageEnd().

+        /// </summary>

+        public void WriteMessageStart(string elementName)

+        {

+            if (TestOption(XmlWriterOptions.OutputJsonTypes))

+            {

+                _output.WriteStartElement("root"); // json requires this is the root-element

+                _output.WriteAttributeString("type", "object");

+            }

+            else

+            {

+                _output.WriteStartElement(elementName);

+            }

+            _messageOpenCount++;

+        }

+

+        /// <summary>

+        /// Used to complete a root-message previously started with a call to WriteMessageStart()

+        /// </summary>

+        public override void WriteMessageEnd()

+        {

+            if (_messageOpenCount <= 0)

+            {

+                throw new InvalidOperationException();

+            }

+

+            _output.WriteEndElement();

+            _output.Flush();

+            _messageOpenCount--;

+        }

+

+        /// <summary>

+        /// Writes a message as an element using the name defined in <see cref="RootElementName"/>

+        /// </summary>

+        public override void WriteMessage(IMessageLite message)

+        {

+            WriteMessage(_rootElementName, message);

+        }

+

+        /// <summary>

+        /// Writes a message as an element with the given name

+        /// </summary>

+        public void WriteMessage(string elementName, IMessageLite message)

+        {

+            WriteMessageStart(elementName);

+            message.WriteTo(this);

+            WriteMessageEnd();

+        }

+

+        /// <summary>

+        /// Writes a message

+        /// </summary>

+        protected override void WriteMessageOrGroup(string field, IMessageLite message)

+        {

+            _output.WriteStartElement(field);

+

+            if (TestOption(XmlWriterOptions.OutputJsonTypes))

+            {

+                _output.WriteAttributeString("type", "object");

+            }

+

+            message.WriteTo(this);

+            _output.WriteEndElement();

+        }

+

+        /// <summary>

+        /// Writes a String value

+        /// </summary>

+        protected override void WriteAsText(string field, string textValue, object typedValue)

+        {

+            _output.WriteStartElement(field);

+

+            if (TestOption(XmlWriterOptions.OutputJsonTypes))

+            {

+                if (typedValue is int || typedValue is uint || typedValue is long || typedValue is ulong ||

+                    typedValue is double || typedValue is float)

+                {

+                    _output.WriteAttributeString("type", "number");

+                }

+                else if (typedValue is bool)

+                {

+                    _output.WriteAttributeString("type", "boolean");

+                }

+            }

+            _output.WriteString(textValue);

+

+            //Empty strings should not be written as empty elements '<item/>', rather as '<item></item>'

+            if (_output.WriteState == WriteState.Element)

+            {

+                _output.WriteRaw("");

+            }

+

+            _output.WriteEndElement();

+        }

+

+        /// <summary>

+        /// Writes an array of field values

+        /// </summary>

+        protected override void WriteArray(FieldType fieldType, string field, IEnumerable items)

+        {

+            //see if it's empty

+            IEnumerator eitems = items.GetEnumerator();

+            try

+            {

+                if (!eitems.MoveNext())

+                {

+                    return;

+                }

+            }

+            finally

+            {

+                if (eitems is IDisposable)

+                {

+                    ((IDisposable) eitems).Dispose();

+                }

+            }

+

+            if (TestOption(XmlWriterOptions.OutputNestedArrays | XmlWriterOptions.OutputJsonTypes))

+            {

+                _output.WriteStartElement(field);

+                if (TestOption(XmlWriterOptions.OutputJsonTypes))

+                {

+                    _output.WriteAttributeString("type", "array");

+                }

+

+                base.WriteArray(fieldType, "item", items);

+                _output.WriteEndElement();

+            }

+            else

+            {

+                base.WriteArray(fieldType, field, items);

+            }

+        }

+

+        /// <summary>

+        /// Writes a System.Enum by the numeric and textual value

+        /// </summary>

+        protected override void WriteEnum(string field, int number, string name)

+        {

+            _output.WriteStartElement(field);

+

+            if (!TestOption(XmlWriterOptions.OutputJsonTypes) && TestOption(XmlWriterOptions.OutputEnumValues))

+            {

+                _output.WriteAttributeString("value", XmlConvert.ToString(number));

+            }

+

+            _output.WriteString(name);

+            _output.WriteEndElement();

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/XmlReaderOptions.cs b/csharp/src/ProtocolBuffers.Serialization/XmlReaderOptions.cs
new file mode 100644
index 0000000..f7eca1d
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/XmlReaderOptions.cs
@@ -0,0 +1,17 @@
+using System;

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// Options available for the xml reader output

+    /// </summary>

+    [Flags]

+    public enum XmlReaderOptions

+    {

+        /// <summary> Simple xml formatting with no attributes </summary>

+        None,

+

+        /// <summary> Requires that arrays items are nested in an &lt;item> element </summary>

+        ReadNestedArrays = 1,

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Serialization/XmlWriterOptions.cs b/csharp/src/ProtocolBuffers.Serialization/XmlWriterOptions.cs
new file mode 100644
index 0000000..7d740ee
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Serialization/XmlWriterOptions.cs
@@ -0,0 +1,24 @@
+using System;

+

+namespace Google.ProtocolBuffers.Serialization

+{

+    /// <summary>

+    /// Options available for the xml writer output

+    /// </summary>

+    [Flags]

+    public enum XmlWriterOptions

+    {

+        /// <summary> Simple xml formatting with no attributes </summary>

+        None,

+

+        /// <summary> Writes the 'value' attribute on all enumerations with the numeric identifier </summary>

+        OutputEnumValues = 0x1,

+

+        /// <summary> Embeds array items into child &lt;item> elements </summary>

+        OutputNestedArrays = 0x4,

+

+        /// <summary> Outputs the 'type' attribute for compatibility with the <see cref="System.Runtime.Serialization.Json.JsonReaderWriterFactory">JsonReaderWriterFactory</see> </summary>

+        /// <remarks> This option must, by nessessity, also enable NestedArrayItems </remarks>

+        OutputJsonTypes = 0x8,

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/AbstractMessageTest.cs b/csharp/src/ProtocolBuffers.Test/AbstractMessageTest.cs
new file mode 100644
index 0000000..02793ae
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/AbstractMessageTest.cs
@@ -0,0 +1,521 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.IO;

+using Google.ProtocolBuffers.Descriptors;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using Google.ProtocolBuffers.TestProtos;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class AbstractMessageTest

+    {

+        [TestMethod]

+        public void Clear()

+        {

+            AbstractMessageWrapper message =

+                new AbstractMessageWrapper.Builder(TestAllTypes.CreateBuilder(TestUtil.GetAllSet())).Clear().Build();

+            TestUtil.AssertClear((TestAllTypes) message.WrappedMessage);

+        }

+

+        [TestMethod]

+        public void Copy()

+        {

+            AbstractMessageWrapper message =

+                new AbstractMessageWrapper.Builder(TestAllTypes.CreateBuilder()).MergeFrom(TestUtil.GetAllSet()).Build();

+            TestUtil.AssertAllFieldsSet((TestAllTypes) message.WrappedMessage);

+        }

+

+        [TestMethod]

+        public void CreateAndBuild()

+        {

+            TestAllTypes.CreateBuilder()

+                .Build();

+        }

+

+        [TestMethod]

+        public void SerializedSize()

+        {

+            TestAllTypes message = TestUtil.GetAllSet();

+            IMessage abstractMessage = new AbstractMessageWrapper(TestUtil.GetAllSet());

+

+            Assert.AreEqual(message.SerializedSize, abstractMessage.SerializedSize);

+        }

+

+        [TestMethod]

+        public void Serialization()

+        {

+            IMessage abstractMessage = new AbstractMessageWrapper(TestUtil.GetAllSet());

+            TestUtil.AssertAllFieldsSet(TestAllTypes.ParseFrom(abstractMessage.ToByteString()));

+            Assert.AreEqual(TestUtil.GetAllSet().ToByteString(), abstractMessage.ToByteString());

+        }

+

+        [TestMethod]

+        public void Parsing()

+        {

+            IBuilder builder = new AbstractMessageWrapper.Builder(TestAllTypes.CreateBuilder());

+            AbstractMessageWrapper message =

+                (AbstractMessageWrapper) builder.WeakMergeFrom(TestUtil.GetAllSet().ToByteString()).WeakBuild();

+            TestUtil.AssertAllFieldsSet((TestAllTypes) message.WrappedMessage);

+        }

+

+        [TestMethod]

+        public void PackedSerialization()

+        {

+            IMessage abstractMessage = new AbstractMessageWrapper(TestUtil.GetPackedSet());

+            TestUtil.AssertPackedFieldsSet(TestPackedTypes.ParseFrom(abstractMessage.ToByteString()));

+            Assert.AreEqual(TestUtil.GetPackedSet().ToByteString(), abstractMessage.ToByteString());

+        }

+

+        [TestMethod]

+        public void PackedParsing()

+        {

+            AbstractMessageWrapper.Builder builder = new AbstractMessageWrapper.Builder(TestPackedTypes.CreateBuilder());

+            AbstractMessageWrapper message = builder.MergeFrom(TestUtil.GetPackedSet().ToByteString()).Build();

+            TestUtil.AssertPackedFieldsSet((TestPackedTypes)message.WrappedMessage);

+        }

+

+        [TestMethod]

+        public void UnpackedParsingOfPackedInput()

+        {

+            byte[] bytes = TestUtil.GetPackedSet().ToByteArray();

+            TestUnpackedTypes message = TestUnpackedTypes.ParseFrom(bytes);

+            TestUtil.AssertUnpackedFieldsSet(message);

+        }

+

+        [TestMethod]

+        public void PackedParsingOfUnpackedInput()

+        {

+            byte[] bytes = TestUnpackedTypes.ParseFrom(TestUtil.GetPackedSet().ToByteArray()).ToByteArray();

+            TestPackedTypes message = TestPackedTypes.ParseFrom(bytes);

+            TestUtil.AssertPackedFieldsSet(message);

+        }

+

+        [TestMethod]

+        public void UnpackedParsingOfPackedInputExtensions()

+        {

+            byte[] bytes = TestUtil.GetPackedSet().ToByteArray();

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestProtoFile.RegisterAllExtensions(registry);

+            UnitTestExtrasProtoFile.RegisterAllExtensions(registry);

+            TestUnpackedExtensions message = TestUnpackedExtensions.ParseFrom(bytes, registry);

+            TestUtil.AssertUnpackedExtensionsSet(message);

+        }

+

+        [TestMethod]

+        public void PackedParsingOfUnpackedInputExtensions()

+        {

+            byte[] bytes = TestUnpackedTypes.ParseFrom(TestUtil.GetPackedSet().ToByteArray()).ToByteArray();

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestProtoFile.RegisterAllExtensions(registry);

+            TestPackedExtensions message = TestPackedExtensions.ParseFrom(bytes, registry);

+            TestUtil.AssertPackedExtensionsSet(message);

+        }

+

+        [TestMethod]

+        public void OptimizedForSize()

+        {

+            // We're mostly only Checking that this class was compiled successfully.

+            TestOptimizedForSize message = TestOptimizedForSize.CreateBuilder().SetI(1).Build();

+            message = TestOptimizedForSize.ParseFrom(message.ToByteString());

+            Assert.AreEqual(2, message.SerializedSize);

+        }

+

+        // -----------------------------------------------------------------

+        // Tests for isInitialized().

+

+        private static readonly TestRequired TestRequiredUninitialized = TestRequired.DefaultInstance;

+

+        private static readonly TestRequired TestRequiredInitialized =

+            TestRequired.CreateBuilder().SetA(1).SetB(2).SetC(3).Build();

+

+        [TestMethod]

+        public void IsInitialized()

+        {

+            TestRequired.Builder builder = TestRequired.CreateBuilder();

+            AbstractMessageWrapper.Builder abstractBuilder = new AbstractMessageWrapper.Builder(builder);

+

+            Assert.IsFalse(abstractBuilder.IsInitialized);

+            builder.A = 1;

+            Assert.IsFalse(abstractBuilder.IsInitialized);

+            builder.B = 1;

+            Assert.IsFalse(abstractBuilder.IsInitialized);

+            builder.C = 1;

+            Assert.IsTrue(abstractBuilder.IsInitialized);

+        }

+

+        [TestMethod]

+        public void ForeignIsInitialized()

+        {

+            TestRequiredForeign.Builder builder = TestRequiredForeign.CreateBuilder();

+            AbstractMessageWrapper.Builder abstractBuilder = new AbstractMessageWrapper.Builder(builder);

+

+            Assert.IsTrue(abstractBuilder.IsInitialized);

+

+            builder.SetOptionalMessage(TestRequiredUninitialized);

+            Assert.IsFalse(abstractBuilder.IsInitialized);

+

+            builder.SetOptionalMessage(TestRequiredInitialized);

+            Assert.IsTrue(abstractBuilder.IsInitialized);

+

+            builder.AddRepeatedMessage(TestRequiredUninitialized);

+            Assert.IsFalse(abstractBuilder.IsInitialized);

+

+            builder.SetRepeatedMessage(0, TestRequiredInitialized);

+            Assert.IsTrue(abstractBuilder.IsInitialized);

+        }

+

+        // -----------------------------------------------------------------

+        // Tests for mergeFrom

+

+        private static readonly TestAllTypes MergeSource = TestAllTypes.CreateBuilder()

+            .SetOptionalInt32(1)

+            .SetOptionalString("foo")

+            .SetOptionalForeignMessage(ForeignMessage.DefaultInstance)

+            .AddRepeatedString("bar")

+            .Build();

+

+        private static readonly TestAllTypes MergeDest = TestAllTypes.CreateBuilder()

+            .SetOptionalInt64(2)

+            .SetOptionalString("baz")

+            .SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(3).Build())

+            .AddRepeatedString("qux")

+            .Build();

+

+        private const string MergeResultText = "optional_int32: 1\n" +

+                                               "optional_int64: 2\n" +

+                                               "optional_string: \"foo\"\n" +

+                                               "optional_foreign_message {\n" +

+                                               "  c: 3\n" +

+                                               "}\n" +

+                                               "repeated_string: \"qux\"\n" +

+                                               "repeated_string: \"bar\"\n";

+

+        [TestMethod]

+        public void MergeFrom()

+        {

+            AbstractMessageWrapper result = (AbstractMessageWrapper)

+                                            new AbstractMessageWrapper.Builder(TestAllTypes.CreateBuilder(MergeDest))

+                                                .MergeFrom(MergeSource)

+                                                .Build();

+

+            Assert.AreEqual(MergeResultText, result.ToString());

+        }

+

+        // -----------------------------------------------------------------

+        // Tests for equals and hashCode

+

+        [TestMethod]

+        public void EqualsAndHashCode()

+        {

+            TestAllTypes a = TestUtil.GetAllSet();

+            TestAllTypes b = TestAllTypes.CreateBuilder().Build();

+            TestAllTypes c = TestAllTypes.CreateBuilder(b).AddRepeatedString("x").Build();

+            TestAllTypes d = TestAllTypes.CreateBuilder(c).AddRepeatedString("y").Build();

+            TestAllExtensions e = TestUtil.GetAllExtensionsSet();

+            TestAllExtensions f = TestAllExtensions.CreateBuilder(e)

+                .AddExtension(UnitTestProtoFile.RepeatedInt32Extension, 999).Build();

+

+            CheckEqualsIsConsistent(a);

+            CheckEqualsIsConsistent(b);

+            CheckEqualsIsConsistent(c);

+            CheckEqualsIsConsistent(d);

+            CheckEqualsIsConsistent(e);

+            CheckEqualsIsConsistent(f);

+

+            CheckNotEqual(a, b);

+            CheckNotEqual(a, c);

+            CheckNotEqual(a, d);

+            CheckNotEqual(a, e);

+            CheckNotEqual(a, f);

+

+            CheckNotEqual(b, c);

+            CheckNotEqual(b, d);

+            CheckNotEqual(b, e);

+            CheckNotEqual(b, f);

+

+            CheckNotEqual(c, d);

+            CheckNotEqual(c, e);

+            CheckNotEqual(c, f);

+

+            CheckNotEqual(d, e);

+            CheckNotEqual(d, f);

+

+            CheckNotEqual(e, f);

+

+            // Deserializing into the TestEmptyMessage such that every field is an UnknownFieldSet.Field

+            TestEmptyMessage eUnknownFields = TestEmptyMessage.ParseFrom(e.ToByteArray());

+            TestEmptyMessage fUnknownFields = TestEmptyMessage.ParseFrom(f.ToByteArray());

+            CheckNotEqual(eUnknownFields, fUnknownFields);

+            CheckEqualsIsConsistent(eUnknownFields);

+            CheckEqualsIsConsistent(fUnknownFields);

+

+            // Subseqent reconstitutions should be identical

+            TestEmptyMessage eUnknownFields2 = TestEmptyMessage.ParseFrom(e.ToByteArray());

+            CheckEqualsIsConsistent(eUnknownFields, eUnknownFields2);

+        }

+

+        /// <summary>

+        /// Asserts that the given protos are equal and have the same hash code.

+        /// </summary>

+        private static void CheckEqualsIsConsistent(IMessage message)

+        {

+            // Object should be equal to itself.

+            Assert.AreEqual(message, message);

+

+            // Object should be equal to a dynamic copy of itself.

+            DynamicMessage dynamic = DynamicMessage.CreateBuilder(message).Build();

+            CheckEqualsIsConsistent(message, dynamic);

+        }

+

+        /// <summary>

+        /// Asserts that the given protos are equal and have the same hash code.

+        /// </summary>

+        private static void CheckEqualsIsConsistent(IMessage message1, IMessage message2)

+        {

+            Assert.AreEqual(message1, message2);

+            Assert.AreEqual(message2, message1);

+            Assert.AreEqual(message2.GetHashCode(), message1.GetHashCode());

+        }

+

+        /// <summary>

+        /// Asserts that the given protos are not equal and have different hash codes.

+        /// </summary>

+        /// <remarks>

+        /// It's valid for non-equal objects to have the same hash code, so

+        /// this test is stricter than it needs to be. However, this should happen

+        /// relatively rarely. (If this test fails, it's probably still due to a bug.)

+        /// </remarks>

+        private static void CheckNotEqual(IMessage m1, IMessage m2)

+        {

+            String equalsError = string.Format("{0} should not be equal to {1}", m1, m2);

+            Assert.IsFalse(m1.Equals(m2), equalsError);

+            Assert.IsFalse(m2.Equals(m1), equalsError);

+

+            Assert.IsFalse(m1.GetHashCode() == m2.GetHashCode(),

+                           string.Format("{0} should have a different hash code from {1}", m1, m2));

+        }

+

+        /// <summary>

+        /// Extends AbstractMessage and wraps some other message object.  The methods

+        /// of the Message interface which aren't explicitly implemented by

+        /// AbstractMessage are forwarded to the wrapped object.  This allows us to

+        /// test that AbstractMessage's implementations work even if the wrapped

+        /// object does not use them.

+        /// </summary>

+        private class AbstractMessageWrapper : AbstractMessage<AbstractMessageWrapper, AbstractMessageWrapper.Builder>

+        {

+            private readonly IMessage wrappedMessage;

+

+            public IMessage WrappedMessage

+            {

+                get { return wrappedMessage; }

+            }

+

+            public AbstractMessageWrapper(IMessage wrappedMessage)

+            {

+                this.wrappedMessage = wrappedMessage;

+            }

+

+            public override MessageDescriptor DescriptorForType

+            {

+                get { return wrappedMessage.DescriptorForType; }

+            }

+

+            public override AbstractMessageWrapper DefaultInstanceForType

+            {

+                get { return new AbstractMessageWrapper(wrappedMessage.WeakDefaultInstanceForType); }

+            }

+

+            public override IDictionary<FieldDescriptor, object> AllFields

+            {

+                get { return wrappedMessage.AllFields; }

+            }

+

+            public override bool HasField(FieldDescriptor field)

+            {

+                return wrappedMessage.HasField(field);

+            }

+

+            public override object this[FieldDescriptor field]

+            {

+                get { return wrappedMessage[field]; }

+            }

+

+            public override object this[FieldDescriptor field, int index]

+            {

+                get { return wrappedMessage[field, index]; }

+            }

+

+            public override int GetRepeatedFieldCount(FieldDescriptor field)

+            {

+                return wrappedMessage.GetRepeatedFieldCount(field);

+            }

+

+            public override UnknownFieldSet UnknownFields

+            {

+                get { return wrappedMessage.UnknownFields; }

+            }

+

+            public override Builder CreateBuilderForType()

+            {

+                return new Builder(wrappedMessage.WeakCreateBuilderForType());

+            }

+

+            public override Builder ToBuilder()

+            {

+                return new Builder(wrappedMessage.WeakToBuilder());

+            }

+

+            internal class Builder : AbstractBuilder<AbstractMessageWrapper, Builder>

+            {

+                private readonly IBuilder wrappedBuilder;

+

+                protected override Builder ThisBuilder

+                {

+                    get { return this; }

+                }

+

+                internal Builder(IBuilder wrappedBuilder)

+                {

+                    this.wrappedBuilder = wrappedBuilder;

+                }

+

+                public override Builder MergeFrom(AbstractMessageWrapper other)

+                {

+                    wrappedBuilder.WeakMergeFrom(other.wrappedMessage);

+                    return this;

+                }

+

+                public override bool IsInitialized

+                {

+                    get { return wrappedBuilder.IsInitialized; }

+                }

+

+                public override IDictionary<FieldDescriptor, object> AllFields

+                {

+                    get { return wrappedBuilder.AllFields; }

+                }

+

+                public override object this[FieldDescriptor field]

+                {

+                    get { return wrappedBuilder[field]; }

+                    set { wrappedBuilder[field] = value; }

+                }

+

+                public override MessageDescriptor DescriptorForType

+                {

+                    get { return wrappedBuilder.DescriptorForType; }

+                }

+

+                public override int GetRepeatedFieldCount(FieldDescriptor field)

+                {

+                    return wrappedBuilder.GetRepeatedFieldCount(field);

+                }

+

+                public override object this[FieldDescriptor field, int index]

+                {

+                    get { return wrappedBuilder[field, index]; }

+                    set { wrappedBuilder[field, index] = value; }

+                }

+

+                public override bool HasField(FieldDescriptor field)

+                {

+                    return wrappedBuilder.HasField(field);

+                }

+

+                public override UnknownFieldSet UnknownFields

+                {

+                    get { return wrappedBuilder.UnknownFields; }

+                    set { wrappedBuilder.UnknownFields = value; }

+                }

+

+                public override AbstractMessageWrapper Build()

+                {

+                    return new AbstractMessageWrapper(wrappedBuilder.WeakBuild());

+                }

+

+                public override AbstractMessageWrapper BuildPartial()

+                {

+                    return new AbstractMessageWrapper(wrappedBuilder.WeakBuildPartial());

+                }

+

+                public override Builder Clone()

+                {

+                    return new Builder(wrappedBuilder.WeakClone());

+                }

+

+                public override AbstractMessageWrapper DefaultInstanceForType

+                {

+                    get { return new AbstractMessageWrapper(wrappedBuilder.WeakDefaultInstanceForType); }

+                }

+

+                public override Builder ClearField(FieldDescriptor field)

+                {

+                    wrappedBuilder.WeakClearField(field);

+                    return this;

+                }

+

+                public override Builder AddRepeatedField(FieldDescriptor field, object value)

+                {

+                    wrappedBuilder.WeakAddRepeatedField(field, value);

+                    return this;

+                }

+

+                public override IBuilder CreateBuilderForField(FieldDescriptor field)

+                {

+                    wrappedBuilder.CreateBuilderForField(field);

+                    return this;

+                }

+

+                public override Builder MergeFrom(IMessage other)

+                {

+                    wrappedBuilder.WeakMergeFrom(other);

+                    return this;

+                }

+

+                public override Builder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry)

+                {

+                    wrappedBuilder.WeakMergeFrom(input, extensionRegistry);

+                    return this;

+                }

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/App.xaml b/csharp/src/ProtocolBuffers.Test/App.xaml
new file mode 100644
index 0000000..d4f1f2e
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/App.xaml
@@ -0,0 +1,8 @@
+<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

+             x:Class="ProtocolBuffers.SilverlightTest.App"

+             >

+    <Application.Resources>

+        

+    </Application.Resources>

+</Application>

diff --git a/csharp/src/ProtocolBuffers.Test/App.xaml.cs b/csharp/src/ProtocolBuffers.Test/App.xaml.cs
new file mode 100644
index 0000000..0c9fd9e
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/App.xaml.cs
@@ -0,0 +1,60 @@
+using System;

+using System.Windows;

+using Microsoft.Silverlight.Testing;

+

+namespace Google.ProtocolBuffers

+{

+    public partial class App : Application

+    {

+

+        public App()

+        {

+            this.Startup += this.Application_Startup;

+            this.Exit += this.Application_Exit;

+            this.UnhandledException += this.Application_UnhandledException;

+

+            //InitializeComponent();

+        }

+

+        private void Application_Startup(object sender, StartupEventArgs e)

+        {

+            this.RootVisual = UnitTestSystem.CreateTestPage();

+        }

+

+        private void Application_Exit(object sender, EventArgs e)

+        {

+

+        }

+        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)

+        {

+            // If the app is running outside of the debugger then report the exception using

+            // the browser's exception mechanism. On IE this will display it a yellow alert 

+            // icon in the status bar and Firefox will display a script error.

+            if (!System.Diagnostics.Debugger.IsAttached)

+            {

+

+                // NOTE: This will allow the application to continue running after an exception has been thrown

+                // but not handled. 

+                // For production applications this error handling should be replaced with something that will 

+                // report the error to the website and stop the application.

+                e.Handled = true;

+                Deployment.Current.Dispatcher.BeginInvoke(

+                    new EventHandler<ApplicationUnhandledExceptionEventArgs>(ReportErrorToDOM), 

+                    new object[] { sender, e } );

+            }

+        }

+        private void ReportErrorToDOM(object sender, ApplicationUnhandledExceptionEventArgs e)

+        {

+            try

+            {

+                string errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace;

+                errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n");

+

+                System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight 2 Application " + errorMsg + "\");");

+            }

+            catch (Exception)

+            {

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ByteStringTest.cs b/csharp/src/ProtocolBuffers.Test/ByteStringTest.cs
new file mode 100644
index 0000000..003307a
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ByteStringTest.cs
@@ -0,0 +1,148 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Text;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class ByteStringTest

+    {

+        [TestMethod]

+        public void EmptyByteStringHasZeroSize()

+        {

+            Assert.AreEqual(0, ByteString.Empty.Length);

+        }

+

+        [TestMethod]

+        public void CopyFromStringWithExplicitEncoding()

+        {

+            ByteString bs = ByteString.CopyFrom("AB", Encoding.Unicode);

+            Assert.AreEqual(4, bs.Length);

+            Assert.AreEqual(65, bs[0]);

+            Assert.AreEqual(0, bs[1]);

+            Assert.AreEqual(66, bs[2]);

+            Assert.AreEqual(0, bs[3]);

+        }

+

+        [TestMethod]

+        public void IsEmptyWhenEmpty()

+        {

+            Assert.IsTrue(ByteString.CopyFromUtf8("").IsEmpty);

+        }

+

+        [TestMethod]

+        public void IsEmptyWhenNotEmpty()

+        {

+            Assert.IsFalse(ByteString.CopyFromUtf8("X").IsEmpty);

+        }

+

+        [TestMethod]

+        public void CopyFromByteArrayCopiesContents()

+        {

+            byte[] data = new byte[1];

+            data[0] = 10;

+            ByteString bs = ByteString.CopyFrom(data);

+            Assert.AreEqual(10, bs[0]);

+            data[0] = 5;

+            Assert.AreEqual(10, bs[0]);

+        }

+

+        [TestMethod]

+        public void ToByteArrayCopiesContents()

+        {

+            ByteString bs = ByteString.CopyFromUtf8("Hello");

+            byte[] data = bs.ToByteArray();

+            Assert.AreEqual((byte)'H', data[0]);

+            Assert.AreEqual((byte)'H', bs[0]);

+            data[0] = 0;

+            Assert.AreEqual(0, data[0]);

+            Assert.AreEqual((byte)'H', bs[0]);

+        }

+

+        [TestMethod]

+        public void CopyFromUtf8UsesUtf8()

+        {

+            ByteString bs = ByteString.CopyFromUtf8("\u20ac");

+            Assert.AreEqual(3, bs.Length);

+            Assert.AreEqual(0xe2, bs[0]);

+            Assert.AreEqual(0x82, bs[1]);

+            Assert.AreEqual(0xac, bs[2]);

+        }

+

+        [TestMethod]

+        public void CopyFromPortion()

+        {

+            byte[] data = new byte[] {0, 1, 2, 3, 4, 5, 6};

+            ByteString bs = ByteString.CopyFrom(data, 2, 3);

+            Assert.AreEqual(3, bs.Length);

+            Assert.AreEqual(2, bs[0]);

+            Assert.AreEqual(3, bs[1]);

+        }

+

+        [TestMethod]

+        public void ToStringUtf8()

+        {

+            ByteString bs = ByteString.CopyFromUtf8("\u20ac");

+            Assert.AreEqual("\u20ac", bs.ToStringUtf8());

+        }

+

+        [TestMethod]

+        public void ToStringWithExplicitEncoding()

+        {

+            ByteString bs = ByteString.CopyFrom("\u20ac", Encoding.Unicode);

+            Assert.AreEqual("\u20ac", bs.ToString(Encoding.Unicode));

+        }

+

+        [TestMethod]

+        public void FromBase64_WithText()

+        {

+            byte[] data = new byte[] {0, 1, 2, 3, 4, 5, 6};

+            string base64 = Convert.ToBase64String(data);

+            ByteString bs = ByteString.FromBase64(base64);

+            TestUtil.AssertBytesEqual(data, bs.ToByteArray());

+        }

+

+        [TestMethod]

+        public void FromBase64_Empty()

+        {

+            // Optimization which also fixes issue 61.

+            Assert.AreSame(ByteString.Empty, ByteString.FromBase64(""));

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/CSharpOptionsTest.cs b/csharp/src/ProtocolBuffers.Test/CSharpOptionsTest.cs
new file mode 100644
index 0000000..752d9a0
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/CSharpOptionsTest.cs
@@ -0,0 +1,127 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using Google.ProtocolBuffers.DescriptorProtos;

+using Google.ProtocolBuffers.Descriptors;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class DescriptorUtilTest

+    {

+        [TestMethod]

+        public void ExplicitNamespace()

+        {

+            FileDescriptorProto proto = new FileDescriptorProto.Builder

+                                            {

+                                                Name = "x",

+                                                Package = "pack",

+                                                Options =

+                                                    new FileOptions.Builder().SetExtension(

+                                                        CSharpOptions.CSharpFileOptions,

+                                                        new CSharpFileOptions.Builder {Namespace = "Foo.Bar"}.Build()).

+                                                    Build()

+                                            }.Build();

+            FileDescriptor descriptor = FileDescriptor.BuildFrom(proto, null);

+            Assert.AreEqual("Foo.Bar", descriptor.CSharpOptions.Namespace);

+        }

+

+        [TestMethod]

+        public void NoNamespaceFallsBackToPackage()

+        {

+            FileDescriptorProto proto = new FileDescriptorProto.Builder {Name = "x", Package = "pack"}.Build();

+            FileDescriptor descriptor = FileDescriptor.BuildFrom(proto, null);

+            Assert.AreEqual("pack", descriptor.CSharpOptions.Namespace);

+        }

+

+        [TestMethod]

+        public void NoNamespaceOrPackageFallsBackToEmptyString()

+        {

+            FileDescriptorProto proto = new FileDescriptorProto.Builder {Name = "x"}.Build();

+            FileDescriptor descriptor = FileDescriptor.BuildFrom(proto, null);

+            Assert.AreEqual("", descriptor.CSharpOptions.Namespace);

+        }

+

+        [TestMethod]

+        public void ExplicitlyNamedFileClass()

+        {

+            FileDescriptorProto proto = new FileDescriptorProto.Builder

+                                            {

+                                                Name = "x",

+                                                Options =

+                                                    new FileOptions.Builder().SetExtension(

+                                                        CSharpOptions.CSharpFileOptions,

+                                                        new CSharpFileOptions.Builder {UmbrellaClassname = "Foo"}.Build())

+                                                    .Build()

+                                            }.Build();

+            FileDescriptor descriptor = FileDescriptor.BuildFrom(proto, null);

+            Assert.AreEqual("Foo", descriptor.CSharpOptions.UmbrellaClassname);

+        }

+

+        [TestMethod]

+        public void ImplicitFileClassWithProtoSuffix()

+        {

+            FileDescriptorProto proto = new FileDescriptorProto.Builder {Name = "foo_bar.proto"}.Build();

+            FileDescriptor descriptor = FileDescriptor.BuildFrom(proto, null);

+            Assert.AreEqual("FooBar", descriptor.CSharpOptions.UmbrellaClassname);

+        }

+

+        [TestMethod]

+        public void ImplicitFileClassWithProtoDevelSuffix()

+        {

+            FileDescriptorProto proto = new FileDescriptorProto.Builder {Name = "foo_bar.protodevel"}.Build();

+            FileDescriptor descriptor = FileDescriptor.BuildFrom(proto, null);

+            Assert.AreEqual("FooBar", descriptor.CSharpOptions.UmbrellaClassname);

+        }

+

+        [TestMethod]

+        public void ImplicitFileClassWithNoSuffix()

+        {

+            FileDescriptorProto proto = new FileDescriptorProto.Builder {Name = "foo_bar"}.Build();

+            FileDescriptor descriptor = FileDescriptor.BuildFrom(proto, null);

+            Assert.AreEqual("FooBar", descriptor.CSharpOptions.UmbrellaClassname);

+        }

+

+        [TestMethod]

+        public void ImplicitFileClassWithDirectoryStructure()

+        {

+            FileDescriptorProto proto = new FileDescriptorProto.Builder {Name = "x/y/foo_bar"}.Build();

+            FileDescriptor descriptor = FileDescriptor.BuildFrom(proto, null);

+            Assert.AreEqual("FooBar", descriptor.CSharpOptions.UmbrellaClassname);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/CodedInputStreamTest.cs b/csharp/src/ProtocolBuffers.Test/CodedInputStreamTest.cs
new file mode 100644
index 0000000..b09d334
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/CodedInputStreamTest.cs
@@ -0,0 +1,639 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.IO;

+using Google.ProtocolBuffers.Descriptors;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using System.Diagnostics;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class CodedInputStreamTest

+    {

+        /// <summary>

+        /// Helper to construct a byte array from a bunch of bytes.  The inputs are

+        /// actually ints so that I can use hex notation and not get stupid errors

+        /// about precision.

+        /// </summary>

+        private static byte[] Bytes(params int[] bytesAsInts)

+        {

+            byte[] bytes = new byte[bytesAsInts.Length];

+            for (int i = 0; i < bytesAsInts.Length; i++)

+            {

+                bytes[i] = (byte) bytesAsInts[i];

+            }

+            return bytes;

+        }

+

+        /// <summary>

+        /// Parses the given bytes using ReadRawVarint32() and ReadRawVarint64() and

+        /// </summary>

+        private static void AssertReadVarint(byte[] data, ulong value)

+        {

+            CodedInputStream input = CodedInputStream.CreateInstance(data);

+            Assert.AreEqual((uint) value, input.ReadRawVarint32());

+

+            input = CodedInputStream.CreateInstance(data);

+            Assert.AreEqual(value, input.ReadRawVarint64());

+            Assert.IsTrue(input.IsAtEnd);

+

+            // Try different block sizes.

+            for (int bufferSize = 1; bufferSize <= 16; bufferSize *= 2)

+            {

+                input = CodedInputStream.CreateInstance(new SmallBlockInputStream(data, bufferSize));

+                Assert.AreEqual((uint) value, input.ReadRawVarint32());

+

+                input = CodedInputStream.CreateInstance(new SmallBlockInputStream(data, bufferSize));

+                Assert.AreEqual(value, input.ReadRawVarint64());

+                Assert.IsTrue(input.IsAtEnd);

+            }

+

+            // Try reading directly from a MemoryStream. We want to verify that it

+            // doesn't read past the end of the input, so write an extra byte - this

+            // lets us test the position at the end.

+            MemoryStream memoryStream = new MemoryStream();

+            memoryStream.Write(data, 0, data.Length);

+            memoryStream.WriteByte(0);

+            memoryStream.Position = 0;

+            Assert.AreEqual((uint) value, CodedInputStream.ReadRawVarint32(memoryStream));

+            Assert.AreEqual(data.Length, memoryStream.Position);

+        }

+

+        /// <summary>

+        /// Parses the given bytes using ReadRawVarint32() and ReadRawVarint64() and

+        /// expects them to fail with an InvalidProtocolBufferException whose

+        /// description matches the given one.

+        /// </summary>

+        private static void AssertReadVarintFailure(InvalidProtocolBufferException expected, byte[] data)

+        {

+            CodedInputStream input = CodedInputStream.CreateInstance(data);

+            try

+            {

+                input.ReadRawVarint32();

+                Assert.Fail("Should have thrown an exception.");

+            }

+            catch (InvalidProtocolBufferException e)

+            {

+                Assert.AreEqual(expected.Message, e.Message);

+            }

+

+            input = CodedInputStream.CreateInstance(data);

+            try

+            {

+                input.ReadRawVarint64();

+                Assert.Fail("Should have thrown an exception.");

+            }

+            catch (InvalidProtocolBufferException e)

+            {

+                Assert.AreEqual(expected.Message, e.Message);

+            }

+

+            // Make sure we get the same error when reading directly from a Stream.

+            try

+            {

+                CodedInputStream.ReadRawVarint32(new MemoryStream(data));

+                Assert.Fail("Should have thrown an exception.");

+            }

+            catch (InvalidProtocolBufferException e)

+            {

+                Assert.AreEqual(expected.Message, e.Message);

+            }

+        }

+

+        [TestMethod]

+        public void ReadVarint()

+        {

+            AssertReadVarint(Bytes(0x00), 0);

+            AssertReadVarint(Bytes(0x01), 1);

+            AssertReadVarint(Bytes(0x7f), 127);

+            // 14882

+            AssertReadVarint(Bytes(0xa2, 0x74), (0x22 << 0) | (0x74 << 7));

+            // 2961488830

+            AssertReadVarint(Bytes(0xbe, 0xf7, 0x92, 0x84, 0x0b),

+                             (0x3e << 0) | (0x77 << 7) | (0x12 << 14) | (0x04 << 21) |

+                             (0x0bL << 28));

+

+            // 64-bit

+            // 7256456126

+            AssertReadVarint(Bytes(0xbe, 0xf7, 0x92, 0x84, 0x1b),

+                             (0x3e << 0) | (0x77 << 7) | (0x12 << 14) | (0x04 << 21) |

+                             (0x1bL << 28));

+            // 41256202580718336

+            AssertReadVarint(Bytes(0x80, 0xe6, 0xeb, 0x9c, 0xc3, 0xc9, 0xa4, 0x49),

+                             (0x00 << 0) | (0x66 << 7) | (0x6b << 14) | (0x1c << 21) |

+                             (0x43L << 28) | (0x49L << 35) | (0x24L << 42) | (0x49L << 49));

+            // 11964378330978735131

+            AssertReadVarint(Bytes(0x9b, 0xa8, 0xf9, 0xc2, 0xbb, 0xd6, 0x80, 0x85, 0xa6, 0x01),

+                             (0x1b << 0) | (0x28 << 7) | (0x79 << 14) | (0x42 << 21) |

+                             (0x3bUL << 28) | (0x56UL << 35) | (0x00UL << 42) |

+                             (0x05UL << 49) | (0x26UL << 56) | (0x01UL << 63));

+

+            // Failures

+            AssertReadVarintFailure(

+                InvalidProtocolBufferException.MalformedVarint(),

+                Bytes(0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,

+                      0x00));

+            AssertReadVarintFailure(

+                InvalidProtocolBufferException.TruncatedMessage(),

+                Bytes(0x80));

+        }

+

+        /// <summary>

+        /// Parses the given bytes using ReadRawLittleEndian32() and checks

+        /// that the result matches the given value.

+        /// </summary>

+        private static void AssertReadLittleEndian32(byte[] data, uint value)

+        {

+            CodedInputStream input = CodedInputStream.CreateInstance(data);

+            Assert.AreEqual(value, input.ReadRawLittleEndian32());

+            Assert.IsTrue(input.IsAtEnd);

+

+            // Try different block sizes.

+            for (int blockSize = 1; blockSize <= 16; blockSize *= 2)

+            {

+                input = CodedInputStream.CreateInstance(

+                    new SmallBlockInputStream(data, blockSize));

+                Assert.AreEqual(value, input.ReadRawLittleEndian32());

+                Assert.IsTrue(input.IsAtEnd);

+            }

+        }

+

+        /// <summary>

+        /// Parses the given bytes using ReadRawLittleEndian64() and checks

+        /// that the result matches the given value.

+        /// </summary>

+        private static void AssertReadLittleEndian64(byte[] data, ulong value)

+        {

+            CodedInputStream input = CodedInputStream.CreateInstance(data);

+            Assert.AreEqual(value, input.ReadRawLittleEndian64());

+            Assert.IsTrue(input.IsAtEnd);

+

+            // Try different block sizes.

+            for (int blockSize = 1; blockSize <= 16; blockSize *= 2)

+            {

+                input = CodedInputStream.CreateInstance(

+                    new SmallBlockInputStream(data, blockSize));

+                Assert.AreEqual(value, input.ReadRawLittleEndian64());

+                Assert.IsTrue(input.IsAtEnd);

+            }

+        }

+

+        [TestMethod]

+        public void ReadLittleEndian()

+        {

+            AssertReadLittleEndian32(Bytes(0x78, 0x56, 0x34, 0x12), 0x12345678);

+            AssertReadLittleEndian32(Bytes(0xf0, 0xde, 0xbc, 0x9a), 0x9abcdef0);

+

+            AssertReadLittleEndian64(Bytes(0xf0, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12),

+                                     0x123456789abcdef0L);

+            AssertReadLittleEndian64(

+                Bytes(0x78, 0x56, 0x34, 0x12, 0xf0, 0xde, 0xbc, 0x9a), 0x9abcdef012345678UL);

+        }

+

+        [TestMethod]

+        public void DecodeZigZag32()

+        {

+            Assert.AreEqual(0, CodedInputStream.DecodeZigZag32(0));

+            Assert.AreEqual(-1, CodedInputStream.DecodeZigZag32(1));

+            Assert.AreEqual(1, CodedInputStream.DecodeZigZag32(2));

+            Assert.AreEqual(-2, CodedInputStream.DecodeZigZag32(3));

+            Assert.AreEqual(0x3FFFFFFF, CodedInputStream.DecodeZigZag32(0x7FFFFFFE));

+            Assert.AreEqual(unchecked((int) 0xC0000000), CodedInputStream.DecodeZigZag32(0x7FFFFFFF));

+            Assert.AreEqual(0x7FFFFFFF, CodedInputStream.DecodeZigZag32(0xFFFFFFFE));

+            Assert.AreEqual(unchecked((int) 0x80000000), CodedInputStream.DecodeZigZag32(0xFFFFFFFF));

+        }

+

+        [TestMethod]

+        public void DecodeZigZag64()

+        {

+            Assert.AreEqual(0, CodedInputStream.DecodeZigZag64(0));

+            Assert.AreEqual(-1, CodedInputStream.DecodeZigZag64(1));

+            Assert.AreEqual(1, CodedInputStream.DecodeZigZag64(2));

+            Assert.AreEqual(-2, CodedInputStream.DecodeZigZag64(3));

+            Assert.AreEqual(0x000000003FFFFFFFL, CodedInputStream.DecodeZigZag64(0x000000007FFFFFFEL));

+            Assert.AreEqual(unchecked((long) 0xFFFFFFFFC0000000L), CodedInputStream.DecodeZigZag64(0x000000007FFFFFFFL));

+            Assert.AreEqual(0x000000007FFFFFFFL, CodedInputStream.DecodeZigZag64(0x00000000FFFFFFFEL));

+            Assert.AreEqual(unchecked((long) 0xFFFFFFFF80000000L), CodedInputStream.DecodeZigZag64(0x00000000FFFFFFFFL));

+            Assert.AreEqual(0x7FFFFFFFFFFFFFFFL, CodedInputStream.DecodeZigZag64(0xFFFFFFFFFFFFFFFEL));

+            Assert.AreEqual(unchecked((long) 0x8000000000000000L), CodedInputStream.DecodeZigZag64(0xFFFFFFFFFFFFFFFFL));

+        }

+

+        [TestMethod]

+        public void ReadWholeMessage()

+        {

+            TestAllTypes message = TestUtil.GetAllSet();

+

+            byte[] rawBytes = message.ToByteArray();

+            Assert.AreEqual(rawBytes.Length, message.SerializedSize);

+            TestAllTypes message2 = TestAllTypes.ParseFrom(rawBytes);

+            TestUtil.AssertAllFieldsSet(message2);

+

+            // Try different block sizes.

+            for (int blockSize = 1; blockSize < 256; blockSize *= 2)

+            {

+                message2 = TestAllTypes.ParseFrom(new SmallBlockInputStream(rawBytes, blockSize));

+                TestUtil.AssertAllFieldsSet(message2);

+            }

+        }

+

+        [TestMethod]

+        public void SkipWholeMessage()

+        {

+            TestAllTypes message = TestUtil.GetAllSet();

+            byte[] rawBytes = message.ToByteArray();

+

+            // Create two parallel inputs.  Parse one as unknown fields while using

+            // skipField() to skip each field on the other.  Expect the same tags.

+            CodedInputStream input1 = CodedInputStream.CreateInstance(rawBytes);

+            CodedInputStream input2 = CodedInputStream.CreateInstance(rawBytes);

+            UnknownFieldSet.Builder unknownFields = UnknownFieldSet.CreateBuilder();

+

+            uint tag;

+            string name;

+            while (input1.ReadTag(out tag, out name))

+            {

+                uint tag2;

+                Assert.IsTrue(input2.ReadTag(out tag2, out name));

+                Assert.AreEqual(tag, tag2);

+

+                unknownFields.MergeFieldFrom(tag, input1);

+                input2.SkipField();

+            }

+        }

+

+        /// <summary>

+        /// Test that a bug in SkipRawBytes has been fixed: if the skip

+        /// skips exactly up to a limit, this should bnot break things

+        /// </summary>

+        [TestMethod]

+        public void SkipRawBytesBug()

+        {

+            byte[] rawBytes = new byte[] {1, 2};

+            CodedInputStream input = CodedInputStream.CreateInstance(rawBytes);

+

+            int limit = input.PushLimit(1);

+            input.SkipRawBytes(1);

+            input.PopLimit(limit);

+            Assert.AreEqual(2, input.ReadRawByte());

+        }

+

+        public void ReadHugeBlob()

+        {

+            // Allocate and initialize a 1MB blob.

+            byte[] blob = new byte[1 << 20];

+            for (int i = 0; i < blob.Length; i++)

+            {

+                blob[i] = (byte) i;

+            }

+

+            // Make a message containing it.

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TestUtil.SetAllFields(builder);

+            builder.SetOptionalBytes(ByteString.CopyFrom(blob));

+            TestAllTypes message = builder.Build();

+

+            // Serialize and parse it.  Make sure to parse from an InputStream, not

+            // directly from a ByteString, so that CodedInputStream uses buffered

+            // reading.

+            TestAllTypes message2 = TestAllTypes.ParseFrom(message.ToByteString().CreateCodedInput());

+

+            Assert.AreEqual(message.OptionalBytes, message2.OptionalBytes);

+

+            // Make sure all the other fields were parsed correctly.

+            TestAllTypes message3 = TestAllTypes.CreateBuilder(message2)

+                .SetOptionalBytes(TestUtil.GetAllSet().OptionalBytes)

+                .Build();

+            TestUtil.AssertAllFieldsSet(message3);

+        }

+

+        [TestMethod]

+        public void ReadMaliciouslyLargeBlob()

+        {

+            MemoryStream ms = new MemoryStream();

+            CodedOutputStream output = CodedOutputStream.CreateInstance(ms);

+

+            uint tag = WireFormat.MakeTag(1, WireFormat.WireType.LengthDelimited);

+            output.WriteRawVarint32(tag);

+            output.WriteRawVarint32(0x7FFFFFFF);

+            output.WriteRawBytes(new byte[32]); // Pad with a few random bytes.

+            output.Flush();

+            ms.Position = 0;

+

+            CodedInputStream input = CodedInputStream.CreateInstance(ms);

+            uint testtag;

+            string ignore;

+            Assert.IsTrue(input.ReadTag(out testtag, out ignore));

+            Assert.AreEqual(tag, testtag);

+

+            try

+            {

+                ByteString bytes = null;

+                input.ReadBytes(ref bytes);

+                Assert.Fail("Should have thrown an exception!");

+            }

+            catch (InvalidProtocolBufferException)

+            {

+                // success.

+            }

+        }

+

+        private static TestRecursiveMessage MakeRecursiveMessage(int depth)

+        {

+            if (depth == 0)

+            {

+                return TestRecursiveMessage.CreateBuilder().SetI(5).Build();

+            }

+            else

+            {

+                return TestRecursiveMessage.CreateBuilder()

+                    .SetA(MakeRecursiveMessage(depth - 1)).Build();

+            }

+        }

+

+        private static void AssertMessageDepth(TestRecursiveMessage message, int depth)

+        {

+            if (depth == 0)

+            {

+                Assert.IsFalse(message.HasA);

+                Assert.AreEqual(5, message.I);

+            }

+            else

+            {

+                Assert.IsTrue(message.HasA);

+                AssertMessageDepth(message.A, depth - 1);

+            }

+        }

+

+        [TestMethod]

+        public void MaliciousRecursion()

+        {

+            ByteString data64 = MakeRecursiveMessage(64).ToByteString();

+            ByteString data65 = MakeRecursiveMessage(65).ToByteString();

+

+            AssertMessageDepth(TestRecursiveMessage.ParseFrom(data64), 64);

+

+            try

+            {

+                TestRecursiveMessage.ParseFrom(data65);

+                Assert.Fail("Should have thrown an exception!");

+            }

+            catch (InvalidProtocolBufferException)

+            {

+                // success.

+            }

+

+            CodedInputStream input = data64.CreateCodedInput();

+            input.SetRecursionLimit(8);

+            try

+            {

+                TestRecursiveMessage.ParseFrom(input);

+                Assert.Fail("Should have thrown an exception!");

+            }

+            catch (InvalidProtocolBufferException)

+            {

+                // success.

+            }

+        }

+

+        [TestMethod]

+        public void SizeLimit()

+        {

+            // Have to use a Stream rather than ByteString.CreateCodedInput as SizeLimit doesn't

+            // apply to the latter case.

+            MemoryStream ms = new MemoryStream(TestUtil.GetAllSet().ToByteString().ToByteArray());

+            CodedInputStream input = CodedInputStream.CreateInstance(ms);

+            input.SetSizeLimit(16);

+

+            try

+            {

+                TestAllTypes.ParseFrom(input);

+                Assert.Fail("Should have thrown an exception!");

+            }

+            catch (InvalidProtocolBufferException)

+            {

+                // success.

+            }

+        }

+

+        [TestMethod]

+        public void ResetSizeCounter()

+        {

+            CodedInputStream input = CodedInputStream.CreateInstance(

+                new SmallBlockInputStream(new byte[256], 8));

+            input.SetSizeLimit(16);

+            input.ReadRawBytes(16);

+

+            try

+            {

+                input.ReadRawByte();

+                Assert.Fail("Should have thrown an exception!");

+            }

+            catch (InvalidProtocolBufferException)

+            {

+                // Success.

+            }

+

+            input.ResetSizeCounter();

+            input.ReadRawByte(); // No exception thrown.

+

+            try

+            {

+                input.ReadRawBytes(16); // Hits limit again.

+                Assert.Fail("Should have thrown an exception!");

+            }

+            catch (InvalidProtocolBufferException)

+            {

+                // Success.

+            }

+        }

+

+        /// <summary>

+        /// Tests that if we read an string that contains invalid UTF-8, no exception

+        /// is thrown.  Instead, the invalid bytes are replaced with the Unicode

+        /// "replacement character" U+FFFD.

+        /// </summary>

+        [TestMethod]

+        public void ReadInvalidUtf8()

+        {

+            MemoryStream ms = new MemoryStream();

+            CodedOutputStream output = CodedOutputStream.CreateInstance(ms);

+

+            uint tag = WireFormat.MakeTag(1, WireFormat.WireType.LengthDelimited);

+            output.WriteRawVarint32(tag);

+            output.WriteRawVarint32(1);

+            output.WriteRawBytes(new byte[] {0x80});

+            output.Flush();

+            ms.Position = 0;

+

+            CodedInputStream input = CodedInputStream.CreateInstance(ms);

+

+            uint testtag;

+            string ignored;

+

+            Assert.IsTrue(input.ReadTag(out testtag, out ignored));

+            Assert.AreEqual(tag, testtag);

+            string text = null;

+            input.ReadString(ref text);

+            Assert.AreEqual('\ufffd', text[0]);

+        }

+

+        /// <summary>

+        /// A stream which limits the number of bytes it reads at a time.

+        /// We use this to make sure that CodedInputStream doesn't screw up when

+        /// reading in small blocks.

+        /// </summary>

+        private sealed class SmallBlockInputStream : MemoryStream

+        {

+            private readonly int blockSize;

+

+            public SmallBlockInputStream(byte[] data, int blockSize)

+                : base(data)

+            {

+                this.blockSize = blockSize;

+            }

+

+            public override int Read(byte[] buffer, int offset, int count)

+            {

+                return base.Read(buffer, offset, Math.Min(count, blockSize));

+            }

+        }

+

+        enum TestNegEnum { None = 0, Value = -2 }

+

+        [TestMethod]

+        public void TestNegativeEnum()

+        {

+            byte[] bytes = new byte[10] { 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01 };

+            CodedInputStream input = CodedInputStream.CreateInstance(bytes);

+            object unk;

+            TestNegEnum val = TestNegEnum.None;

+

+            Assert.IsTrue(input.ReadEnum(ref val, out unk));

+            Assert.IsTrue(input.IsAtEnd);

+            Assert.AreEqual(TestNegEnum.Value, val);

+        }

+

+        [TestMethod]

+        public void TestNegativeEnumPackedArray()

+        {

+            int arraySize = 1 + (10 * 5);

+            int msgSize = 1 + 1 + arraySize;

+            byte[] bytes = new byte[msgSize];

+            CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);

+            output.WritePackedInt32Array(8, "", arraySize, new int[] { 0, -1, -2, -3, -4, -5 });

+

+            Assert.AreEqual(0, output.SpaceLeft);

+

+            CodedInputStream input = CodedInputStream.CreateInstance(bytes);

+            uint tag;

+            string name;

+            Assert.IsTrue(input.ReadTag(out tag, out name));

+

+            List<TestNegEnum> values = new List<TestNegEnum>();

+            ICollection<object> unk;

+            input.ReadEnumArray(tag, name, values, out unk);

+

+            Assert.AreEqual(2, values.Count);

+            Assert.AreEqual(TestNegEnum.None, values[0]);

+            Assert.AreEqual(TestNegEnum.Value, values[1]);

+

+            Assert.IsNotNull(unk);

+            Assert.AreEqual(4, unk.Count);

+        }

+

+        [TestMethod]

+        public void TestNegativeEnumArray()

+        {

+            int arraySize = 1 + 1 + (11 * 5);

+            int msgSize = arraySize;

+            byte[] bytes = new byte[msgSize];

+            CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);

+            output.WriteInt32Array(8, "", new int[] { 0, -1, -2, -3, -4, -5 });

+

+            Assert.AreEqual(0, output.SpaceLeft);

+

+            CodedInputStream input = CodedInputStream.CreateInstance(bytes);

+            uint tag;

+            string name;

+            Assert.IsTrue(input.ReadTag(out tag, out name));

+

+            List<TestNegEnum> values = new List<TestNegEnum>();

+            ICollection<object> unk;

+            input.ReadEnumArray(tag, name, values, out unk);

+

+            Assert.AreEqual(2, values.Count);

+            Assert.AreEqual(TestNegEnum.None, values[0]);

+            Assert.AreEqual(TestNegEnum.Value, values[1]);

+

+            Assert.IsNotNull(unk);

+            Assert.AreEqual(4, unk.Count);

+        }

+

+        //Issue 71:	CodedInputStream.ReadBytes go to slow path unnecessarily

+        [TestMethod]

+        public void TestSlowPathAvoidance()

+        {

+            using (var ms = new MemoryStream())

+            {

+                CodedOutputStream output = CodedOutputStream.CreateInstance(ms);

+                output.WriteField(FieldType.Bytes, 1, "bytes", ByteString.CopyFrom(new byte[100]));

+                output.WriteField(FieldType.Bytes, 2, "bytes", ByteString.CopyFrom(new byte[100]));

+                output.Flush();

+

+                ms.Position = 0;

+                CodedInputStream input = CodedInputStream.CreateInstance(ms, new byte[ms.Length / 2]);

+

+                uint tag;

+                string ignore;

+                ByteString value;

+

+                Assert.IsTrue(input.ReadTag(out tag, out ignore));

+                Assert.AreEqual(1, WireFormat.GetTagFieldNumber(tag));

+                value = ByteString.Empty;

+                Assert.IsTrue(input.ReadBytes(ref value) && value.Length == 100);

+

+                Assert.IsTrue(input.ReadTag(out tag, out ignore));

+                Assert.AreEqual(2, WireFormat.GetTagFieldNumber(tag));

+                value = ByteString.Empty;

+                Assert.IsTrue(input.ReadBytes(ref value) && value.Length == 100);

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/CodedOutputStreamTest.cs b/csharp/src/ProtocolBuffers.Test/CodedOutputStreamTest.cs
new file mode 100644
index 0000000..8e4e909
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/CodedOutputStreamTest.cs
@@ -0,0 +1,472 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.IO;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class CodedOutputStreamTest

+    {

+        /// <summary>

+        /// Writes the given value using WriteRawVarint32() and WriteRawVarint64() and

+        /// checks that the result matches the given bytes

+        /// </summary>

+        private static void AssertWriteVarint(byte[] data, ulong value)

+        {

+            // Only do 32-bit write if the value fits in 32 bits.

+            if ((value >> 32) == 0)

+            {

+                MemoryStream rawOutput = new MemoryStream();

+                CodedOutputStream output = CodedOutputStream.CreateInstance(rawOutput);

+                output.WriteRawVarint32((uint) value);

+                output.Flush();

+                TestUtil.AssertBytesEqual(data, rawOutput.ToArray());

+                // Also try computing size.

+                Assert.AreEqual(data.Length, CodedOutputStream.ComputeRawVarint32Size((uint) value));

+            }

+

+            {

+                MemoryStream rawOutput = new MemoryStream();

+                CodedOutputStream output = CodedOutputStream.CreateInstance(rawOutput);

+                output.WriteRawVarint64(value);

+                output.Flush();

+                TestUtil.AssertBytesEqual(data, rawOutput.ToArray());

+

+                // Also try computing size.

+                Assert.AreEqual(data.Length, CodedOutputStream.ComputeRawVarint64Size(value));

+            }

+

+            // Try different buffer sizes.

+            for (int bufferSize = 1; bufferSize <= 16; bufferSize *= 2)

+            {

+                // Only do 32-bit write if the value fits in 32 bits.

+                if ((value >> 32) == 0)

+                {

+                    MemoryStream rawOutput = new MemoryStream();

+                    CodedOutputStream output =

+                        CodedOutputStream.CreateInstance(rawOutput, bufferSize);

+                    output.WriteRawVarint32((uint) value);

+                    output.Flush();

+                    TestUtil.AssertBytesEqual(data, rawOutput.ToArray());

+                }

+

+                {

+                    MemoryStream rawOutput = new MemoryStream();

+                    CodedOutputStream output = CodedOutputStream.CreateInstance(rawOutput, bufferSize);

+                    output.WriteRawVarint64(value);

+                    output.Flush();

+                    TestUtil.AssertBytesEqual(data, rawOutput.ToArray());

+                }

+            }

+        }

+

+        /// <summary>

+        /// Tests WriteRawVarint32() and WriteRawVarint64()

+        /// </summary>

+        [TestMethod]

+        public void WriteVarint()

+        {

+            AssertWriteVarint(new byte[] {0x00}, 0);

+            AssertWriteVarint(new byte[] {0x01}, 1);

+            AssertWriteVarint(new byte[] {0x7f}, 127);

+            // 14882

+            AssertWriteVarint(new byte[] {0xa2, 0x74}, (0x22 << 0) | (0x74 << 7));

+            // 2961488830

+            AssertWriteVarint(new byte[] {0xbe, 0xf7, 0x92, 0x84, 0x0b},

+                              (0x3e << 0) | (0x77 << 7) | (0x12 << 14) | (0x04 << 21) |

+                              (0x0bL << 28));

+

+            // 64-bit

+            // 7256456126

+            AssertWriteVarint(new byte[] {0xbe, 0xf7, 0x92, 0x84, 0x1b},

+                              (0x3e << 0) | (0x77 << 7) | (0x12 << 14) | (0x04 << 21) |

+                              (0x1bL << 28));

+            // 41256202580718336

+            AssertWriteVarint(

+                new byte[] {0x80, 0xe6, 0xeb, 0x9c, 0xc3, 0xc9, 0xa4, 0x49},

+                (0x00 << 0) | (0x66 << 7) | (0x6b << 14) | (0x1c << 21) |

+                (0x43UL << 28) | (0x49L << 35) | (0x24UL << 42) | (0x49UL << 49));

+            // 11964378330978735131

+            AssertWriteVarint(

+                new byte[] {0x9b, 0xa8, 0xf9, 0xc2, 0xbb, 0xd6, 0x80, 0x85, 0xa6, 0x01},

+                unchecked((ulong)

+                          ((0x1b << 0) | (0x28 << 7) | (0x79 << 14) | (0x42 << 21) |

+                           (0x3bL << 28) | (0x56L << 35) | (0x00L << 42) |

+                           (0x05L << 49) | (0x26L << 56) | (0x01L << 63))));

+        }

+

+        /// <summary>

+        /// Parses the given bytes using WriteRawLittleEndian32() and checks

+        /// that the result matches the given value.

+        /// </summary>

+        private static void AssertWriteLittleEndian32(byte[] data, uint value)

+        {

+            MemoryStream rawOutput = new MemoryStream();

+            CodedOutputStream output = CodedOutputStream.CreateInstance(rawOutput);

+            output.WriteRawLittleEndian32(value);

+            output.Flush();

+            TestUtil.AssertBytesEqual(data, rawOutput.ToArray());

+

+            // Try different buffer sizes.

+            for (int bufferSize = 1; bufferSize <= 16; bufferSize *= 2)

+            {

+                rawOutput = new MemoryStream();

+                output = CodedOutputStream.CreateInstance(rawOutput, bufferSize);

+                output.WriteRawLittleEndian32(value);

+                output.Flush();

+                TestUtil.AssertBytesEqual(data, rawOutput.ToArray());

+            }

+        }

+

+        /// <summary>

+        /// Parses the given bytes using WriteRawLittleEndian64() and checks

+        /// that the result matches the given value.

+        /// </summary>

+        private static void AssertWriteLittleEndian64(byte[] data, ulong value)

+        {

+            MemoryStream rawOutput = new MemoryStream();

+            CodedOutputStream output = CodedOutputStream.CreateInstance(rawOutput);

+            output.WriteRawLittleEndian64(value);

+            output.Flush();

+            TestUtil.AssertBytesEqual(data, rawOutput.ToArray());

+

+            // Try different block sizes.

+            for (int blockSize = 1; blockSize <= 16; blockSize *= 2)

+            {

+                rawOutput = new MemoryStream();

+                output = CodedOutputStream.CreateInstance(rawOutput, blockSize);

+                output.WriteRawLittleEndian64(value);

+                output.Flush();

+                TestUtil.AssertBytesEqual(data, rawOutput.ToArray());

+            }

+        }

+

+        /// <summary>

+        /// Tests writeRawLittleEndian32() and writeRawLittleEndian64().

+        /// </summary>

+        [TestMethod]

+        public void WriteLittleEndian()

+        {

+            AssertWriteLittleEndian32(new byte[] {0x78, 0x56, 0x34, 0x12}, 0x12345678);

+            AssertWriteLittleEndian32(new byte[] {0xf0, 0xde, 0xbc, 0x9a}, 0x9abcdef0);

+

+            AssertWriteLittleEndian64(

+                new byte[] {0xf0, 0xde, 0xbc, 0x9a, 0x78, 0x56, 0x34, 0x12},

+                0x123456789abcdef0L);

+            AssertWriteLittleEndian64(

+                new byte[] {0x78, 0x56, 0x34, 0x12, 0xf0, 0xde, 0xbc, 0x9a},

+                0x9abcdef012345678UL);

+        }

+

+        [TestMethod]

+        public void WriteWholeMessage()

+        {

+            TestAllTypes message = TestUtil.GetAllSet();

+

+            byte[] rawBytes = message.ToByteArray();

+            TestUtil.AssertEqualBytes(TestUtil.GoldenMessage.ToByteArray(), rawBytes);

+

+            // Try different block sizes.

+            for (int blockSize = 1; blockSize < 256; blockSize *= 2)

+            {

+                MemoryStream rawOutput = new MemoryStream();

+                CodedOutputStream output =

+                    CodedOutputStream.CreateInstance(rawOutput, blockSize);

+                message.WriteTo(output);

+                output.Flush();

+                TestUtil.AssertEqualBytes(rawBytes, rawOutput.ToArray());

+            }

+        }

+

+        /// <summary>

+        /// Tests writing a whole message with every packed field type. Ensures the

+        /// wire format of packed fields is compatible with C++.

+        /// </summary>

+        [TestMethod]

+        public void WriteWholePackedFieldsMessage()

+        {

+            TestPackedTypes message = TestUtil.GetPackedSet();

+

+            byte[] rawBytes = message.ToByteArray();

+            TestUtil.AssertEqualBytes(TestUtil.GetGoldenPackedFieldsMessage().ToByteArray(),

+                                      rawBytes);

+        }

+

+        [TestMethod]

+        public void EncodeZigZag32()

+        {

+            Assert.AreEqual(0u, CodedOutputStream.EncodeZigZag32(0));

+            Assert.AreEqual(1u, CodedOutputStream.EncodeZigZag32(-1));

+            Assert.AreEqual(2u, CodedOutputStream.EncodeZigZag32(1));

+            Assert.AreEqual(3u, CodedOutputStream.EncodeZigZag32(-2));

+            Assert.AreEqual(0x7FFFFFFEu, CodedOutputStream.EncodeZigZag32(0x3FFFFFFF));

+            Assert.AreEqual(0x7FFFFFFFu, CodedOutputStream.EncodeZigZag32(unchecked((int) 0xC0000000)));

+            Assert.AreEqual(0xFFFFFFFEu, CodedOutputStream.EncodeZigZag32(0x7FFFFFFF));

+            Assert.AreEqual(0xFFFFFFFFu, CodedOutputStream.EncodeZigZag32(unchecked((int) 0x80000000)));

+        }

+

+        [TestMethod]

+        public void EncodeZigZag64()

+        {

+            Assert.AreEqual(0u, CodedOutputStream.EncodeZigZag64(0));

+            Assert.AreEqual(1u, CodedOutputStream.EncodeZigZag64(-1));

+            Assert.AreEqual(2u, CodedOutputStream.EncodeZigZag64(1));

+            Assert.AreEqual(3u, CodedOutputStream.EncodeZigZag64(-2));

+            Assert.AreEqual(0x000000007FFFFFFEuL,

+                            CodedOutputStream.EncodeZigZag64(unchecked((long) 0x000000003FFFFFFFUL)));

+            Assert.AreEqual(0x000000007FFFFFFFuL,

+                            CodedOutputStream.EncodeZigZag64(unchecked((long) 0xFFFFFFFFC0000000UL)));

+            Assert.AreEqual(0x00000000FFFFFFFEuL,

+                            CodedOutputStream.EncodeZigZag64(unchecked((long) 0x000000007FFFFFFFUL)));

+            Assert.AreEqual(0x00000000FFFFFFFFuL,

+                            CodedOutputStream.EncodeZigZag64(unchecked((long) 0xFFFFFFFF80000000UL)));

+            Assert.AreEqual(0xFFFFFFFFFFFFFFFEL,

+                            CodedOutputStream.EncodeZigZag64(unchecked((long) 0x7FFFFFFFFFFFFFFFUL)));

+            Assert.AreEqual(0xFFFFFFFFFFFFFFFFL,

+                            CodedOutputStream.EncodeZigZag64(unchecked((long) 0x8000000000000000UL)));

+        }

+

+        [TestMethod]

+        public void RoundTripZigZag32()

+        {

+            // Some easier-to-verify round-trip tests.  The inputs (other than 0, 1, -1)

+            // were chosen semi-randomly via keyboard bashing.

+            Assert.AreEqual(0, CodedInputStream.DecodeZigZag32(CodedOutputStream.EncodeZigZag32(0)));

+            Assert.AreEqual(1, CodedInputStream.DecodeZigZag32(CodedOutputStream.EncodeZigZag32(1)));

+            Assert.AreEqual(-1, CodedInputStream.DecodeZigZag32(CodedOutputStream.EncodeZigZag32(-1)));

+            Assert.AreEqual(14927, CodedInputStream.DecodeZigZag32(CodedOutputStream.EncodeZigZag32(14927)));

+            Assert.AreEqual(-3612, CodedInputStream.DecodeZigZag32(CodedOutputStream.EncodeZigZag32(-3612)));

+        }

+

+        [TestMethod]

+        public void RoundTripZigZag64()

+        {

+            Assert.AreEqual(0, CodedInputStream.DecodeZigZag64(CodedOutputStream.EncodeZigZag64(0)));

+            Assert.AreEqual(1, CodedInputStream.DecodeZigZag64(CodedOutputStream.EncodeZigZag64(1)));

+            Assert.AreEqual(-1, CodedInputStream.DecodeZigZag64(CodedOutputStream.EncodeZigZag64(-1)));

+            Assert.AreEqual(14927, CodedInputStream.DecodeZigZag64(CodedOutputStream.EncodeZigZag64(14927)));

+            Assert.AreEqual(-3612, CodedInputStream.DecodeZigZag64(CodedOutputStream.EncodeZigZag64(-3612)));

+

+            Assert.AreEqual(856912304801416L,

+                            CodedInputStream.DecodeZigZag64(CodedOutputStream.EncodeZigZag64(856912304801416L)));

+            Assert.AreEqual(-75123905439571256L,

+                            CodedInputStream.DecodeZigZag64(CodedOutputStream.EncodeZigZag64(-75123905439571256L)));

+        }

+

+        [TestMethod]

+        public void TestNegativeEnumNoTag()

+        {

+            Assert.AreEqual(10, CodedOutputStream.ComputeInt32SizeNoTag(-2));

+            Assert.AreEqual(10, CodedOutputStream.ComputeEnumSizeNoTag(-2));

+

+            byte[] bytes = new byte[10];

+            CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);

+            output.WriteEnumNoTag(-2);

+

+            Assert.AreEqual(0, output.SpaceLeft);

+            Assert.AreEqual("FE-FF-FF-FF-FF-FF-FF-FF-FF-01", BitConverter.ToString(bytes));

+        }

+

+        [TestMethod]

+        public void TestNegativeEnumWithTag()

+        {

+            Assert.AreEqual(11, CodedOutputStream.ComputeInt32Size(8, -2));

+            Assert.AreEqual(11, CodedOutputStream.ComputeEnumSize(8, -2));

+

+            byte[] bytes = new byte[11];

+            CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);

+            output.WriteEnum(8, "", -2, -2);

+

+            Assert.AreEqual(0, output.SpaceLeft);

+            //fyi, 0x40 == 0x08 << 3 + 0, field num + wire format shift

+            Assert.AreEqual("40-FE-FF-FF-FF-FF-FF-FF-FF-FF-01", BitConverter.ToString(bytes));

+        }

+

+        [TestMethod]

+        public void TestNegativeEnumArrayPacked()

+        {

+            int arraySize = 1 + (10 * 5);

+            int msgSize = 1 + 1 + arraySize;

+            byte[] bytes = new byte[msgSize];

+            CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);

+            output.WritePackedEnumArray(8, "", arraySize, new int[] { 0, -1, -2, -3, -4, -5 });

+

+            Assert.AreEqual(0, output.SpaceLeft);

+

+            CodedInputStream input = CodedInputStream.CreateInstance(bytes);

+            uint tag;

+            string name;

+            Assert.IsTrue(input.ReadTag(out tag, out name));

+

+            List<int> values = new List<int>();

+            input.ReadInt32Array(tag, name, values);

+

+            Assert.AreEqual(6, values.Count);

+            for (int i = 0; i > -6; i--)

+                Assert.AreEqual(i, values[Math.Abs(i)]);

+        }

+

+        [TestMethod]

+        public void TestNegativeEnumArray()

+        {

+            int arraySize = 1 + 1 + (11 * 5);

+            int msgSize = arraySize;

+            byte[] bytes = new byte[msgSize];

+            CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);

+            output.WriteEnumArray(8, "", new int[] { 0, -1, -2, -3, -4, -5 });

+

+            Assert.AreEqual(0, output.SpaceLeft);

+

+            CodedInputStream input = CodedInputStream.CreateInstance(bytes);

+            uint tag;

+            string name;

+            Assert.IsTrue(input.ReadTag(out tag, out name));

+

+            List<int> values = new List<int>();

+            input.ReadInt32Array(tag, name, values);

+

+            Assert.AreEqual(6, values.Count);

+            for (int i = 0; i > -6; i--)

+                Assert.AreEqual(i, values[Math.Abs(i)]);

+        }

+

+        [TestMethod]

+        public void TestCodedInputOutputPosition()

+        {

+            byte[] content = new byte[110];

+            for (int i = 0; i < content.Length; i++)

+                content[i] = (byte)i;

+

+            byte[] child = new byte[120];

+            {

+                MemoryStream ms = new MemoryStream(child);

+                CodedOutputStream cout = CodedOutputStream.CreateInstance(ms, 20);

+                // Field 11: numeric value: 500

+                cout.WriteTag(11, WireFormat.WireType.Varint);

+                Assert.AreEqual(1, cout.Position);

+                cout.WriteInt32NoTag(500);

+                Assert.AreEqual(3, cout.Position);

+                //Field 12: length delimited 120 bytes

+                cout.WriteTag(12, WireFormat.WireType.LengthDelimited);

+                Assert.AreEqual(4, cout.Position);

+                cout.WriteBytesNoTag(ByteString.CopyFrom(content));

+                Assert.AreEqual(115, cout.Position);

+                // Field 13: fixed numeric value: 501

+                cout.WriteTag(13, WireFormat.WireType.Fixed32);

+                Assert.AreEqual(116, cout.Position);

+                cout.WriteSFixed32NoTag(501);

+                Assert.AreEqual(120, cout.Position);

+                cout.Flush();

+            }

+

+            byte[] bytes = new byte[130];

+            {

+                CodedOutputStream cout = CodedOutputStream.CreateInstance(bytes);

+                // Field 1: numeric value: 500

+                cout.WriteTag(1, WireFormat.WireType.Varint);

+                Assert.AreEqual(1, cout.Position);

+                cout.WriteInt32NoTag(500);

+                Assert.AreEqual(3, cout.Position);

+                //Field 2: length delimited 120 bytes

+                cout.WriteTag(2, WireFormat.WireType.LengthDelimited);

+                Assert.AreEqual(4, cout.Position);

+                cout.WriteBytesNoTag(ByteString.CopyFrom(child));

+                Assert.AreEqual(125, cout.Position);

+                // Field 3: fixed numeric value: 500

+                cout.WriteTag(3, WireFormat.WireType.Fixed32);

+                Assert.AreEqual(126, cout.Position);

+                cout.WriteSFixed32NoTag(501);

+                Assert.AreEqual(130, cout.Position);

+                cout.Flush();

+            }

+            //Now test Input stream:

+            {

+                CodedInputStream cin = CodedInputStream.CreateInstance(new MemoryStream(bytes), new byte[50]);

+                uint tag;

+                int intValue = 0;

+                string ignore;

+                Assert.AreEqual(0, cin.Position);

+                // Field 1:

+                Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 1);

+                Assert.AreEqual(1, cin.Position);

+                Assert.IsTrue(cin.ReadInt32(ref intValue) && intValue == 500);

+                Assert.AreEqual(3, cin.Position);

+                //Field 2:

+                Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 2);

+                Assert.AreEqual(4, cin.Position);

+                uint childlen = cin.ReadRawVarint32();

+                Assert.AreEqual(120u, childlen);

+                Assert.AreEqual(5, cin.Position);

+                int oldlimit = cin.PushLimit((int)childlen);

+                Assert.AreEqual(5, cin.Position);

+                // Now we are reading child message

+                {

+                    // Field 11: numeric value: 500

+                    Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 11);

+                    Assert.AreEqual(6, cin.Position);

+                    Assert.IsTrue(cin.ReadInt32(ref intValue) && intValue == 500);

+                    Assert.AreEqual(8, cin.Position);

+                    //Field 12: length delimited 120 bytes

+                    Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 12);

+                    Assert.AreEqual(9, cin.Position);

+                    ByteString bstr = null;

+                    Assert.IsTrue(cin.ReadBytes(ref bstr) && bstr.Length == 110 && bstr.ToByteArray()[109] == 109);

+                    Assert.AreEqual(120, cin.Position);

+                    // Field 13: fixed numeric value: 501

+                    Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 13);

+                    // ROK - Previously broken here, this returned 126 failing to account for bufferSizeAfterLimit

+                    Assert.AreEqual(121, cin.Position);

+                    Assert.IsTrue(cin.ReadSFixed32(ref intValue) && intValue == 501);

+                    Assert.AreEqual(125, cin.Position);

+                    Assert.IsTrue(cin.IsAtEnd);

+                }

+                cin.PopLimit(oldlimit);

+                Assert.AreEqual(125, cin.Position);

+                // Field 3: fixed numeric value: 501

+                Assert.IsTrue(cin.ReadTag(out tag, out ignore) && tag >> 3 == 3);

+                Assert.AreEqual(126, cin.Position);

+                Assert.IsTrue(cin.ReadSFixed32(ref intValue) && intValue == 501);

+                Assert.AreEqual(130, cin.Position);

+                Assert.IsTrue(cin.IsAtEnd);

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/Collections/PopsicleListTest.cs b/csharp/src/ProtocolBuffers.Test/Collections/PopsicleListTest.cs
new file mode 100644
index 0000000..0bce60d
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Collections/PopsicleListTest.cs
@@ -0,0 +1,153 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers.Collections

+{

+    [TestClass]

+    public class PopsicleListTest

+    {

+        [TestMethod]

+        public void MutatingOperationsOnFrozenList()

+        {

+            PopsicleList<string> list = new PopsicleList<string>();

+            list.MakeReadOnly();

+            TestUtil.AssertNotSupported(() => list.Add(""));

+            TestUtil.AssertNotSupported(() => list.Clear());

+            TestUtil.AssertNotSupported(() => list.Insert(0, ""));

+            TestUtil.AssertNotSupported(() => list.Remove(""));

+            TestUtil.AssertNotSupported(() => list.RemoveAt(0));

+            TestUtil.AssertNotSupported(() => list.Add(new[] { "", "" }));

+        }

+

+        [TestMethod]

+        public void NonMutatingOperationsOnFrozenList()

+        {

+            PopsicleList<string> list = new PopsicleList<string>();

+            list.MakeReadOnly();

+            Assert.IsFalse(list.Contains(""));

+            Assert.AreEqual(0, list.Count);

+            list.CopyTo(new string[5], 0);

+            list.GetEnumerator();

+            Assert.AreEqual(-1, list.IndexOf(""));

+            Assert.IsTrue(list.IsReadOnly);

+        }

+

+        [TestMethod]

+        public void MutatingOperationsOnFluidList()

+        {

+            PopsicleList<string> list = new PopsicleList<string>();

+            list.Add("");

+            list.Clear();

+            list.Insert(0, "");

+            list.Remove("");

+            list.Add("x"); // Just to make the next call valid

+            list.RemoveAt(0);

+        }

+

+        [TestMethod]

+        public void NonMutatingOperationsOnFluidList()

+        {

+            PopsicleList<string> list = new PopsicleList<string>();

+            Assert.IsFalse(list.Contains(""));

+            Assert.AreEqual(0, list.Count);

+            list.CopyTo(new string[5], 0);

+            list.GetEnumerator();

+            Assert.AreEqual(-1, list.IndexOf(""));

+            Assert.IsFalse(list.IsReadOnly);

+        }

+

+        [TestMethod]

+        public void DoesNotAddNullEnumerable()

+        {

+            PopsicleList<string> list = new PopsicleList<string>();

+            try

+            {

+                list.Add((IEnumerable<string>)null);

+            }

+            catch (ArgumentNullException)

+            { return; }

+

+            Assert.Fail("List should not allow nulls.");

+        }

+

+        [TestMethod]

+        public void DoesNotAddRangeWithNull()

+        {

+            PopsicleList<string> list = new PopsicleList<string>();

+            try

+            {

+                list.Add(new[] { "a", "b", null });

+            }

+            catch (ArgumentNullException)

+            { return; }

+

+            Assert.Fail("List should not allow nulls.");

+        }

+

+        [TestMethod]

+        public void DoesNotAddNull()

+        {

+            PopsicleList<string> list = new PopsicleList<string>();

+            try

+            {

+                list.Add((string)null);

+            }

+            catch (ArgumentNullException)

+            { return; }

+

+            Assert.Fail("List should not allow nulls.");

+        }

+

+        [TestMethod]

+        public void DoesNotSetNull()

+        {

+            PopsicleList<string> list = new PopsicleList<string>();

+            list.Add("a");

+            try

+            {

+                list[0] = null;

+            }

+            catch (ArgumentNullException)

+            { return; }

+

+            Assert.Fail("List should not allow nulls.");

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/Compatibility/BinaryCompatibilityTests.cs b/csharp/src/ProtocolBuffers.Test/Compatibility/BinaryCompatibilityTests.cs
new file mode 100644
index 0000000..9707f8e
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Compatibility/BinaryCompatibilityTests.cs
@@ -0,0 +1,20 @@
+using System;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers.Compatibility

+{

+    [TestClass]

+    public class BinaryCompatibilityTests : CompatibilityTests

+    {

+        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)

+        {

+            byte[] bresult = message.ToByteArray();

+            return Convert.ToBase64String(bresult);

+        }

+

+        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)

+        {

+            return builder.MergeFrom((byte[])Convert.FromBase64String((string)message), registry);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/Compatibility/CompatibilityTests.cs b/csharp/src/ProtocolBuffers.Test/Compatibility/CompatibilityTests.cs
new file mode 100644
index 0000000..2018961
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Compatibility/CompatibilityTests.cs
@@ -0,0 +1,227 @@
+using System;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+

+namespace Google.ProtocolBuffers.Compatibility

+{

+    /// <summary>

+    /// This abstract base implements several tests to ensure that well-known messages can be written

+    /// and read to/from various formats without loosing data.  Implementations overload the two serailization

+    /// methods to provide the tests with the means to read and write for a given format.

+    /// </summary>

+    public abstract class CompatibilityTests

+    {

+        protected abstract object SerializeMessage<TMessage, TBuilder>(TMessage message)

+            where TMessage : IMessageLite<TMessage, TBuilder>

+            where TBuilder : IBuilderLite<TMessage, TBuilder>;

+

+        protected abstract TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)

+            where TMessage : IMessageLite<TMessage, TBuilder>

+            where TBuilder : IBuilderLite<TMessage, TBuilder>;

+

+        protected virtual void AssertOutputEquals(object lhs, object rhs)

+        {

+            Assert.AreEqual<object>(lhs, rhs);

+        }

+

+        [TestMethod]

+        public virtual void RoundTripWithEmptyChildMessageSize()

+        {

+            SizeMessage1 msg = SizeMessage1.CreateBuilder()

+                .SetField100(100)

+                .SetField15(SizeMessage1SubMessage.DefaultInstance)

+                .BuildPartial();

+            byte[] contents = msg.ToByteArray();

+            object content = SerializeMessage<SizeMessage1, SizeMessage1.Builder>(msg);

+

+            SizeMessage1 copy = DeserializeMessage<SizeMessage1, SizeMessage1.Builder>(content, SizeMessage1.CreateBuilder(), ExtensionRegistry.Empty).BuildPartial();

+

+            Assert.AreEqual(msg, copy);

+            AssertOutputEquals(content, SerializeMessage<SizeMessage1, SizeMessage1.Builder>(copy));

+            Assert.AreEqual(Convert.ToBase64String(contents), Convert.ToBase64String(copy.ToByteArray()));

+        }

+

+        [TestMethod]

+        public virtual void RoundTripWithEmptyChildMessageSpeed()

+        {

+            SpeedMessage1 msg = SpeedMessage1.CreateBuilder()

+                .SetField100(100)

+                .SetField15(SpeedMessage1SubMessage.DefaultInstance)

+                .BuildPartial();

+            byte[] contents = msg.ToByteArray();

+            object content = SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(msg);

+

+            SpeedMessage1 copy = DeserializeMessage<SpeedMessage1, SpeedMessage1.Builder>(content, SpeedMessage1.CreateBuilder(), ExtensionRegistry.Empty).BuildPartial();

+

+            Assert.AreEqual(msg, copy);

+            AssertOutputEquals(content, SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(copy));

+            Assert.AreEqual(Convert.ToBase64String(contents), Convert.ToBase64String(copy.ToByteArray()));

+        }

+

+        [TestMethod]

+        public virtual void RoundTripMessage1OptimizeSize()

+        {

+            SizeMessage1 msg = SizeMessage1.CreateBuilder().MergeFrom(TestResources.google_message1).Build();

+            object content = SerializeMessage<SizeMessage1, SizeMessage1.Builder>(msg);

+

+            SizeMessage1 copy = DeserializeMessage<SizeMessage1, SizeMessage1.Builder>(content, SizeMessage1.CreateBuilder(), ExtensionRegistry.Empty).Build();

+

+            Assert.AreEqual(msg, copy);

+            AssertOutputEquals(content, SerializeMessage<SizeMessage1, SizeMessage1.Builder>(copy));

+            Assert.AreEqual(Convert.ToBase64String(TestResources.google_message1), Convert.ToBase64String(copy.ToByteArray()));

+        }

+

+        [TestMethod]

+        public virtual void RoundTripMessage2OptimizeSize()

+        {

+            SizeMessage2 msg = SizeMessage2.CreateBuilder().MergeFrom(TestResources.google_message2).Build();

+            object content = SerializeMessage<SizeMessage2, SizeMessage2.Builder>(msg);

+

+            SizeMessage2 copy = DeserializeMessage<SizeMessage2, SizeMessage2.Builder>(content, SizeMessage2.CreateBuilder(), ExtensionRegistry.Empty).Build();

+

+            Assert.AreEqual(msg, copy);

+            AssertOutputEquals(content, SerializeMessage<SizeMessage2, SizeMessage2.Builder>(copy));

+            Assert.AreEqual(Convert.ToBase64String(TestResources.google_message2), Convert.ToBase64String(copy.ToByteArray()));

+        }

+

+        [TestMethod]

+        public virtual void RoundTripMessage1OptimizeSpeed()

+        {

+            SpeedMessage1 msg = SpeedMessage1.CreateBuilder().MergeFrom(TestResources.google_message1).Build();

+            object content = SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(msg);

+

+            SpeedMessage1 copy = DeserializeMessage<SpeedMessage1, SpeedMessage1.Builder>(content, SpeedMessage1.CreateBuilder(), ExtensionRegistry.Empty).Build();

+

+            Assert.AreEqual(msg, copy);

+            AssertOutputEquals(content, SerializeMessage<SpeedMessage1, SpeedMessage1.Builder>(copy));

+            Assert.AreEqual(Convert.ToBase64String(TestResources.google_message1), Convert.ToBase64String(copy.ToByteArray()));

+        }

+

+        [TestMethod]

+        public virtual void RoundTripMessage2OptimizeSpeed()

+        {

+            SpeedMessage2 msg = SpeedMessage2.CreateBuilder().MergeFrom(TestResources.google_message2).Build();

+            object content = SerializeMessage<SpeedMessage2, SpeedMessage2.Builder>(msg);

+

+            SpeedMessage2 copy = DeserializeMessage<SpeedMessage2, SpeedMessage2.Builder>(content, SpeedMessage2.CreateBuilder(), ExtensionRegistry.Empty).Build();

+

+            Assert.AreEqual(msg, copy);

+            AssertOutputEquals(content, SerializeMessage<SpeedMessage2, SpeedMessage2.Builder>(copy));

+            Assert.AreEqual(Convert.ToBase64String(TestResources.google_message2), Convert.ToBase64String(copy.ToByteArray()));

+        }

+

+        #region Test message builders

+

+        protected static TestAllTypes.Builder AddAllTypes(TestAllTypes.Builder builder)

+        {

+            return builder.SetOptionalInt32(1001)

+                .SetOptionalInt64(1001)

+                .SetOptionalUint32(1001)

+                .SetOptionalUint64(1001)

+                .SetOptionalSint32(-1001)

+                .SetOptionalSint64(-1001)

+                .SetOptionalFixed32(1001)

+                .SetOptionalFixed64(1001)

+                .SetOptionalSfixed32(-1001)

+                .SetOptionalSfixed64(-1001)

+                .SetOptionalFloat(1001.1001f)

+                .SetOptionalDouble(1001.1001)

+                .SetOptionalBool(true)

+                .SetOptionalString("this is a string value")

+                .SetOptionalBytes(ByteString.CopyFromUtf8("this is an array of bytes"))

+                .SetOptionalGroup(new TestAllTypes.Types.OptionalGroup.Builder().SetA(1001))

+                .SetOptionalNestedMessage(new TestAllTypes.Types.NestedMessage.Builder().SetBb(1001))

+                .SetOptionalNestedEnum(TestAllTypes.Types.NestedEnum.FOO)

+            ;

+        }

+

+        protected static TestAllTypes.Builder AddRepeatedTypes(TestAllTypes.Builder builder, int size)

+        {

+            //repeated values

+            for (int i = 0; i < size; i++)

+                builder.AddRepeatedInt32(1001 + i)

+                .AddRepeatedInt64(1001)

+                .AddRepeatedUint32(1001)

+                .AddRepeatedUint64(1001)

+                .AddRepeatedSint32(-1001)

+                .AddRepeatedSint64(-1001)

+                .AddRepeatedFixed32(1001)

+                .AddRepeatedFixed64(1001)

+                .AddRepeatedSfixed32(-1001)

+                .AddRepeatedSfixed64(-1001)

+                .AddRepeatedFloat(1001.1001f)

+                .AddRepeatedDouble(1001.1001)

+                .AddRepeatedBool(true)

+                .AddRepeatedString("this is a string value")

+                .AddRepeatedBytes(ByteString.CopyFromUtf8("this is an array of bytes"))

+                .AddRepeatedGroup(new TestAllTypes.Types.RepeatedGroup.Builder().SetA(1001))

+                .AddRepeatedNestedMessage(new TestAllTypes.Types.NestedMessage.Builder().SetBb(1001))

+                .AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.FOO)

+            ;

+            return builder;

+        }

+

+        protected static TestPackedTypes.Builder AddPackedTypes(TestPackedTypes.Builder builder, int size)

+        {

+            for(int i=0; i < size; i++ )

+                builder.AddPackedInt32(1001)

+                .AddPackedInt64(1001)

+                .AddPackedUint32(1001)

+                .AddPackedUint64(1001)

+                .AddPackedSint32(-1001)

+                .AddPackedSint64(-1001)

+                .AddPackedFixed32(1001)

+                .AddPackedFixed64(1001)

+                .AddPackedSfixed32(-1001)

+                .AddPackedSfixed64(-1001)

+                .AddPackedFloat(1001.1001f)

+                .AddPackedDouble(1001.1001)

+                .AddPackedBool(true)

+                .AddPackedEnum(ForeignEnum.FOREIGN_FOO)

+            ;

+            return builder;

+        }

+

+        #endregion

+

+        [TestMethod]

+        public void TestRoundTripAllTypes()

+        {

+            TestAllTypes msg = AddAllTypes(new TestAllTypes.Builder()).Build();

+            object content = SerializeMessage<TestAllTypes, TestAllTypes.Builder>(msg);

+

+            TestAllTypes copy = DeserializeMessage<TestAllTypes, TestAllTypes.Builder>(content, TestAllTypes.CreateBuilder(), ExtensionRegistry.Empty).Build();

+

+            Assert.AreEqual(msg, copy);

+            AssertOutputEquals(content, SerializeMessage<TestAllTypes, TestAllTypes.Builder>(copy));

+            Assert.AreEqual(Convert.ToBase64String(msg.ToByteArray()), Convert.ToBase64String(copy.ToByteArray()));

+        }

+

+        [TestMethod]

+        public void TestRoundTripRepeatedTypes()

+        {

+            TestAllTypes msg = AddRepeatedTypes(new TestAllTypes.Builder(), 5).Build();

+            object content = SerializeMessage<TestAllTypes, TestAllTypes.Builder>(msg);

+

+            TestAllTypes copy = DeserializeMessage<TestAllTypes, TestAllTypes.Builder>(content, TestAllTypes.CreateBuilder(), ExtensionRegistry.Empty).Build();

+

+            Assert.AreEqual(msg, copy);

+            AssertOutputEquals(content, SerializeMessage<TestAllTypes, TestAllTypes.Builder>(copy));

+            Assert.AreEqual(Convert.ToBase64String(msg.ToByteArray()), Convert.ToBase64String(copy.ToByteArray()));

+        }

+

+        [TestMethod]

+        public void TestRoundTripPackedTypes()

+        {

+            TestPackedTypes msg = AddPackedTypes(new TestPackedTypes.Builder(), 5).Build();

+            object content = SerializeMessage<TestPackedTypes, TestPackedTypes.Builder>(msg);

+

+            TestPackedTypes copy = DeserializeMessage<TestPackedTypes, TestPackedTypes.Builder>(content, TestPackedTypes.CreateBuilder(), ExtensionRegistry.Empty).Build();

+

+            Assert.AreEqual(msg, copy);

+            AssertOutputEquals(content, SerializeMessage<TestPackedTypes, TestPackedTypes.Builder>(copy));

+            Assert.AreEqual(Convert.ToBase64String(msg.ToByteArray()), Convert.ToBase64String(copy.ToByteArray()));

+        }

+    }

+}

diff --git a/csharp/src/ProtocolBuffers.Test/Compatibility/DictionaryCompatibilityTests.cs b/csharp/src/ProtocolBuffers.Test/Compatibility/DictionaryCompatibilityTests.cs
new file mode 100644
index 0000000..73037cc
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Compatibility/DictionaryCompatibilityTests.cs
@@ -0,0 +1,37 @@
+using System;

+using System.Collections.Generic;

+using System.IO;

+using System.Text;

+using Google.ProtocolBuffers.Serialization;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers.Compatibility

+{

+    [TestClass]

+    public class DictionaryCompatibilityTests : CompatibilityTests

+    {

+        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)

+        {

+            DictionaryWriter writer = new DictionaryWriter();

+            writer.WriteMessage(message);

+            return writer.ToDictionary();

+        }

+

+        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)

+        {

+            new DictionaryReader((IDictionary<string, object>)message).Merge(builder);

+            return builder;

+        }

+

+        protected override void AssertOutputEquals(object lhs, object rhs)

+        {

+            IDictionary<string, object> left = (IDictionary<string, object>)lhs;

+            IDictionary<string, object> right = (IDictionary<string, object>)rhs;

+

+            Assert.AreEqual(

+                String.Join(",", new List<string>(left.Keys).ToArray()),

+                String.Join(",", new List<string>(right.Keys).ToArray())

+            );

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/Compatibility/JsonCompatibilityTests.cs b/csharp/src/ProtocolBuffers.Test/Compatibility/JsonCompatibilityTests.cs
new file mode 100644
index 0000000..7460310
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Compatibility/JsonCompatibilityTests.cs
@@ -0,0 +1,44 @@
+using System.IO;

+using System.Text;

+using Google.ProtocolBuffers.Serialization;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers.Compatibility

+{

+    [TestClass]

+    public class JsonCompatibilityTests : CompatibilityTests

+    {

+        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)

+        {

+            StringWriter sw = new StringWriter();

+            JsonFormatWriter.CreateInstance(sw)

+                .WriteMessage(message);

+            return sw.ToString();

+        }

+

+        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)

+        {

+            JsonFormatReader.CreateInstance((string)message).Merge(builder);

+            return builder;

+        }

+    }

+

+    [TestClass]

+    public class JsonCompatibilityFormattedTests : CompatibilityTests

+    {

+        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)

+        {

+            StringWriter sw = new StringWriter();

+            JsonFormatWriter.CreateInstance(sw)

+                .Formatted()

+                .WriteMessage(message);

+            return sw.ToString();

+        }

+

+        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)

+        {

+            JsonFormatReader.CreateInstance((string)message).Merge(builder);

+            return builder;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/Compatibility/TestResources.cs b/csharp/src/ProtocolBuffers.Test/Compatibility/TestResources.cs
new file mode 100644
index 0000000..c3ce588
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Compatibility/TestResources.cs
@@ -0,0 +1,42 @@
+using System;

+using System.Collections.Generic;

+using System.IO;

+using System.Text;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers.Compatibility

+{

+    static class TestResources

+    {

+        public static byte[] google_message1

+        { 

+            get 

+            {

+                Stream resource = typeof(TestResources).Assembly.GetManifestResourceStream(

+                    typeof(TestResources).Namespace + ".google_message1.dat");

+

+                Assert.IsNotNull(resource, "Unable to the locate resource: google_message1");

+

+                byte[] bytes = new byte[resource.Length];

+                int amtRead = resource.Read(bytes, 0, bytes.Length);

+                Assert.AreEqual(bytes.Length, amtRead);

+                return bytes;

+            }

+        }

+        public static byte[] google_message2

+        {

+            get

+            {

+                Stream resource = typeof(TestResources).Assembly.GetManifestResourceStream(

+                    typeof(TestResources).Namespace + ".google_message2.dat");

+

+                Assert.IsNotNull(resource, "Unable to the locate resource: google_message2");

+

+                byte[] bytes = new byte[resource.Length];

+                int amtRead = resource.Read(bytes, 0, bytes.Length);

+                Assert.AreEqual(bytes.Length, amtRead);

+                return bytes;

+            }

+        }

+    }

+}

diff --git a/csharp/src/ProtocolBuffers.Test/Compatibility/TextCompatibilityTests.cs b/csharp/src/ProtocolBuffers.Test/Compatibility/TextCompatibilityTests.cs
new file mode 100644
index 0000000..c2eaadf
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Compatibility/TextCompatibilityTests.cs
@@ -0,0 +1,36 @@
+using System.ComponentModel;

+using System.IO;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers.Compatibility

+{

+    [TestClass]

+    public class TextCompatibilityTests : CompatibilityTests

+    {

+        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)

+        {

+            StringWriter text = new StringWriter();

+            message.PrintTo(text);

+            return text.ToString();

+        }

+

+        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)

+        {

+            TextFormat.Merge(new StringReader((string)message), registry, (IBuilder)builder);

+            return builder;

+        }

+        //This test can take a very long time to run.

+        [TestMethod]

+        public override void RoundTripMessage2OptimizeSize()

+        {

+            //base.RoundTripMessage2OptimizeSize();

+        }

+

+        //This test can take a very long time to run.

+        [TestMethod]

+        public override void RoundTripMessage2OptimizeSpeed()

+        {

+            //base.RoundTripMessage2OptimizeSpeed();

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/Compatibility/XmlCompatibilityTests.cs b/csharp/src/ProtocolBuffers.Test/Compatibility/XmlCompatibilityTests.cs
new file mode 100644
index 0000000..7061474
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Compatibility/XmlCompatibilityTests.cs
@@ -0,0 +1,46 @@
+using System.IO;

+using System.Xml;

+using Google.ProtocolBuffers.Serialization;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers.Compatibility

+{

+    [TestClass]

+    public class XmlCompatibilityTests : CompatibilityTests

+    {

+        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)

+        {

+            StringWriter text = new StringWriter();

+            XmlFormatWriter writer = XmlFormatWriter.CreateInstance(text);

+            writer.WriteMessage("root", message);

+            return text.ToString();

+        }

+

+        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)

+        {

+            XmlFormatReader reader = XmlFormatReader.CreateInstance((string)message);

+            return reader.Merge("root", builder, registry);

+        }

+    }

+

+    [TestClass]

+    public class XmlCompatibilityFormattedTests : CompatibilityTests

+    {

+        protected override object SerializeMessage<TMessage, TBuilder>(TMessage message)

+        {

+            StringWriter text = new StringWriter();

+            XmlWriter xwtr = XmlWriter.Create(text, new XmlWriterSettings { Indent = true, IndentChars = "  " });

+

+            XmlFormatWriter writer = XmlFormatWriter.CreateInstance(xwtr).SetOptions(XmlWriterOptions.OutputNestedArrays);

+            writer.WriteMessage("root", message);

+            return text.ToString();

+        }

+

+        protected override TBuilder DeserializeMessage<TMessage, TBuilder>(object message, TBuilder builder, ExtensionRegistry registry)

+        {

+            XmlFormatReader reader = XmlFormatReader.CreateInstance((string)message).SetOptions(XmlReaderOptions.ReadNestedArrays);

+            return reader.Merge("root", builder, registry);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/Compatibility/google_message1.dat b/csharp/src/ProtocolBuffers.Test/Compatibility/google_message1.dat
new file mode 100644
index 0000000..bc0f064
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Compatibility/google_message1.dat
Binary files differ
diff --git a/csharp/src/ProtocolBuffers.Test/Compatibility/google_message2.dat b/csharp/src/ProtocolBuffers.Test/Compatibility/google_message2.dat
new file mode 100644
index 0000000..06c0944
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Compatibility/google_message2.dat
Binary files differ
diff --git a/csharp/src/ProtocolBuffers.Test/DeprecatedMemberTest.cs b/csharp/src/ProtocolBuffers.Test/DeprecatedMemberTest.cs
new file mode 100644
index 0000000..0901f04
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/DeprecatedMemberTest.cs
@@ -0,0 +1,102 @@
+using System;

+using System.Collections.Generic;

+using System.Reflection;

+using System.Text;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using UnitTest.Issues.TestProtos;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class DeprecatedMemberTest

+    {

+        private static void AssertIsDeprecated(MemberInfo member)

+        {

+            Assert.IsNotNull(member);

+            Assert.IsTrue(member.IsDefined(typeof(ObsoleteAttribute), false), "Member not obsolete: " + member);

+        }

+

+        [TestMethod]

+        public void TestDepreatedPrimitiveValue()

+        {

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("HasPrimitiveValue"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("PrimitiveValue"));

+

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("HasPrimitiveValue"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("PrimitiveValue"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("ClearPrimitiveValue"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetPrimitiveValue"));

+        }

+        [TestMethod]

+        public void TestDepreatedPrimitiveArray()

+        {

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("PrimitiveArrayList"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("PrimitiveArrayCount"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetMethod("GetPrimitiveArray"));

+

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("PrimitiveArrayList"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("PrimitiveArrayCount"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("GetPrimitiveArray"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetPrimitiveArray"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddPrimitiveArray"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddRangePrimitiveArray"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("ClearPrimitiveArray"));

+        }

+        [TestMethod]

+        public void TestDepreatedMessageValue()

+        {

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("HasMessageValue"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("MessageValue"));

+

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("HasMessageValue"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("MessageValue"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("MergeMessageValue"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("ClearMessageValue"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetMessageValue", new[] { typeof(DeprecatedChild) }));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetMessageValue", new[] { typeof(DeprecatedChild.Builder) }));

+        }

+        [TestMethod]

+        public void TestDepreatedMessageArray()

+        {

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("MessageArrayList"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("MessageArrayCount"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetMethod("GetMessageArray"));

+

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("MessageArrayList"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("MessageArrayCount"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("GetMessageArray"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetMessageArray", new[] { typeof(int), typeof(DeprecatedChild) }));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetMessageArray", new[] { typeof(int), typeof(DeprecatedChild.Builder) }));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddMessageArray", new[] { typeof(DeprecatedChild) }));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddMessageArray", new[] { typeof(DeprecatedChild.Builder) }));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddRangeMessageArray"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("ClearMessageArray"));

+        }

+        [TestMethod]

+        public void TestDepreatedEnumValue()

+        {

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("HasEnumValue"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("EnumValue"));

+

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("HasEnumValue"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("EnumValue"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("ClearEnumValue"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetEnumValue"));

+        }

+        [TestMethod]

+        public void TestDepreatedEnumArray()

+        {

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("EnumArrayList"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetProperty("EnumArrayCount"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage).GetMethod("GetEnumArray"));

+

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("EnumArrayList"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetProperty("EnumArrayCount"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("GetEnumArray"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("SetEnumArray"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddEnumArray"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("AddRangeEnumArray"));

+            AssertIsDeprecated(typeof(DeprecatedFieldsMessage.Builder).GetMethod("ClearEnumArray"));

+        }

+    }

+}

diff --git a/csharp/src/ProtocolBuffers.Test/Descriptors/MessageDescriptorTest.cs b/csharp/src/ProtocolBuffers.Test/Descriptors/MessageDescriptorTest.cs
new file mode 100644
index 0000000..79033e6
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Descriptors/MessageDescriptorTest.cs
@@ -0,0 +1,72 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using Google.ProtocolBuffers.TestProtos;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    [TestClass]

+    public class MessageDescriptorTest

+    {

+        [TestMethod]

+        public void FindPropertyWithDefaultName()

+        {

+            Assert.AreSame(OptionsMessage.Descriptor.FindFieldByNumber(OptionsMessage.NormalFieldNumber),

+                           OptionsMessage.Descriptor.FindFieldByPropertyName("Normal"));

+        }

+

+        [TestMethod]

+        public void FindPropertyWithAutoModifiedName()

+        {

+            Assert.AreSame(OptionsMessage.Descriptor.FindFieldByNumber(OptionsMessage.OptionsMessage_FieldNumber),

+                           OptionsMessage.Descriptor.FindFieldByPropertyName("OptionsMessage_"));

+        }

+

+        [TestMethod]

+        public void FindPropertyWithCustomizedName()

+        {

+            Assert.AreSame(OptionsMessage.Descriptor.FindFieldByNumber(OptionsMessage.CustomNameFieldNumber),

+                           OptionsMessage.Descriptor.FindFieldByPropertyName("CustomName"));

+        }

+

+        [TestMethod]

+        public void FindPropertyWithInvalidName()

+        {

+            Assert.IsNull(OptionsMessage.Descriptor.FindFieldByPropertyName("Bogus"));

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/DescriptorsTest.cs b/csharp/src/ProtocolBuffers.Test/DescriptorsTest.cs
new file mode 100644
index 0000000..ca10c62
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/DescriptorsTest.cs
@@ -0,0 +1,350 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.Text;

+using Google.ProtocolBuffers.Descriptors;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Tests for descriptors. (Not in its own namespace or broken up into individual classes as the

+    /// size doesn't warrant it. On the other hand, this makes me feel a bit dirty...)

+    /// </summary>

+    [TestClass]

+    public class DescriptorsTest

+    {

+        [TestMethod]

+        public void FileDescriptor()

+        {

+            FileDescriptor file = UnitTestProtoFile.Descriptor;

+

+            Assert.AreEqual("google/protobuf/unittest.proto", file.Name);

+            Assert.AreEqual("protobuf_unittest", file.Package);

+

+            Assert.AreEqual("UnittestProto", file.Options.JavaOuterClassname);

+            Assert.AreEqual("google/protobuf/unittest.proto", file.Proto.Name);

+

+// TODO(jonskeet): Either change to expect 2 dependencies, or don't emit them.

+//      Assert.AreEqual(2, file.Dependencies.Count);

+            Assert.AreEqual(UnitTestImportProtoFile.Descriptor, file.Dependencies[1]);

+

+            MessageDescriptor messageType = TestAllTypes.Descriptor;

+            Assert.AreEqual(messageType, file.MessageTypes[0]);

+            Assert.AreEqual(messageType, file.FindTypeByName<MessageDescriptor>("TestAllTypes"));

+            Assert.IsNull(file.FindTypeByName<MessageDescriptor>("NoSuchType"));

+            Assert.IsNull(file.FindTypeByName<MessageDescriptor>("protobuf_unittest.TestAllTypes"));

+            for (int i = 0; i < file.MessageTypes.Count; i++)

+            {

+                Assert.AreEqual(i, file.MessageTypes[i].Index);

+            }

+

+            Assert.AreEqual(file.EnumTypes[0], file.FindTypeByName<EnumDescriptor>("ForeignEnum"));

+            Assert.IsNull(file.FindTypeByName<EnumDescriptor>("NoSuchType"));

+            Assert.IsNull(file.FindTypeByName<EnumDescriptor>("protobuf_unittest.ForeignEnum"));

+            Assert.AreEqual(1, UnitTestImportProtoFile.Descriptor.EnumTypes.Count);

+            Assert.AreEqual("ImportEnum", UnitTestImportProtoFile.Descriptor.EnumTypes[0].Name);

+            for (int i = 0; i < file.EnumTypes.Count; i++)

+            {

+                Assert.AreEqual(i, file.EnumTypes[i].Index);

+            }

+

+            ServiceDescriptor service = TestGenericService.Descriptor;

+            Assert.AreEqual(service, UnitTestGenericServices.Descriptor.Services[0]);

+            Assert.AreEqual(service,

+                            UnitTestGenericServices.Descriptor.FindTypeByName<ServiceDescriptor>("TestGenericService"));

+            Assert.IsNull(UnitTestGenericServices.Descriptor.FindTypeByName<ServiceDescriptor>("NoSuchType"));

+            Assert.IsNull(

+                UnitTestGenericServices.Descriptor.FindTypeByName<ServiceDescriptor>(

+                    "protobuf_unittest.TestGenericService"));

+            Assert.AreEqual(0, UnitTestImportProtoFile.Descriptor.Services.Count);

+            for (int i = 0; i < file.Services.Count; i++)

+            {

+                Assert.AreEqual(i, file.Services[i].Index);

+            }

+

+            FieldDescriptor extension = UnitTestProtoFile.OptionalInt32Extension.Descriptor;

+            Assert.AreEqual(extension, file.Extensions[0]);

+            Assert.AreEqual(extension, file.FindTypeByName<FieldDescriptor>("optional_int32_extension"));

+            Assert.IsNull(file.FindTypeByName<FieldDescriptor>("no_such_ext"));

+            Assert.IsNull(file.FindTypeByName<FieldDescriptor>("protobuf_unittest.optional_int32_extension"));

+            Assert.AreEqual(0, UnitTestImportProtoFile.Descriptor.Extensions.Count);

+            for (int i = 0; i < file.Extensions.Count; i++)

+            {

+                Assert.AreEqual(i, file.Extensions[i].Index);

+            }

+        }

+

+        [TestMethod]

+        public void MessageDescriptor()

+        {

+            MessageDescriptor messageType = TestAllTypes.Descriptor;

+            MessageDescriptor nestedType = TestAllTypes.Types.NestedMessage.Descriptor;

+

+            Assert.AreEqual("TestAllTypes", messageType.Name);

+            Assert.AreEqual("protobuf_unittest.TestAllTypes", messageType.FullName);

+            Assert.AreEqual(UnitTestProtoFile.Descriptor, messageType.File);

+            Assert.IsNull(messageType.ContainingType);

+            Assert.AreEqual(DescriptorProtos.MessageOptions.DefaultInstance, messageType.Options);

+            Assert.AreEqual("TestAllTypes", messageType.Proto.Name);

+

+            Assert.AreEqual("NestedMessage", nestedType.Name);

+            Assert.AreEqual("protobuf_unittest.TestAllTypes.NestedMessage", nestedType.FullName);

+            Assert.AreEqual(UnitTestProtoFile.Descriptor, nestedType.File);

+            Assert.AreEqual(messageType, nestedType.ContainingType);

+

+            FieldDescriptor field = messageType.Fields[0];

+            Assert.AreEqual("optional_int32", field.Name);

+            Assert.AreEqual(field, messageType.FindDescriptor<FieldDescriptor>("optional_int32"));

+            Assert.IsNull(messageType.FindDescriptor<FieldDescriptor>("no_such_field"));

+            Assert.AreEqual(field, messageType.FindFieldByNumber(1));

+            Assert.IsNull(messageType.FindFieldByNumber(571283));

+            for (int i = 0; i < messageType.Fields.Count; i++)

+            {

+                Assert.AreEqual(i, messageType.Fields[i].Index);

+            }

+

+            Assert.AreEqual(nestedType, messageType.NestedTypes[0]);

+            Assert.AreEqual(nestedType, messageType.FindDescriptor<MessageDescriptor>("NestedMessage"));

+            Assert.IsNull(messageType.FindDescriptor<MessageDescriptor>("NoSuchType"));

+            for (int i = 0; i < messageType.NestedTypes.Count; i++)

+            {

+                Assert.AreEqual(i, messageType.NestedTypes[i].Index);

+            }

+

+            Assert.AreEqual(messageType.EnumTypes[0], messageType.FindDescriptor<EnumDescriptor>("NestedEnum"));

+            Assert.IsNull(messageType.FindDescriptor<EnumDescriptor>("NoSuchType"));

+            for (int i = 0; i < messageType.EnumTypes.Count; i++)

+            {

+                Assert.AreEqual(i, messageType.EnumTypes[i].Index);

+            }

+        }

+

+        [TestMethod]

+        public void FieldDescriptor()

+        {

+            MessageDescriptor messageType = TestAllTypes.Descriptor;

+            FieldDescriptor primitiveField = messageType.FindDescriptor<FieldDescriptor>("optional_int32");

+            FieldDescriptor enumField = messageType.FindDescriptor<FieldDescriptor>("optional_nested_enum");

+            FieldDescriptor messageField = messageType.FindDescriptor<FieldDescriptor>("optional_foreign_message");

+            FieldDescriptor cordField = messageType.FindDescriptor<FieldDescriptor>("optional_cord");

+            FieldDescriptor extension = UnitTestProtoFile.OptionalInt32Extension.Descriptor;

+            FieldDescriptor nestedExtension = TestRequired.Single.Descriptor;

+

+            Assert.AreEqual("optional_int32", primitiveField.Name);

+            Assert.AreEqual("protobuf_unittest.TestAllTypes.optional_int32",

+                            primitiveField.FullName);

+            Assert.AreEqual(1, primitiveField.FieldNumber);

+            Assert.AreEqual(messageType, primitiveField.ContainingType);

+            Assert.AreEqual(UnitTestProtoFile.Descriptor, primitiveField.File);

+            Assert.AreEqual(FieldType.Int32, primitiveField.FieldType);

+            Assert.AreEqual(MappedType.Int32, primitiveField.MappedType);

+            Assert.AreEqual(DescriptorProtos.FieldOptions.DefaultInstance, primitiveField.Options);

+            Assert.IsFalse(primitiveField.IsExtension);

+            Assert.AreEqual("optional_int32", primitiveField.Proto.Name);

+

+            Assert.AreEqual("optional_nested_enum", enumField.Name);

+            Assert.AreEqual(FieldType.Enum, enumField.FieldType);

+            Assert.AreEqual(MappedType.Enum, enumField.MappedType);

+            // Assert.AreEqual(TestAllTypes.Types.NestedEnum.Descriptor, enumField.EnumType);

+

+            Assert.AreEqual("optional_foreign_message", messageField.Name);

+            Assert.AreEqual(FieldType.Message, messageField.FieldType);

+            Assert.AreEqual(MappedType.Message, messageField.MappedType);

+            Assert.AreEqual(ForeignMessage.Descriptor, messageField.MessageType);

+

+            Assert.AreEqual("optional_cord", cordField.Name);

+            Assert.AreEqual(FieldType.String, cordField.FieldType);

+            Assert.AreEqual(MappedType.String, cordField.MappedType);

+            Assert.AreEqual(DescriptorProtos.FieldOptions.Types.CType.CORD, cordField.Options.Ctype);

+

+            Assert.AreEqual("optional_int32_extension", extension.Name);

+            Assert.AreEqual("protobuf_unittest.optional_int32_extension", extension.FullName);

+            Assert.AreEqual(1, extension.FieldNumber);

+            Assert.AreEqual(TestAllExtensions.Descriptor, extension.ContainingType);

+            Assert.AreEqual(UnitTestProtoFile.Descriptor, extension.File);

+            Assert.AreEqual(FieldType.Int32, extension.FieldType);

+            Assert.AreEqual(MappedType.Int32, extension.MappedType);

+            Assert.AreEqual(DescriptorProtos.FieldOptions.DefaultInstance,

+                            extension.Options);

+            Assert.IsTrue(extension.IsExtension);

+            Assert.AreEqual(null, extension.ExtensionScope);

+            Assert.AreEqual("optional_int32_extension", extension.Proto.Name);

+

+            Assert.AreEqual("single", nestedExtension.Name);

+            Assert.AreEqual("protobuf_unittest.TestRequired.single",

+                            nestedExtension.FullName);

+            Assert.AreEqual(TestRequired.Descriptor,

+                            nestedExtension.ExtensionScope);

+        }

+

+        [TestMethod]

+        public void FieldDescriptorLabel()

+        {

+            FieldDescriptor requiredField =

+                TestRequired.Descriptor.FindDescriptor<FieldDescriptor>("a");

+            FieldDescriptor optionalField =

+                TestAllTypes.Descriptor.FindDescriptor<FieldDescriptor>("optional_int32");

+            FieldDescriptor repeatedField =

+                TestAllTypes.Descriptor.FindDescriptor<FieldDescriptor>("repeated_int32");

+

+            Assert.IsTrue(requiredField.IsRequired);

+            Assert.IsFalse(requiredField.IsRepeated);

+            Assert.IsFalse(optionalField.IsRequired);

+            Assert.IsFalse(optionalField.IsRepeated);

+            Assert.IsFalse(repeatedField.IsRequired);

+            Assert.IsTrue(repeatedField.IsRepeated);

+        }

+        [TestMethod]

+        public void FieldDescriptorDefault()

+        {

+            MessageDescriptor d = TestAllTypes.Descriptor;

+            Assert.IsFalse(d.FindDescriptor<FieldDescriptor>("optional_int32").HasDefaultValue);

+            Assert.AreEqual<object>(0, d.FindDescriptor<FieldDescriptor>("optional_int32").DefaultValue);

+            Assert.IsTrue(d.FindDescriptor<FieldDescriptor>("default_int32").HasDefaultValue);

+            Assert.AreEqual<object>(41, d.FindDescriptor<FieldDescriptor>("default_int32").DefaultValue);

+

+            d = TestExtremeDefaultValues.Descriptor;

+            Assert.AreEqual<object>(TestExtremeDefaultValues.DefaultInstance.EscapedBytes,

+                d.FindDescriptor<FieldDescriptor>("escaped_bytes").DefaultValue);

+

+            Assert.AreEqual<object>(uint.MaxValue, d.FindDescriptor<FieldDescriptor>("large_uint32").DefaultValue);

+            Assert.AreEqual<object>(ulong.MaxValue, d.FindDescriptor<FieldDescriptor>("large_uint64").DefaultValue);

+        }

+        [TestMethod]

+        public void EnumDescriptor()

+        {

+            // Note: this test is a bit different to the Java version because there's no static way of getting to the descriptor

+            EnumDescriptor enumType = UnitTestProtoFile.Descriptor.FindTypeByName<EnumDescriptor>("ForeignEnum");

+            EnumDescriptor nestedType = TestAllTypes.Descriptor.FindDescriptor<EnumDescriptor>("NestedEnum");

+

+            Assert.AreEqual("ForeignEnum", enumType.Name);

+            Assert.AreEqual("protobuf_unittest.ForeignEnum", enumType.FullName);

+            Assert.AreEqual(UnitTestProtoFile.Descriptor, enumType.File);

+            Assert.IsNull(enumType.ContainingType);

+            Assert.AreEqual(DescriptorProtos.EnumOptions.DefaultInstance,

+                            enumType.Options);

+

+            Assert.AreEqual("NestedEnum", nestedType.Name);

+            Assert.AreEqual("protobuf_unittest.TestAllTypes.NestedEnum",

+                            nestedType.FullName);

+            Assert.AreEqual(UnitTestProtoFile.Descriptor, nestedType.File);

+            Assert.AreEqual(TestAllTypes.Descriptor, nestedType.ContainingType);

+

+            EnumValueDescriptor value = enumType.FindValueByName("FOREIGN_FOO");

+            Assert.AreEqual(value, enumType.Values[0]);

+            Assert.AreEqual("FOREIGN_FOO", value.Name);

+            Assert.AreEqual(4, value.Number);

+            Assert.AreEqual((int) ForeignEnum.FOREIGN_FOO, value.Number);

+            Assert.AreEqual(value, enumType.FindValueByNumber(4));

+            Assert.IsNull(enumType.FindValueByName("NO_SUCH_VALUE"));

+            for (int i = 0; i < enumType.Values.Count; i++)

+            {

+                Assert.AreEqual(i, enumType.Values[i].Index);

+            }

+        }

+

+        [TestMethod]

+        public void ServiceDescriptor()

+        {

+            ServiceDescriptor service = TestGenericService.Descriptor;

+

+            Assert.AreEqual("TestGenericService", service.Name);

+            Assert.AreEqual("protobuf_unittest.TestGenericService", service.FullName);

+            Assert.AreEqual(UnitTestGenericServices.Descriptor, service.File);

+

+            Assert.AreEqual(2, service.Methods.Count);

+

+            MethodDescriptor fooMethod = service.Methods[0];

+            Assert.AreEqual("Foo", fooMethod.Name);

+            Assert.AreEqual(FooRequest.Descriptor, fooMethod.InputType);

+            Assert.AreEqual(FooResponse.Descriptor, fooMethod.OutputType);

+            Assert.AreEqual(fooMethod, service.FindMethodByName("Foo"));

+

+            MethodDescriptor barMethod = service.Methods[1];

+            Assert.AreEqual("Bar", barMethod.Name);

+            Assert.AreEqual(BarRequest.Descriptor, barMethod.InputType);

+            Assert.AreEqual(BarResponse.Descriptor, barMethod.OutputType);

+            Assert.AreEqual(barMethod, service.FindMethodByName("Bar"));

+

+            Assert.IsNull(service.FindMethodByName("NoSuchMethod"));

+

+            for (int i = 0; i < service.Methods.Count; i++)

+            {

+                Assert.AreEqual(i, service.Methods[i].Index);

+            }

+        }

+

+        [TestMethod]

+        public void CustomOptions()

+        {

+            MessageDescriptor descriptor = TestMessageWithCustomOptions.Descriptor;

+            Assert.IsTrue(descriptor.Options.HasExtension(UnitTestCustomOptionsProtoFile.MessageOpt1));

+            Assert.AreEqual(-56, descriptor.Options.GetExtension(UnitTestCustomOptionsProtoFile.MessageOpt1));

+

+

+            FieldDescriptor field = descriptor.FindFieldByName("field1");

+            Assert.IsNotNull(field);

+

+            Assert.IsTrue(field.Options.HasExtension(UnitTestCustomOptionsProtoFile.FieldOpt1));

+            Assert.AreEqual(8765432109uL, field.Options.GetExtension(UnitTestCustomOptionsProtoFile.FieldOpt1));

+

+            // TODO: Write out enum descriptors

+            /*

+      EnumDescriptor enumType = TestMessageWithCustomOptions.Types.

+        UnittestCustomOptions.TestMessageWithCustomOptions.AnEnum.getDescriptor();

+

+      Assert.IsTrue(

+        enumType.getOptions().hasExtension(UnittestCustomOptions.enumOpt1));

+      Assert.AreEqual(Integer.valueOf(-789),

+        enumType.getOptions().getExtension(UnittestCustomOptions.enumOpt1));

+        */

+

+            ServiceDescriptor service = TestGenericServiceWithCustomOptions.Descriptor;

+

+            Assert.IsTrue(service.Options.HasExtension(UnitTestCustomOptionsProtoFile.ServiceOpt1));

+            Assert.AreEqual(-9876543210L, service.Options.GetExtension(UnitTestCustomOptionsProtoFile.ServiceOpt1));

+

+            MethodDescriptor method = service.FindMethodByName("Foo");

+            Assert.IsNotNull(method);

+

+            Assert.IsTrue(method.Options.HasExtension(UnitTestCustomOptionsProtoFile.MethodOpt1));

+            Assert.AreEqual(MethodOpt1.METHODOPT1_VAL2,

+                            method.Options.GetExtension(UnitTestCustomOptionsProtoFile.MethodOpt1));

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/DynamicMessageTest.cs b/csharp/src/ProtocolBuffers.Test/DynamicMessageTest.cs
new file mode 100644
index 0000000..9251599
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/DynamicMessageTest.cs
@@ -0,0 +1,237 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class DynamicMessageTest

+    {

+        private ReflectionTester reflectionTester;

+        private ReflectionTester extensionsReflectionTester;

+        private ReflectionTester packedReflectionTester;

+

+        [TestInitialize]

+        public void SetUp()

+        {

+            reflectionTester = ReflectionTester.CreateTestAllTypesInstance();

+            extensionsReflectionTester = ReflectionTester.CreateTestAllExtensionsInstance();

+            packedReflectionTester = ReflectionTester.CreateTestPackedTypesInstance();

+        }

+

+        [TestMethod]

+        public void DynamicMessageAccessors()

+        {

+            IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);

+            reflectionTester.SetAllFieldsViaReflection(builder);

+            IMessage message = builder.WeakBuild();

+            reflectionTester.AssertAllFieldsSetViaReflection(message);

+        }

+

+        [TestMethod]

+        public void DoubleBuildError()

+        {

+            DynamicMessage.Builder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);

+            builder.Build();

+            try

+            {

+                builder.Build();

+                Assert.Fail("Should have thrown exception.");

+            }

+            catch (InvalidOperationException)

+            {

+                // Success.

+            }

+        }

+

+        [TestMethod]

+        public void DynamicMessageSettersRejectNull()

+        {

+            IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);

+            reflectionTester.AssertReflectionSettersRejectNull(builder);

+        }

+

+        [TestMethod]

+        public void DynamicMessageExtensionAccessors()

+        {

+            // We don't need to extensively test DynamicMessage's handling of

+            // extensions because, frankly, it doesn't do anything special with them.

+            // It treats them just like any other fields.

+            IBuilder builder = DynamicMessage.CreateBuilder(TestAllExtensions.Descriptor);

+            extensionsReflectionTester.SetAllFieldsViaReflection(builder);

+            IMessage message = builder.WeakBuild();

+            extensionsReflectionTester.AssertAllFieldsSetViaReflection(message);

+        }

+

+        [TestMethod]

+        public void DynamicMessageExtensionSettersRejectNull()

+        {

+            IBuilder builder = DynamicMessage.CreateBuilder(TestAllExtensions.Descriptor);

+            extensionsReflectionTester.AssertReflectionSettersRejectNull(builder);

+        }

+

+        [TestMethod]

+        public void DynamicMessageRepeatedSetters()

+        {

+            IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);

+            reflectionTester.SetAllFieldsViaReflection(builder);

+            reflectionTester.ModifyRepeatedFieldsViaReflection(builder);

+            IMessage message = builder.WeakBuild();

+            reflectionTester.AssertRepeatedFieldsModifiedViaReflection(message);

+        }

+

+        [TestMethod]

+        public void DynamicMessageRepeatedSettersRejectNull()

+        {

+            IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);

+            reflectionTester.AssertReflectionRepeatedSettersRejectNull(builder);

+        }

+

+        [TestMethod]

+        public void DynamicMessageDefaults()

+        {

+            reflectionTester.AssertClearViaReflection(DynamicMessage.GetDefaultInstance(TestAllTypes.Descriptor));

+            reflectionTester.AssertClearViaReflection(DynamicMessage.CreateBuilder(TestAllTypes.Descriptor).Build());

+        }

+

+        [TestMethod]

+        public void DynamicMessageSerializedSize()

+        {

+            TestAllTypes message = TestUtil.GetAllSet();

+

+            IBuilder dynamicBuilder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);

+            reflectionTester.SetAllFieldsViaReflection(dynamicBuilder);

+            IMessage dynamicMessage = dynamicBuilder.WeakBuild();

+

+            Assert.AreEqual(message.SerializedSize, dynamicMessage.SerializedSize);

+        }

+

+        [TestMethod]

+        public void DynamicMessageSerialization()

+        {

+            IBuilder builder = DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);

+            reflectionTester.SetAllFieldsViaReflection(builder);

+            IMessage message = builder.WeakBuild();

+

+            ByteString rawBytes = message.ToByteString();

+            TestAllTypes message2 = TestAllTypes.ParseFrom(rawBytes);

+

+            TestUtil.AssertAllFieldsSet(message2);

+

+            // In fact, the serialized forms should be exactly the same, byte-for-byte.

+            Assert.AreEqual(TestUtil.GetAllSet().ToByteString(), rawBytes);

+        }

+

+        [TestMethod]

+        public void DynamicMessageParsing()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TestUtil.SetAllFields(builder);

+            TestAllTypes message = builder.Build();

+

+            ByteString rawBytes = message.ToByteString();

+

+            IMessage message2 = DynamicMessage.ParseFrom(TestAllTypes.Descriptor, rawBytes);

+            reflectionTester.AssertAllFieldsSetViaReflection(message2);

+        }

+

+        [TestMethod]

+        public void DynamicMessagePackedSerialization()

+        {

+            IBuilder builder = DynamicMessage.CreateBuilder(TestPackedTypes.Descriptor);

+            packedReflectionTester.SetPackedFieldsViaReflection(builder);

+            IMessage message = builder.WeakBuild();

+

+            ByteString rawBytes = message.ToByteString();

+            TestPackedTypes message2 = TestPackedTypes.ParseFrom(rawBytes);

+

+            TestUtil.AssertPackedFieldsSet(message2);

+

+            // In fact, the serialized forms should be exactly the same, byte-for-byte.

+            Assert.AreEqual(TestUtil.GetPackedSet().ToByteString(), rawBytes);

+        }

+

+        [TestMethod]

+        public void testDynamicMessagePackedParsing()

+        {

+            TestPackedTypes.Builder builder = TestPackedTypes.CreateBuilder();

+            TestUtil.SetPackedFields(builder);

+            TestPackedTypes message = builder.Build();

+

+            ByteString rawBytes = message.ToByteString();

+

+            IMessage message2 = DynamicMessage.ParseFrom(TestPackedTypes.Descriptor, rawBytes);

+            packedReflectionTester.AssertPackedFieldsSetViaReflection(message2);

+        }

+

+        [TestMethod]

+        public void DynamicMessageCopy()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TestUtil.SetAllFields(builder);

+            TestAllTypes message = builder.Build();

+

+            DynamicMessage copy = DynamicMessage.CreateBuilder(message).Build();

+            reflectionTester.AssertAllFieldsSetViaReflection(copy);

+        }

+

+        [TestMethod]

+        public void ToBuilder()

+        {

+            DynamicMessage.Builder builder =

+                DynamicMessage.CreateBuilder(TestAllTypes.Descriptor);

+            reflectionTester.SetAllFieldsViaReflection(builder);

+            int unknownFieldNum = 9;

+            ulong unknownFieldVal = 90;

+            builder.SetUnknownFields(UnknownFieldSet.CreateBuilder()

+                                         .AddField(unknownFieldNum,

+                                                   UnknownField.CreateBuilder().AddVarint(unknownFieldVal).Build())

+                                         .Build());

+            DynamicMessage message = builder.Build();

+

+            DynamicMessage derived = message.ToBuilder().Build();

+            reflectionTester.AssertAllFieldsSetViaReflection(derived);

+

+            IList<ulong> values = derived.UnknownFields.FieldDictionary[unknownFieldNum].VarintList;

+            Assert.AreEqual(1, values.Count);

+            Assert.AreEqual(unknownFieldVal, values[0]);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ExtendableMessageTest.cs b/csharp/src/ProtocolBuffers.Test/ExtendableMessageTest.cs
new file mode 100644
index 0000000..68f37c3
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ExtendableMessageTest.cs
@@ -0,0 +1,202 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class ExtendableMessageTest

+    {

+        [TestMethod, ExpectedException(typeof(ArgumentException))]

+        public void ExtensionWriterInvalidExtension()

+        {

+            TestPackedExtensions.CreateBuilder()[UnitTestProtoFile.OptionalForeignMessageExtension.Descriptor] =

+                ForeignMessage.DefaultInstance;

+        }

+

+        [TestMethod]

+        public void ExtensionWriterTest()

+        {

+            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder()

+                .SetExtension(UnitTestProtoFile.DefaultBoolExtension, true)

+                .SetExtension(UnitTestProtoFile.DefaultBytesExtension, ByteString.CopyFromUtf8("123"))

+                .SetExtension(UnitTestProtoFile.DefaultCordExtension, "123")

+                .SetExtension(UnitTestProtoFile.DefaultDoubleExtension, 123)

+                .SetExtension(UnitTestProtoFile.DefaultFixed32Extension, 123u)

+                .SetExtension(UnitTestProtoFile.DefaultFixed64Extension, 123u)

+                .SetExtension(UnitTestProtoFile.DefaultFloatExtension, 123)

+                .SetExtension(UnitTestProtoFile.DefaultForeignEnumExtension, ForeignEnum.FOREIGN_BAZ)

+                .SetExtension(UnitTestProtoFile.DefaultImportEnumExtension, ImportEnum.IMPORT_BAZ)

+                .SetExtension(UnitTestProtoFile.DefaultInt32Extension, 123)

+                .SetExtension(UnitTestProtoFile.DefaultInt64Extension, 123)

+                .SetExtension(UnitTestProtoFile.DefaultNestedEnumExtension, TestAllTypes.Types.NestedEnum.FOO)

+                .SetExtension(UnitTestProtoFile.DefaultSfixed32Extension, 123)

+                .SetExtension(UnitTestProtoFile.DefaultSfixed64Extension, 123)

+                .SetExtension(UnitTestProtoFile.DefaultSint32Extension, 123)

+                .SetExtension(UnitTestProtoFile.DefaultSint64Extension, 123)

+                .SetExtension(UnitTestProtoFile.DefaultStringExtension, "123")

+                .SetExtension(UnitTestProtoFile.DefaultStringPieceExtension, "123")

+                .SetExtension(UnitTestProtoFile.DefaultUint32Extension, 123u)

+                .SetExtension(UnitTestProtoFile.DefaultUint64Extension, 123u)

+                //Optional

+                .SetExtension(UnitTestProtoFile.OptionalBoolExtension, true)

+                .SetExtension(UnitTestProtoFile.OptionalBytesExtension, ByteString.CopyFromUtf8("123"))

+                .SetExtension(UnitTestProtoFile.OptionalCordExtension, "123")

+                .SetExtension(UnitTestProtoFile.OptionalDoubleExtension, 123)

+                .SetExtension(UnitTestProtoFile.OptionalFixed32Extension, 123u)

+                .SetExtension(UnitTestProtoFile.OptionalFixed64Extension, 123u)

+                .SetExtension(UnitTestProtoFile.OptionalFloatExtension, 123)

+                .SetExtension(UnitTestProtoFile.OptionalForeignEnumExtension, ForeignEnum.FOREIGN_BAZ)

+                .SetExtension(UnitTestProtoFile.OptionalImportEnumExtension, ImportEnum.IMPORT_BAZ)

+                .SetExtension(UnitTestProtoFile.OptionalInt32Extension, 123)

+                .SetExtension(UnitTestProtoFile.OptionalInt64Extension, 123)

+                .SetExtension(UnitTestProtoFile.OptionalNestedEnumExtension, TestAllTypes.Types.NestedEnum.FOO)

+                .SetExtension(UnitTestProtoFile.OptionalSfixed32Extension, 123)

+                .SetExtension(UnitTestProtoFile.OptionalSfixed64Extension, 123)

+                .SetExtension(UnitTestProtoFile.OptionalSint32Extension, 123)

+                .SetExtension(UnitTestProtoFile.OptionalSint64Extension, 123)

+                .SetExtension(UnitTestProtoFile.OptionalStringExtension, "123")

+                .SetExtension(UnitTestProtoFile.OptionalStringPieceExtension, "123")

+                .SetExtension(UnitTestProtoFile.OptionalUint32Extension, 123u)

+                .SetExtension(UnitTestProtoFile.OptionalUint64Extension, 123u)

+                //Repeated

+                .AddExtension(UnitTestProtoFile.RepeatedBoolExtension, true)

+                .AddExtension(UnitTestProtoFile.RepeatedBytesExtension, ByteString.CopyFromUtf8("123"))

+                .AddExtension(UnitTestProtoFile.RepeatedCordExtension, "123")

+                .AddExtension(UnitTestProtoFile.RepeatedDoubleExtension, 123)

+                .AddExtension(UnitTestProtoFile.RepeatedFixed32Extension, 123u)

+                .AddExtension(UnitTestProtoFile.RepeatedFixed64Extension, 123u)

+                .AddExtension(UnitTestProtoFile.RepeatedFloatExtension, 123)

+                .AddExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAZ)

+                .AddExtension(UnitTestProtoFile.RepeatedImportEnumExtension, ImportEnum.IMPORT_BAZ)

+                .AddExtension(UnitTestProtoFile.RepeatedInt32Extension, 123)

+                .AddExtension(UnitTestProtoFile.RepeatedInt64Extension, 123)

+                .AddExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, TestAllTypes.Types.NestedEnum.FOO)

+                .AddExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 123)

+                .AddExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 123)

+                .AddExtension(UnitTestProtoFile.RepeatedSint32Extension, 123)

+                .AddExtension(UnitTestProtoFile.RepeatedSint64Extension, 123)

+                .AddExtension(UnitTestProtoFile.RepeatedStringExtension, "123")

+                .AddExtension(UnitTestProtoFile.RepeatedStringPieceExtension, "123")

+                .AddExtension(UnitTestProtoFile.RepeatedUint32Extension, 123u)

+                .AddExtension(UnitTestProtoFile.RepeatedUint64Extension, 123u)

+                ;

+            TestAllExtensions msg = builder.Build();

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestProtoFile.RegisterAllExtensions(registry);

+

+            TestAllExtensions.Builder copyBuilder = TestAllExtensions.CreateBuilder().MergeFrom(msg.ToByteArray(),

+                                                                                                registry);

+            TestAllExtensions copy = copyBuilder.Build();

+

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            Assert.AreEqual(true, copy.GetExtension(UnitTestProtoFile.DefaultBoolExtension));

+            Assert.AreEqual(ByteString.CopyFromUtf8("123"), copy.GetExtension(UnitTestProtoFile.DefaultBytesExtension));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestProtoFile.DefaultCordExtension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.DefaultDoubleExtension));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestProtoFile.DefaultFixed32Extension));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestProtoFile.DefaultFixed64Extension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.DefaultFloatExtension));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, copy.GetExtension(UnitTestProtoFile.DefaultForeignEnumExtension));

+            Assert.AreEqual(ImportEnum.IMPORT_BAZ, copy.GetExtension(UnitTestProtoFile.DefaultImportEnumExtension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.DefaultInt32Extension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.DefaultInt64Extension));

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,

+                            copy.GetExtension(UnitTestProtoFile.DefaultNestedEnumExtension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.DefaultSfixed32Extension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.DefaultSfixed64Extension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.DefaultSint32Extension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.DefaultSint64Extension));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestProtoFile.DefaultStringExtension));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestProtoFile.DefaultStringPieceExtension));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestProtoFile.DefaultUint32Extension));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestProtoFile.DefaultUint64Extension));

+

+            Assert.AreEqual(true, copy.GetExtension(UnitTestProtoFile.OptionalBoolExtension));

+            Assert.AreEqual(ByteString.CopyFromUtf8("123"), copy.GetExtension(UnitTestProtoFile.OptionalBytesExtension));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestProtoFile.OptionalCordExtension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.OptionalDoubleExtension));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestProtoFile.OptionalFixed32Extension));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestProtoFile.OptionalFixed64Extension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.OptionalFloatExtension));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, copy.GetExtension(UnitTestProtoFile.OptionalForeignEnumExtension));

+            Assert.AreEqual(ImportEnum.IMPORT_BAZ, copy.GetExtension(UnitTestProtoFile.OptionalImportEnumExtension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.OptionalInt32Extension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.OptionalInt64Extension));

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,

+                            copy.GetExtension(UnitTestProtoFile.OptionalNestedEnumExtension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.OptionalSfixed32Extension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.OptionalSfixed64Extension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.OptionalSint32Extension));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.OptionalSint64Extension));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestProtoFile.OptionalStringExtension));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestProtoFile.OptionalStringPieceExtension));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestProtoFile.OptionalUint32Extension));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestProtoFile.OptionalUint64Extension));

+

+            Assert.AreEqual(true, copy.GetExtension(UnitTestProtoFile.RepeatedBoolExtension, 0));

+            Assert.AreEqual(ByteString.CopyFromUtf8("123"),

+                            copy.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 0));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 0));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 0));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.RepeatedFloatExtension, 0));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ,

+                            copy.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 0));

+            Assert.AreEqual(ImportEnum.IMPORT_BAZ, copy.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.RepeatedInt32Extension, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.RepeatedInt64Extension, 0));

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,

+                            copy.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.RepeatedSint32Extension, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestProtoFile.RepeatedSint64Extension, 0));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestProtoFile.RepeatedStringExtension, 0));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 0));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestProtoFile.RepeatedUint32Extension, 0));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestProtoFile.RepeatedUint64Extension, 0));

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/GeneratedBuilderTest.cs b/csharp/src/ProtocolBuffers.Test/GeneratedBuilderTest.cs
new file mode 100644
index 0000000..1dcb1c2
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/GeneratedBuilderTest.cs
@@ -0,0 +1,125 @@
+using System;

+using System.Collections.Generic;

+using System.Text;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class GeneratedBuilderTest

+    {

+        class OneTimeEnumerator<T> : IEnumerable<T>

+        {

+            readonly T _item;

+            bool _enumerated;

+            public OneTimeEnumerator(T item)

+            {

+                _item = item;

+            }

+            public IEnumerator<T> GetEnumerator()

+            {

+                Assert.IsFalse(_enumerated, "The collection {0} has already been enumerated", GetType());

+                _enumerated = true;

+                yield return _item;

+            }

+            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()

+            { return GetEnumerator(); }

+        }

+

+        [TestMethod]

+        public void DoesNotEnumerateTwiceForMessageList()

+        {

+            TestAllTypes.Builder b = new TestAllTypes.Builder();

+            b.AddRangeRepeatedForeignMessage(

+                new OneTimeEnumerator<ForeignMessage>(

+                    ForeignMessage.DefaultInstance));

+        }

+        [TestMethod]

+        public void DoesNotEnumerateTwiceForPrimitiveList()

+        {

+            TestAllTypes.Builder b = new TestAllTypes.Builder();

+            b.AddRangeRepeatedInt32(new OneTimeEnumerator<int>(1));

+        }

+        [TestMethod]

+        public void DoesNotEnumerateTwiceForStringList()

+        {

+            TestAllTypes.Builder b = new TestAllTypes.Builder();

+            b.AddRangeRepeatedString(new OneTimeEnumerator<string>("test"));

+        }

+        [TestMethod]

+        public void DoesNotEnumerateTwiceForEnumList()

+        {

+            TestAllTypes.Builder b = new TestAllTypes.Builder();

+            b.AddRangeRepeatedForeignEnum(new OneTimeEnumerator<ForeignEnum>(ForeignEnum.FOREIGN_BAR));

+        }

+

+        private delegate void TestMethod();

+

+        private static void AssertThrows<T>(TestMethod method) where T : Exception

+        {

+            try

+            {

+                method();

+            }

+            catch (Exception error)

+            {

+                if (error is T)

+                    return;

+                throw;

+            }

+            Assert.Fail("Expected exception of type " + typeof(T));

+        }

+

+        [TestMethod]

+        public void DoesNotAddNullToMessageListByAddRange()

+        {

+            TestAllTypes.Builder b = new TestAllTypes.Builder();

+            AssertThrows<ArgumentNullException>(

+                () => b.AddRangeRepeatedForeignMessage(new ForeignMessage[] { null })

+                    );

+        }

+        [TestMethod]

+        public void DoesNotAddNullToMessageListByAdd()

+        {

+            TestAllTypes.Builder b = new TestAllTypes.Builder();

+            AssertThrows<ArgumentNullException>(

+                () => b.AddRepeatedForeignMessage((ForeignMessage)null)

+                    );

+        }

+        [TestMethod]

+        public void DoesNotAddNullToMessageListBySet()

+        {

+            TestAllTypes.Builder b = new TestAllTypes.Builder();

+            b.AddRepeatedForeignMessage(ForeignMessage.DefaultInstance);

+            AssertThrows<ArgumentNullException>(

+                () => b.SetRepeatedForeignMessage(0, (ForeignMessage)null)

+                    );

+        }

+        [TestMethod]

+        public void DoesNotAddNullToStringListByAddRange()

+        {

+            TestAllTypes.Builder b = new TestAllTypes.Builder();

+            AssertThrows<ArgumentNullException>(

+                () => b.AddRangeRepeatedString(new String[] { null })

+                    );

+        }

+        [TestMethod]

+        public void DoesNotAddNullToStringListByAdd()

+        {

+            TestAllTypes.Builder b = new TestAllTypes.Builder();

+            AssertThrows<ArgumentNullException>(

+                () => b.AddRepeatedString(null)

+                    );

+        }

+        [TestMethod]

+        public void DoesNotAddNullToStringListBySet()

+        {

+            TestAllTypes.Builder b = new TestAllTypes.Builder();

+            b.AddRepeatedString("one");

+            AssertThrows<ArgumentNullException>(

+                () => b.SetRepeatedString(0, null)

+                    );

+        }

+    }

+}

diff --git a/csharp/src/ProtocolBuffers.Test/GeneratedMessageTest.cs b/csharp/src/ProtocolBuffers.Test/GeneratedMessageTest.cs
new file mode 100644
index 0000000..b04fb39
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/GeneratedMessageTest.cs
@@ -0,0 +1,532 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Collections;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class GeneratedMessageTest

+    {

+        private ReflectionTester reflectionTester;

+        private ReflectionTester extensionsReflectionTester;

+

+        [TestInitialize]

+        public void SetUp()

+        {

+            reflectionTester = ReflectionTester.CreateTestAllTypesInstance();

+            extensionsReflectionTester = ReflectionTester.CreateTestAllExtensionsInstance();

+        }

+

+        [TestMethod]

+        public void RepeatedAddPrimitiveBeforeBuild()

+        {

+            TestAllTypes message = new TestAllTypes.Builder {RepeatedInt32List = {1, 2, 3}}.Build();

+            TestUtil.AssertEqual(new int[] {1, 2, 3}, message.RepeatedInt32List);

+        }

+

+        [TestMethod]

+        public void AddPrimitiveFailsAfterBuild()

+        {

+            TestAllTypes.Builder builder = new TestAllTypes.Builder();

+            IList<int> list = builder.RepeatedInt32List;

+            list.Add(1); // Fine

+            builder.Build();

+

+            try

+            {

+                list.Add(2);

+                Assert.Fail("List should be frozen");

+            }

+            catch (NotSupportedException)

+            {

+                // Expected

+            }

+        }

+

+        [TestMethod]

+        public void RepeatedAddMessageBeforeBuild()

+        {

+            TestAllTypes message = new TestAllTypes.Builder

+                                       {

+                                           RepeatedNestedMessageList =

+                                               {new TestAllTypes.Types.NestedMessage.Builder {Bb = 10}.Build()}

+                                       }.Build();

+            Assert.AreEqual(1, message.RepeatedNestedMessageCount);

+            Assert.AreEqual(10, message.RepeatedNestedMessageList[0].Bb);

+        }

+

+        [TestMethod]

+        public void AddMessageFailsAfterBuild()

+        {

+            TestAllTypes.Builder builder = new TestAllTypes.Builder();

+            IList<TestAllTypes.Types.NestedMessage> list = builder.RepeatedNestedMessageList;

+            builder.Build();

+

+            try

+            {

+                list.Add(new TestAllTypes.Types.NestedMessage.Builder {Bb = 10}.Build());

+                Assert.Fail("List should be frozen");

+            }

+            catch (NotSupportedException)

+            {

+                // Expected

+            }

+        }

+

+        [TestMethod]

+        public void DefaultInstance()

+        {

+            Assert.AreSame(TestAllTypes.DefaultInstance, TestAllTypes.DefaultInstance.DefaultInstanceForType);

+            Assert.AreSame(TestAllTypes.DefaultInstance, TestAllTypes.CreateBuilder().DefaultInstanceForType);

+        }

+

+        [TestMethod]

+        public void Accessors()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TestUtil.SetAllFields(builder);

+            TestAllTypes message = builder.Build();

+            TestUtil.AssertAllFieldsSet(message);

+        }

+

+        [TestMethod]

+        public void SettersRejectNull()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TestUtil.AssertArgumentNullException(() => builder.SetOptionalString(null));

+            TestUtil.AssertArgumentNullException(() => builder.SetOptionalBytes(null));

+            TestUtil.AssertArgumentNullException(

+                () => builder.SetOptionalNestedMessage((TestAllTypes.Types.NestedMessage) null));

+            TestUtil.AssertArgumentNullException(

+                () => builder.SetOptionalNestedMessage((TestAllTypes.Types.NestedMessage.Builder) null));

+            TestUtil.AssertArgumentNullException(() => builder.AddRepeatedString(null));

+            TestUtil.AssertArgumentNullException(() => builder.AddRepeatedBytes(null));

+            TestUtil.AssertArgumentNullException(

+                () => builder.AddRepeatedNestedMessage((TestAllTypes.Types.NestedMessage) null));

+            TestUtil.AssertArgumentNullException(

+                () => builder.AddRepeatedNestedMessage((TestAllTypes.Types.NestedMessage.Builder) null));

+        }

+

+        [TestMethod]

+        public void RepeatedSetters()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TestUtil.SetAllFields(builder);

+            TestUtil.ModifyRepeatedFields(builder);

+            TestAllTypes message = builder.Build();

+            TestUtil.AssertRepeatedFieldsModified(message);

+        }

+

+        [TestMethod]

+        public void RepeatedAppend()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+

+            builder.AddRangeRepeatedInt32(new int[] {1, 2, 3, 4});

+            builder.AddRangeRepeatedForeignEnum((new ForeignEnum[] {ForeignEnum.FOREIGN_BAZ}));

+

+            ForeignMessage foreignMessage = ForeignMessage.CreateBuilder().SetC(12).Build();

+            builder.AddRangeRepeatedForeignMessage(new ForeignMessage[] {foreignMessage});

+

+            TestAllTypes message = builder.Build();

+            TestUtil.AssertEqual(message.RepeatedInt32List, new int[] {1, 2, 3, 4});

+            TestUtil.AssertEqual(message.RepeatedForeignEnumList, new ForeignEnum[] {ForeignEnum.FOREIGN_BAZ});

+            Assert.AreEqual(1, message.RepeatedForeignMessageCount);

+            Assert.AreEqual(12, message.GetRepeatedForeignMessage(0).C);

+        }

+

+        [TestMethod]

+        public void RepeatedAppendRejectsNull()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+

+            ForeignMessage foreignMessage = ForeignMessage.CreateBuilder().SetC(12).Build();

+            TestUtil.AssertArgumentNullException(

+                () => builder.AddRangeRepeatedForeignMessage(new[] {foreignMessage, null}));

+            TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedForeignMessage(null));

+            TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedForeignEnum(null));

+            TestUtil.AssertArgumentNullException(() => builder.AddRangeRepeatedString(new[] {"one", null}));

+            TestUtil.AssertArgumentNullException(

+                () => builder.AddRangeRepeatedBytes(new[] {TestUtil.ToBytes("one"), null}));

+        }

+

+        [TestMethod]

+        public void SettingForeignMessageUsingBuilder()

+        {

+            TestAllTypes message = TestAllTypes.CreateBuilder()

+                // Pass builder for foreign message instance.

+                .SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(123))

+                .Build();

+            TestAllTypes expectedMessage = TestAllTypes.CreateBuilder()

+                // Create expected version passing foreign message instance explicitly.

+                .SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(123).Build())

+                .Build();

+            Assert.AreEqual(expectedMessage, message);

+        }

+

+        [TestMethod]

+        public void SettingRepeatedForeignMessageUsingBuilder()

+        {

+            TestAllTypes message = TestAllTypes.CreateBuilder()

+                // Pass builder for foreign message instance.

+                .AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(456))

+                .Build();

+            TestAllTypes expectedMessage = TestAllTypes.CreateBuilder()

+                // Create expected version passing foreign message instance explicitly.

+                .AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(456).Build())

+                .Build();

+            Assert.AreEqual(expectedMessage, message);

+        }

+

+        [TestMethod]

+        public void SettingRepeatedValuesUsingRangeInCollectionInitializer()

+        {

+            int[] values = {1, 2, 3};

+            TestAllTypes message = new TestAllTypes.Builder

+                                       {

+                                           RepeatedSint32List = {values}

+                                       }.Build();

+            Assert.IsTrue(Lists.Equals(values, message.RepeatedSint32List));

+        }

+

+        [TestMethod]

+        public void SettingRepeatedValuesUsingIndividualValuesInCollectionInitializer()

+        {

+            TestAllTypes message = new TestAllTypes.Builder

+                                       {

+                                           RepeatedSint32List = {6, 7}

+                                       }.Build();

+            Assert.IsTrue(Lists.Equals(new int[] {6, 7}, message.RepeatedSint32List));

+        }

+

+        [TestMethod]

+        public void Defaults()

+        {

+            TestUtil.AssertClear(TestAllTypes.DefaultInstance);

+            TestUtil.AssertClear(TestAllTypes.CreateBuilder().Build());

+

+            Assert.AreEqual("\u1234", TestExtremeDefaultValues.DefaultInstance.Utf8String);

+        }

+

+        [TestMethod]

+        public void ReflectionGetters()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TestUtil.SetAllFields(builder);

+            TestAllTypes message = builder.Build();

+            reflectionTester.AssertAllFieldsSetViaReflection(message);

+        }

+

+        [TestMethod]

+        public void ReflectionSetters()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            reflectionTester.SetAllFieldsViaReflection(builder);

+            TestAllTypes message = builder.Build();

+            TestUtil.AssertAllFieldsSet(message);

+        }

+

+        [TestMethod]

+        public void ReflectionClear()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            reflectionTester.SetAllFieldsViaReflection(builder);

+            reflectionTester.ClearAllFieldsViaReflection(builder);

+            TestAllTypes message = builder.Build();

+            TestUtil.AssertClear(message);

+        }

+

+        [TestMethod]

+        public void ReflectionSettersRejectNull()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            reflectionTester.AssertReflectionSettersRejectNull(builder);

+        }

+

+        [TestMethod]

+        public void ReflectionRepeatedSetters()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            reflectionTester.SetAllFieldsViaReflection(builder);

+            reflectionTester.ModifyRepeatedFieldsViaReflection(builder);

+            TestAllTypes message = builder.Build();

+            TestUtil.AssertRepeatedFieldsModified(message);

+        }

+

+        [TestMethod]

+        public void TestReflectionRepeatedSettersRejectNull()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            reflectionTester.AssertReflectionRepeatedSettersRejectNull(builder);

+        }

+

+        [TestMethod]

+        public void ReflectionDefaults()

+        {

+            TestUtil.TestInMultipleCultures(() =>

+                                                {

+                                                    reflectionTester.AssertClearViaReflection(

+                                                        TestAllTypes.DefaultInstance);

+                                                    reflectionTester.AssertClearViaReflection(

+                                                        TestAllTypes.CreateBuilder().Build());

+                                                });

+        }

+

+        // =================================================================

+        // Extensions.

+

+        [TestMethod]

+        public void ExtensionAccessors()

+        {

+            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();

+            TestUtil.SetAllExtensions(builder);

+            TestAllExtensions message = builder.Build();

+            TestUtil.AssertAllExtensionsSet(message);

+        }

+

+        [TestMethod]

+        public void ExtensionRepeatedSetters()

+        {

+            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();

+            TestUtil.SetAllExtensions(builder);

+            TestUtil.ModifyRepeatedExtensions(builder);

+            TestAllExtensions message = builder.Build();

+            TestUtil.AssertRepeatedExtensionsModified(message);

+        }

+

+        [TestMethod]

+        public void ExtensionDefaults()

+        {

+            TestUtil.AssertExtensionsClear(TestAllExtensions.DefaultInstance);

+            TestUtil.AssertExtensionsClear(TestAllExtensions.CreateBuilder().Build());

+        }

+

+        [TestMethod]

+        public void ExtensionReflectionGetters()

+        {

+            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();

+            TestUtil.SetAllExtensions(builder);

+            TestAllExtensions message = builder.Build();

+            extensionsReflectionTester.AssertAllFieldsSetViaReflection(message);

+        }

+

+        [TestMethod]

+        public void ExtensionReflectionSetters()

+        {

+            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();

+            extensionsReflectionTester.SetAllFieldsViaReflection(builder);

+            TestAllExtensions message = builder.Build();

+            TestUtil.AssertAllExtensionsSet(message);

+        }

+

+        [TestMethod]

+        public void ExtensionReflectionSettersRejectNull()

+        {

+            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();

+            extensionsReflectionTester.AssertReflectionSettersRejectNull(builder);

+        }

+

+        [TestMethod]

+        public void ExtensionReflectionRepeatedSetters()

+        {

+            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();

+            extensionsReflectionTester.SetAllFieldsViaReflection(builder);

+            extensionsReflectionTester.ModifyRepeatedFieldsViaReflection(builder);

+            TestAllExtensions message = builder.Build();

+            TestUtil.AssertRepeatedExtensionsModified(message);

+        }

+

+        [TestMethod]

+        public void ExtensionReflectionRepeatedSettersRejectNull()

+        {

+            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();

+            extensionsReflectionTester.AssertReflectionRepeatedSettersRejectNull(builder);

+        }

+

+        [TestMethod]

+        public void ExtensionReflectionDefaults()

+        {

+            TestUtil.TestInMultipleCultures(() =>

+                                                {

+                                                    extensionsReflectionTester.AssertClearViaReflection(

+                                                        TestAllExtensions.DefaultInstance);

+                                                    extensionsReflectionTester.AssertClearViaReflection(

+                                                        TestAllExtensions.CreateBuilder().Build());

+                                                });

+        }

+

+        [TestMethod]

+        public void ClearExtension()

+        {

+            // ClearExtension() is not actually used in TestUtil, so try it manually.

+            Assert.IsFalse(TestAllExtensions.CreateBuilder()

+                               .SetExtension(UnitTestProtoFile.OptionalInt32Extension, 1)

+                               .ClearExtension(UnitTestProtoFile.OptionalInt32Extension)

+                               .HasExtension(UnitTestProtoFile.OptionalInt32Extension));

+            Assert.AreEqual(0, TestAllExtensions.CreateBuilder()

+                                   .AddExtension(UnitTestProtoFile.RepeatedInt32Extension, 1)

+                                   .ClearExtension(UnitTestProtoFile.RepeatedInt32Extension)

+                                   .GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension));

+        }

+

+        [TestMethod]

+        public void ExtensionMergeFrom()

+        {

+            TestAllExtensions original = TestAllExtensions.CreateBuilder()

+                .SetExtension(UnitTestProtoFile.OptionalInt32Extension, 1).Build();

+            TestAllExtensions merged =

+                TestAllExtensions.CreateBuilder().MergeFrom(original).Build();

+            Assert.IsTrue((merged.HasExtension(UnitTestProtoFile.OptionalInt32Extension)));

+            Assert.AreEqual(1, (int) merged.GetExtension(UnitTestProtoFile.OptionalInt32Extension));

+        }

+

+        /* Removed multiple files option for the moment

+    [TestMethod]

+    public void MultipleFilesOption() {

+      // We mostly just want to check that things compile.

+      MessageWithNoOuter message = MessageWithNoOuter.CreateBuilder()

+          .SetNested(MessageWithNoOuter.Types.NestedMessage.CreateBuilder().SetI(1))

+          .AddForeign(TestAllTypes.CreateBuilder().SetOptionalInt32(1))

+          .SetNestedEnum(MessageWithNoOuter.Types.NestedEnum.BAZ)

+          .SetForeignEnum(EnumWithNoOuter.BAR)

+          .Build();

+      Assert.AreEqual(message, MessageWithNoOuter.ParseFrom(message.ToByteString()));

+

+      Assert.AreEqual(MultiFileProto.Descriptor, MessageWithNoOuter.Descriptor.File);

+

+      FieldDescriptor field = MessageWithNoOuter.Descriptor.FindDescriptor<FieldDescriptor>("foreign_enum");

+      Assert.AreEqual(MultiFileProto.Descriptor.FindTypeByName<EnumDescriptor>("EnumWithNoOuter")

+        .FindValueByNumber((int)EnumWithNoOuter.BAR), message[field]);

+

+      Assert.AreEqual(MultiFileProto.Descriptor, ServiceWithNoOuter.Descriptor.File);

+

+      Assert.IsFalse(TestAllExtensions.DefaultInstance.HasExtension(MultiFileProto.ExtensionWithOuter));

+    }*/

+

+        [TestMethod]

+        public void OptionalFieldWithRequiredSubfieldsOptimizedForSize()

+        {

+            TestOptionalOptimizedForSize message = TestOptionalOptimizedForSize.DefaultInstance;

+            Assert.IsTrue(message.IsInitialized);

+

+            message = TestOptionalOptimizedForSize.CreateBuilder().SetO(

+                TestRequiredOptimizedForSize.CreateBuilder().BuildPartial()

+                ).BuildPartial();

+            Assert.IsFalse(message.IsInitialized);

+

+            message = TestOptionalOptimizedForSize.CreateBuilder().SetO(

+                TestRequiredOptimizedForSize.CreateBuilder().SetX(5).BuildPartial()

+                ).BuildPartial();

+            Assert.IsTrue(message.IsInitialized);

+        }

+

+        [TestMethod]

+        public void OptimizedForSizeMergeUsesAllFieldsFromTarget()

+        {

+            TestOptimizedForSize withFieldSet = new TestOptimizedForSize.Builder {I = 10}.Build();

+            TestOptimizedForSize.Builder builder = new TestOptimizedForSize.Builder();

+            builder.MergeFrom(withFieldSet);

+            TestOptimizedForSize built = builder.Build();

+            Assert.AreEqual(10, built.I);

+        }

+

+        [TestMethod]

+        public void UninitializedExtensionInOptimizedForSizeMakesMessageUninitialized()

+        {

+            TestOptimizedForSize.Builder builder = new TestOptimizedForSize.Builder();

+            builder.SetExtension(TestOptimizedForSize.TestExtension2,

+                                 new TestRequiredOptimizedForSize.Builder().BuildPartial());

+            Assert.IsFalse(builder.IsInitialized);

+            Assert.IsFalse(builder.BuildPartial().IsInitialized);

+

+            builder = new TestOptimizedForSize.Builder();

+            builder.SetExtension(TestOptimizedForSize.TestExtension2,

+                                 new TestRequiredOptimizedForSize.Builder {X = 10}.BuildPartial());

+            Assert.IsTrue(builder.IsInitialized);

+            Assert.IsTrue(builder.BuildPartial().IsInitialized);

+        }

+

+        [TestMethod]

+        public void ToBuilder()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TestUtil.SetAllFields(builder);

+            TestAllTypes message = builder.Build();

+            TestUtil.AssertAllFieldsSet(message.ToBuilder().Build());

+        }

+

+        [TestMethod]

+        public void FieldConstantValues()

+        {

+            Assert.AreEqual(TestAllTypes.Types.NestedMessage.BbFieldNumber, 1);

+            Assert.AreEqual(TestAllTypes.OptionalInt32FieldNumber, 1);

+            Assert.AreEqual(TestAllTypes.OptionalGroupFieldNumber, 16);

+            Assert.AreEqual(TestAllTypes.OptionalNestedMessageFieldNumber, 18);

+            Assert.AreEqual(TestAllTypes.OptionalNestedEnumFieldNumber, 21);

+            Assert.AreEqual(TestAllTypes.RepeatedInt32FieldNumber, 31);

+            Assert.AreEqual(TestAllTypes.RepeatedGroupFieldNumber, 46);

+            Assert.AreEqual(TestAllTypes.RepeatedNestedMessageFieldNumber, 48);

+            Assert.AreEqual(TestAllTypes.RepeatedNestedEnumFieldNumber, 51);

+        }

+

+        [TestMethod]

+        public void ExtensionConstantValues()

+        {

+            Assert.AreEqual(TestRequired.SingleFieldNumber, 1000);

+            Assert.AreEqual(TestRequired.MultiFieldNumber, 1001);

+            Assert.AreEqual(UnitTestProtoFile.OptionalInt32ExtensionFieldNumber, 1);

+            Assert.AreEqual(UnitTestProtoFile.OptionalGroupExtensionFieldNumber, 16);

+            Assert.AreEqual(UnitTestProtoFile.OptionalNestedMessageExtensionFieldNumber, 18);

+            Assert.AreEqual(UnitTestProtoFile.OptionalNestedEnumExtensionFieldNumber, 21);

+            Assert.AreEqual(UnitTestProtoFile.RepeatedInt32ExtensionFieldNumber, 31);

+            Assert.AreEqual(UnitTestProtoFile.RepeatedGroupExtensionFieldNumber, 46);

+            Assert.AreEqual(UnitTestProtoFile.RepeatedNestedMessageExtensionFieldNumber, 48);

+            Assert.AreEqual(UnitTestProtoFile.RepeatedNestedEnumExtensionFieldNumber, 51);

+        }

+

+        [TestMethod]

+        public void EmptyPackedValue()

+        {

+            TestPackedTypes empty = new TestPackedTypes.Builder().Build();

+            Assert.AreEqual(0, empty.SerializedSize);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/IssuesTest.cs b/csharp/src/ProtocolBuffers.Test/IssuesTest.cs
new file mode 100644
index 0000000..a80021c
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/IssuesTest.cs
@@ -0,0 +1,65 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Collections;

+using Google.ProtocolBuffers.Descriptors;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using UnitTest.Issues.TestProtos;

+

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Tests for issues which aren't easily compartmentalized into other unit tests.

+    /// </summary>

+    [TestClass]

+    public class IssuesTest

+    {

+        // Issue 45

+        [TestMethod]

+        public void FieldCalledItem()

+        {

+            ItemField message = new ItemField.Builder { Item = 3 }.Build();

+            FieldDescriptor field = ItemField.Descriptor.FindFieldByName("item");

+            Assert.IsNotNull(field);

+            Assert.AreEqual(3, (int)message[field]);

+        }

+    }

+}

diff --git a/csharp/src/ProtocolBuffers.Test/MessageStreamIteratorTest.cs b/csharp/src/ProtocolBuffers.Test/MessageStreamIteratorTest.cs
new file mode 100644
index 0000000..78f059f
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/MessageStreamIteratorTest.cs
@@ -0,0 +1,91 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.Collections.Generic;

+using System.IO;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using NestedMessage = Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class MessageStreamIteratorTest

+    {

+        [TestMethod]

+        public void ThreeMessagesInMemory()

+        {

+            MemoryStream stream = new MemoryStream(MessageStreamWriterTest.ThreeMessageData);

+            IEnumerable<NestedMessage> iterator = MessageStreamIterator<NestedMessage>.FromStreamProvider(() => stream);

+            List<NestedMessage> messages = new List<NestedMessage>(iterator);

+

+            Assert.AreEqual(3, messages.Count);

+            Assert.AreEqual(5, messages[0].Bb);

+            Assert.AreEqual(1500, messages[1].Bb);

+            Assert.IsFalse(messages[2].HasBb);

+        }

+

+        [TestMethod]

+        public void ManyMessagesShouldNotTriggerSizeAlert()

+        {

+            int messageSize = TestUtil.GetAllSet().SerializedSize;

+            // Enough messages to trigger the alert unless we've reset the size

+            // Note that currently we need to make this big enough to copy two whole buffers,

+            // as otherwise when we refill the buffer the second type, the alert triggers instantly.

+            int correctCount = (CodedInputStream.BufferSize*2)/messageSize + 1;

+            using (MemoryStream stream = new MemoryStream())

+            {

+                MessageStreamWriter<TestAllTypes> writer = new MessageStreamWriter<TestAllTypes>(stream);

+                for (int i = 0; i < correctCount; i++)

+                {

+                    writer.Write(TestUtil.GetAllSet());

+                }

+                writer.Flush();

+

+                stream.Position = 0;

+

+                int count = 0;

+                foreach (var message in MessageStreamIterator<TestAllTypes>.FromStreamProvider(() => stream)

+                    .WithSizeLimit(CodedInputStream.BufferSize*2))

+                {

+                    count++;

+                    TestUtil.AssertAllFieldsSet(message);

+                }

+                Assert.AreEqual(correctCount, count);

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/MessageStreamWriterTest.cs b/csharp/src/ProtocolBuffers.Test/MessageStreamWriterTest.cs
new file mode 100644
index 0000000..5377252
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/MessageStreamWriterTest.cs
@@ -0,0 +1,79 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.IO;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using NestedMessage = Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class MessageStreamWriterTest

+    {

+        internal static readonly byte[] ThreeMessageData = new byte[]

+                                                               {

+                                                                   (1 << 3) | 2, 2,

+                                                                   // Field 1, 2 bytes long (first message)

+                                                                   (1 << 3) | 0, 5, // Field 1, value 5

+                                                                   (1 << 3) | 2, 3,

+                                                                   // Field 1, 3 bytes long (second message)

+                                                                   (1 << 3) | 0, (1500 & 0x7f) | 0x80, 1500 >> 7,

+                                                                   // Field 1, value 1500

+                                                                   (1 << 3) | 2, 0, // Field 1, no data (third message)

+                                                               };

+

+        [TestMethod]

+        public void ThreeMessages()

+        {

+            NestedMessage message1 = new NestedMessage.Builder {Bb = 5}.Build();

+            NestedMessage message2 = new NestedMessage.Builder {Bb = 1500}.Build();

+            NestedMessage message3 = new NestedMessage.Builder().Build();

+

+            byte[] data;

+            using (MemoryStream stream = new MemoryStream())

+            {

+                MessageStreamWriter<NestedMessage> writer = new MessageStreamWriter<NestedMessage>(stream);

+                writer.Write(message1);

+                writer.Write(message2);

+                writer.Write(message3);

+                writer.Flush();

+                data = stream.ToArray();

+            }

+

+            TestUtil.AssertEqualBytes(ThreeMessageData, data);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/MessageTest.cs b/csharp/src/ProtocolBuffers.Test/MessageTest.cs
new file mode 100644
index 0000000..8bb0fac
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/MessageTest.cs
@@ -0,0 +1,387 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.IO;

+using Google.ProtocolBuffers.Descriptors;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Miscellaneous tests for message operations that apply to both

+    /// generated and dynamic messages.

+    /// </summary>

+    [TestClass]

+    public class MessageTest

+    {

+        // =================================================================

+        // Message-merging tests.

+

+        private static readonly TestAllTypes MergeSource = new TestAllTypes.Builder

+                                                               {

+                                                                   OptionalInt32 = 1,

+                                                                   OptionalString = "foo",

+                                                                   OptionalForeignMessage =

+                                                                       ForeignMessage.DefaultInstance,

+                                                               }.AddRepeatedString("bar").Build();

+

+        private static readonly TestAllTypes MergeDest = new TestAllTypes.Builder

+                                                             {

+                                                                 OptionalInt64 = 2,

+                                                                 OptionalString = "baz",

+                                                                 OptionalForeignMessage =

+                                                                     new ForeignMessage.Builder {C = 3}.Build(),

+                                                             }.AddRepeatedString("qux").Build();

+

+        private const string MergeResultText =

+            "optional_int32: 1\n" +

+            "optional_int64: 2\n" +

+            "optional_string: \"foo\"\n" +

+            "optional_foreign_message {\n" +

+            "  c: 3\n" +

+            "}\n" +

+            "repeated_string: \"qux\"\n" +

+            "repeated_string: \"bar\"\n";

+

+        [TestMethod]

+        public void MergeFrom()

+        {

+            TestAllTypes result = TestAllTypes.CreateBuilder(MergeDest).MergeFrom(MergeSource).Build();

+

+            Assert.AreEqual(MergeResultText, result.ToString());

+        }

+

+        /// <summary>

+        /// Test merging a DynamicMessage into a GeneratedMessage. 

+        /// As long as they have the same descriptor, this should work, but it is an

+        /// entirely different code path.

+        /// </summary>

+        [TestMethod]

+        public void MergeFromDynamic()

+        {

+            TestAllTypes result = (TestAllTypes) TestAllTypes.CreateBuilder(MergeDest)

+                                                     .MergeFrom(DynamicMessage.CreateBuilder(MergeSource).Build())

+                                                     .Build();

+

+            Assert.AreEqual(MergeResultText, result.ToString());

+        }

+

+        /// <summary>

+        /// Test merging two DynamicMessages.

+        /// </summary>

+        [TestMethod]

+        public void DynamicMergeFrom()

+        {

+            DynamicMessage result = (DynamicMessage) DynamicMessage.CreateBuilder(MergeDest)

+                                                         .MergeFrom(

+                                                             (DynamicMessage)

+                                                             DynamicMessage.CreateBuilder(MergeSource).Build())

+                                                         .Build();

+

+            Assert.AreEqual(MergeResultText, result.ToString());

+        }

+

+        // =================================================================

+        // Required-field-related tests.

+

+        private static readonly TestRequired TestRequiredUninitialized = TestRequired.DefaultInstance;

+

+        private static readonly TestRequired TestRequiredInitialized = new TestRequired.Builder

+                                                                           {

+                                                                               A = 1,

+                                                                               B = 2,

+                                                                               C = 3

+                                                                           }.Build();

+

+        [TestMethod]

+        public void Initialization()

+        {

+            TestRequired.Builder builder = TestRequired.CreateBuilder();

+

+            Assert.IsFalse(builder.IsInitialized);

+            builder.A = 1;

+            Assert.IsFalse(builder.IsInitialized);

+            builder.B = 1;

+            Assert.IsFalse(builder.IsInitialized);

+            builder.C = 1;

+            Assert.IsTrue(builder.IsInitialized);

+        }

+

+        [TestMethod]

+        public void UninitializedBuilderToString()

+        {

+            TestRequired.Builder builder = TestRequired.CreateBuilder().SetA(1);

+            Assert.AreEqual("a: 1\n", builder.ToString());

+        }

+

+        [TestMethod]

+        public void RequiredForeign()

+        {

+            TestRequiredForeign.Builder builder = TestRequiredForeign.CreateBuilder();

+

+            Assert.IsTrue(builder.IsInitialized);

+

+            builder.SetOptionalMessage(TestRequiredUninitialized);

+            Assert.IsFalse(builder.IsInitialized);

+

+            builder.SetOptionalMessage(TestRequiredInitialized);

+            Assert.IsTrue(builder.IsInitialized);

+

+            builder.AddRepeatedMessage(TestRequiredUninitialized);

+            Assert.IsFalse(builder.IsInitialized);

+

+            builder.SetRepeatedMessage(0, TestRequiredInitialized);

+            Assert.IsTrue(builder.IsInitialized);

+        }

+

+        [TestMethod]

+        public void RequiredExtension()

+        {

+            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();

+

+            Assert.IsTrue(builder.IsInitialized);

+

+            builder.SetExtension(TestRequired.Single, TestRequiredUninitialized);

+            Assert.IsFalse(builder.IsInitialized);

+

+            builder.SetExtension(TestRequired.Single, TestRequiredInitialized);

+            Assert.IsTrue(builder.IsInitialized);

+

+            builder.AddExtension(TestRequired.Multi, TestRequiredUninitialized);

+            Assert.IsFalse(builder.IsInitialized);

+

+            builder.SetExtension(TestRequired.Multi, 0, TestRequiredInitialized);

+            Assert.IsTrue(builder.IsInitialized);

+        }

+

+        [TestMethod]

+        public void RequiredDynamic()

+        {

+            MessageDescriptor descriptor = TestRequired.Descriptor;

+            DynamicMessage.Builder builder = DynamicMessage.CreateBuilder(descriptor);

+

+            Assert.IsFalse(builder.IsInitialized);

+            builder[descriptor.FindDescriptor<FieldDescriptor>("a")] = 1;

+            Assert.IsFalse(builder.IsInitialized);

+            builder[descriptor.FindDescriptor<FieldDescriptor>("b")] = 1;

+            Assert.IsFalse(builder.IsInitialized);

+            builder[descriptor.FindDescriptor<FieldDescriptor>("c")] = 1;

+            Assert.IsTrue(builder.IsInitialized);

+        }

+

+        [TestMethod]

+        public void RequiredDynamicForeign()

+        {

+            MessageDescriptor descriptor = TestRequiredForeign.Descriptor;

+            DynamicMessage.Builder builder = DynamicMessage.CreateBuilder(descriptor);

+

+            Assert.IsTrue(builder.IsInitialized);

+

+            builder[descriptor.FindDescriptor<FieldDescriptor>("optional_message")] = TestRequiredUninitialized;

+            Assert.IsFalse(builder.IsInitialized);

+

+            builder[descriptor.FindDescriptor<FieldDescriptor>("optional_message")] = TestRequiredInitialized;

+            Assert.IsTrue(builder.IsInitialized);

+

+            builder.AddRepeatedField(descriptor.FindDescriptor<FieldDescriptor>("repeated_message"),

+                                     TestRequiredUninitialized);

+            Assert.IsFalse(builder.IsInitialized);

+

+            builder.SetRepeatedField(descriptor.FindDescriptor<FieldDescriptor>("repeated_message"), 0,

+                                     TestRequiredInitialized);

+            Assert.IsTrue(builder.IsInitialized);

+        }

+

+        [TestMethod]

+        public void UninitializedException()

+        {

+            try

+            {

+                TestRequired.CreateBuilder().Build();

+                Assert.Fail("Should have thrown an exception.");

+            }

+            catch (UninitializedMessageException e)

+            {

+                Assert.AreEqual("Message missing required fields: a, b, c", e.Message);

+            }

+        }

+

+        [TestMethod]

+        public void BuildPartial()

+        {

+            // We're mostly testing that no exception is thrown.

+            TestRequired message = TestRequired.CreateBuilder().BuildPartial();

+            Assert.IsFalse(message.IsInitialized);

+        }

+

+        [TestMethod]

+        public void NestedUninitializedException()

+        {

+            try

+            {

+                TestRequiredForeign.CreateBuilder()

+                    .SetOptionalMessage(TestRequiredUninitialized)

+                    .AddRepeatedMessage(TestRequiredUninitialized)

+                    .AddRepeatedMessage(TestRequiredUninitialized)

+                    .Build();

+                Assert.Fail("Should have thrown an exception.");

+            }

+            catch (UninitializedMessageException e)

+            {

+                Assert.AreEqual(

+                    "Message missing required fields: " +

+                    "optional_message.a, " +

+                    "optional_message.b, " +

+                    "optional_message.c, " +

+                    "repeated_message[0].a, " +

+                    "repeated_message[0].b, " +

+                    "repeated_message[0].c, " +

+                    "repeated_message[1].a, " +

+                    "repeated_message[1].b, " +

+                    "repeated_message[1].c",

+                    e.Message);

+            }

+        }

+

+        [TestMethod]

+        public void BuildNestedPartial()

+        {

+            // We're mostly testing that no exception is thrown.

+            TestRequiredForeign message =

+                TestRequiredForeign.CreateBuilder()

+                    .SetOptionalMessage(TestRequiredUninitialized)

+                    .AddRepeatedMessage(TestRequiredUninitialized)

+                    .AddRepeatedMessage(TestRequiredUninitialized)

+                    .BuildPartial();

+            Assert.IsFalse(message.IsInitialized);

+        }

+

+        [TestMethod]

+        public void ParseUnititialized()

+        {

+            try

+            {

+                TestRequired.ParseFrom(ByteString.Empty);

+                Assert.Fail("Should have thrown an exception.");

+            }

+            catch (InvalidProtocolBufferException e)

+            {

+                Assert.AreEqual("Message missing required fields: a, b, c", e.Message);

+            }

+        }

+

+        [TestMethod]

+        public void ParseNestedUnititialized()

+        {

+            ByteString data =

+                TestRequiredForeign.CreateBuilder()

+                    .SetOptionalMessage(TestRequiredUninitialized)

+                    .AddRepeatedMessage(TestRequiredUninitialized)

+                    .AddRepeatedMessage(TestRequiredUninitialized)

+                    .BuildPartial().ToByteString();

+

+            try

+            {

+                TestRequiredForeign.ParseFrom(data);

+                Assert.Fail("Should have thrown an exception.");

+            }

+            catch (InvalidProtocolBufferException e)

+            {

+                Assert.AreEqual(

+                    "Message missing required fields: " +

+                    "optional_message.a, " +

+                    "optional_message.b, " +

+                    "optional_message.c, " +

+                    "repeated_message[0].a, " +

+                    "repeated_message[0].b, " +

+                    "repeated_message[0].c, " +

+                    "repeated_message[1].a, " +

+                    "repeated_message[1].b, " +

+                    "repeated_message[1].c",

+                    e.Message);

+            }

+        }

+

+        [TestMethod]

+        public void DynamicUninitializedException()

+        {

+            try

+            {

+                DynamicMessage.CreateBuilder(TestRequired.Descriptor).Build();

+                Assert.Fail("Should have thrown an exception.");

+            }

+            catch (UninitializedMessageException e)

+            {

+                Assert.AreEqual("Message missing required fields: a, b, c", e.Message);

+            }

+        }

+

+        [TestMethod]

+        public void DynamicBuildPartial()

+        {

+            // We're mostly testing that no exception is thrown.

+            DynamicMessage message = DynamicMessage.CreateBuilder(TestRequired.Descriptor).BuildPartial();

+            Assert.IsFalse(message.Initialized);

+        }

+

+        [TestMethod]

+        public void DynamicParseUnititialized()

+        {

+            try

+            {

+                MessageDescriptor descriptor = TestRequired.Descriptor;

+                DynamicMessage.ParseFrom(descriptor, ByteString.Empty);

+                Assert.Fail("Should have thrown an exception.");

+            }

+            catch (InvalidProtocolBufferException e)

+            {

+                Assert.AreEqual("Message missing required fields: a, b, c", e.Message);

+            }

+        }

+

+        [TestMethod]

+        public void PackedTypesWrittenDirectlyToStream()

+        {

+            TestPackedTypes message = new TestPackedTypes.Builder {PackedInt32List = {0, 1, 2}}.Build();

+            MemoryStream stream = new MemoryStream();

+            message.WriteTo(stream);

+            stream.Position = 0;

+            TestPackedTypes readMessage = TestPackedTypes.ParseFrom(stream);

+            Assert.AreEqual(message, readMessage);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/MessageUtilTest.cs b/csharp/src/ProtocolBuffers.Test/MessageUtilTest.cs
new file mode 100644
index 0000000..4c33dbb
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/MessageUtilTest.cs
@@ -0,0 +1,87 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class MessageUtilTest

+    {

+        [TestMethod]

+        [ExpectedException(typeof(ArgumentNullException))]

+        public void NullTypeName()

+        {

+            MessageUtil.GetDefaultMessage((string) null);

+        }

+

+        [TestMethod]

+        [ExpectedException(typeof(ArgumentException))]

+        public void InvalidTypeName()

+        {

+            MessageUtil.GetDefaultMessage("invalidtypename");

+        }

+

+        [TestMethod]

+        public void ValidTypeName()

+        {

+            Assert.AreSame(TestAllTypes.DefaultInstance,

+                           MessageUtil.GetDefaultMessage(typeof(TestAllTypes).AssemblyQualifiedName));

+        }

+

+        [TestMethod]

+        [ExpectedException(typeof(ArgumentNullException))]

+        public void NullType()

+        {

+            MessageUtil.GetDefaultMessage((Type) null);

+        }

+

+        [TestMethod]

+        [ExpectedException(typeof(ArgumentException))]

+        public void NonMessageType()

+        {

+            MessageUtil.GetDefaultMessage(typeof(string));

+        }

+

+        [TestMethod]

+        public void ValidType()

+        {

+            Assert.AreSame(TestAllTypes.DefaultInstance, MessageUtil.GetDefaultMessage(typeof(TestAllTypes)));

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/NameHelpersTest.cs b/csharp/src/ProtocolBuffers.Test/NameHelpersTest.cs
new file mode 100644
index 0000000..50ab373
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/NameHelpersTest.cs
@@ -0,0 +1,82 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class NameHelpersTest

+    {

+        [TestMethod]

+        public void UnderscoresToPascalCase()

+        {

+            Assert.AreEqual("FooBar", NameHelpers.UnderscoresToPascalCase("Foo_bar"));

+            Assert.AreEqual("FooBar", NameHelpers.UnderscoresToPascalCase("foo_bar"));

+            Assert.AreEqual("Foo0Bar", NameHelpers.UnderscoresToPascalCase("Foo0bar"));

+            Assert.AreEqual("FooBar", NameHelpers.UnderscoresToPascalCase("Foo_+_Bar"));

+

+            Assert.AreEqual("Bar", NameHelpers.UnderscoresToPascalCase("__+bar"));

+            Assert.AreEqual("Bar", NameHelpers.UnderscoresToPascalCase("bar_"));

+            Assert.AreEqual("_0Bar", NameHelpers.UnderscoresToPascalCase("_0bar"));

+            Assert.AreEqual("_1Bar", NameHelpers.UnderscoresToPascalCase("_1_bar"));

+        }

+

+        [TestMethod]

+        public void UnderscoresToCamelCase()

+        {

+            Assert.AreEqual("fooBar", NameHelpers.UnderscoresToCamelCase("Foo_bar"));

+            Assert.AreEqual("fooBar", NameHelpers.UnderscoresToCamelCase("foo_bar"));

+            Assert.AreEqual("foo0Bar", NameHelpers.UnderscoresToCamelCase("Foo0bar"));

+            Assert.AreEqual("fooBar", NameHelpers.UnderscoresToCamelCase("Foo_+_Bar"));

+

+            Assert.AreEqual("bar", NameHelpers.UnderscoresToCamelCase("__+bar"));

+            Assert.AreEqual("bar", NameHelpers.UnderscoresToCamelCase("bar_"));

+            Assert.AreEqual("_0Bar", NameHelpers.UnderscoresToCamelCase("_0bar"));

+            Assert.AreEqual("_1Bar", NameHelpers.UnderscoresToCamelCase("_1_bar"));

+        }

+

+        [TestMethod]

+        public void StripSuffix()

+        {

+            string text = "FooBar";

+            Assert.IsFalse(NameHelpers.StripSuffix(ref text, "Foo"));

+            Assert.AreEqual("FooBar", text);

+            Assert.IsTrue(NameHelpers.StripSuffix(ref text, "Bar"));

+            Assert.AreEqual("Foo", text);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/Properties/AppManifest.xml b/csharp/src/ProtocolBuffers.Test/Properties/AppManifest.xml
new file mode 100644
index 0000000..a955232
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Properties/AppManifest.xml
@@ -0,0 +1,6 @@
+<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"

+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

+>

+    <Deployment.Parts>

+    </Deployment.Parts>

+</Deployment>

diff --git a/csharp/src/ProtocolBuffers.Test/Properties/AssemblyInfo.cs b/csharp/src/ProtocolBuffers.Test/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..cea5da5
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System;

+using System.Reflection;

+using System.Runtime.CompilerServices;

+using System.Runtime.InteropServices;

+

+// General Information about an assembly is controlled through the following 

+// set of attributes. Change these attribute values to modify the information

+// associated with an assembly.

+

+[assembly: AssemblyTitle("ProtocolBuffers.Test")]

+[assembly: AssemblyDescription("")]

+[assembly: AssemblyConfiguration("")]

+[assembly: AssemblyCompany("")]

+[assembly: AssemblyProduct("ProtocolBuffers.Test")]

+[assembly: AssemblyCopyright("Copyright �  2008")]

+[assembly: AssemblyTrademark("")]

+[assembly: AssemblyCulture("")]

+

+// Version information for an assembly consists of the following four values:

+//

+//      Major Version

+//      Minor Version 

+//      Build Number

+//      Revision

+//

+// You can specify all the values or you can default the Build and Revision Numbers 

+// by using the '*' as shown below:

+// [assembly: AssemblyVersion("2.4.1.555")]

+

+[assembly: AssemblyVersion("2.4.1.555")]

+

+// We don't really need CLSCompliance, but if the assembly builds with no warnings,

+// that means the generator is okay.

+

+[assembly: CLSCompliant(true)]
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/Properties/OutOfBrowserSettings.xml b/csharp/src/ProtocolBuffers.Test/Properties/OutOfBrowserSettings.xml
new file mode 100644
index 0000000..634f44b
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/Properties/OutOfBrowserSettings.xml
@@ -0,0 +1,7 @@
+<OutOfBrowserSettings ShortName="ProtocolBuffers.Test" EnableGPUAcceleration="False" ShowInstallMenuItem="False">

+  <OutOfBrowserSettings.Blurb>ProtocolBuffers.Test</OutOfBrowserSettings.Blurb>

+  <OutOfBrowserSettings.WindowSettings>

+    <WindowSettings Title="ProtocolBuffers.Test" />

+  </OutOfBrowserSettings.WindowSettings>

+  <OutOfBrowserSettings.Icons />

+</OutOfBrowserSettings>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.CF20.csproj b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.CF20.csproj
new file mode 100644
index 0000000..9ac3eaf
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.CF20.csproj
@@ -0,0 +1,190 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF20</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{DD01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Test</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF20\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="AbstractMessageTest.cs" />

+    <Compile Include="ByteStringTest.cs" />

+    <Compile Include="CodedInputStreamTest.cs" />

+    <Compile Include="CodedOutputStreamTest.cs" />

+    <Compile Include="Collections\PopsicleListTest.cs" />

+    <Compile Include="Compatibility\BinaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\CompatibilityTests.cs" />

+    <Compile Include="Compatibility\DictionaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\JsonCompatibilityTests.cs" />

+    <Compile Include="Compatibility\TestResources.cs" />

+    <Compile Include="Compatibility\TextCompatibilityTests.cs" />

+    <Compile Include="Compatibility\XmlCompatibilityTests.cs" />

+    <Compile Include="SerializableAttribute.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasProtoFile.cs" />

+    <Compile Include="TestResources.cs" />

+    <Compile Include="TestRpcForMimeTypes.cs" />

+    <Compile Include="TestReaderForUrlEncoded.cs" />

+    <Compile Include="CSharpOptionsTest.cs" />

+    <Compile Include="DeprecatedMemberTest.cs" />

+    <Compile Include="DescriptorsTest.cs" />

+    <Compile Include="Descriptors\MessageDescriptorTest.cs" />

+    <Compile Include="DynamicMessageTest.cs" />

+    <Compile Include="ExtendableMessageTest.cs" />

+    <Compile Include="GeneratedBuilderTest.cs" />

+    <Compile Include="GeneratedMessageTest.cs" />

+    <Compile Include="IssuesTest.cs" />

+    <Compile Include="MessageStreamIteratorTest.cs" />

+    <Compile Include="MessageStreamWriterTest.cs" />

+    <Compile Include="MessageTest.cs" />

+    <Compile Include="MessageUtilTest.cs" />

+    <Compile Include="NameHelpersTest.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ReflectionTester.cs" />

+    <Compile Include="ReusableBuilderTest.cs" />

+    <Compile Include="SerializableTest.cs" />

+    <Compile Include="ServiceTest.cs" />

+    <Compile Include="TestCornerCases.cs" />

+    <Compile Include="TestMimeMessageFormats.cs" />

+    <Compile Include="TestProtos\UnitTestCSharpOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestCustomOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmbedOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmptyProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasIssuesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGenericServices.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSizeProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSpeedProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestMessageSetProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestNoGenericServicesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInterop.cs" />

+    <Compile Include="TestProtos\UnitTestXmlSerializerTestProtoFile.cs" />

+    <Compile Include="TestRpcGenerator.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="TestWriterFormatJson.cs" />

+    <Compile Include="TestWriterFormatXml.cs" />

+    <Compile Include="TextFormatTest.cs" />

+    <Compile Include="UnknownFieldSetTest.cs" />

+    <Compile Include="WireFormatTest.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.CF20.csproj">

+      <Project>{231391AF-449C-4a39-986C-AD7F270F4750}</Project>

+      <Name>ProtocolBuffers.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.CF20.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>

+      <Install>false</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">

+      <Visible>False</Visible>

+      <ProductName>Windows Installer 3.1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+  </ItemGroup>

+  <ItemGroup>

+    <EmbeddedResource Include="Compatibility\google_message1.dat" />

+    <EmbeddedResource Include="Compatibility\google_message2.dat" />

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.CF35.csproj b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.CF35.csproj
new file mode 100644
index 0000000..0c6344e
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.CF35.csproj
@@ -0,0 +1,191 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF35</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{DD01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF35\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="AbstractMessageTest.cs" />

+    <Compile Include="ByteStringTest.cs" />

+    <Compile Include="CodedInputStreamTest.cs" />

+    <Compile Include="CodedOutputStreamTest.cs" />

+    <Compile Include="Collections\PopsicleListTest.cs" />

+    <Compile Include="Compatibility\BinaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\CompatibilityTests.cs" />

+    <Compile Include="Compatibility\DictionaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\JsonCompatibilityTests.cs" />

+    <Compile Include="Compatibility\TestResources.cs" />

+    <Compile Include="Compatibility\TextCompatibilityTests.cs" />

+    <Compile Include="Compatibility\XmlCompatibilityTests.cs" />

+    <Compile Include="SerializableAttribute.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasProtoFile.cs" />

+    <Compile Include="TestResources.cs" />

+    <Compile Include="TestRpcForMimeTypes.cs" />

+    <Compile Include="TestReaderForUrlEncoded.cs" />

+    <Compile Include="CSharpOptionsTest.cs" />

+    <Compile Include="DeprecatedMemberTest.cs" />

+    <Compile Include="DescriptorsTest.cs" />

+    <Compile Include="Descriptors\MessageDescriptorTest.cs" />

+    <Compile Include="DynamicMessageTest.cs" />

+    <Compile Include="ExtendableMessageTest.cs" />

+    <Compile Include="GeneratedBuilderTest.cs" />

+    <Compile Include="GeneratedMessageTest.cs" />

+    <Compile Include="IssuesTest.cs" />

+    <Compile Include="MessageStreamIteratorTest.cs" />

+    <Compile Include="MessageStreamWriterTest.cs" />

+    <Compile Include="MessageTest.cs" />

+    <Compile Include="MessageUtilTest.cs" />

+    <Compile Include="NameHelpersTest.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ReflectionTester.cs" />

+    <Compile Include="ReusableBuilderTest.cs" />

+    <Compile Include="SerializableTest.cs" />

+    <Compile Include="ServiceTest.cs" />

+    <Compile Include="TestCornerCases.cs" />

+    <Compile Include="TestMimeMessageFormats.cs" />

+    <Compile Include="TestProtos\UnitTestCSharpOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestCustomOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmbedOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmptyProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasIssuesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGenericServices.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSizeProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSpeedProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestMessageSetProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestNoGenericServicesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInterop.cs" />

+    <Compile Include="TestProtos\UnitTestXmlSerializerTestProtoFile.cs" />

+    <Compile Include="TestRpcGenerator.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="TestWriterFormatJson.cs" />

+    <Compile Include="TestWriterFormatXml.cs" />

+    <Compile Include="TextFormatTest.cs" />

+    <Compile Include="UnknownFieldSetTest.cs" />

+    <Compile Include="WireFormatTest.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.CF35.csproj">

+      <Project>{231391AF-449C-4a39-986C-AD7F270F4750}</Project>

+      <Name>ProtocolBuffers.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.CF35.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>

+      <Install>false</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">

+      <Visible>False</Visible>

+      <ProductName>Windows Installer 3.1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+  </ItemGroup>

+  <ItemGroup>

+    <EmbeddedResource Include="Compatibility\google_message1.dat" />

+    <EmbeddedResource Include="Compatibility\google_message2.dat" />

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.NET20.csproj b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.NET20.csproj
new file mode 100644
index 0000000..f0453fa
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.NET20.csproj
@@ -0,0 +1,178 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET20</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{DD01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Test</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET20\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="AbstractMessageTest.cs" />

+    <Compile Include="ByteStringTest.cs" />

+    <Compile Include="CodedInputStreamTest.cs" />

+    <Compile Include="CodedOutputStreamTest.cs" />

+    <Compile Include="Collections\PopsicleListTest.cs" />

+    <Compile Include="Compatibility\BinaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\CompatibilityTests.cs" />

+    <Compile Include="Compatibility\DictionaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\JsonCompatibilityTests.cs" />

+    <Compile Include="Compatibility\TestResources.cs" />

+    <Compile Include="Compatibility\TextCompatibilityTests.cs" />

+    <Compile Include="Compatibility\XmlCompatibilityTests.cs" />

+    <Compile Include="SerializableAttribute.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasProtoFile.cs" />

+    <Compile Include="TestResources.cs" />

+    <Compile Include="TestRpcForMimeTypes.cs" />

+    <Compile Include="TestReaderForUrlEncoded.cs" />

+    <Compile Include="CSharpOptionsTest.cs" />

+    <Compile Include="DeprecatedMemberTest.cs" />

+    <Compile Include="DescriptorsTest.cs" />

+    <Compile Include="Descriptors\MessageDescriptorTest.cs" />

+    <Compile Include="DynamicMessageTest.cs" />

+    <Compile Include="ExtendableMessageTest.cs" />

+    <Compile Include="GeneratedBuilderTest.cs" />

+    <Compile Include="GeneratedMessageTest.cs" />

+    <Compile Include="IssuesTest.cs" />

+    <Compile Include="MessageStreamIteratorTest.cs" />

+    <Compile Include="MessageStreamWriterTest.cs" />

+    <Compile Include="MessageTest.cs" />

+    <Compile Include="MessageUtilTest.cs" />

+    <Compile Include="NameHelpersTest.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ReflectionTester.cs" />

+    <Compile Include="ReusableBuilderTest.cs" />

+    <Compile Include="SerializableTest.cs" />

+    <Compile Include="ServiceTest.cs" />

+    <Compile Include="TestCornerCases.cs" />

+    <Compile Include="TestMimeMessageFormats.cs" />

+    <Compile Include="TestProtos\UnitTestCSharpOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestCustomOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmbedOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmptyProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasIssuesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGenericServices.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSizeProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSpeedProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestMessageSetProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestNoGenericServicesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInterop.cs" />

+    <Compile Include="TestProtos\UnitTestXmlSerializerTestProtoFile.cs" />

+    <Compile Include="TestRpcGenerator.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="TestWriterFormatJson.cs" />

+    <Compile Include="TestWriterFormatXml.cs" />

+    <Compile Include="TextFormatTest.cs" />

+    <Compile Include="UnknownFieldSetTest.cs" />

+    <Compile Include="WireFormatTest.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.NET20.csproj">

+      <Project>{231391AF-449C-4a39-986C-AD7F270F4750}</Project>

+      <Name>ProtocolBuffers.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.NET20.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>

+      <Install>false</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">

+      <Visible>False</Visible>

+      <ProductName>Windows Installer 3.1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+  </ItemGroup>

+  <ItemGroup>

+    <EmbeddedResource Include="Compatibility\google_message1.dat" />

+    <EmbeddedResource Include="Compatibility\google_message2.dat" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.NET35.csproj b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.NET35.csproj
new file mode 100644
index 0000000..33630b4
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.NET35.csproj
@@ -0,0 +1,179 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{DD01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="AbstractMessageTest.cs" />

+    <Compile Include="ByteStringTest.cs" />

+    <Compile Include="CodedInputStreamTest.cs" />

+    <Compile Include="CodedOutputStreamTest.cs" />

+    <Compile Include="Collections\PopsicleListTest.cs" />

+    <Compile Include="Compatibility\BinaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\CompatibilityTests.cs" />

+    <Compile Include="Compatibility\DictionaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\JsonCompatibilityTests.cs" />

+    <Compile Include="Compatibility\TestResources.cs" />

+    <Compile Include="Compatibility\TextCompatibilityTests.cs" />

+    <Compile Include="Compatibility\XmlCompatibilityTests.cs" />

+    <Compile Include="SerializableAttribute.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasProtoFile.cs" />

+    <Compile Include="TestResources.cs" />

+    <Compile Include="TestRpcForMimeTypes.cs" />

+    <Compile Include="TestReaderForUrlEncoded.cs" />

+    <Compile Include="CSharpOptionsTest.cs" />

+    <Compile Include="DeprecatedMemberTest.cs" />

+    <Compile Include="DescriptorsTest.cs" />

+    <Compile Include="Descriptors\MessageDescriptorTest.cs" />

+    <Compile Include="DynamicMessageTest.cs" />

+    <Compile Include="ExtendableMessageTest.cs" />

+    <Compile Include="GeneratedBuilderTest.cs" />

+    <Compile Include="GeneratedMessageTest.cs" />

+    <Compile Include="IssuesTest.cs" />

+    <Compile Include="MessageStreamIteratorTest.cs" />

+    <Compile Include="MessageStreamWriterTest.cs" />

+    <Compile Include="MessageTest.cs" />

+    <Compile Include="MessageUtilTest.cs" />

+    <Compile Include="NameHelpersTest.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ReflectionTester.cs" />

+    <Compile Include="ReusableBuilderTest.cs" />

+    <Compile Include="SerializableTest.cs" />

+    <Compile Include="ServiceTest.cs" />

+    <Compile Include="TestCornerCases.cs" />

+    <Compile Include="TestMimeMessageFormats.cs" />

+    <Compile Include="TestProtos\UnitTestCSharpOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestCustomOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmbedOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmptyProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasIssuesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGenericServices.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSizeProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSpeedProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestMessageSetProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestNoGenericServicesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInterop.cs" />

+    <Compile Include="TestProtos\UnitTestXmlSerializerTestProtoFile.cs" />

+    <Compile Include="TestRpcGenerator.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="TestWriterFormatJson.cs" />

+    <Compile Include="TestWriterFormatXml.cs" />

+    <Compile Include="TextFormatTest.cs" />

+    <Compile Include="UnknownFieldSetTest.cs" />

+    <Compile Include="WireFormatTest.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.NET35.csproj">

+      <Project>{231391AF-449C-4a39-986C-AD7F270F4750}</Project>

+      <Name>ProtocolBuffers.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.NET35.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>

+      <Install>false</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">

+      <Visible>False</Visible>

+      <ProductName>Windows Installer 3.1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+  </ItemGroup>

+  <ItemGroup>

+    <EmbeddedResource Include="Compatibility\google_message1.dat" />

+    <EmbeddedResource Include="Compatibility\google_message2.dat" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.NET40.csproj b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.NET40.csproj
new file mode 100644
index 0000000..74ea721
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.NET40.csproj
@@ -0,0 +1,179 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET40</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{DD01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Test</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET40\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="AbstractMessageTest.cs" />

+    <Compile Include="ByteStringTest.cs" />

+    <Compile Include="CodedInputStreamTest.cs" />

+    <Compile Include="CodedOutputStreamTest.cs" />

+    <Compile Include="Collections\PopsicleListTest.cs" />

+    <Compile Include="Compatibility\BinaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\CompatibilityTests.cs" />

+    <Compile Include="Compatibility\DictionaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\JsonCompatibilityTests.cs" />

+    <Compile Include="Compatibility\TestResources.cs" />

+    <Compile Include="Compatibility\TextCompatibilityTests.cs" />

+    <Compile Include="Compatibility\XmlCompatibilityTests.cs" />

+    <Compile Include="SerializableAttribute.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasProtoFile.cs" />

+    <Compile Include="TestResources.cs" />

+    <Compile Include="TestRpcForMimeTypes.cs" />

+    <Compile Include="TestReaderForUrlEncoded.cs" />

+    <Compile Include="CSharpOptionsTest.cs" />

+    <Compile Include="DeprecatedMemberTest.cs" />

+    <Compile Include="DescriptorsTest.cs" />

+    <Compile Include="Descriptors\MessageDescriptorTest.cs" />

+    <Compile Include="DynamicMessageTest.cs" />

+    <Compile Include="ExtendableMessageTest.cs" />

+    <Compile Include="GeneratedBuilderTest.cs" />

+    <Compile Include="GeneratedMessageTest.cs" />

+    <Compile Include="IssuesTest.cs" />

+    <Compile Include="MessageStreamIteratorTest.cs" />

+    <Compile Include="MessageStreamWriterTest.cs" />

+    <Compile Include="MessageTest.cs" />

+    <Compile Include="MessageUtilTest.cs" />

+    <Compile Include="NameHelpersTest.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ReflectionTester.cs" />

+    <Compile Include="ReusableBuilderTest.cs" />

+    <Compile Include="SerializableTest.cs" />

+    <Compile Include="ServiceTest.cs" />

+    <Compile Include="TestCornerCases.cs" />

+    <Compile Include="TestMimeMessageFormats.cs" />

+    <Compile Include="TestProtos\UnitTestCSharpOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestCustomOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmbedOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmptyProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasIssuesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGenericServices.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSizeProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSpeedProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestMessageSetProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestNoGenericServicesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInterop.cs" />

+    <Compile Include="TestProtos\UnitTestXmlSerializerTestProtoFile.cs" />

+    <Compile Include="TestRpcGenerator.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="TestWriterFormatJson.cs" />

+    <Compile Include="TestWriterFormatXml.cs" />

+    <Compile Include="TextFormatTest.cs" />

+    <Compile Include="UnknownFieldSetTest.cs" />

+    <Compile Include="WireFormatTest.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.NET40.csproj">

+      <Project>{231391AF-449C-4a39-986C-AD7F270F4750}</Project>

+      <Name>ProtocolBuffers.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.NET40.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>

+      <Install>false</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">

+      <Visible>False</Visible>

+      <ProductName>Windows Installer 3.1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+  </ItemGroup>

+  <ItemGroup>

+    <EmbeddedResource Include="Compatibility\google_message1.dat" />

+    <EmbeddedResource Include="Compatibility\google_message2.dat" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.PL40.csproj b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.PL40.csproj
new file mode 100644
index 0000000..018cf9d
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.PL40.csproj
@@ -0,0 +1,213 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>PORTABLE_LIBRARY</EnvironmentFlavor>

+    <EnvironmentTemplate>PL40</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{DD01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Test</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <TargetFrameworkProfile />

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <SilverlightApplication>true</SilverlightApplication>

+    <XapOutputs>true</XapOutputs>

+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>

+    <XapFilename>Google.ProtocolBuffers.Test.xap</XapFilename>

+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>

+    <SilverlightAppEntry>Google.ProtocolBuffers.App</SilverlightAppEntry>

+    <TestPageFileName>TestPage.html</TestPageFileName>

+    <CreateTestPage>true</CreateTestPage>

+    <SilverlightVersion>v4.0</SilverlightVersion>

+    <OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>

+    <EnableOutOfBrowser>true</EnableOutOfBrowser>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\PL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\PL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+    <Reference Include="System.Windows" />

+    <Reference Include="System.Windows.Browser" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="AbstractMessageTest.cs" />

+    <Compile Include="ByteStringTest.cs" />

+    <Compile Include="CodedInputStreamTest.cs" />

+    <Compile Include="CodedOutputStreamTest.cs" />

+    <Compile Include="Collections\PopsicleListTest.cs" />

+    <Compile Include="Compatibility\BinaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\CompatibilityTests.cs" />

+    <Compile Include="Compatibility\DictionaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\JsonCompatibilityTests.cs" />

+    <Compile Include="Compatibility\TestResources.cs" />

+    <Compile Include="Compatibility\TextCompatibilityTests.cs" />

+    <Compile Include="Compatibility\XmlCompatibilityTests.cs" />

+    <Compile Include="SerializableAttribute.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasProtoFile.cs" />

+    <Compile Include="TestResources.cs" />

+    <Compile Include="TestRpcForMimeTypes.cs" />

+    <Compile Include="TestReaderForUrlEncoded.cs" />

+    <Compile Include="CSharpOptionsTest.cs" />

+    <Compile Include="DeprecatedMemberTest.cs" />

+    <Compile Include="DescriptorsTest.cs" />

+    <Compile Include="Descriptors\MessageDescriptorTest.cs" />

+    <Compile Include="DynamicMessageTest.cs" />

+    <Compile Include="ExtendableMessageTest.cs" />

+    <Compile Include="GeneratedBuilderTest.cs" />

+    <Compile Include="GeneratedMessageTest.cs" />

+    <Compile Include="IssuesTest.cs" />

+    <Compile Include="MessageStreamIteratorTest.cs" />

+    <Compile Include="MessageStreamWriterTest.cs" />

+    <Compile Include="MessageTest.cs" />

+    <Compile Include="MessageUtilTest.cs" />

+    <Compile Include="NameHelpersTest.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ReflectionTester.cs" />

+    <Compile Include="ReusableBuilderTest.cs" />

+    <Compile Include="SerializableTest.cs" />

+    <Compile Include="ServiceTest.cs" />

+    <Compile Include="TestCornerCases.cs" />

+    <Compile Include="TestMimeMessageFormats.cs" />

+    <Compile Include="TestProtos\UnitTestCSharpOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestCustomOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmbedOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmptyProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasIssuesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGenericServices.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSizeProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSpeedProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestMessageSetProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestNoGenericServicesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInterop.cs" />

+    <Compile Include="TestProtos\UnitTestXmlSerializerTestProtoFile.cs" />

+    <Compile Include="TestRpcGenerator.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="TestWriterFormatJson.cs" />

+    <Compile Include="TestWriterFormatXml.cs" />

+    <Compile Include="TextFormatTest.cs" />

+    <Compile Include="UnknownFieldSetTest.cs" />

+    <Compile Include="WireFormatTest.cs" />

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+    </Compile>

+    <None Include="Properties\AppManifest.xml" />

+    <None Include="Properties\OutOfBrowserSettings.xml" />

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.PL40.csproj">

+      <Project>{231391AF-449C-4a39-986C-AD7F270F4750}</Project>

+      <Name>ProtocolBuffers.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.PL40.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>

+      <Install>false</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">

+      <Visible>False</Visible>

+      <ProductName>Windows Installer 3.1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+  </ItemGroup>

+  <ItemGroup>

+    <EmbeddedResource Include="Compatibility\google_message1.dat" />

+    <EmbeddedResource Include="Compatibility\google_message2.dat" />

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.SL20.csproj b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.SL20.csproj
new file mode 100644
index 0000000..e54fa25
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.SL20.csproj
@@ -0,0 +1,214 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL20</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{DD01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Test</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>true</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <XapOutputs>true</XapOutputs>

+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>

+    <XapFilename>Google.ProtocolBuffers.Test.xap</XapFilename>

+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>

+    <SilverlightAppEntry>Google.ProtocolBuffers.App</SilverlightAppEntry>

+    <TestPageFileName>TestPage.html</TestPageFileName>

+    <CreateTestPage>true</CreateTestPage>

+    <SilverlightVersion>v2.0</SilverlightVersion>

+    <OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>

+    <EnableOutOfBrowser>true</EnableOutOfBrowser>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL20\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Windows" />

+    <Reference Include="System.Windows.Browser" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="AbstractMessageTest.cs" />

+    <Compile Include="ByteStringTest.cs" />

+    <Compile Include="CodedInputStreamTest.cs" />

+    <Compile Include="CodedOutputStreamTest.cs" />

+    <Compile Include="Collections\PopsicleListTest.cs" />

+    <Compile Include="Compatibility\BinaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\CompatibilityTests.cs" />

+    <Compile Include="Compatibility\DictionaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\JsonCompatibilityTests.cs" />

+    <Compile Include="Compatibility\TestResources.cs" />

+    <Compile Include="Compatibility\TextCompatibilityTests.cs" />

+    <Compile Include="Compatibility\XmlCompatibilityTests.cs" />

+    <Compile Include="SerializableAttribute.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasProtoFile.cs" />

+    <Compile Include="TestResources.cs" />

+    <Compile Include="TestRpcForMimeTypes.cs" />

+    <Compile Include="TestReaderForUrlEncoded.cs" />

+    <Compile Include="CSharpOptionsTest.cs" />

+    <Compile Include="DeprecatedMemberTest.cs" />

+    <Compile Include="DescriptorsTest.cs" />

+    <Compile Include="Descriptors\MessageDescriptorTest.cs" />

+    <Compile Include="DynamicMessageTest.cs" />

+    <Compile Include="ExtendableMessageTest.cs" />

+    <Compile Include="GeneratedBuilderTest.cs" />

+    <Compile Include="GeneratedMessageTest.cs" />

+    <Compile Include="IssuesTest.cs" />

+    <Compile Include="MessageStreamIteratorTest.cs" />

+    <Compile Include="MessageStreamWriterTest.cs" />

+    <Compile Include="MessageTest.cs" />

+    <Compile Include="MessageUtilTest.cs" />

+    <Compile Include="NameHelpersTest.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ReflectionTester.cs" />

+    <Compile Include="ReusableBuilderTest.cs" />

+    <Compile Include="SerializableTest.cs" />

+    <Compile Include="ServiceTest.cs" />

+    <Compile Include="TestCornerCases.cs" />

+    <Compile Include="TestMimeMessageFormats.cs" />

+    <Compile Include="TestProtos\UnitTestCSharpOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestCustomOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmbedOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmptyProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasIssuesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGenericServices.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSizeProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSpeedProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestMessageSetProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestNoGenericServicesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInterop.cs" />

+    <Compile Include="TestProtos\UnitTestXmlSerializerTestProtoFile.cs" />

+    <Compile Include="TestRpcGenerator.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="TestWriterFormatJson.cs" />

+    <Compile Include="TestWriterFormatXml.cs" />

+    <Compile Include="TextFormatTest.cs" />

+    <Compile Include="UnknownFieldSetTest.cs" />

+    <Compile Include="WireFormatTest.cs" />

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+    </Compile>

+    <None Include="Properties\AppManifest.xml" />

+    <None Include="Properties\OutOfBrowserSettings.xml" />

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.SL20.csproj">

+      <Project>{231391AF-449C-4a39-986C-AD7F270F4750}</Project>

+      <Name>ProtocolBuffers.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.SL20.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>

+      <Install>false</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">

+      <Visible>False</Visible>

+      <ProductName>Windows Installer 3.1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+  </ItemGroup>

+  <ItemGroup>

+    <EmbeddedResource Include="Compatibility\google_message1.dat" />

+    <EmbeddedResource Include="Compatibility\google_message2.dat" />

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.SL30.csproj b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.SL30.csproj
new file mode 100644
index 0000000..76f6b1a
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.SL30.csproj
@@ -0,0 +1,215 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL30</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{DD01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>true</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <XapOutputs>true</XapOutputs>

+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>

+    <XapFilename>Google.ProtocolBuffers.Test.xap</XapFilename>

+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>

+    <SilverlightAppEntry>Google.ProtocolBuffers.App</SilverlightAppEntry>

+    <TestPageFileName>TestPage.html</TestPageFileName>

+    <CreateTestPage>true</CreateTestPage>

+    <SilverlightVersion>v3.5</SilverlightVersion>

+    <OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>

+    <EnableOutOfBrowser>true</EnableOutOfBrowser>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL30\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL30\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+    <Reference Include="System.Windows" />

+    <Reference Include="System.Windows.Browser" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="AbstractMessageTest.cs" />

+    <Compile Include="ByteStringTest.cs" />

+    <Compile Include="CodedInputStreamTest.cs" />

+    <Compile Include="CodedOutputStreamTest.cs" />

+    <Compile Include="Collections\PopsicleListTest.cs" />

+    <Compile Include="Compatibility\BinaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\CompatibilityTests.cs" />

+    <Compile Include="Compatibility\DictionaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\JsonCompatibilityTests.cs" />

+    <Compile Include="Compatibility\TestResources.cs" />

+    <Compile Include="Compatibility\TextCompatibilityTests.cs" />

+    <Compile Include="Compatibility\XmlCompatibilityTests.cs" />

+    <Compile Include="SerializableAttribute.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasProtoFile.cs" />

+    <Compile Include="TestResources.cs" />

+    <Compile Include="TestRpcForMimeTypes.cs" />

+    <Compile Include="TestReaderForUrlEncoded.cs" />

+    <Compile Include="CSharpOptionsTest.cs" />

+    <Compile Include="DeprecatedMemberTest.cs" />

+    <Compile Include="DescriptorsTest.cs" />

+    <Compile Include="Descriptors\MessageDescriptorTest.cs" />

+    <Compile Include="DynamicMessageTest.cs" />

+    <Compile Include="ExtendableMessageTest.cs" />

+    <Compile Include="GeneratedBuilderTest.cs" />

+    <Compile Include="GeneratedMessageTest.cs" />

+    <Compile Include="IssuesTest.cs" />

+    <Compile Include="MessageStreamIteratorTest.cs" />

+    <Compile Include="MessageStreamWriterTest.cs" />

+    <Compile Include="MessageTest.cs" />

+    <Compile Include="MessageUtilTest.cs" />

+    <Compile Include="NameHelpersTest.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ReflectionTester.cs" />

+    <Compile Include="ReusableBuilderTest.cs" />

+    <Compile Include="SerializableTest.cs" />

+    <Compile Include="ServiceTest.cs" />

+    <Compile Include="TestCornerCases.cs" />

+    <Compile Include="TestMimeMessageFormats.cs" />

+    <Compile Include="TestProtos\UnitTestCSharpOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestCustomOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmbedOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmptyProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasIssuesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGenericServices.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSizeProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSpeedProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestMessageSetProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestNoGenericServicesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInterop.cs" />

+    <Compile Include="TestProtos\UnitTestXmlSerializerTestProtoFile.cs" />

+    <Compile Include="TestRpcGenerator.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="TestWriterFormatJson.cs" />

+    <Compile Include="TestWriterFormatXml.cs" />

+    <Compile Include="TextFormatTest.cs" />

+    <Compile Include="UnknownFieldSetTest.cs" />

+    <Compile Include="WireFormatTest.cs" />

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+    </Compile>

+    <None Include="Properties\AppManifest.xml" />

+    <None Include="Properties\OutOfBrowserSettings.xml" />

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.SL30.csproj">

+      <Project>{231391AF-449C-4a39-986C-AD7F270F4750}</Project>

+      <Name>ProtocolBuffers.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.SL30.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>

+      <Install>false</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">

+      <Visible>False</Visible>

+      <ProductName>Windows Installer 3.1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+  </ItemGroup>

+  <ItemGroup>

+    <EmbeddedResource Include="Compatibility\google_message1.dat" />

+    <EmbeddedResource Include="Compatibility\google_message2.dat" />

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.SL40.csproj b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.SL40.csproj
new file mode 100644
index 0000000..ade3dc3
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.SL40.csproj
@@ -0,0 +1,215 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL40</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{DD01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Test</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>true</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <SilverlightVersion>v4.0</SilverlightVersion>

+    <XapOutputs>true</XapOutputs>

+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>

+    <XapFilename>Google.ProtocolBuffers.Test.xap</XapFilename>

+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>

+    <SilverlightAppEntry>Google.ProtocolBuffers.App</SilverlightAppEntry>

+    <TestPageFileName>TestPage.html</TestPageFileName>

+    <CreateTestPage>true</CreateTestPage>

+    <OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>

+    <EnableOutOfBrowser>true</EnableOutOfBrowser>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+    <Reference Include="System.Windows" />

+    <Reference Include="System.Windows.Browser" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="AbstractMessageTest.cs" />

+    <Compile Include="ByteStringTest.cs" />

+    <Compile Include="CodedInputStreamTest.cs" />

+    <Compile Include="CodedOutputStreamTest.cs" />

+    <Compile Include="Collections\PopsicleListTest.cs" />

+    <Compile Include="Compatibility\BinaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\CompatibilityTests.cs" />

+    <Compile Include="Compatibility\DictionaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\JsonCompatibilityTests.cs" />

+    <Compile Include="Compatibility\TestResources.cs" />

+    <Compile Include="Compatibility\TextCompatibilityTests.cs" />

+    <Compile Include="Compatibility\XmlCompatibilityTests.cs" />

+    <Compile Include="SerializableAttribute.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasProtoFile.cs" />

+    <Compile Include="TestResources.cs" />

+    <Compile Include="TestRpcForMimeTypes.cs" />

+    <Compile Include="TestReaderForUrlEncoded.cs" />

+    <Compile Include="CSharpOptionsTest.cs" />

+    <Compile Include="DeprecatedMemberTest.cs" />

+    <Compile Include="DescriptorsTest.cs" />

+    <Compile Include="Descriptors\MessageDescriptorTest.cs" />

+    <Compile Include="DynamicMessageTest.cs" />

+    <Compile Include="ExtendableMessageTest.cs" />

+    <Compile Include="GeneratedBuilderTest.cs" />

+    <Compile Include="GeneratedMessageTest.cs" />

+    <Compile Include="IssuesTest.cs" />

+    <Compile Include="MessageStreamIteratorTest.cs" />

+    <Compile Include="MessageStreamWriterTest.cs" />

+    <Compile Include="MessageTest.cs" />

+    <Compile Include="MessageUtilTest.cs" />

+    <Compile Include="NameHelpersTest.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ReflectionTester.cs" />

+    <Compile Include="ReusableBuilderTest.cs" />

+    <Compile Include="SerializableTest.cs" />

+    <Compile Include="ServiceTest.cs" />

+    <Compile Include="TestCornerCases.cs" />

+    <Compile Include="TestMimeMessageFormats.cs" />

+    <Compile Include="TestProtos\UnitTestCSharpOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestCustomOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmbedOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmptyProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasIssuesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGenericServices.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSizeProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSpeedProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestMessageSetProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestNoGenericServicesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInterop.cs" />

+    <Compile Include="TestProtos\UnitTestXmlSerializerTestProtoFile.cs" />

+    <Compile Include="TestRpcGenerator.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="TestWriterFormatJson.cs" />

+    <Compile Include="TestWriterFormatXml.cs" />

+    <Compile Include="TextFormatTest.cs" />

+    <Compile Include="UnknownFieldSetTest.cs" />

+    <Compile Include="WireFormatTest.cs" />

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+    </Compile>

+    <None Include="Properties\AppManifest.xml" />

+    <None Include="Properties\OutOfBrowserSettings.xml" />

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.SL40.csproj">

+      <Project>{231391AF-449C-4a39-986C-AD7F270F4750}</Project>

+      <Name>ProtocolBuffers.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.SL40.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>

+      <Install>false</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">

+      <Visible>False</Visible>

+      <ProductName>Windows Installer 3.1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+  </ItemGroup>

+  <ItemGroup>

+    <EmbeddedResource Include="Compatibility\google_message1.dat" />

+    <EmbeddedResource Include="Compatibility\google_message2.dat" />

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj
new file mode 100644
index 0000000..267fedc
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ProtocolBuffers.Test.csproj
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{DD01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="AbstractMessageTest.cs" />

+    <Compile Include="ByteStringTest.cs" />

+    <Compile Include="CodedInputStreamTest.cs" />

+    <Compile Include="CodedOutputStreamTest.cs" />

+    <Compile Include="Collections\PopsicleListTest.cs" />

+    <Compile Include="Compatibility\BinaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\CompatibilityTests.cs" />

+    <Compile Include="Compatibility\DictionaryCompatibilityTests.cs" />

+    <Compile Include="Compatibility\JsonCompatibilityTests.cs" />

+    <Compile Include="Compatibility\TestResources.cs" />

+    <Compile Include="Compatibility\TextCompatibilityTests.cs" />

+    <Compile Include="Compatibility\XmlCompatibilityTests.cs" />

+    <Compile Include="SerializableAttribute.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasProtoFile.cs" />

+    <Compile Include="TestResources.cs" />

+    <Compile Include="TestRpcForMimeTypes.cs" />

+    <Compile Include="TestReaderForUrlEncoded.cs" />

+    <Compile Include="CSharpOptionsTest.cs" />

+    <Compile Include="DeprecatedMemberTest.cs" />

+    <Compile Include="DescriptorsTest.cs" />

+    <Compile Include="Descriptors\MessageDescriptorTest.cs" />

+    <Compile Include="DynamicMessageTest.cs" />

+    <Compile Include="ExtendableMessageTest.cs" />

+    <Compile Include="GeneratedBuilderTest.cs" />

+    <Compile Include="GeneratedMessageTest.cs" />

+    <Compile Include="IssuesTest.cs" />

+    <Compile Include="MessageStreamIteratorTest.cs" />

+    <Compile Include="MessageStreamWriterTest.cs" />

+    <Compile Include="MessageTest.cs" />

+    <Compile Include="MessageUtilTest.cs" />

+    <Compile Include="NameHelpersTest.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ReflectionTester.cs" />

+    <Compile Include="ReusableBuilderTest.cs" />

+    <Compile Include="SerializableTest.cs" />

+    <Compile Include="ServiceTest.cs" />

+    <Compile Include="TestCornerCases.cs" />

+    <Compile Include="TestMimeMessageFormats.cs" />

+    <Compile Include="TestProtos\UnitTestCSharpOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestCustomOptionsProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmbedOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestEmptyProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasIssuesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGenericServices.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSizeProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestGoogleSpeedProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestMessageSetProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestNoGenericServicesProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestOptimizeForProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInterop.cs" />

+    <Compile Include="TestProtos\UnitTestXmlSerializerTestProtoFile.cs" />

+    <Compile Include="TestRpcGenerator.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="TestWriterFormatJson.cs" />

+    <Compile Include="TestWriterFormatXml.cs" />

+    <Compile Include="TextFormatTest.cs" />

+    <Compile Include="UnknownFieldSetTest.cs" />

+    <Compile Include="WireFormatTest.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.csproj">

+      <Project>{231391AF-449C-4a39-986C-AD7F270F4750}</Project>

+      <Name>ProtocolBuffers.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <ItemGroup>

+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>

+      <Install>false</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">

+      <Visible>False</Visible>

+      <ProductName>.NET Framework 3.5 SP1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">

+      <Visible>False</Visible>

+      <ProductName>Windows Installer 3.1</ProductName>

+      <Install>true</Install>

+    </BootstrapperPackage>

+  </ItemGroup>

+  <ItemGroup>

+    <EmbeddedResource Include="Compatibility\google_message1.dat" />

+    <EmbeddedResource Include="Compatibility\google_message2.dat" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ReflectionTester.cs b/csharp/src/ProtocolBuffers.Test/ReflectionTester.cs
new file mode 100644
index 0000000..2120ff8
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ReflectionTester.cs
@@ -0,0 +1,1006 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using Google.ProtocolBuffers.Descriptors;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+#pragma warning disable 618 // Disable warning about obsolete use miss-matched assert arguments

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Performs the same things that the methods of TestUtil do, but

+    /// via the reflection interface.  This is its own class because it needs

+    /// to know what descriptor to use.

+    /// </summary>

+    internal class ReflectionTester

+    {

+        private readonly MessageDescriptor baseDescriptor;

+        private readonly ExtensionRegistry extensionRegistry;

+

+        private readonly FileDescriptor file;

+        private readonly FileDescriptor importFile;

+

+        private readonly MessageDescriptor optionalGroup;

+        private readonly MessageDescriptor repeatedGroup;

+        private readonly MessageDescriptor nestedMessage;

+        private readonly MessageDescriptor foreignMessage;

+        private readonly MessageDescriptor importMessage;

+

+        private readonly FieldDescriptor groupA;

+        private readonly FieldDescriptor repeatedGroupA;

+        private readonly FieldDescriptor nestedB;

+        private readonly FieldDescriptor foreignC;

+        private readonly FieldDescriptor importD;

+

+        private readonly EnumDescriptor nestedEnum;

+        private readonly EnumDescriptor foreignEnum;

+        private readonly EnumDescriptor importEnum;

+

+        private readonly EnumValueDescriptor nestedFoo;

+        private readonly EnumValueDescriptor nestedBar;

+        private readonly EnumValueDescriptor nestedBaz;

+        private readonly EnumValueDescriptor foreignFoo;

+        private readonly EnumValueDescriptor foreignBar;

+        private readonly EnumValueDescriptor foreignBaz;

+        private readonly EnumValueDescriptor importFoo;

+        private readonly EnumValueDescriptor importBar;

+        private readonly EnumValueDescriptor importBaz;

+

+        /// <summary>

+        /// Constructs an instance that will expect messages using the given

+        /// descriptor. Normally <paramref name="baseDescriptor"/> should be

+        /// a descriptor for TestAllTypes. However, if extensionRegistry is non-null,

+        /// then baseDescriptor should be for TestAllExtensions instead, and instead of

+        /// reading and writing normal fields, the tester will read and write extensions.

+        /// All of the TestAllExtensions extensions must be registered in the registry.

+        /// </summary>

+        private ReflectionTester(MessageDescriptor baseDescriptor,

+                                 ExtensionRegistry extensionRegistry)

+        {

+            this.baseDescriptor = baseDescriptor;

+            this.extensionRegistry = extensionRegistry;

+

+            this.file = baseDescriptor.File;

+            // TODO(jonskeet): We've got 2 dependencies, not 1 - because of the C# options. Hmm.

+            //      Assert.AreEqual(1, file.Dependencies.Count);

+            // TODO(jonskeet): Find dependency by name instead of number?

+            this.importFile = file.Dependencies[1];

+

+            MessageDescriptor testAllTypes;

+            if (baseDescriptor.Name == "TestAllTypes")

+            {

+                testAllTypes = baseDescriptor;

+            }

+            else

+            {

+                testAllTypes = file.FindTypeByName<MessageDescriptor>("TestAllTypes");

+                Assert.IsNotNull(testAllTypes);

+            }

+

+            if (extensionRegistry == null)

+            {

+                // Use testAllTypes, rather than baseDescriptor, to allow

+                // initialization using TestPackedTypes descriptors. These objects

+                // won't be used by the methods for packed fields.

+                this.optionalGroup =

+                    testAllTypes.FindDescriptor<MessageDescriptor>("OptionalGroup");

+                this.repeatedGroup =

+                    testAllTypes.FindDescriptor<MessageDescriptor>("RepeatedGroup");

+            }

+            else

+            {

+                this.optionalGroup =

+                    file.FindTypeByName<MessageDescriptor>("OptionalGroup_extension");

+                this.repeatedGroup =

+                    file.FindTypeByName<MessageDescriptor>("RepeatedGroup_extension");

+            }

+            this.nestedMessage = testAllTypes.FindDescriptor<MessageDescriptor>("NestedMessage");

+            this.foreignMessage = file.FindTypeByName<MessageDescriptor>("ForeignMessage");

+            this.importMessage = importFile.FindTypeByName<MessageDescriptor>("ImportMessage");

+

+            this.nestedEnum = testAllTypes.FindDescriptor<EnumDescriptor>("NestedEnum");

+            this.foreignEnum = file.FindTypeByName<EnumDescriptor>("ForeignEnum");

+            this.importEnum = importFile.FindTypeByName<EnumDescriptor>("ImportEnum");

+

+            Assert.IsNotNull(optionalGroup);

+            Assert.IsNotNull(repeatedGroup);

+            Assert.IsNotNull(nestedMessage);

+            Assert.IsNotNull(foreignMessage);

+            Assert.IsNotNull(importMessage);

+            Assert.IsNotNull(nestedEnum);

+            Assert.IsNotNull(foreignEnum);

+            Assert.IsNotNull(importEnum);

+

+            this.nestedB = nestedMessage.FindDescriptor<FieldDescriptor>("bb");

+            this.foreignC = foreignMessage.FindDescriptor<FieldDescriptor>("c");

+            this.importD = importMessage.FindDescriptor<FieldDescriptor>("d");

+            this.nestedFoo = nestedEnum.FindValueByName("FOO");

+            this.nestedBar = nestedEnum.FindValueByName("BAR");

+            this.nestedBaz = nestedEnum.FindValueByName("BAZ");

+            this.foreignFoo = foreignEnum.FindValueByName("FOREIGN_FOO");

+            this.foreignBar = foreignEnum.FindValueByName("FOREIGN_BAR");

+            this.foreignBaz = foreignEnum.FindValueByName("FOREIGN_BAZ");

+            this.importFoo = importEnum.FindValueByName("IMPORT_FOO");

+            this.importBar = importEnum.FindValueByName("IMPORT_BAR");

+            this.importBaz = importEnum.FindValueByName("IMPORT_BAZ");

+

+            this.groupA = optionalGroup.FindDescriptor<FieldDescriptor>("a");

+            this.repeatedGroupA = repeatedGroup.FindDescriptor<FieldDescriptor>("a");

+

+            Assert.IsNotNull(groupA);

+            Assert.IsNotNull(repeatedGroupA);

+            Assert.IsNotNull(nestedB);

+            Assert.IsNotNull(foreignC);

+            Assert.IsNotNull(importD);

+            Assert.IsNotNull(nestedFoo);

+            Assert.IsNotNull(nestedBar);

+            Assert.IsNotNull(nestedBaz);

+            Assert.IsNotNull(foreignFoo);

+            Assert.IsNotNull(foreignBar);

+            Assert.IsNotNull(foreignBaz);

+            Assert.IsNotNull(importFoo);

+            Assert.IsNotNull(importBar);

+            Assert.IsNotNull(importBaz);

+        }

+

+        /// <summary>

+        /// Creates an instance for the TestAllTypes message, with no extension registry.

+        /// </summary>

+        public static ReflectionTester CreateTestAllTypesInstance()

+        {

+            return new ReflectionTester(TestAllTypes.Descriptor, null);

+        }

+

+        /// <summary>

+        /// Creates an instance for the TestAllExtensions message, with an

+        /// extension registry from TestUtil.CreateExtensionRegistry.

+        /// </summary>

+        public static ReflectionTester CreateTestAllExtensionsInstance()

+        {

+            return new ReflectionTester(TestAllExtensions.Descriptor, TestUtil.CreateExtensionRegistry());

+        }

+

+        /// <summary>

+        /// Creates an instance for the TestPackedTypes message, with no extensions.

+        /// </summary>

+        public static ReflectionTester CreateTestPackedTypesInstance()

+        {

+            return new ReflectionTester(TestPackedTypes.Descriptor, null);

+        }

+

+        /// <summary>

+        /// Shorthand to get a FieldDescriptor for a field of unittest::TestAllTypes.

+        /// </summary>

+        private FieldDescriptor f(String name)

+        {

+            FieldDescriptor result;

+            if (extensionRegistry == null)

+            {

+                result = baseDescriptor.FindDescriptor<FieldDescriptor>(name);

+            }

+            else

+            {

+                result = file.FindTypeByName<FieldDescriptor>(name + "_extension");

+            }

+            Assert.IsNotNull(result);

+            return result;

+        }

+

+        /// <summary>

+        /// Calls parent.CreateBuilderForField() or uses the extension registry

+        /// to find an appropriate builder, depending on what type is being tested.

+        /// </summary>

+        private IBuilder CreateBuilderForField(IBuilder parent, FieldDescriptor field)

+        {

+            if (extensionRegistry == null)

+            {

+                return parent.CreateBuilderForField(field);

+            }

+            else

+            {

+                ExtensionInfo extension = extensionRegistry[field.ContainingType, field.FieldNumber];

+                Assert.IsNotNull(extension);

+                Assert.IsNotNull(extension.DefaultInstance);

+                return (IBuilder) extension.DefaultInstance.WeakCreateBuilderForType();

+            }

+        }

+

+        /// <summary>

+        /// Sets every field of the message to the values expected by

+        /// AssertAllFieldsSet, using the reflection interface.

+        /// </summary>

+        /// <param name="message"></param>

+        internal void SetAllFieldsViaReflection(IBuilder message)

+        {

+            message[f("optional_int32")] = 101;

+            message[f("optional_int64")] = 102L;

+            message[f("optional_uint32")] = 103U;

+            message[f("optional_uint64")] = 104UL;

+            message[f("optional_sint32")] = 105;

+            message[f("optional_sint64")] = 106L;

+            message[f("optional_fixed32")] = 107U;

+            message[f("optional_fixed64")] = 108UL;

+            message[f("optional_sfixed32")] = 109;

+            message[f("optional_sfixed64")] = 110L;

+            message[f("optional_float")] = 111F;

+            message[f("optional_double")] = 112D;

+            message[f("optional_bool")] = true;

+            message[f("optional_string")] = "115";

+            message[f("optional_bytes")] = TestUtil.ToBytes("116");

+

+            message[f("optionalgroup")] =

+                CreateBuilderForField(message, f("optionalgroup")).SetField(groupA, 117).WeakBuild();

+            message[f("optional_nested_message")] =

+                CreateBuilderForField(message, f("optional_nested_message")).SetField(nestedB, 118).WeakBuild();

+            message[f("optional_foreign_message")] =

+                CreateBuilderForField(message, f("optional_foreign_message")).SetField(foreignC, 119).WeakBuild();

+            message[f("optional_import_message")] =

+                CreateBuilderForField(message, f("optional_import_message")).SetField(importD, 120).WeakBuild();

+

+            message[f("optional_nested_enum")] = nestedBaz;

+            message[f("optional_foreign_enum")] = foreignBaz;

+            message[f("optional_import_enum")] = importBaz;

+

+            message[f("optional_string_piece")] = "124";

+            message[f("optional_cord")] = "125";

+

+            // -----------------------------------------------------------------

+

+            message.WeakAddRepeatedField(f("repeated_int32"), 201);

+            message.WeakAddRepeatedField(f("repeated_int64"), 202L);

+            message.WeakAddRepeatedField(f("repeated_uint32"), 203U);

+            message.WeakAddRepeatedField(f("repeated_uint64"), 204UL);

+            message.WeakAddRepeatedField(f("repeated_sint32"), 205);

+            message.WeakAddRepeatedField(f("repeated_sint64"), 206L);

+            message.WeakAddRepeatedField(f("repeated_fixed32"), 207U);

+            message.WeakAddRepeatedField(f("repeated_fixed64"), 208UL);

+            message.WeakAddRepeatedField(f("repeated_sfixed32"), 209);

+            message.WeakAddRepeatedField(f("repeated_sfixed64"), 210L);

+            message.WeakAddRepeatedField(f("repeated_float"), 211F);

+            message.WeakAddRepeatedField(f("repeated_double"), 212D);

+            message.WeakAddRepeatedField(f("repeated_bool"), true);

+            message.WeakAddRepeatedField(f("repeated_string"), "215");

+            message.WeakAddRepeatedField(f("repeated_bytes"), TestUtil.ToBytes("216"));

+

+

+            message.WeakAddRepeatedField(f("repeatedgroup"),

+                                         CreateBuilderForField(message, f("repeatedgroup")).SetField(repeatedGroupA, 217)

+                                             .WeakBuild());

+            message.WeakAddRepeatedField(f("repeated_nested_message"),

+                                         CreateBuilderForField(message, f("repeated_nested_message")).SetField(nestedB,

+                                                                                                               218).

+                                             WeakBuild());

+            message.WeakAddRepeatedField(f("repeated_foreign_message"),

+                                         CreateBuilderForField(message, f("repeated_foreign_message")).SetField(

+                                             foreignC, 219).WeakBuild());

+            message.WeakAddRepeatedField(f("repeated_import_message"),

+                                         CreateBuilderForField(message, f("repeated_import_message")).SetField(importD,

+                                                                                                               220).

+                                             WeakBuild());

+

+            message.WeakAddRepeatedField(f("repeated_nested_enum"), nestedBar);

+            message.WeakAddRepeatedField(f("repeated_foreign_enum"), foreignBar);

+            message.WeakAddRepeatedField(f("repeated_import_enum"), importBar);

+

+            message.WeakAddRepeatedField(f("repeated_string_piece"), "224");

+            message.WeakAddRepeatedField(f("repeated_cord"), "225");

+

+            // Add a second one of each field.

+            message.WeakAddRepeatedField(f("repeated_int32"), 301);

+            message.WeakAddRepeatedField(f("repeated_int64"), 302L);

+            message.WeakAddRepeatedField(f("repeated_uint32"), 303U);

+            message.WeakAddRepeatedField(f("repeated_uint64"), 304UL);

+            message.WeakAddRepeatedField(f("repeated_sint32"), 305);

+            message.WeakAddRepeatedField(f("repeated_sint64"), 306L);

+            message.WeakAddRepeatedField(f("repeated_fixed32"), 307U);

+            message.WeakAddRepeatedField(f("repeated_fixed64"), 308UL);

+            message.WeakAddRepeatedField(f("repeated_sfixed32"), 309);

+            message.WeakAddRepeatedField(f("repeated_sfixed64"), 310L);

+            message.WeakAddRepeatedField(f("repeated_float"), 311F);

+            message.WeakAddRepeatedField(f("repeated_double"), 312D);

+            message.WeakAddRepeatedField(f("repeated_bool"), false);

+            message.WeakAddRepeatedField(f("repeated_string"), "315");

+            message.WeakAddRepeatedField(f("repeated_bytes"), TestUtil.ToBytes("316"));

+

+            message.WeakAddRepeatedField(f("repeatedgroup"),

+                                         CreateBuilderForField(message, f("repeatedgroup"))

+                                             .SetField(repeatedGroupA, 317).WeakBuild());

+            message.WeakAddRepeatedField(f("repeated_nested_message"),

+                                         CreateBuilderForField(message, f("repeated_nested_message"))

+                                             .SetField(nestedB, 318).WeakBuild());

+            message.WeakAddRepeatedField(f("repeated_foreign_message"),

+                                         CreateBuilderForField(message, f("repeated_foreign_message"))

+                                             .SetField(foreignC, 319).WeakBuild());

+            message.WeakAddRepeatedField(f("repeated_import_message"),

+                                         CreateBuilderForField(message, f("repeated_import_message"))

+                                             .SetField(importD, 320).WeakBuild());

+

+            message.WeakAddRepeatedField(f("repeated_nested_enum"), nestedBaz);

+            message.WeakAddRepeatedField(f("repeated_foreign_enum"), foreignBaz);

+            message.WeakAddRepeatedField(f("repeated_import_enum"), importBaz);

+

+            message.WeakAddRepeatedField(f("repeated_string_piece"), "324");

+            message.WeakAddRepeatedField(f("repeated_cord"), "325");

+

+            // -----------------------------------------------------------------

+

+            message[f("default_int32")] = 401;

+            message[f("default_int64")] = 402L;

+            message[f("default_uint32")] = 403U;

+            message[f("default_uint64")] = 404UL;

+            message[f("default_sint32")] = 405;

+            message[f("default_sint64")] = 406L;

+            message[f("default_fixed32")] = 407U;

+            message[f("default_fixed64")] = 408UL;

+            message[f("default_sfixed32")] = 409;

+            message[f("default_sfixed64")] = 410L;

+            message[f("default_float")] = 411F;

+            message[f("default_double")] = 412D;

+            message[f("default_bool")] = false;

+            message[f("default_string")] = "415";

+            message[f("default_bytes")] = TestUtil.ToBytes("416");

+

+            message[f("default_nested_enum")] = nestedFoo;

+            message[f("default_foreign_enum")] = foreignFoo;

+            message[f("default_import_enum")] = importFoo;

+

+            message[f("default_string_piece")] = "424";

+            message[f("default_cord")] = "425";

+        }

+

+        /// <summary>

+        /// Clears every field of the message, using the reflection interface.

+        /// </summary>

+        /// <param name="message"></param>

+        internal void ClearAllFieldsViaReflection(IBuilder message)

+        {

+            foreach (FieldDescriptor field in message.AllFields.Keys)

+            {

+                message.WeakClearField(field);

+            }

+        }

+

+        // -------------------------------------------------------------------

+

+        /// <summary>

+        /// Modify the repeated fields of the specified message to contain the

+        /// values expected by AssertRepeatedFieldsModified, using the IBuilder

+        /// reflection interface.

+        /// </summary>

+        internal void ModifyRepeatedFieldsViaReflection(IBuilder message)

+        {

+            message[f("repeated_int32"), 1] = 501;

+            message[f("repeated_int64"), 1] = 502L;

+            message[f("repeated_uint32"), 1] = 503U;

+            message[f("repeated_uint64"), 1] = 504UL;

+            message[f("repeated_sint32"), 1] = 505;

+            message[f("repeated_sint64"), 1] = 506L;

+            message[f("repeated_fixed32"), 1] = 507U;

+            message[f("repeated_fixed64"), 1] = 508UL;

+            message[f("repeated_sfixed32"), 1] = 509;

+            message[f("repeated_sfixed64"), 1] = 510L;

+            message[f("repeated_float"), 1] = 511F;

+            message[f("repeated_double"), 1] = 512D;

+            message[f("repeated_bool"), 1] = true;

+            message[f("repeated_string"), 1] = "515";

+            message.SetRepeatedField(f("repeated_bytes"), 1, TestUtil.ToBytes("516"));

+

+            message.SetRepeatedField(f("repeatedgroup"), 1,

+                                     CreateBuilderForField(message, f("repeatedgroup")).SetField(repeatedGroupA, 517).

+                                         WeakBuild());

+            message.SetRepeatedField(f("repeated_nested_message"), 1,

+                                     CreateBuilderForField(message, f("repeated_nested_message")).SetField(nestedB, 518)

+                                         .WeakBuild());

+            message.SetRepeatedField(f("repeated_foreign_message"), 1,

+                                     CreateBuilderForField(message, f("repeated_foreign_message")).SetField(foreignC,

+                                                                                                            519).

+                                         WeakBuild());

+            message.SetRepeatedField(f("repeated_import_message"), 1,

+                                     CreateBuilderForField(message, f("repeated_import_message")).SetField(importD, 520)

+                                         .WeakBuild());

+

+            message[f("repeated_nested_enum"), 1] = nestedFoo;

+            message[f("repeated_foreign_enum"), 1] = foreignFoo;

+            message[f("repeated_import_enum"), 1] = importFoo;

+

+            message[f("repeated_string_piece"), 1] = "524";

+            message[f("repeated_cord"), 1] = "525";

+        }

+

+        // -------------------------------------------------------------------

+

+        /// <summary>

+        /// Asserts that all fields of the specified message are set to the values

+        /// assigned by SetAllFields, using the IMessage reflection interface.

+        /// </summary>

+        public void AssertAllFieldsSetViaReflection(IMessage message)

+        {

+            Assert.IsTrue(message.HasField(f("optional_int32")));

+            Assert.IsTrue(message.HasField(f("optional_int64")));

+            Assert.IsTrue(message.HasField(f("optional_uint32")));

+            Assert.IsTrue(message.HasField(f("optional_uint64")));

+            Assert.IsTrue(message.HasField(f("optional_sint32")));

+            Assert.IsTrue(message.HasField(f("optional_sint64")));

+            Assert.IsTrue(message.HasField(f("optional_fixed32")));

+            Assert.IsTrue(message.HasField(f("optional_fixed64")));

+            Assert.IsTrue(message.HasField(f("optional_sfixed32")));

+            Assert.IsTrue(message.HasField(f("optional_sfixed64")));

+            Assert.IsTrue(message.HasField(f("optional_float")));

+            Assert.IsTrue(message.HasField(f("optional_double")));

+            Assert.IsTrue(message.HasField(f("optional_bool")));

+            Assert.IsTrue(message.HasField(f("optional_string")));

+            Assert.IsTrue(message.HasField(f("optional_bytes")));

+

+            Assert.IsTrue(message.HasField(f("optionalgroup")));

+            Assert.IsTrue(message.HasField(f("optional_nested_message")));

+            Assert.IsTrue(message.HasField(f("optional_foreign_message")));

+            Assert.IsTrue(message.HasField(f("optional_import_message")));

+

+            Assert.IsTrue(((IMessage) message[f("optionalgroup")]).HasField(groupA));

+            Assert.IsTrue(((IMessage) message[f("optional_nested_message")]).HasField(nestedB));

+            Assert.IsTrue(((IMessage) message[f("optional_foreign_message")]).HasField(foreignC));

+            Assert.IsTrue(((IMessage) message[f("optional_import_message")]).HasField(importD));

+

+            Assert.IsTrue(message.HasField(f("optional_nested_enum")));

+            Assert.IsTrue(message.HasField(f("optional_foreign_enum")));

+            Assert.IsTrue(message.HasField(f("optional_import_enum")));

+

+            Assert.IsTrue(message.HasField(f("optional_string_piece")));

+            Assert.IsTrue(message.HasField(f("optional_cord")));

+

+            Assert.AreEqual(101, message[f("optional_int32")]);

+            Assert.AreEqual(102L, message[f("optional_int64")]);

+            Assert.AreEqual(103u, message[f("optional_uint32")]);

+            Assert.AreEqual(104UL, message[f("optional_uint64")]);

+            Assert.AreEqual(105, message[f("optional_sint32")]);

+            Assert.AreEqual(106L, message[f("optional_sint64")]);

+            Assert.AreEqual(107U, message[f("optional_fixed32")]);

+            Assert.AreEqual(108UL, message[f("optional_fixed64")]);

+            Assert.AreEqual(109, message[f("optional_sfixed32")]);

+            Assert.AreEqual(110L, message[f("optional_sfixed64")]);

+            Assert.AreEqual(111F, message[f("optional_float")]);

+            Assert.AreEqual(112D, message[f("optional_double")]);

+            Assert.AreEqual(true, message[f("optional_bool")]);

+            Assert.AreEqual("115", message[f("optional_string")]);

+            Assert.AreEqual(TestUtil.ToBytes("116"), message[f("optional_bytes")]);

+

+            Assert.AreEqual(117, ((IMessage) message[f("optionalgroup")])[groupA]);

+            Assert.AreEqual(118, ((IMessage) message[f("optional_nested_message")])[nestedB]);

+            Assert.AreEqual(119, ((IMessage) message[f("optional_foreign_message")])[foreignC]);

+            Assert.AreEqual(120, ((IMessage) message[f("optional_import_message")])[importD]);

+

+            Assert.AreEqual(nestedBaz, message[f("optional_nested_enum")]);

+            Assert.AreEqual(foreignBaz, message[f("optional_foreign_enum")]);

+            Assert.AreEqual(importBaz, message[f("optional_import_enum")]);

+

+            Assert.AreEqual("124", message[f("optional_string_piece")]);

+            Assert.AreEqual("125", message[f("optional_cord")]);

+

+            // -----------------------------------------------------------------

+

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_int32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_int64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_uint32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_uint64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sint32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sint64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_fixed32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_fixed64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sfixed32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sfixed64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_float")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_double")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_bool")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_string")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_bytes")));

+

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeatedgroup")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_nested_message")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_foreign_message")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_import_message")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_nested_enum")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_foreign_enum")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_import_enum")));

+

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_string_piece")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_cord")));

+

+            Assert.AreEqual(201, message[f("repeated_int32"), 0]);

+            Assert.AreEqual(202L, message[f("repeated_int64"), 0]);

+            Assert.AreEqual(203U, message[f("repeated_uint32"), 0]);

+            Assert.AreEqual(204UL, message[f("repeated_uint64"), 0]);

+            Assert.AreEqual(205, message[f("repeated_sint32"), 0]);

+            Assert.AreEqual(206L, message[f("repeated_sint64"), 0]);

+            Assert.AreEqual(207U, message[f("repeated_fixed32"), 0]);

+            Assert.AreEqual(208UL, message[f("repeated_fixed64"), 0]);

+            Assert.AreEqual(209, message[f("repeated_sfixed32"), 0]);

+            Assert.AreEqual(210L, message[f("repeated_sfixed64"), 0]);

+            Assert.AreEqual(211F, message[f("repeated_float"), 0]);

+            Assert.AreEqual(212D, message[f("repeated_double"), 0]);

+            Assert.AreEqual(true, message[f("repeated_bool"), 0]);

+            Assert.AreEqual("215", message[f("repeated_string"), 0]);

+            Assert.AreEqual(TestUtil.ToBytes("216"), message[f("repeated_bytes"), 0]);

+

+            Assert.AreEqual(217, ((IMessage) message[f("repeatedgroup"), 0])[repeatedGroupA]);

+            Assert.AreEqual(218, ((IMessage) message[f("repeated_nested_message"), 0])[nestedB]);

+            Assert.AreEqual(219, ((IMessage) message[f("repeated_foreign_message"), 0])[foreignC]);

+            Assert.AreEqual(220, ((IMessage) message[f("repeated_import_message"), 0])[importD]);

+

+            Assert.AreEqual(nestedBar, message[f("repeated_nested_enum"), 0]);

+            Assert.AreEqual(foreignBar, message[f("repeated_foreign_enum"), 0]);

+            Assert.AreEqual(importBar, message[f("repeated_import_enum"), 0]);

+

+            Assert.AreEqual("224", message[f("repeated_string_piece"), 0]);

+            Assert.AreEqual("225", message[f("repeated_cord"), 0]);

+

+            Assert.AreEqual(301, message[f("repeated_int32"), 1]);

+            Assert.AreEqual(302L, message[f("repeated_int64"), 1]);

+            Assert.AreEqual(303U, message[f("repeated_uint32"), 1]);

+            Assert.AreEqual(304UL, message[f("repeated_uint64"), 1]);

+            Assert.AreEqual(305, message[f("repeated_sint32"), 1]);

+            Assert.AreEqual(306L, message[f("repeated_sint64"), 1]);

+            Assert.AreEqual(307U, message[f("repeated_fixed32"), 1]);

+            Assert.AreEqual(308UL, message[f("repeated_fixed64"), 1]);

+            Assert.AreEqual(309, message[f("repeated_sfixed32"), 1]);

+            Assert.AreEqual(310L, message[f("repeated_sfixed64"), 1]);

+            Assert.AreEqual(311F, message[f("repeated_float"), 1]);

+            Assert.AreEqual(312D, message[f("repeated_double"), 1]);

+            Assert.AreEqual(false, message[f("repeated_bool"), 1]);

+            Assert.AreEqual("315", message[f("repeated_string"), 1]);

+            Assert.AreEqual(TestUtil.ToBytes("316"), message[f("repeated_bytes"), 1]);

+

+            Assert.AreEqual(317, ((IMessage) message[f("repeatedgroup"), 1])[repeatedGroupA]);

+            Assert.AreEqual(318, ((IMessage) message[f("repeated_nested_message"), 1])[nestedB]);

+            Assert.AreEqual(319, ((IMessage) message[f("repeated_foreign_message"), 1])[foreignC]);

+            Assert.AreEqual(320, ((IMessage) message[f("repeated_import_message"), 1])[importD]);

+

+            Assert.AreEqual(nestedBaz, message[f("repeated_nested_enum"), 1]);

+            Assert.AreEqual(foreignBaz, message[f("repeated_foreign_enum"), 1]);

+            Assert.AreEqual(importBaz, message[f("repeated_import_enum"), 1]);

+

+            Assert.AreEqual("324", message[f("repeated_string_piece"), 1]);

+            Assert.AreEqual("325", message[f("repeated_cord"), 1]);

+

+            // -----------------------------------------------------------------

+

+            Assert.IsTrue(message.HasField(f("default_int32")));

+            Assert.IsTrue(message.HasField(f("default_int64")));

+            Assert.IsTrue(message.HasField(f("default_uint32")));

+            Assert.IsTrue(message.HasField(f("default_uint64")));

+            Assert.IsTrue(message.HasField(f("default_sint32")));

+            Assert.IsTrue(message.HasField(f("default_sint64")));

+            Assert.IsTrue(message.HasField(f("default_fixed32")));

+            Assert.IsTrue(message.HasField(f("default_fixed64")));

+            Assert.IsTrue(message.HasField(f("default_sfixed32")));

+            Assert.IsTrue(message.HasField(f("default_sfixed64")));

+            Assert.IsTrue(message.HasField(f("default_float")));

+            Assert.IsTrue(message.HasField(f("default_double")));

+            Assert.IsTrue(message.HasField(f("default_bool")));

+            Assert.IsTrue(message.HasField(f("default_string")));

+            Assert.IsTrue(message.HasField(f("default_bytes")));

+

+            Assert.IsTrue(message.HasField(f("default_nested_enum")));

+            Assert.IsTrue(message.HasField(f("default_foreign_enum")));

+            Assert.IsTrue(message.HasField(f("default_import_enum")));

+

+            Assert.IsTrue(message.HasField(f("default_string_piece")));

+            Assert.IsTrue(message.HasField(f("default_cord")));

+

+            Assert.AreEqual(401, message[f("default_int32")]);

+            Assert.AreEqual(402L, message[f("default_int64")]);

+            Assert.AreEqual(403U, message[f("default_uint32")]);

+            Assert.AreEqual(404UL, message[f("default_uint64")]);

+            Assert.AreEqual(405, message[f("default_sint32")]);

+            Assert.AreEqual(406L, message[f("default_sint64")]);

+            Assert.AreEqual(407U, message[f("default_fixed32")]);

+            Assert.AreEqual(408UL, message[f("default_fixed64")]);

+            Assert.AreEqual(409, message[f("default_sfixed32")]);

+            Assert.AreEqual(410L, message[f("default_sfixed64")]);

+            Assert.AreEqual(411F, message[f("default_float")]);

+            Assert.AreEqual(412D, message[f("default_double")]);

+            Assert.AreEqual(false, message[f("default_bool")]);

+            Assert.AreEqual("415", message[f("default_string")]);

+            Assert.AreEqual(TestUtil.ToBytes("416"), message[f("default_bytes")]);

+

+            Assert.AreEqual(nestedFoo, message[f("default_nested_enum")]);

+            Assert.AreEqual(foreignFoo, message[f("default_foreign_enum")]);

+            Assert.AreEqual(importFoo, message[f("default_import_enum")]);

+

+            Assert.AreEqual("424", message[f("default_string_piece")]);

+            Assert.AreEqual("425", message[f("default_cord")]);

+        }

+

+        /// <summary>

+        /// Assert that all fields of the message are cleared, and that

+        /// getting the fields returns their default values, using the reflection interface.

+        /// </summary>

+        public void AssertClearViaReflection(IMessage message)

+        {

+            // has_blah() should initially be false for all optional fields.

+            Assert.IsFalse(message.HasField(f("optional_int32")));

+            Assert.IsFalse(message.HasField(f("optional_int64")));

+            Assert.IsFalse(message.HasField(f("optional_uint32")));

+            Assert.IsFalse(message.HasField(f("optional_uint64")));

+            Assert.IsFalse(message.HasField(f("optional_sint32")));

+            Assert.IsFalse(message.HasField(f("optional_sint64")));

+            Assert.IsFalse(message.HasField(f("optional_fixed32")));

+            Assert.IsFalse(message.HasField(f("optional_fixed64")));

+            Assert.IsFalse(message.HasField(f("optional_sfixed32")));

+            Assert.IsFalse(message.HasField(f("optional_sfixed64")));

+            Assert.IsFalse(message.HasField(f("optional_float")));

+            Assert.IsFalse(message.HasField(f("optional_double")));

+            Assert.IsFalse(message.HasField(f("optional_bool")));

+            Assert.IsFalse(message.HasField(f("optional_string")));

+            Assert.IsFalse(message.HasField(f("optional_bytes")));

+

+            Assert.IsFalse(message.HasField(f("optionalgroup")));

+            Assert.IsFalse(message.HasField(f("optional_nested_message")));

+            Assert.IsFalse(message.HasField(f("optional_foreign_message")));

+            Assert.IsFalse(message.HasField(f("optional_import_message")));

+

+            Assert.IsFalse(message.HasField(f("optional_nested_enum")));

+            Assert.IsFalse(message.HasField(f("optional_foreign_enum")));

+            Assert.IsFalse(message.HasField(f("optional_import_enum")));

+

+            Assert.IsFalse(message.HasField(f("optional_string_piece")));

+            Assert.IsFalse(message.HasField(f("optional_cord")));

+

+            // Optional fields without defaults are set to zero or something like it.

+            Assert.AreEqual(0, message[f("optional_int32")]);

+            Assert.AreEqual(0L, message[f("optional_int64")]);

+            Assert.AreEqual(0U, message[f("optional_uint32")]);

+            Assert.AreEqual(0UL, message[f("optional_uint64")]);

+            Assert.AreEqual(0, message[f("optional_sint32")]);

+            Assert.AreEqual(0L, message[f("optional_sint64")]);

+            Assert.AreEqual(0U, message[f("optional_fixed32")]);

+            Assert.AreEqual(0UL, message[f("optional_fixed64")]);

+            Assert.AreEqual(0, message[f("optional_sfixed32")]);

+            Assert.AreEqual(0L, message[f("optional_sfixed64")]);

+            Assert.AreEqual(0F, message[f("optional_float")]);

+            Assert.AreEqual(0D, message[f("optional_double")]);

+            Assert.AreEqual(false, message[f("optional_bool")]);

+            Assert.AreEqual("", message[f("optional_string")]);

+            Assert.AreEqual(ByteString.Empty, message[f("optional_bytes")]);

+

+            // Embedded messages should also be clear.

+            Assert.IsFalse(((IMessage) message[f("optionalgroup")]).HasField(groupA));

+            Assert.IsFalse(((IMessage) message[f("optional_nested_message")])

+                               .HasField(nestedB));

+            Assert.IsFalse(((IMessage) message[f("optional_foreign_message")])

+                               .HasField(foreignC));

+            Assert.IsFalse(((IMessage) message[f("optional_import_message")])

+                               .HasField(importD));

+

+            Assert.AreEqual(0, ((IMessage) message[f("optionalgroup")])[groupA]);

+            Assert.AreEqual(0, ((IMessage) message[f("optional_nested_message")])[nestedB]);

+            Assert.AreEqual(0, ((IMessage) message[f("optional_foreign_message")])[foreignC]);

+            Assert.AreEqual(0, ((IMessage) message[f("optional_import_message")])[importD]);

+

+            // Enums without defaults are set to the first value in the enum.

+            Assert.AreEqual(nestedFoo, message[f("optional_nested_enum")]);

+            Assert.AreEqual(foreignFoo, message[f("optional_foreign_enum")]);

+            Assert.AreEqual(importFoo, message[f("optional_import_enum")]);

+

+            Assert.AreEqual("", message[f("optional_string_piece")]);

+            Assert.AreEqual("", message[f("optional_cord")]);

+

+            // Repeated fields are empty.

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_int32")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_int64")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_uint32")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_uint64")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_sint32")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_sint64")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_fixed32")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_fixed64")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_sfixed32")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_sfixed64")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_float")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_double")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_bool")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_string")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_bytes")));

+

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeatedgroup")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_nested_message")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_foreign_message")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_import_message")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_nested_enum")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_foreign_enum")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_import_enum")));

+

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_string_piece")));

+            Assert.AreEqual(0, message.GetRepeatedFieldCount(f("repeated_cord")));

+

+            // has_blah() should also be false for all default fields.

+            Assert.IsFalse(message.HasField(f("default_int32")));

+            Assert.IsFalse(message.HasField(f("default_int64")));

+            Assert.IsFalse(message.HasField(f("default_uint32")));

+            Assert.IsFalse(message.HasField(f("default_uint64")));

+            Assert.IsFalse(message.HasField(f("default_sint32")));

+            Assert.IsFalse(message.HasField(f("default_sint64")));

+            Assert.IsFalse(message.HasField(f("default_fixed32")));

+            Assert.IsFalse(message.HasField(f("default_fixed64")));

+            Assert.IsFalse(message.HasField(f("default_sfixed32")));

+            Assert.IsFalse(message.HasField(f("default_sfixed64")));

+            Assert.IsFalse(message.HasField(f("default_float")));

+            Assert.IsFalse(message.HasField(f("default_double")));

+            Assert.IsFalse(message.HasField(f("default_bool")));

+            Assert.IsFalse(message.HasField(f("default_string")));

+            Assert.IsFalse(message.HasField(f("default_bytes")));

+

+            Assert.IsFalse(message.HasField(f("default_nested_enum")));

+            Assert.IsFalse(message.HasField(f("default_foreign_enum")));

+            Assert.IsFalse(message.HasField(f("default_import_enum")));

+

+            Assert.IsFalse(message.HasField(f("default_string_piece")));

+            Assert.IsFalse(message.HasField(f("default_cord")));

+

+            // Fields with defaults have their default values (duh).

+            Assert.AreEqual(41, message[f("default_int32")]);

+            Assert.AreEqual(42L, message[f("default_int64")]);

+            Assert.AreEqual(43U, message[f("default_uint32")]);

+            Assert.AreEqual(44UL, message[f("default_uint64")]);

+            Assert.AreEqual(-45, message[f("default_sint32")]);

+            Assert.AreEqual(46L, message[f("default_sint64")]);

+            Assert.AreEqual(47U, message[f("default_fixed32")]);

+            Assert.AreEqual(48UL, message[f("default_fixed64")]);

+            Assert.AreEqual(49, message[f("default_sfixed32")]);

+            Assert.AreEqual(-50L, message[f("default_sfixed64")]);

+            Assert.AreEqual(51.5F, message[f("default_float")]);

+            Assert.AreEqual(52e3D, message[f("default_double")]);

+            Assert.AreEqual(true, message[f("default_bool")]);

+            Assert.AreEqual("hello", message[f("default_string")]);

+            Assert.AreEqual(TestUtil.ToBytes("world"), message[f("default_bytes")]);

+

+            Assert.AreEqual(nestedBar, message[f("default_nested_enum")]);

+            Assert.AreEqual(foreignBar, message[f("default_foreign_enum")]);

+            Assert.AreEqual(importBar, message[f("default_import_enum")]);

+

+            Assert.AreEqual("abc", message[f("default_string_piece")]);

+            Assert.AreEqual("123", message[f("default_cord")]);

+        }

+

+        // ---------------------------------------------------------------

+

+        internal void AssertRepeatedFieldsModifiedViaReflection(IMessage message)

+        {

+            // ModifyRepeatedFields only sets the second repeated element of each

+            // field.  In addition to verifying this, we also verify that the first

+            // element and size were *not* modified.

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_int32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_int64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_uint32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_uint64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sint32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sint64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_fixed32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_fixed64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sfixed32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_sfixed64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_float")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_double")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_bool")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_string")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_bytes")));

+

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeatedgroup")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_nested_message")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_foreign_message")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_import_message")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_nested_enum")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_foreign_enum")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_import_enum")));

+

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_string_piece")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("repeated_cord")));

+

+            Assert.AreEqual(201, message[f("repeated_int32"), 0]);

+            Assert.AreEqual(202L, message[f("repeated_int64"), 0]);

+            Assert.AreEqual(203U, message[f("repeated_uint32"), 0]);

+            Assert.AreEqual(204UL, message[f("repeated_uint64"), 0]);

+            Assert.AreEqual(205, message[f("repeated_sint32"), 0]);

+            Assert.AreEqual(206L, message[f("repeated_sint64"), 0]);

+            Assert.AreEqual(207U, message[f("repeated_fixed32"), 0]);

+            Assert.AreEqual(208UL, message[f("repeated_fixed64"), 0]);

+            Assert.AreEqual(209, message[f("repeated_sfixed32"), 0]);

+            Assert.AreEqual(210L, message[f("repeated_sfixed64"), 0]);

+            Assert.AreEqual(211F, message[f("repeated_float"), 0]);

+            Assert.AreEqual(212D, message[f("repeated_double"), 0]);

+            Assert.AreEqual(true, message[f("repeated_bool"), 0]);

+            Assert.AreEqual("215", message[f("repeated_string"), 0]);

+            Assert.AreEqual(TestUtil.ToBytes("216"), message[f("repeated_bytes"), 0]);

+

+            Assert.AreEqual(217, ((IMessage) message[f("repeatedgroup"), 0])[repeatedGroupA]);

+            Assert.AreEqual(218, ((IMessage) message[f("repeated_nested_message"), 0])[nestedB]);

+            Assert.AreEqual(219, ((IMessage) message[f("repeated_foreign_message"), 0])[foreignC]);

+            Assert.AreEqual(220, ((IMessage) message[f("repeated_import_message"), 0])[importD]);

+

+            Assert.AreEqual(nestedBar, message[f("repeated_nested_enum"), 0]);

+            Assert.AreEqual(foreignBar, message[f("repeated_foreign_enum"), 0]);

+            Assert.AreEqual(importBar, message[f("repeated_import_enum"), 0]);

+

+            Assert.AreEqual("224", message[f("repeated_string_piece"), 0]);

+            Assert.AreEqual("225", message[f("repeated_cord"), 0]);

+

+            Assert.AreEqual(501, message[f("repeated_int32"), 1]);

+            Assert.AreEqual(502L, message[f("repeated_int64"), 1]);

+            Assert.AreEqual(503U, message[f("repeated_uint32"), 1]);

+            Assert.AreEqual(504UL, message[f("repeated_uint64"), 1]);

+            Assert.AreEqual(505, message[f("repeated_sint32"), 1]);

+            Assert.AreEqual(506L, message[f("repeated_sint64"), 1]);

+            Assert.AreEqual(507U, message[f("repeated_fixed32"), 1]);

+            Assert.AreEqual(508UL, message[f("repeated_fixed64"), 1]);

+            Assert.AreEqual(509, message[f("repeated_sfixed32"), 1]);

+            Assert.AreEqual(510L, message[f("repeated_sfixed64"), 1]);

+            Assert.AreEqual(511F, message[f("repeated_float"), 1]);

+            Assert.AreEqual(512D, message[f("repeated_double"), 1]);

+            Assert.AreEqual(true, message[f("repeated_bool"), 1]);

+            Assert.AreEqual("515", message[f("repeated_string"), 1]);

+            Assert.AreEqual(TestUtil.ToBytes("516"), message[f("repeated_bytes"), 1]);

+

+            Assert.AreEqual(517, ((IMessage) message[f("repeatedgroup"), 1])[repeatedGroupA]);

+            Assert.AreEqual(518, ((IMessage) message[f("repeated_nested_message"), 1])[nestedB]);

+            Assert.AreEqual(519, ((IMessage) message[f("repeated_foreign_message"), 1])[foreignC]);

+            Assert.AreEqual(520, ((IMessage) message[f("repeated_import_message"), 1])[importD]);

+

+            Assert.AreEqual(nestedFoo, message[f("repeated_nested_enum"), 1]);

+            Assert.AreEqual(foreignFoo, message[f("repeated_foreign_enum"), 1]);

+            Assert.AreEqual(importFoo, message[f("repeated_import_enum"), 1]);

+

+            Assert.AreEqual("524", message[f("repeated_string_piece"), 1]);

+            Assert.AreEqual("525", message[f("repeated_cord"), 1]);

+        }

+

+        /// <summary>

+        /// Verifies that the reflection setters for the given Builder object throw an

+        /// ArgumentNullException if they are passed a null value. 

+        /// </summary>

+        public void AssertReflectionSettersRejectNull(IBuilder builder)

+        {

+            TestUtil.AssertArgumentNullException(() => builder[f("optional_string")] = null);

+            TestUtil.AssertArgumentNullException(() => builder[f("optional_bytes")] = null);

+            TestUtil.AssertArgumentNullException(() => builder[f("optional_nested_enum")] = null);

+            TestUtil.AssertArgumentNullException(() => builder[f("optional_nested_message")] = null);

+            TestUtil.AssertArgumentNullException(() => builder[f("optional_nested_message")] = null);

+            TestUtil.AssertArgumentNullException(() => builder.WeakAddRepeatedField(f("repeated_string"), null));

+            TestUtil.AssertArgumentNullException(() => builder.WeakAddRepeatedField(f("repeated_bytes"), null));

+            TestUtil.AssertArgumentNullException(() => builder.WeakAddRepeatedField(f("repeated_nested_enum"), null));

+            TestUtil.AssertArgumentNullException(() => builder.WeakAddRepeatedField(f("repeated_nested_message"), null));

+        }

+

+        /// <summary>

+        /// Verifies that the reflection repeated setters for the given Builder object throw an

+        /// ArgumentNullException if they are passed a null value.

+        /// </summary>

+        public void AssertReflectionRepeatedSettersRejectNull(IBuilder builder)

+        {

+            builder.WeakAddRepeatedField(f("repeated_string"), "one");

+            TestUtil.AssertArgumentNullException(() => builder.SetRepeatedField(f("repeated_string"), 0, null));

+            builder.WeakAddRepeatedField(f("repeated_bytes"), TestUtil.ToBytes("one"));

+            TestUtil.AssertArgumentNullException(() => builder.SetRepeatedField(f("repeated_bytes"), 0, null));

+            builder.WeakAddRepeatedField(f("repeated_nested_enum"), nestedBaz);

+            TestUtil.AssertArgumentNullException(() => builder.SetRepeatedField(f("repeated_nested_enum"), 0, null));

+            builder.WeakAddRepeatedField(f("repeated_nested_message"),

+                                         new TestAllTypes.Types.NestedMessage.Builder {Bb = 218}.Build());

+            TestUtil.AssertArgumentNullException(() => builder.SetRepeatedField(f("repeated_nested_message"), 0, null));

+        }

+

+        public void SetPackedFieldsViaReflection(IBuilder message)

+        {

+            message.WeakAddRepeatedField(f("packed_int32"), 601);

+            message.WeakAddRepeatedField(f("packed_int64"), 602L);

+            message.WeakAddRepeatedField(f("packed_uint32"), 603U);

+            message.WeakAddRepeatedField(f("packed_uint64"), 604UL);

+            message.WeakAddRepeatedField(f("packed_sint32"), 605);

+            message.WeakAddRepeatedField(f("packed_sint64"), 606L);

+            message.WeakAddRepeatedField(f("packed_fixed32"), 607U);

+            message.WeakAddRepeatedField(f("packed_fixed64"), 608UL);

+            message.WeakAddRepeatedField(f("packed_sfixed32"), 609);

+            message.WeakAddRepeatedField(f("packed_sfixed64"), 610L);

+            message.WeakAddRepeatedField(f("packed_float"), 611F);

+            message.WeakAddRepeatedField(f("packed_double"), 612D);

+            message.WeakAddRepeatedField(f("packed_bool"), true);

+            message.WeakAddRepeatedField(f("packed_enum"), foreignBar);

+            // Add a second one of each field.

+            message.WeakAddRepeatedField(f("packed_int32"), 701);

+            message.WeakAddRepeatedField(f("packed_int64"), 702L);

+            message.WeakAddRepeatedField(f("packed_uint32"), 703U);

+            message.WeakAddRepeatedField(f("packed_uint64"), 704UL);

+            message.WeakAddRepeatedField(f("packed_sint32"), 705);

+            message.WeakAddRepeatedField(f("packed_sint64"), 706L);

+            message.WeakAddRepeatedField(f("packed_fixed32"), 707U);

+            message.WeakAddRepeatedField(f("packed_fixed64"), 708UL);

+            message.WeakAddRepeatedField(f("packed_sfixed32"), 709);

+            message.WeakAddRepeatedField(f("packed_sfixed64"), 710L);

+            message.WeakAddRepeatedField(f("packed_float"), 711F);

+            message.WeakAddRepeatedField(f("packed_double"), 712D);

+            message.WeakAddRepeatedField(f("packed_bool"), false);

+            message.WeakAddRepeatedField(f("packed_enum"), foreignBaz);

+        }

+

+        public void AssertPackedFieldsSetViaReflection(IMessage message)

+        {

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_int32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_int64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_uint32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_uint64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_sint32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_sint64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_fixed32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_fixed64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_sfixed32")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_sfixed64")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_float")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_double")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_bool")));

+            Assert.AreEqual(2, message.GetRepeatedFieldCount(f("packed_enum")));

+

+            Assert.AreEqual(601, message[f("packed_int32"), 0]);

+            Assert.AreEqual(602L, message[f("packed_int64"), 0]);

+            Assert.AreEqual(603u, message[f("packed_uint32"), 0]);

+            Assert.AreEqual(604uL, message[f("packed_uint64"), 0]);

+            Assert.AreEqual(605, message[f("packed_sint32"), 0]);

+            Assert.AreEqual(606L, message[f("packed_sint64"), 0]);

+            Assert.AreEqual(607u, message[f("packed_fixed32"), 0]);

+            Assert.AreEqual(608uL, message[f("packed_fixed64"), 0]);

+            Assert.AreEqual(609, message[f("packed_sfixed32"), 0]);

+            Assert.AreEqual(610L, message[f("packed_sfixed64"), 0]);

+            Assert.AreEqual(611F, message[f("packed_float"), 0]);

+            Assert.AreEqual(612D, message[f("packed_double"), 0]);

+            Assert.AreEqual(true, message[f("packed_bool"), 0]);

+            Assert.AreEqual(foreignBar, message[f("packed_enum"), 0]);

+

+            Assert.AreEqual(701, message[f("packed_int32"), 1]);

+            Assert.AreEqual(702L, message[f("packed_int64"), 1]);

+            Assert.AreEqual(703u, message[f("packed_uint32"), 1]);

+            Assert.AreEqual(704uL, message[f("packed_uint64"), 1]);

+            Assert.AreEqual(705, message[f("packed_sint32"), 1]);

+            Assert.AreEqual(706L, message[f("packed_sint64"), 1]);

+            Assert.AreEqual(707u, message[f("packed_fixed32"), 1]);

+            Assert.AreEqual(708uL, message[f("packed_fixed64"), 1]);

+            Assert.AreEqual(709, message[f("packed_sfixed32"), 1]);

+            Assert.AreEqual(710L, message[f("packed_sfixed64"), 1]);

+            Assert.AreEqual(711F, message[f("packed_float"), 1]);

+            Assert.AreEqual(712D, message[f("packed_double"), 1]);

+            Assert.AreEqual(false, message[f("packed_bool"), 1]);

+            Assert.AreEqual(foreignBaz, message[f("packed_enum"), 1]);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ReusableBuilderTest.cs b/csharp/src/ProtocolBuffers.Test/ReusableBuilderTest.cs
new file mode 100644
index 0000000..a63f657
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ReusableBuilderTest.cs
@@ -0,0 +1,171 @@
+using System;

+using System.Collections.Generic;

+using System.ComponentModel;

+using System.Text;

+using Google.ProtocolBuffers.Collections;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using Google.ProtocolBuffers.TestProtos;

+using Google.ProtocolBuffers.Serialization;

+using UnitTest.Issues.TestProtos;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class ReusableBuilderTest

+    {

+        //Issue 28: Circular message dependencies result in null defaults for DefaultInstance

+        [TestMethod]

+        public void EnsureStaticCicularReference()

+        {

+            MyMessageAReferenceB ab = MyMessageAReferenceB.DefaultInstance;

+            Assert.IsNotNull(ab);

+            Assert.IsNotNull(ab.Value);

+            MyMessageBReferenceA ba = MyMessageBReferenceA.DefaultInstance;

+            Assert.IsNotNull(ba);

+            Assert.IsNotNull(ba.Value);

+        }

+

+        [TestMethod]

+        public void TestModifyDefaultInstance()

+        {

+            //verify that the default instance has correctly been marked as read-only

+            Assert.AreEqual(typeof(PopsicleList<bool>), TestAllTypes.DefaultInstance.RepeatedBoolList.GetType());

+            PopsicleList<bool> list = (PopsicleList<bool>)TestAllTypes.DefaultInstance.RepeatedBoolList;

+            Assert.IsTrue(list.IsReadOnly);

+        }

+

+        [TestMethod]

+        public void TestUnmodifiedDefaultInstance()

+        {

+            //Simply calling ToBuilder().Build() no longer creates a copy of the message

+            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+        }

+

+        [TestMethod]

+        public void BuildMultipleWithoutChange()

+        {

+            //Calling Build() or BuildPartial() does not require a copy of the message

+            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();

+            builder.SetDefaultBool(true);

+

+            TestAllTypes first = builder.BuildPartial();

+            //Still the same instance?

+            Assert.IsTrue(ReferenceEquals(first, builder.Build()));

+            //Still the same instance?

+            Assert.IsTrue(ReferenceEquals(first, builder.BuildPartial().ToBuilder().Build()));

+        }

+

+        [TestMethod]

+        public void MergeFromDefaultInstance()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+            builder.MergeFrom(TestAllTypes.DefaultInstance);

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+        }

+

+        [TestMethod]

+        public void BuildNewBuilderIsDefaultInstance()

+        {

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, new TestAllTypes.Builder().Build()));

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, TestAllTypes.CreateBuilder().Build()));

+            //last test, if you clear a builder it reverts to default instance

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance,

+                TestAllTypes.CreateBuilder().SetOptionalBool(true).Build().ToBuilder().Clear().Build()));

+        }

+

+        [TestMethod]

+        public void BuildModifyAndRebuild()

+        {

+            TestAllTypes.Builder b1 = new TestAllTypes.Builder();

+            b1.SetDefaultInt32(1);

+            b1.AddRepeatedInt32(2);

+            b1.SetOptionalForeignMessage(ForeignMessage.DefaultInstance);

+

+            TestAllTypes m1 = b1.Build();

+

+            b1.SetDefaultInt32(5);

+            b1.AddRepeatedInt32(6);

+            b1.SetOptionalForeignMessage(b1.OptionalForeignMessage.ToBuilder().SetC(7));

+

+            TestAllTypes m2 = b1.Build();

+            

+            Assert.AreEqual("{\"optional_foreign_message\":{},\"repeated_int32\":[2],\"default_int32\":1}", Extensions.ToJson(m1));

+            Assert.AreEqual("{\"optional_foreign_message\":{\"c\":7},\"repeated_int32\":[2,6],\"default_int32\":5}", Extensions.ToJson(m2));

+        }

+

+        [TestMethod]

+        public void CloneOnChangePrimitive()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+            builder.SetDefaultBool(true);

+            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+        }

+

+        [TestMethod]

+        public void CloneOnAddRepeatedBool()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+            builder.AddRepeatedBool(true);

+            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+        }

+

+        [TestMethod]

+        public void CloneOnGetRepeatedBoolList()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+            GC.KeepAlive(builder.RepeatedBoolList);

+            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+        }

+

+        [TestMethod]

+        public void CloneOnChangeMessage()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+            builder.SetOptionalForeignMessage(new ForeignMessage.Builder());

+            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+        }

+

+        [TestMethod]

+        public void CloneOnClearMessage()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+            builder.ClearOptionalForeignMessage();

+            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+        }

+

+        [TestMethod]

+        public void CloneOnGetRepeatedForeignMessageList()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+            GC.KeepAlive(builder.RepeatedForeignMessageList);

+            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+        }

+

+        [TestMethod]

+        public void CloneOnChangeEnumValue()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+            builder.SetOptionalForeignEnum(ForeignEnum.FOREIGN_BAR);

+            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+        }

+

+        [TestMethod]

+        public void CloneOnGetRepeatedForeignEnumList()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.DefaultInstance.ToBuilder();

+            Assert.IsTrue(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+            GC.KeepAlive(builder.RepeatedForeignEnumList);

+            Assert.IsFalse(ReferenceEquals(TestAllTypes.DefaultInstance, builder.Build()));

+        }

+

+    }

+}

diff --git a/csharp/src/ProtocolBuffers.Test/SerializableAttribute.cs b/csharp/src/ProtocolBuffers.Test/SerializableAttribute.cs
new file mode 100644
index 0000000..0553762
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/SerializableAttribute.cs
@@ -0,0 +1,12 @@
+#if NOSERIALIZABLE && !COMPACT_FRAMEWORK

+

+namespace System

+{

+    [AttributeUsage(AttributeTargets.Class)]

+    public class SerializableAttribute : Attribute

+    {

+        public SerializableAttribute () : base() { }

+    }

+}

+

+#endif

diff --git a/csharp/src/ProtocolBuffers.Test/SerializableTest.cs b/csharp/src/ProtocolBuffers.Test/SerializableTest.cs
new file mode 100644
index 0000000..9040614
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/SerializableTest.cs
@@ -0,0 +1,179 @@
+#if !NOSERIALIZABLE

+using System;

+using System.Collections.Generic;

+using System.IO;

+using System.Runtime.Serialization;

+using System.Runtime.Serialization.Formatters.Binary;

+using System.Text;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class SerializableTest

+    {

+        /// <summary>

+        /// Just keep it from even compiling if we these objects don't implement the expected interface.

+        /// </summary>

+        public static readonly ISerializable CompileTimeCheckSerializableMessage = TestXmlMessage.DefaultInstance;

+        public static readonly ISerializable CompileTimeCheckSerializableBuilder = new TestXmlMessage.Builder();

+

+        [TestMethod]

+        public void TestPlainMessage()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .SetText("text")

+                .AddTextlines("a")

+                .AddTextlines("b")

+                .AddTextlines("c")

+                .SetNumber(0x1010101010)

+                .AddNumbers(1)

+                .AddNumbers(2)

+                .AddNumbers(3)

+                .SetChild(TestXmlChild.CreateBuilder()

+                                      .AddOptions(EnumOptions.ONE)

+                                      .SetBinary(ByteString.CopyFrom(new byte[1])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()

+                                                          .AddOptions(EnumOptions.TWO)

+                                                          .SetBinary(ByteString.CopyFrom(new byte[2])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()

+                                                          .AddOptions(EnumOptions.THREE)

+                                                          .SetBinary(ByteString.CopyFrom(new byte[3])))

+                .Build();

+

+            MemoryStream ms = new MemoryStream();

+            new BinaryFormatter().Serialize(ms, message);

+

+            ms.Position = 0;

+            TestXmlMessage copy = (TestXmlMessage)new BinaryFormatter().Deserialize(ms);

+

+            Assert.AreEqual(message, copy);

+        }

+

+        [TestMethod]

+        public void TestMessageWithExtensions()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .SetText("text")

+                .AddTextlines("a")

+                .AddTextlines("b")

+                .AddTextlines("c")

+                .SetNumber(0x1010101010)

+                .AddNumbers(1)

+                .AddNumbers(2)

+                .AddNumbers(3)

+                .SetChild(TestXmlChild.CreateBuilder()

+                                      .AddOptions(EnumOptions.ONE)

+                                      .SetBinary(ByteString.CopyFrom(new byte[1])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()

+                                                          .AddOptions(EnumOptions.TWO)

+                                                          .SetBinary(ByteString.CopyFrom(new byte[2])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()

+                                                          .AddOptions(EnumOptions.THREE)

+                                                          .SetBinary(ByteString.CopyFrom(new byte[3])))

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ")

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build())

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)

+                .Build();

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);

+

+            MemoryStream ms = new MemoryStream();

+            new BinaryFormatter().Serialize(ms, message);

+

+            ms.Position = 0;

+            //you need to provide the extension registry as context to the serializer

+            BinaryFormatter bff = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.All, registry));

+            TestXmlMessage copy = (TestXmlMessage)bff.Deserialize(ms);

+

+            // And all extensions will be defined.

+            Assert.AreEqual(message, copy);

+        }

+

+        [TestMethod]

+        public void TestPlainBuilder()

+        {

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .SetText("text")

+                .AddTextlines("a")

+                .AddTextlines("b")

+                .AddTextlines("c")

+                .SetNumber(0x1010101010)

+                .AddNumbers(1)

+                .AddNumbers(2)

+                .AddNumbers(3)

+                .SetChild(TestXmlChild.CreateBuilder()

+                                      .AddOptions(EnumOptions.ONE)

+                                      .SetBinary(ByteString.CopyFrom(new byte[1])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()

+                                                          .AddOptions(EnumOptions.TWO)

+                                                          .SetBinary(ByteString.CopyFrom(new byte[2])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()

+                                                          .AddOptions(EnumOptions.THREE)

+                                                          .SetBinary(ByteString.CopyFrom(new byte[3])))

+                ;

+

+            MemoryStream ms = new MemoryStream();

+            new BinaryFormatter().Serialize(ms, builder);

+

+            ms.Position = 0;

+            TestXmlMessage.Builder copy = (TestXmlMessage.Builder)new BinaryFormatter().Deserialize(ms);

+

+            Assert.AreEqual(builder.Build(), copy.Build());

+        }

+

+        [TestMethod]

+        public void TestBuilderWithExtensions()

+        {

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .SetText("text")

+                .AddTextlines("a")

+                .AddTextlines("b")

+                .AddTextlines("c")

+                .SetNumber(0x1010101010)

+                .AddNumbers(1)

+                .AddNumbers(2)

+                .AddNumbers(3)

+                .SetChild(TestXmlChild.CreateBuilder()

+                                      .AddOptions(EnumOptions.ONE)

+                                      .SetBinary(ByteString.CopyFrom(new byte[1])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()

+                                                          .AddOptions(EnumOptions.TWO)

+                                                          .SetBinary(ByteString.CopyFrom(new byte[2])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder()

+                                                          .AddOptions(EnumOptions.THREE)

+                                                          .SetBinary(ByteString.CopyFrom(new byte[3])))

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ")

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build())

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)

+                ;

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);

+

+            MemoryStream ms = new MemoryStream();

+            new BinaryFormatter().Serialize(ms, builder);

+

+            ms.Position = 0;

+            //you need to provide the extension registry as context to the serializer

+            BinaryFormatter bff = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.All, registry));

+            TestXmlMessage.Builder copy = (TestXmlMessage.Builder)bff.Deserialize(ms);

+

+            // And all extensions will be defined.

+            Assert.AreEqual(builder.Build(), copy.Build());

+        }

+    }

+}

+#endif
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/ServiceTest.cs b/csharp/src/ProtocolBuffers.Test/ServiceTest.cs
new file mode 100644
index 0000000..ee28ca1
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/ServiceTest.cs
@@ -0,0 +1,262 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using Google.ProtocolBuffers.Descriptors;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Tests for generated service classes.

+    /// TODO(jonskeet): Convert the mocking tests using Rhino.Mocks.

+    /// </summary>

+    [TestClass]

+    public class ServiceTest

+    {

+        private delegate void Action<T1, T2>(T1 t1, T2 t2);

+

+        private static readonly MethodDescriptor FooDescriptor = TestGenericService.Descriptor.Methods[0];

+        private static readonly MethodDescriptor BarDescriptor = TestGenericService.Descriptor.Methods[1];

+

+        [TestMethod]

+        public void GetRequestPrototype()

+        {

+            TestGenericService service = new TestServiceImpl();

+

+            Assert.AreSame(service.GetRequestPrototype(FooDescriptor), FooRequest.DefaultInstance);

+            Assert.AreSame(service.GetRequestPrototype(BarDescriptor), BarRequest.DefaultInstance);

+        }

+

+        [TestMethod]

+        public void GetResponsePrototype()

+        {

+            TestGenericService service = new TestServiceImpl();

+

+            Assert.AreSame(service.GetResponsePrototype(FooDescriptor), FooResponse.DefaultInstance);

+            Assert.AreSame(service.GetResponsePrototype(BarDescriptor), BarResponse.DefaultInstance);

+        }

+

+        [TestMethod]

+        public void CallMethodFoo()

+        {

+            FooRequest fooRequest = FooRequest.CreateBuilder().Build();

+            FooResponse fooResponse = FooResponse.CreateBuilder().Build();

+            IRpcController controller = new RpcTestController();

+

+            bool fooCalled = false;

+

+            TestGenericService service = new TestServiceImpl((request, responseAction) =>

+                                                                 {

+                                                                     Assert.AreSame(fooRequest, request);

+                                                                     fooCalled = true;

+                                                                     responseAction(fooResponse);

+                                                                 }, null, controller);

+

+            bool doneHandlerCalled = false;

+            Action<IMessage> doneHandler = (response =>

+                                                {

+                                                    Assert.AreSame(fooResponse, response);

+                                                    doneHandlerCalled = true;

+                                                });

+

+            service.CallMethod(FooDescriptor, controller, fooRequest, doneHandler);

+

+            Assert.IsTrue(doneHandlerCalled);

+            Assert.IsTrue(fooCalled);

+        }

+

+        [TestMethod]

+        public void CallMethodBar()

+        {

+            BarRequest barRequest = BarRequest.CreateBuilder().Build();

+            BarResponse barResponse = BarResponse.CreateBuilder().Build();

+            IRpcController controller = new RpcTestController();

+

+            bool barCalled = false;

+

+            TestGenericService service = new TestServiceImpl(null, (request, responseAction) =>

+                                                                       {

+                                                                           Assert.AreSame(barRequest, request);

+                                                                           barCalled = true;

+                                                                           responseAction(barResponse);

+                                                                       }, controller);

+

+            bool doneHandlerCalled = false;

+            Action<IMessage> doneHandler = (response =>

+                                                {

+                                                    Assert.AreSame(barResponse, response);

+                                                    doneHandlerCalled = true;

+                                                });

+

+            service.CallMethod(BarDescriptor, controller, barRequest, doneHandler);

+

+            Assert.IsTrue(doneHandlerCalled);

+            Assert.IsTrue(barCalled);

+        }

+

+        [TestMethod]

+        public void GeneratedStubFooCall()

+        {

+            IRpcChannel channel = new RpcTestChannel();

+            IRpcController controller = new RpcTestController();

+            TestGenericService service = TestGenericService.CreateStub(channel);

+            FooResponse fooResponse = null;

+            Action<FooResponse> doneHandler = r => fooResponse = r;

+

+            service.Foo(controller, FooRequest.DefaultInstance, doneHandler);

+

+            Assert.IsNotNull(fooResponse);

+            Assert.IsFalse(controller.Failed);

+        }

+

+        [TestMethod]

+        public void GeneratedStubBarCallFails()

+        {

+            IRpcChannel channel = new RpcTestChannel();

+            IRpcController controller = new RpcTestController();

+            TestGenericService service = TestGenericService.CreateStub(channel);

+            BarResponse barResponse = null;

+            Action<BarResponse> doneHandler = r => barResponse = r;

+

+            service.Bar(controller, BarRequest.DefaultInstance, doneHandler);

+

+            Assert.IsNull(barResponse);

+            Assert.IsTrue(controller.Failed);

+        }

+

+        #region RpcTestController

+        private class RpcTestController : IRpcController

+        {

+            public string TestFailedReason { get; set; }

+            public bool TestCancelled { get; set; }

+            public Action<object> TestCancelledCallback { get; set; }

+

+            void IRpcController.Reset()

+            {

+                TestFailedReason = null;

+                TestCancelled = false;

+                TestCancelledCallback = null;

+            }

+

+            bool IRpcController.Failed

+            {

+                get { return TestFailedReason != null; }

+            }

+

+            string IRpcController.ErrorText

+            {

+                get { return TestFailedReason; }

+            }

+

+            void IRpcController.StartCancel()

+            {

+                TestCancelled = true;

+                if (TestCancelledCallback != null)

+                    TestCancelledCallback(this);

+            }

+

+            void IRpcController.SetFailed(string reason)

+            {

+                TestFailedReason = reason;

+            }

+

+            bool IRpcController.IsCanceled()

+            {

+                return TestCancelled;

+            }

+

+            void IRpcController.NotifyOnCancel(Action<object> callback)

+            {

+                TestCancelledCallback = callback;

+            }

+        }

+        #endregion

+        #region RpcTestChannel

+        private class RpcTestChannel : IRpcChannel

+        {

+            public MethodDescriptor TestMethodCalled { get; set; }

+

+            void IRpcChannel.CallMethod(MethodDescriptor method, IRpcController controller, IMessage request, IMessage responsePrototype, Action<IMessage> done)

+            {

+                TestMethodCalled = method;

+                try

+                {

+                    done(FooResponse.DefaultInstance);

+                }

+                catch (Exception e)

+                {

+                    controller.SetFailed(e.Message);

+                }

+            }

+        }

+        #endregion

+        #region TestServiceImpl

+        private class TestServiceImpl : TestGenericService

+        {

+            private readonly Action<FooRequest, Action<FooResponse>> fooHandler;

+            private readonly Action<BarRequest, Action<BarResponse>> barHandler;

+            private readonly IRpcController expectedController;

+

+            internal TestServiceImpl()

+            {

+            }

+

+            internal TestServiceImpl(Action<FooRequest, Action<FooResponse>> fooHandler,

+                                     Action<BarRequest, Action<BarResponse>> barHandler,

+                                     IRpcController expectedController)

+            {

+                this.fooHandler = fooHandler;

+                this.barHandler = barHandler;

+                this.expectedController = expectedController;

+            }

+

+            public override void Foo(IRpcController controller, FooRequest request, Action<FooResponse> done)

+            {

+                Assert.AreSame(expectedController, controller);

+                fooHandler(request, done);

+            }

+

+            public override void Bar(IRpcController controller, BarRequest request, Action<BarResponse> done)

+            {

+                Assert.AreSame(expectedController, controller);

+                barHandler(request, done);

+            }

+        }

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/TestCornerCases.cs b/csharp/src/ProtocolBuffers.Test/TestCornerCases.cs
new file mode 100644
index 0000000..0be4e1d
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestCornerCases.cs
@@ -0,0 +1,38 @@
+using System;

+using System.Collections.Generic;

+using System.Text;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using UnitTest.Issues.TestProtos;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class TestCornerCases

+    {

+        [TestMethod]

+        public void TestRoundTripNegativeEnums()

+        {

+            NegativeEnumMessage msg = NegativeEnumMessage.CreateBuilder()

+                .SetValue(NegativeEnum.MinusOne) //11

+                .AddValues(NegativeEnum.Zero) //2

+                .AddValues(NegativeEnum.MinusOne) //11

+                .AddValues(NegativeEnum.FiveBelow) //11

+                //2

+                .AddPackedValues(NegativeEnum.Zero) //1

+                .AddPackedValues(NegativeEnum.MinusOne) //10

+                .AddPackedValues(NegativeEnum.FiveBelow) //10

+                .Build();

+

+            Assert.AreEqual(58, msg.SerializedSize);

+

+            byte[] bytes = new byte[58];

+            CodedOutputStream output = CodedOutputStream.CreateInstance(bytes);

+

+            msg.WriteTo(output);

+            Assert.AreEqual(0, output.SpaceLeft);

+

+            NegativeEnumMessage copy = NegativeEnumMessage.ParseFrom(bytes);

+            Assert.AreEqual(msg, copy);

+        }

+    }

+}

diff --git a/csharp/src/ProtocolBuffers.Test/TestMimeMessageFormats.cs b/csharp/src/ProtocolBuffers.Test/TestMimeMessageFormats.cs
new file mode 100644
index 0000000..c16f567
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestMimeMessageFormats.cs
@@ -0,0 +1,264 @@
+using System;

+using System.Collections.Generic;

+using System.IO;

+using System.Text;

+using Google.ProtocolBuffers.Serialization;

+using Google.ProtocolBuffers.Serialization.Http;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class TestMimeMessageFormats

+    {

+        // There is a whole host of various json mime types in use around the net, this is the set we accept...

+        readonly IEnumerable<string> JsonTypes = new string[] { "application/json", "application/x-json", "application/x-javascript", "text/javascript", "text/x-javascript", "text/x-json", "text/json" };

+        readonly IEnumerable<string> XmlTypes = new string[] { "text/xml", "application/xml" };

+        readonly IEnumerable<string> ProtobufTypes = new string[] { "application/binary", "application/x-protobuf", "application/vnd.google.protobuf" };

+

+        [TestMethod]

+        public void TestReadJsonMimeTypes()

+        {

+            foreach (string type in JsonTypes)

+            {

+                Assert.IsTrue(

+                    MessageFormatFactory.CreateInputStream(new MessageFormatOptions(), type, Stream.Null)

+                    is JsonFormatReader);

+            }

+            Assert.IsTrue(

+                MessageFormatFactory.CreateInputStream(new MessageFormatOptions() { DefaultContentType = "application/json" }, null, Stream.Null)

+                is JsonFormatReader);

+        }

+        [TestMethod]

+        public void TestWriteJsonMimeTypes()

+        {

+            foreach (string type in JsonTypes)

+            {

+                Assert.IsTrue(

+                    MessageFormatFactory.CreateOutputStream(new MessageFormatOptions(), type, Stream.Null)

+                    is JsonFormatWriter);

+            }

+            Assert.IsTrue(

+                MessageFormatFactory.CreateOutputStream(new MessageFormatOptions() { DefaultContentType = "application/json" }, null, Stream.Null)

+                is JsonFormatWriter);

+        }

+        [TestMethod]

+        public void TestReadXmlMimeTypes()

+        {

+            foreach (string type in XmlTypes)

+            {

+                Assert.IsTrue(

+                    MessageFormatFactory.CreateInputStream(new MessageFormatOptions(), type, Stream.Null)

+                    is XmlFormatReader);

+            }

+            Assert.IsTrue(

+                MessageFormatFactory.CreateInputStream(new MessageFormatOptions() { DefaultContentType = "application/xml" }, null, Stream.Null)

+                is XmlFormatReader);

+        }

+        [TestMethod]

+        public void TestWriteXmlMimeTypes()

+        {

+            foreach (string type in XmlTypes)

+            {

+                Assert.IsTrue(

+                    MessageFormatFactory.CreateOutputStream(new MessageFormatOptions(), type, Stream.Null)

+                    is XmlFormatWriter);

+            }

+            Assert.IsTrue(

+                MessageFormatFactory.CreateOutputStream(new MessageFormatOptions() { DefaultContentType = "application/xml" }, null, Stream.Null)

+                is XmlFormatWriter);

+        }

+        [TestMethod]

+        public void TestReadProtoMimeTypes()

+        {

+            foreach (string type in ProtobufTypes)

+            {

+                Assert.IsTrue(

+                    MessageFormatFactory.CreateInputStream(new MessageFormatOptions(), type, Stream.Null)

+                    is CodedInputStream);

+            }

+            Assert.IsTrue(

+                MessageFormatFactory.CreateInputStream(new MessageFormatOptions() { DefaultContentType = "application/vnd.google.protobuf" }, null, Stream.Null)

+                is CodedInputStream);

+        }

+        [TestMethod]

+        public void TestWriteProtoMimeTypes()

+        {

+            foreach (string type in ProtobufTypes)

+            {

+                Assert.IsTrue(

+                    MessageFormatFactory.CreateOutputStream(new MessageFormatOptions(), type, Stream.Null)

+                    is CodedOutputStream);

+            }

+            Assert.IsTrue(

+                MessageFormatFactory.CreateOutputStream(new MessageFormatOptions() { DefaultContentType = "application/vnd.google.protobuf" }, null, Stream.Null)

+                is CodedOutputStream);

+        }

+        [TestMethod]

+        public void TestMergeFromJsonType()

+        {

+            TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),

+                new MessageFormatOptions(), "application/json", new MemoryStream(Encoding.UTF8.GetBytes(

+                    Extensions.ToJson(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build())

+                    )))

+                .Build();

+            Assert.AreEqual("a", msg.Text);

+            Assert.AreEqual(1, msg.Number);

+        }

+        [TestMethod]

+        public void TestMergeFromXmlType()

+        {

+            TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),

+                new MessageFormatOptions(), "application/xml", new MemoryStream(Encoding.UTF8.GetBytes(

+                    Extensions.ToXml(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build())

+                    )))

+                .Build();

+            Assert.AreEqual("a", msg.Text);

+            Assert.AreEqual(1, msg.Number);

+        }

+        [TestMethod]

+        public void TestMergeFromProtoType()

+        {

+            TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),

+                new MessageFormatOptions(), "application/vnd.google.protobuf", new MemoryStream(

+                    TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToByteArray()

+                    ))

+                .Build();

+            Assert.AreEqual("a", msg.Text);

+            Assert.AreEqual(1, msg.Number);

+        }

+        [TestMethod]

+        public void TestWriteToJsonType()

+        {

+            MemoryStream ms = new MemoryStream();

+            Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),

+                new MessageFormatOptions(), "application/json", ms);

+

+            Assert.AreEqual(@"{""text"":""a"",""number"":1}", Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length));

+        }

+        [TestMethod]

+        public void TestWriteToXmlType()

+        {

+            MemoryStream ms = new MemoryStream();

+            Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),

+                new MessageFormatOptions(), "application/xml", ms);

+

+            Assert.AreEqual("<root><text>a</text><number>1</number></root>", Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length));

+        }

+        [TestMethod]

+        public void TestWriteToProtoType()

+        {

+            MemoryStream ms = new MemoryStream();

+            Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),

+                new MessageFormatOptions(), "application/vnd.google.protobuf", ms);

+

+            byte[] bytes = TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build().ToByteArray();

+            TestUtil.AssertBytesEqual(bytes, ms.ToArray());

+        }

+        [TestMethod]

+        public void TestXmlReaderOptions()

+        {

+            MemoryStream ms = new MemoryStream();

+            XmlFormatWriter.CreateInstance(ms)

+                .SetOptions(XmlWriterOptions.OutputNestedArrays)

+                .WriteMessage("my-root-node", TestXmlMessage.CreateBuilder().SetText("a").AddNumbers(1).AddNumbers(2).Build());

+            ms.Position = 0;

+

+            MessageFormatOptions options = new MessageFormatOptions()

+            {

+                XmlReaderOptions = XmlReaderOptions.ReadNestedArrays,

+                XmlReaderRootElementName = "my-root-node"

+            };

+

+            TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),

+                options, "application/xml", ms)

+                .Build();

+

+            Assert.AreEqual("a", msg.Text);

+            Assert.AreEqual(1, msg.NumbersList[0]);

+            Assert.AreEqual(2, msg.NumbersList[1]);

+

+        }

+        [TestMethod]

+        public void TestXmlWriterOptions()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder().SetText("a").AddNumbers(1).AddNumbers(2).Build();

+            MessageFormatOptions options = new MessageFormatOptions()

+            {

+                XmlWriterOptions = XmlWriterOptions.OutputNestedArrays,

+                XmlWriterRootElementName = "root-node"

+            };

+

+            MemoryStream ms = new MemoryStream();

+            Extensions.WriteTo(message, options, "application/xml", ms);

+            ms.Position = 0;

+            

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            XmlFormatReader.CreateInstance(ms)

+                .SetOptions(XmlReaderOptions.ReadNestedArrays)

+                .Merge("root-node", builder);

+

+            Assert.AreEqual("a", builder.Text);

+            Assert.AreEqual(1, builder.NumbersList[0]);

+            Assert.AreEqual(2, builder.NumbersList[1]);

+        }

+        [TestMethod]

+        public void TestJsonFormatted()

+        {

+            MemoryStream ms = new MemoryStream();

+            Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),

+                new MessageFormatOptions() { FormattedOutput = true }, "application/json", ms);

+

+            Assert.AreEqual("{\r\n    \"text\": \"a\",\r\n    \"number\": 1\r\n}", Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length));

+        }

+        [TestMethod]

+        public void TestXmlFormatted()

+        {

+            MemoryStream ms = new MemoryStream();

+            Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),

+                new MessageFormatOptions() { FormattedOutput = true }, "application/xml", ms);

+

+            Assert.AreEqual("<root>\r\n    <text>a</text>\r\n    <number>1</number>\r\n</root>", Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length));

+        }

+

+        [TestMethod]

+        public void TestReadCustomMimeTypes()

+        {

+            var options = new MessageFormatOptions();

+            //Remove existing mime-type mappings

+            options.MimeInputTypes.Clear();

+            //Add our own

+            options.MimeInputTypes.Add("-custom-XML-mime-type-", XmlFormatReader.CreateInstance);

+            Assert.AreEqual(1, options.MimeInputTypes.Count);

+

+            Stream xmlStream = new MemoryStream(Encoding.UTF8.GetBytes(

+                Extensions.ToXml(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build())

+                ));

+

+            TestXmlMessage msg = Extensions.MergeFrom(new TestXmlMessage.Builder(),

+                options, "-custom-XML-mime-type-", xmlStream)

+                .Build();

+            Assert.AreEqual("a", msg.Text);

+            Assert.AreEqual(1, msg.Number);

+        }

+

+        [TestMethod]

+        public void TestWriteToCustomType()

+        {

+            var options = new MessageFormatOptions();

+            //Remove existing mime-type mappings

+            options.MimeOutputTypes.Clear();

+            //Add our own

+            options.MimeOutputTypes.Add("-custom-XML-mime-type-", XmlFormatWriter.CreateInstance);

+            

+            Assert.AreEqual(1, options.MimeOutputTypes.Count);

+

+            MemoryStream ms = new MemoryStream();

+            Extensions.WriteTo(TestXmlMessage.CreateBuilder().SetText("a").SetNumber(1).Build(),

+                options, "-custom-XML-mime-type-", ms);

+

+            Assert.AreEqual("<root><text>a</text><number>1</number></root>", Encoding.UTF8.GetString(ms.ToArray(), 0, (int)ms.Length));

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestCSharpOptionsProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestCSharpOptionsProtoFile.cs
new file mode 100644
index 0000000..8c81980
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestCSharpOptionsProtoFile.cs
@@ -0,0 +1,426 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestCSharpOptionsProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OptionsMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OptionsMessage, global::Google.ProtocolBuffers.TestProtos.OptionsMessage.Builder> internal__static_protobuf_unittest_OptionsMessage__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestCSharpOptionsProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "Ci1nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfY3NoYXJwX29wdGlvbnMucHJv", 

+            "dG8SEXByb3RvYnVmX3VuaXR0ZXN0GiRnb29nbGUvcHJvdG9idWYvY3NoYXJw", 

+            "X29wdGlvbnMucHJvdG8iXgoOT3B0aW9uc01lc3NhZ2USDgoGbm9ybWFsGAEg", 

+            "ASgJEhcKD29wdGlvbnNfbWVzc2FnZRgCIAEoCRIjCgpjdXN0b21pemVkGAMg", 

+            "ASgJQg/CPgwKCkN1c3RvbU5hbWVCRsI+QwohR29vZ2xlLlByb3RvY29sQnVm", 

+            "ZmVycy5UZXN0UHJvdG9zEh5Vbml0VGVzdENTaGFycE9wdGlvbnNQcm90b0Zp", 

+          "bGU="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_OptionsMessage__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_OptionsMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OptionsMessage, global::Google.ProtocolBuffers.TestProtos.OptionsMessage.Builder>(internal__static_protobuf_unittest_OptionsMessage__Descriptor,

+                new string[] { "Normal", "OptionsMessage_", "CustomName", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class OptionsMessage : pb::GeneratedMessage<OptionsMessage, OptionsMessage.Builder> {

+    private OptionsMessage() { }

+    private static readonly OptionsMessage defaultInstance = new OptionsMessage().MakeReadOnly();

+    private static readonly string[] _optionsMessageFieldNames = new string[] { "customized", "normal", "options_message" };

+    private static readonly uint[] _optionsMessageFieldTags = new uint[] { 26, 10, 18 };

+    public static OptionsMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override OptionsMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override OptionsMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCSharpOptionsProtoFile.internal__static_protobuf_unittest_OptionsMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<OptionsMessage, OptionsMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCSharpOptionsProtoFile.internal__static_protobuf_unittest_OptionsMessage__FieldAccessorTable; }

+    }

+    

+    public const int NormalFieldNumber = 1;

+    private bool hasNormal;

+    private string normal_ = "";

+    public bool HasNormal {

+      get { return hasNormal; }

+    }

+    public string Normal {

+      get { return normal_; }

+    }

+    

+    public const int OptionsMessage_FieldNumber = 2;

+    private bool hasOptionsMessage_;

+    private string optionsMessage_ = "";

+    public bool HasOptionsMessage_ {

+      get { return hasOptionsMessage_; }

+    }

+    public string OptionsMessage_ {

+      get { return optionsMessage_; }

+    }

+    

+    public const int CustomNameFieldNumber = 3;

+    private bool hasCustomName;

+    private string customized_ = "";

+    public bool HasCustomName {

+      get { return hasCustomName; }

+    }

+    public string CustomName {

+      get { return customized_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _optionsMessageFieldNames;

+      if (hasNormal) {

+        output.WriteString(1, field_names[1], Normal);

+      }

+      if (hasOptionsMessage_) {

+        output.WriteString(2, field_names[2], OptionsMessage_);

+      }

+      if (hasCustomName) {

+        output.WriteString(3, field_names[0], CustomName);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasNormal) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Normal);

+      }

+      if (hasOptionsMessage_) {

+        size += pb::CodedOutputStream.ComputeStringSize(2, OptionsMessage_);

+      }

+      if (hasCustomName) {

+        size += pb::CodedOutputStream.ComputeStringSize(3, CustomName);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static OptionsMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OptionsMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OptionsMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OptionsMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OptionsMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OptionsMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static OptionsMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static OptionsMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static OptionsMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OptionsMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private OptionsMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(OptionsMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<OptionsMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(OptionsMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private OptionsMessage result;

+      

+      private OptionsMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          OptionsMessage original = result;

+          result = new OptionsMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override OptionsMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OptionsMessage.Descriptor; }

+      }

+      

+      public override OptionsMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OptionsMessage.DefaultInstance; }

+      }

+      

+      public override OptionsMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is OptionsMessage) {

+          return MergeFrom((OptionsMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(OptionsMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.OptionsMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasNormal) {

+          Normal = other.Normal;

+        }

+        if (other.HasOptionsMessage_) {

+          OptionsMessage_ = other.OptionsMessage_;

+        }

+        if (other.HasCustomName) {

+          CustomName = other.CustomName;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_optionsMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _optionsMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasNormal = input.ReadString(ref result.normal_);

+              break;

+            }

+            case 18: {

+              result.hasOptionsMessage_ = input.ReadString(ref result.optionsMessage_);

+              break;

+            }

+            case 26: {

+              result.hasCustomName = input.ReadString(ref result.customized_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasNormal {

+        get { return result.hasNormal; }

+      }

+      public string Normal {

+        get { return result.Normal; }

+        set { SetNormal(value); }

+      }

+      public Builder SetNormal(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasNormal = true;

+        result.normal_ = value;

+        return this;

+      }

+      public Builder ClearNormal() {

+        PrepareBuilder();

+        result.hasNormal = false;

+        result.normal_ = "";

+        return this;

+      }

+      

+      public bool HasOptionsMessage_ {

+        get { return result.hasOptionsMessage_; }

+      }

+      public string OptionsMessage_ {

+        get { return result.OptionsMessage_; }

+        set { SetOptionsMessage_(value); }

+      }

+      public Builder SetOptionsMessage_(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionsMessage_ = true;

+        result.optionsMessage_ = value;

+        return this;

+      }

+      public Builder ClearOptionsMessage_() {

+        PrepareBuilder();

+        result.hasOptionsMessage_ = false;

+        result.optionsMessage_ = "";

+        return this;

+      }

+      

+      public bool HasCustomName {

+        get { return result.hasCustomName; }

+      }

+      public string CustomName {

+        get { return result.CustomName; }

+        set { SetCustomName(value); }

+      }

+      public Builder SetCustomName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasCustomName = true;

+        result.customized_ = value;

+        return this;

+      }

+      public Builder ClearCustomName() {

+        PrepareBuilder();

+        result.hasCustomName = false;

+        result.customized_ = "";

+        return this;

+      }

+    }

+    static OptionsMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCSharpOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs
new file mode 100644
index 0000000..b61cce7
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestCustomOptionsProtoFile.cs
@@ -0,0 +1,6411 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestCustomOptionsProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.FileOpt1);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.MessageOpt1);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.FieldOpt1);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.FieldOpt2);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.EnumOpt1);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.EnumValueOpt1);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.ServiceOpt1);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.MethodOpt1);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.BoolOpt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Int32Opt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Int64Opt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Uint32Opt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Uint64Opt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Sint32Opt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Sint64Opt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Fixed32Opt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Fixed64Opt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Sfixed32Opt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Sfixed64Opt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.FloatOpt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.DoubleOpt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.StringOpt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.BytesOpt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.EnumOpt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.MessageTypeOpt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Quux);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Corge);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Grault);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Garply);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.ComplexOpt1);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.ComplexOpt2);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.ComplexOpt3);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.ComplexOpt6);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Fileopt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Msgopt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Fieldopt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.EnumoptRenamed);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Enumvalopt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Serviceopt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Methodopt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.ComplexOpt4);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.MessageSetExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.Aggregate.Nested);

+    }

+    #endregion

+    #region Extensions

+    public const int FileOpt1FieldNumber = 7736974;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> FileOpt1;

+    public const int MessageOpt1FieldNumber = 7739036;

+    public static pb::GeneratedExtensionBase<int> MessageOpt1;

+    public const int FieldOpt1FieldNumber = 7740936;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> FieldOpt1;

+    public const int FieldOpt2FieldNumber = 7753913;

+    public static pb::GeneratedExtensionBase<int> FieldOpt2;

+    public const int EnumOpt1FieldNumber = 7753576;

+    public static pb::GeneratedExtensionBase<int> EnumOpt1;

+    public const int EnumValueOpt1FieldNumber = 1560678;

+    public static pb::GeneratedExtensionBase<int> EnumValueOpt1;

+    public const int ServiceOpt1FieldNumber = 7887650;

+    public static pb::GeneratedExtensionBase<long> ServiceOpt1;

+    public const int MethodOpt1FieldNumber = 7890860;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.MethodOpt1> MethodOpt1;

+    public const int BoolOptFieldNumber = 7706090;

+    public static pb::GeneratedExtensionBase<bool> BoolOpt;

+    public const int Int32OptFieldNumber = 7705709;

+    public static pb::GeneratedExtensionBase<int> Int32Opt;

+    public const int Int64OptFieldNumber = 7705542;

+    public static pb::GeneratedExtensionBase<long> Int64Opt;

+    public const int Uint32OptFieldNumber = 7704880;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> Uint32Opt;

+    public const int Uint64OptFieldNumber = 7702367;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> Uint64Opt;

+    public const int Sint32OptFieldNumber = 7701568;

+    public static pb::GeneratedExtensionBase<int> Sint32Opt;

+    public const int Sint64OptFieldNumber = 7700863;

+    public static pb::GeneratedExtensionBase<long> Sint64Opt;

+    public const int Fixed32OptFieldNumber = 7700307;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> Fixed32Opt;

+    public const int Fixed64OptFieldNumber = 7700194;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> Fixed64Opt;

+    public const int Sfixed32OptFieldNumber = 7698645;

+    public static pb::GeneratedExtensionBase<int> Sfixed32Opt;

+    public const int Sfixed64OptFieldNumber = 7685475;

+    public static pb::GeneratedExtensionBase<long> Sfixed64Opt;

+    public const int FloatOptFieldNumber = 7675390;

+    public static pb::GeneratedExtensionBase<float> FloatOpt;

+    public const int DoubleOptFieldNumber = 7673293;

+    public static pb::GeneratedExtensionBase<double> DoubleOpt;

+    public const int StringOptFieldNumber = 7673285;

+    public static pb::GeneratedExtensionBase<string> StringOpt;

+    public const int BytesOptFieldNumber = 7673238;

+    public static pb::GeneratedExtensionBase<pb::ByteString> BytesOpt;

+    public const int EnumOptFieldNumber = 7673233;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.Types.TestEnumType> EnumOpt;

+    public const int MessageTypeOptFieldNumber = 7665967;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType> MessageTypeOpt;

+    public const int QuuxFieldNumber = 7663707;

+    public static pb::GeneratedExtensionBase<int> Quux;

+    public const int CorgeFieldNumber = 7663442;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3> Corge;

+    public const int GraultFieldNumber = 7650927;

+    public static pb::GeneratedExtensionBase<int> Grault;

+    public const int GarplyFieldNumber = 7649992;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1> Garply;

+    public const int ComplexOpt1FieldNumber = 7646756;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1> ComplexOpt1;

+    public const int ComplexOpt2FieldNumber = 7636949;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2> ComplexOpt2;

+    public const int ComplexOpt3FieldNumber = 7636463;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3> ComplexOpt3;

+    public const int ComplexOpt6FieldNumber = 7595468;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOpt6> ComplexOpt6;

+    public const int FileoptFieldNumber = 15478479;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Fileopt;

+    public const int MsgoptFieldNumber = 15480088;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Msgopt;

+    public const int FieldoptFieldNumber = 15481374;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Fieldopt;

+    public const int EnumoptRenamedFieldNumber = 15483218;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> EnumoptRenamed;

+    public const int EnumvaloptFieldNumber = 15486921;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Enumvalopt;

+    public const int ServiceoptFieldNumber = 15497145;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Serviceopt;

+    public const int MethodoptFieldNumber = 15512713;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Methodopt;

+    #endregion

+    

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMessageWithCustomOptions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions, global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions.Builder> internal__static_protobuf_unittest_TestMessageWithCustomOptions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_CustomOptionFooRequest__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest.Builder> internal__static_protobuf_unittest_CustomOptionFooRequest__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_CustomOptionFooResponse__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.Builder> internal__static_protobuf_unittest_CustomOptionFooResponse__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_DummyMessageContainingEnum__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum, global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.Builder> internal__static_protobuf_unittest_DummyMessageContainingEnum__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType, global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType.Builder> internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_CustomOptionMinIntegerValues__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues, global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues.Builder> internal__static_protobuf_unittest_CustomOptionMinIntegerValues__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues, global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues.Builder> internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_CustomOptionOtherValues__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues, global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues.Builder> internal__static_protobuf_unittest_CustomOptionOtherValues__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_SettingRealsFromPositiveInts__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts, global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts.Builder> internal__static_protobuf_unittest_SettingRealsFromPositiveInts__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_SettingRealsFromNegativeInts__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts, global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts.Builder> internal__static_protobuf_unittest_SettingRealsFromNegativeInts__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ComplexOptionType1__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.Builder> internal__static_protobuf_unittest_ComplexOptionType1__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ComplexOptionType2__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Builder> internal__static_protobuf_unittest_ComplexOptionType2__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Builder> internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ComplexOptionType3__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Builder> internal__static_protobuf_unittest_ComplexOptionType3__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.Builder> internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ComplexOpt6__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOpt6, global::Google.ProtocolBuffers.TestProtos.ComplexOpt6.Builder> internal__static_protobuf_unittest_ComplexOpt6__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_VariousComplexOptions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions, global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions.Builder> internal__static_protobuf_unittest_VariousComplexOptions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_AggregateMessageSet__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet, global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.Builder> internal__static_protobuf_unittest_AggregateMessageSet__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_AggregateMessageSetElement__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement, global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.Builder> internal__static_protobuf_unittest_AggregateMessageSetElement__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_Aggregate__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Aggregate, global::Google.ProtocolBuffers.TestProtos.Aggregate.Builder> internal__static_protobuf_unittest_Aggregate__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_AggregateMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.AggregateMessage, global::Google.ProtocolBuffers.TestProtos.AggregateMessage.Builder> internal__static_protobuf_unittest_AggregateMessage__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestCustomOptionsProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "Ci1nb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfY3VzdG9tX29wdGlvbnMucHJv", 

+            "dG8SEXByb3RvYnVmX3VuaXR0ZXN0GiRnb29nbGUvcHJvdG9idWYvY3NoYXJw", 

+            "X29wdGlvbnMucHJvdG8aIGdvb2dsZS9wcm90b2J1Zi9kZXNjcmlwdG9yLnBy", 

+            "b3RvIo0BChxUZXN0TWVzc2FnZVdpdGhDdXN0b21PcHRpb25zEh4KBmZpZWxk", 

+            "MRgBIAEoCUIOCAHB4MMdLeF1CgIAAAAiOwoGQW5FbnVtEg8KC0FORU5VTV9W", 

+            "QUwxEAESFgoLQU5FTlVNX1ZBTDIQAhoFsIb6BXsaCMX2yR3r/P//OhAIAODp", 

+            "wh3I//////////8BIhgKFkN1c3RvbU9wdGlvbkZvb1JlcXVlc3QiGQoXQ3Vz", 

+            "dG9tT3B0aW9uRm9vUmVzcG9uc2UibQoaRHVtbXlNZXNzYWdlQ29udGFpbmlu", 

+            "Z0VudW0iTwoMVGVzdEVudW1UeXBlEhoKFlRFU1RfT1BUSU9OX0VOVU1fVFlQ", 

+            "RTEQFhIjChZURVNUX09QVElPTl9FTlVNX1RZUEUyEOn//////////wEiIQof", 

+            "RHVtbXlNZXNzYWdlSW52YWxpZEFzT3B0aW9uVHlwZSKKAQocQ3VzdG9tT3B0", 

+            "aW9uTWluSW50ZWdlclZhbHVlczpqmdaoHQAAAAAAAACArY2vHQAAAICR7q8d", 

+            "AAAAAAAAAACd9a8dAAAAAPiXsB3///////////8BgMSwHf////8P+PWwHQCA", 

+            "k7IdALC8sh2AgICAgICAgIAB6MayHYCAgID4/////wHQ3rIdACKRAQocQ3Vz", 

+            "dG9tT3B0aW9uTWF4SW50ZWdlclZhbHVlczpxmdaoHf////////9/rY2vHf//", 

+            "/3+R7q8d//////////+d9a8d//////iXsB3+//////////8BgMSwHf7///8P", 

+            "+PWwHf///////////wGAk7Id/////w+wvLId//////////9/6MayHf////8H", 

+            "0N6yHQEibgoXQ3VzdG9tT3B0aW9uT3RoZXJWYWx1ZXM6U4jZoh3p////////", 

+            "//8BstmiHQtIZWxsbwBXb3JsZKrcoh0OSGVsbG8sICJXb3JsZCLp3KId+1mM", 

+            "QsrA8z/136Md54dFQejGsh2c//////////8BIjQKHFNldHRpbmdSZWFsc0Zy", 

+            "b21Qb3NpdGl2ZUludHM6FOncoh0AAAAAAEBjQPXfox0AAEBBIjQKHFNldHRp", 

+            "bmdSZWFsc0Zyb21OZWdhdGl2ZUludHM6FOncoh0AAAAAAEBjwPXfox0AAEDB", 

+            "IkcKEkNvbXBsZXhPcHRpb25UeXBlMRILCgNmb28YASABKAUSDAoEZm9vMhgC", 

+            "IAEoBRIMCgRmb28zGAMgASgFKggIZBCAgICAAiLBAgoSQ29tcGxleE9wdGlv", 

+            "blR5cGUyEjIKA2JhchgBIAEoCzIlLnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBs", 

+            "ZXhPcHRpb25UeXBlMRILCgNiYXoYAiABKAUSRgoEZnJlZBgDIAEoCzI4LnBy", 

+            "b3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBlMi5Db21wbGV4T3B0", 

+            "aW9uVHlwZTQalwEKEkNvbXBsZXhPcHRpb25UeXBlNBINCgV3YWxkbxgBIAEo", 

+            "BTJyCgxjb21wbGV4X29wdDQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9w", 

+            "dGlvbnMYivXRAyABKAsyOC5wcm90b2J1Zl91bml0dGVzdC5Db21wbGV4T3B0", 

+            "aW9uVHlwZTIuQ29tcGxleE9wdGlvblR5cGU0KggIZBCAgICAAiKcAQoSQ29t", 

+            "cGxleE9wdGlvblR5cGUzEgsKA3F1eBgBIAEoBRJUChJjb21wbGV4b3B0aW9u", 

+            "dHlwZTUYAiABKAoyOC5wcm90b2J1Zl91bml0dGVzdC5Db21wbGV4T3B0aW9u", 

+            "VHlwZTMuQ29tcGxleE9wdGlvblR5cGU1GiMKEkNvbXBsZXhPcHRpb25UeXBl", 

+            "NRINCgVwbHVnaBgDIAEoBSIfCgtDb21wbGV4T3B0NhIQCgV4eXp6eRjfv88D", 

+            "IAEoBSLQAQoVVmFyaW91c0NvbXBsZXhPcHRpb25zOrYB49z8HPj9+xwY5Nz8", 

+            "HNKojx0DCLMP+t6QHQIICfrekB0EExgWFKr9kB0DENsHqv2QHQb45pcdjgWq", 

+            "/ZAdBQoDCOcFqv2QHQgKBtiFnh3PD6r9kB0KCgiS9Z0dAwjYD6r9kB0IwqyX", 

+            "HQMI5QWq/ZAdC8Kslx0G2IWeHc4Pqv2QHQ3CrJcdCJL1nR0DCMkQqv2QHQUa", 

+            "AwjBAqLilR0CCCqi4pUdBtiFnh3EAqLilR0IkvWdHQMI7AYiIwoTQWdncmVn", 

+            "YXRlTWVzc2FnZVNldCoICAQQgICAgAI6AggBIqABChpBZ2dyZWdhdGVNZXNz", 

+            "YWdlU2V0RWxlbWVudBIJCgFzGAEgASgJMncKFW1lc3NhZ2Vfc2V0X2V4dGVu", 

+            "c2lvbhImLnByb3RvYnVmX3VuaXR0ZXN0LkFnZ3JlZ2F0ZU1lc3NhZ2VTZXQY", 

+            "9uuuByABKAsyLS5wcm90b2J1Zl91bml0dGVzdC5BZ2dyZWdhdGVNZXNzYWdl", 

+            "U2V0RWxlbWVudCL9AQoJQWdncmVnYXRlEgkKAWkYASABKAUSCQoBcxgCIAEo", 

+            "CRIpCgNzdWIYAyABKAsyHC5wcm90b2J1Zl91bml0dGVzdC5BZ2dyZWdhdGUS", 

+            "KgoEZmlsZRgEIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxI0", 

+            "CgRtc2V0GAUgASgLMiYucHJvdG9idWZfdW5pdHRlc3QuQWdncmVnYXRlTWVz", 

+            "c2FnZVNldDJNCgZuZXN0ZWQSHC5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlv", 

+            "bnMYp9GwByABKAsyHC5wcm90b2J1Zl91bml0dGVzdC5BZ2dyZWdhdGUiWQoQ", 

+            "QWdncmVnYXRlTWVzc2FnZRIpCglmaWVsZG5hbWUYASABKAVCFvKhhzsREg9G", 

+            "aWVsZEFubm90YXRpb246GsLRhjsVCGUSEU1lc3NhZ2VBbm5vdGF0aW9uKjYK", 

+            "Ck1ldGhvZE9wdDESEwoPTUVUSE9ET1BUMV9WQUwxEAESEwoPTUVUSE9ET1BU", 

+            "MV9WQUwyEAIqTQoNQWdncmVnYXRlRW51bRIlCgVWQUxVRRABGhrK/Ik7FRIT", 

+            "RW51bVZhbHVlQW5ub3RhdGlvbhoVkpWIOxASDkVudW1Bbm5vdGF0aW9uMo4B", 

+            "ChxUZXN0U2VydmljZVdpdGhDdXN0b21PcHRpb25zEmMKA0ZvbxIpLnByb3Rv", 

+            "YnVmX3VuaXR0ZXN0LkN1c3RvbU9wdGlvbkZvb1JlcXVlc3QaKi5wcm90b2J1", 

+            "Zl91bml0dGVzdC5DdXN0b21PcHRpb25Gb29SZXNwb25zZSIF4PqMHgIaCZCy", 

+            "ix7T24DLSTKZAQoQQWdncmVnYXRlU2VydmljZRJrCgZNZXRob2QSIy5wcm90", 

+            "b2J1Zl91bml0dGVzdC5BZ2dyZWdhdGVNZXNzYWdlGiMucHJvdG9idWZfdW5p", 

+            "dHRlc3QuQWdncmVnYXRlTWVzc2FnZSIXysiWOxISEE1ldGhvZEFubm90YXRp", 

+            "b24aGMr7jjsTEhFTZXJ2aWNlQW5ub3RhdGlvbjoyCglmaWxlX29wdDESHC5n", 

+            "b29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMYjp3YAyABKAQ6OAoMbWVzc2Fn", 

+            "ZV9vcHQxEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGJyt2AMg", 

+            "ASgFOjQKCmZpZWxkX29wdDESHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRp", 

+            "b25zGIi82AMgASgGOjgKCmZpZWxkX29wdDISHS5nb29nbGUucHJvdG9idWYu", 

+            "RmllbGRPcHRpb25zGLmh2QMgASgFOgI0MjoyCgllbnVtX29wdDESHC5nb29n", 

+            "bGUucHJvdG9idWYuRW51bU9wdGlvbnMY6J7ZAyABKA86PAoPZW51bV92YWx1", 

+            "ZV9vcHQxEiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMY5qBf", 

+            "IAEoBTo4CgxzZXJ2aWNlX29wdDESHy5nb29nbGUucHJvdG9idWYuU2Vydmlj", 

+            "ZU9wdGlvbnMYorbhAyABKBI6VQoLbWV0aG9kX29wdDESHi5nb29nbGUucHJv", 

+            "dG9idWYuTWV0aG9kT3B0aW9ucxisz+EDIAEoDjIdLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0Lk1ldGhvZE9wdDE6NAoIYm9vbF9vcHQSHy5nb29nbGUucHJvdG9idWYu", 

+            "TWVzc2FnZU9wdGlvbnMY6qvWAyABKAg6NQoJaW50MzJfb3B0Eh8uZ29vZ2xl", 

+            "LnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGO2o1gMgASgFOjUKCWludDY0X29w", 

+            "dBIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjGp9YDIAEoAzo2", 

+            "Cgp1aW50MzJfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25z", 

+            "GLCi1gMgASgNOjYKCnVpbnQ2NF9vcHQSHy5nb29nbGUucHJvdG9idWYuTWVz", 

+            "c2FnZU9wdGlvbnMY347WAyABKAQ6NgoKc2ludDMyX29wdBIfLmdvb2dsZS5w", 

+            "cm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjAiNYDIAEoETo2CgpzaW50NjRfb3B0", 

+            "Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGP+C1gMgASgSOjcK", 

+            "C2ZpeGVkMzJfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25z", 

+            "GNP+1QMgASgHOjcKC2ZpeGVkNjRfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1l", 

+            "c3NhZ2VPcHRpb25zGOL91QMgASgGOjgKDHNmaXhlZDMyX29wdBIfLmdvb2ds", 

+            "ZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjV8dUDIAEoDzo4CgxzZml4ZWQ2", 

+            "NF9vcHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMY44rVAyAB", 

+            "KBA6NQoJZmxvYXRfb3B0Eh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRp", 

+            "b25zGP671AMgASgCOjYKCmRvdWJsZV9vcHQSHy5nb29nbGUucHJvdG9idWYu", 

+            "TWVzc2FnZU9wdGlvbnMYzavUAyABKAE6NgoKc3RyaW5nX29wdBIfLmdvb2ds", 

+            "ZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxjFq9QDIAEoCTo1CglieXRlc19v", 

+            "cHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMYlqvUAyABKAw6", 

+            "cAoIZW51bV9vcHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnMY", 

+            "kavUAyABKA4yOi5wcm90b2J1Zl91bml0dGVzdC5EdW1teU1lc3NhZ2VDb250", 

+            "YWluaW5nRW51bS5UZXN0RW51bVR5cGU6cAoQbWVzc2FnZV90eXBlX29wdBIf", 

+            "Lmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiv8tMDIAEoCzIyLnBy", 

+            "b3RvYnVmX3VuaXR0ZXN0LkR1bW15TWVzc2FnZUludmFsaWRBc09wdGlvblR5", 

+            "cGU6NgoEcXV1eBIlLnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25U", 

+            "eXBlMRjb4NMDIAEoBTpeCgVjb3JnZRIlLnByb3RvYnVmX3VuaXR0ZXN0LkNv", 

+            "bXBsZXhPcHRpb25UeXBlMRjS3tMDIAEoCzIlLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "LkNvbXBsZXhPcHRpb25UeXBlMzo4CgZncmF1bHQSJS5wcm90b2J1Zl91bml0", 

+            "dGVzdC5Db21wbGV4T3B0aW9uVHlwZTIY7/zSAyABKAU6XwoGZ2FycGx5EiUu", 

+            "cHJvdG9idWZfdW5pdHRlc3QuQ29tcGxleE9wdGlvblR5cGUyGMj10gMgASgL", 

+            "MiUucHJvdG9idWZfdW5pdHRlc3QuQ29tcGxleE9wdGlvblR5cGUxOl8KDGNv", 

+            "bXBsZXhfb3B0MRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxik", 

+            "3NIDIAEoCzIlLnByb3RvYnVmX3VuaXR0ZXN0LkNvbXBsZXhPcHRpb25UeXBl", 

+            "MTpfCgxjb21wbGV4X29wdDISHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9w", 

+            "dGlvbnMY1Y/SAyABKAsyJS5wcm90b2J1Zl91bml0dGVzdC5Db21wbGV4T3B0", 

+            "aW9uVHlwZTI6XwoMY29tcGxleF9vcHQzEh8uZ29vZ2xlLnByb3RvYnVmLk1l", 

+            "c3NhZ2VPcHRpb25zGO+L0gMgASgLMiUucHJvdG9idWZfdW5pdHRlc3QuQ29t", 

+            "cGxleE9wdGlvblR5cGUzOlcKC2NvbXBsZXhvcHQ2Eh8uZ29vZ2xlLnByb3Rv", 

+            "YnVmLk1lc3NhZ2VPcHRpb25zGMzLzwMgASgKMh4ucHJvdG9idWZfdW5pdHRl", 

+            "c3QuQ29tcGxleE9wdDY6TgoHZmlsZW9wdBIcLmdvb2dsZS5wcm90b2J1Zi5G", 

+            "aWxlT3B0aW9ucxjP3bAHIAEoCzIcLnByb3RvYnVmX3VuaXR0ZXN0LkFnZ3Jl", 

+            "Z2F0ZTpQCgZtc2dvcHQSHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlv", 

+            "bnMYmOqwByABKAsyHC5wcm90b2J1Zl91bml0dGVzdC5BZ2dyZWdhdGU6UAoI", 

+            "ZmllbGRvcHQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGJ70sAcg", 

+            "ASgLMhwucHJvdG9idWZfdW5pdHRlc3QuQWdncmVnYXRlOlYKD2VudW1vcHRf", 

+            "cmVuYW1lZBIcLmdvb2dsZS5wcm90b2J1Zi5FbnVtT3B0aW9ucxjSgrEHIAEo", 

+            "CzIcLnByb3RvYnVmX3VuaXR0ZXN0LkFnZ3JlZ2F0ZTpWCgplbnVtdmFsb3B0", 

+            "EiEuZ29vZ2xlLnByb3RvYnVmLkVudW1WYWx1ZU9wdGlvbnMYyZ+xByABKAsy", 

+            "HC5wcm90b2J1Zl91bml0dGVzdC5BZ2dyZWdhdGU6VAoKc2VydmljZW9wdBIf", 

+            "Lmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucxi577EHIAEoCzIcLnBy", 

+            "b3RvYnVmX3VuaXR0ZXN0LkFnZ3JlZ2F0ZTpSCgltZXRob2RvcHQSHi5nb29n", 

+            "bGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxiJ6bIHIAEoCzIcLnByb3RvYnVm", 

+            "X3VuaXR0ZXN0LkFnZ3JlZ2F0ZULNAYABAYgBAZABAcI+QwohR29vZ2xlLlBy", 

+            "b3RvY29sQnVmZmVycy5UZXN0UHJvdG9zEh5Vbml0VGVzdEN1c3RvbU9wdGlv", 

+            "bnNQcm90b0ZpbGXw6MEd6q3A5ST67IU7cAhkEg5GaWxlQW5ub3RhdGlvbhoW", 

+            "EhROZXN0ZWRGaWxlQW5ub3RhdGlvbiIe+uyFOxkSF0ZpbGVFeHRlbnNpb25B", 

+            "bm5vdGF0aW9uKiQLEPbrrgcaGwoZRW1iZWRkZWRNZXNzYWdlU2V0RWxlbWVu", 

+          "dAw="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_TestMessageWithCustomOptions__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_TestMessageWithCustomOptions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions, global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions.Builder>(internal__static_protobuf_unittest_TestMessageWithCustomOptions__Descriptor,

+                new string[] { "Field1", });

+        internal__static_protobuf_unittest_CustomOptionFooRequest__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_protobuf_unittest_CustomOptionFooRequest__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest.Builder>(internal__static_protobuf_unittest_CustomOptionFooRequest__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_CustomOptionFooResponse__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_protobuf_unittest_CustomOptionFooResponse__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.Builder>(internal__static_protobuf_unittest_CustomOptionFooResponse__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_DummyMessageContainingEnum__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_protobuf_unittest_DummyMessageContainingEnum__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum, global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.Builder>(internal__static_protobuf_unittest_DummyMessageContainingEnum__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__Descriptor = Descriptor.MessageTypes[4];

+        internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType, global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType.Builder>(internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_CustomOptionMinIntegerValues__Descriptor = Descriptor.MessageTypes[5];

+        internal__static_protobuf_unittest_CustomOptionMinIntegerValues__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues, global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues.Builder>(internal__static_protobuf_unittest_CustomOptionMinIntegerValues__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__Descriptor = Descriptor.MessageTypes[6];

+        internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues, global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues.Builder>(internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_CustomOptionOtherValues__Descriptor = Descriptor.MessageTypes[7];

+        internal__static_protobuf_unittest_CustomOptionOtherValues__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues, global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues.Builder>(internal__static_protobuf_unittest_CustomOptionOtherValues__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_SettingRealsFromPositiveInts__Descriptor = Descriptor.MessageTypes[8];

+        internal__static_protobuf_unittest_SettingRealsFromPositiveInts__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts, global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts.Builder>(internal__static_protobuf_unittest_SettingRealsFromPositiveInts__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_SettingRealsFromNegativeInts__Descriptor = Descriptor.MessageTypes[9];

+        internal__static_protobuf_unittest_SettingRealsFromNegativeInts__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts, global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts.Builder>(internal__static_protobuf_unittest_SettingRealsFromNegativeInts__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_ComplexOptionType1__Descriptor = Descriptor.MessageTypes[10];

+        internal__static_protobuf_unittest_ComplexOptionType1__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.Builder>(internal__static_protobuf_unittest_ComplexOptionType1__Descriptor,

+                new string[] { "Foo", "Foo2", "Foo3", });

+        internal__static_protobuf_unittest_ComplexOptionType2__Descriptor = Descriptor.MessageTypes[11];

+        internal__static_protobuf_unittest_ComplexOptionType2__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Builder>(internal__static_protobuf_unittest_ComplexOptionType2__Descriptor,

+                new string[] { "Bar", "Baz", "Fred", });

+        internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__Descriptor = internal__static_protobuf_unittest_ComplexOptionType2__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Builder>(internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__Descriptor,

+                new string[] { "Waldo", });

+        global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.ComplexOpt4 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Descriptor.Extensions[0]);

+        internal__static_protobuf_unittest_ComplexOptionType3__Descriptor = Descriptor.MessageTypes[12];

+        internal__static_protobuf_unittest_ComplexOptionType3__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Builder>(internal__static_protobuf_unittest_ComplexOptionType3__Descriptor,

+                new string[] { "Qux", "ComplexOptionType5", });

+        internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__Descriptor = internal__static_protobuf_unittest_ComplexOptionType3__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5, global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.Builder>(internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__Descriptor,

+                new string[] { "Plugh", });

+        internal__static_protobuf_unittest_ComplexOpt6__Descriptor = Descriptor.MessageTypes[13];

+        internal__static_protobuf_unittest_ComplexOpt6__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ComplexOpt6, global::Google.ProtocolBuffers.TestProtos.ComplexOpt6.Builder>(internal__static_protobuf_unittest_ComplexOpt6__Descriptor,

+                new string[] { "Xyzzy", });

+        internal__static_protobuf_unittest_VariousComplexOptions__Descriptor = Descriptor.MessageTypes[14];

+        internal__static_protobuf_unittest_VariousComplexOptions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions, global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions.Builder>(internal__static_protobuf_unittest_VariousComplexOptions__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_AggregateMessageSet__Descriptor = Descriptor.MessageTypes[15];

+        internal__static_protobuf_unittest_AggregateMessageSet__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet, global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.Builder>(internal__static_protobuf_unittest_AggregateMessageSet__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_AggregateMessageSetElement__Descriptor = Descriptor.MessageTypes[16];

+        internal__static_protobuf_unittest_AggregateMessageSetElement__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement, global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.Builder>(internal__static_protobuf_unittest_AggregateMessageSetElement__Descriptor,

+                new string[] { "S", });

+        global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.MessageSetExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.Descriptor.Extensions[0]);

+        internal__static_protobuf_unittest_Aggregate__Descriptor = Descriptor.MessageTypes[17];

+        internal__static_protobuf_unittest_Aggregate__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.Aggregate, global::Google.ProtocolBuffers.TestProtos.Aggregate.Builder>(internal__static_protobuf_unittest_Aggregate__Descriptor,

+                new string[] { "I", "S", "Sub", "File", "Mset", });

+        global::Google.ProtocolBuffers.TestProtos.Aggregate.Nested = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.Aggregate.Descriptor.Extensions[0]);

+        internal__static_protobuf_unittest_AggregateMessage__Descriptor = Descriptor.MessageTypes[18];

+        internal__static_protobuf_unittest_AggregateMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.AggregateMessage, global::Google.ProtocolBuffers.TestProtos.AggregateMessage.Builder>(internal__static_protobuf_unittest_AggregateMessage__Descriptor,

+                new string[] { "Fieldname", });

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.FileOpt1 = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[0]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.MessageOpt1 = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[1]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.FieldOpt1 = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[2]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.FieldOpt2 = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[3]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.EnumOpt1 = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[4]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.EnumValueOpt1 = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[5]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.ServiceOpt1 = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[6]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.MethodOpt1 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.MethodOpt1>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[7]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.BoolOpt = pb::GeneratedSingleExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[8]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Int32Opt = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[9]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Int64Opt = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[10]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Uint32Opt = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[11]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Uint64Opt = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[12]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Sint32Opt = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[13]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Sint64Opt = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[14]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Fixed32Opt = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[15]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Fixed64Opt = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[16]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Sfixed32Opt = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[17]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Sfixed64Opt = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[18]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.FloatOpt = pb::GeneratedSingleExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[19]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.DoubleOpt = pb::GeneratedSingleExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[20]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.StringOpt = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[21]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.BytesOpt = pb::GeneratedSingleExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[22]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.EnumOpt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.Types.TestEnumType>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[23]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.MessageTypeOpt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[24]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Quux = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[25]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Corge = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[26]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Grault = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[27]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Garply = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[28]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.ComplexOpt1 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[29]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.ComplexOpt2 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[30]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.ComplexOpt3 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[31]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.ComplexOpt6 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ComplexOpt6>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[32]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Fileopt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[33]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Msgopt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[34]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Fieldopt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[35]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.EnumoptRenamed = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[36]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Enumvalopt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[37]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Serviceopt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[38]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Methodopt = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.Aggregate>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor.Extensions[39]);

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum MethodOpt1 {

+    METHODOPT1_VAL1 = 1,

+    METHODOPT1_VAL2 = 2,

+  }

+  

+  public enum AggregateEnum {

+    VALUE = 1,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMessageWithCustomOptions : pb::GeneratedMessage<TestMessageWithCustomOptions, TestMessageWithCustomOptions.Builder> {

+    private TestMessageWithCustomOptions() { }

+    private static readonly TestMessageWithCustomOptions defaultInstance = new TestMessageWithCustomOptions().MakeReadOnly();

+    private static readonly string[] _testMessageWithCustomOptionsFieldNames = new string[] { "field1" };

+    private static readonly uint[] _testMessageWithCustomOptionsFieldTags = new uint[] { 10 };

+    public static TestMessageWithCustomOptions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMessageWithCustomOptions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMessageWithCustomOptions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_TestMessageWithCustomOptions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMessageWithCustomOptions, TestMessageWithCustomOptions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_TestMessageWithCustomOptions__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum AnEnum {

+        ANENUM_VAL1 = 1,

+        ANENUM_VAL2 = 2,

+      }

+      

+    }

+    #endregion

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private string field1_ = "";

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public string Field1 {

+      get { return field1_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMessageWithCustomOptionsFieldNames;

+      if (hasField1) {

+        output.WriteString(1, field_names[0], Field1);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasField1) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Field1);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMessageWithCustomOptions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMessageWithCustomOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageWithCustomOptions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMessageWithCustomOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageWithCustomOptions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMessageWithCustomOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageWithCustomOptions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMessageWithCustomOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMessageWithCustomOptions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMessageWithCustomOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMessageWithCustomOptions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMessageWithCustomOptions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestMessageWithCustomOptions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMessageWithCustomOptions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMessageWithCustomOptions result;

+      

+      private TestMessageWithCustomOptions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMessageWithCustomOptions original = result;

+          result = new TestMessageWithCustomOptions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMessageWithCustomOptions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions.Descriptor; }

+      }

+      

+      public override TestMessageWithCustomOptions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions.DefaultInstance; }

+      }

+      

+      public override TestMessageWithCustomOptions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMessageWithCustomOptions) {

+          return MergeFrom((TestMessageWithCustomOptions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMessageWithCustomOptions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMessageWithCustomOptions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasField1) {

+          Field1 = other.Field1;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMessageWithCustomOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMessageWithCustomOptionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasField1 = input.ReadString(ref result.field1_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public string Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = "";

+        return this;

+      }

+    }

+    static TestMessageWithCustomOptions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class CustomOptionFooRequest : pb::GeneratedMessage<CustomOptionFooRequest, CustomOptionFooRequest.Builder> {

+    private CustomOptionFooRequest() { }

+    private static readonly CustomOptionFooRequest defaultInstance = new CustomOptionFooRequest().MakeReadOnly();

+    private static readonly string[] _customOptionFooRequestFieldNames = new string[] {  };

+    private static readonly uint[] _customOptionFooRequestFieldTags = new uint[] {  };

+    public static CustomOptionFooRequest DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override CustomOptionFooRequest DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override CustomOptionFooRequest ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_CustomOptionFooRequest__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<CustomOptionFooRequest, CustomOptionFooRequest.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_CustomOptionFooRequest__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _customOptionFooRequestFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static CustomOptionFooRequest ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CustomOptionFooRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionFooRequest ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CustomOptionFooRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionFooRequest ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CustomOptionFooRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionFooRequest ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static CustomOptionFooRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static CustomOptionFooRequest ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CustomOptionFooRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private CustomOptionFooRequest MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(CustomOptionFooRequest prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<CustomOptionFooRequest, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(CustomOptionFooRequest cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private CustomOptionFooRequest result;

+      

+      private CustomOptionFooRequest PrepareBuilder() {

+        if (resultIsReadOnly) {

+          CustomOptionFooRequest original = result;

+          result = new CustomOptionFooRequest();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override CustomOptionFooRequest MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest.Descriptor; }

+      }

+      

+      public override CustomOptionFooRequest DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest.DefaultInstance; }

+      }

+      

+      public override CustomOptionFooRequest BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is CustomOptionFooRequest) {

+          return MergeFrom((CustomOptionFooRequest) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(CustomOptionFooRequest other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_customOptionFooRequestFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _customOptionFooRequestFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static CustomOptionFooRequest() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class CustomOptionFooResponse : pb::GeneratedMessage<CustomOptionFooResponse, CustomOptionFooResponse.Builder> {

+    private CustomOptionFooResponse() { }

+    private static readonly CustomOptionFooResponse defaultInstance = new CustomOptionFooResponse().MakeReadOnly();

+    private static readonly string[] _customOptionFooResponseFieldNames = new string[] {  };

+    private static readonly uint[] _customOptionFooResponseFieldTags = new uint[] {  };

+    public static CustomOptionFooResponse DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override CustomOptionFooResponse DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override CustomOptionFooResponse ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_CustomOptionFooResponse__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<CustomOptionFooResponse, CustomOptionFooResponse.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_CustomOptionFooResponse__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _customOptionFooResponseFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static CustomOptionFooResponse ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CustomOptionFooResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionFooResponse ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CustomOptionFooResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionFooResponse ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CustomOptionFooResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionFooResponse ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static CustomOptionFooResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static CustomOptionFooResponse ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CustomOptionFooResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private CustomOptionFooResponse MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(CustomOptionFooResponse prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<CustomOptionFooResponse, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(CustomOptionFooResponse cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private CustomOptionFooResponse result;

+      

+      private CustomOptionFooResponse PrepareBuilder() {

+        if (resultIsReadOnly) {

+          CustomOptionFooResponse original = result;

+          result = new CustomOptionFooResponse();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override CustomOptionFooResponse MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.Descriptor; }

+      }

+      

+      public override CustomOptionFooResponse DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.DefaultInstance; }

+      }

+      

+      public override CustomOptionFooResponse BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is CustomOptionFooResponse) {

+          return MergeFrom((CustomOptionFooResponse) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(CustomOptionFooResponse other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_customOptionFooResponseFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _customOptionFooResponseFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static CustomOptionFooResponse() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class DummyMessageContainingEnum : pb::GeneratedMessage<DummyMessageContainingEnum, DummyMessageContainingEnum.Builder> {

+    private DummyMessageContainingEnum() { }

+    private static readonly DummyMessageContainingEnum defaultInstance = new DummyMessageContainingEnum().MakeReadOnly();

+    private static readonly string[] _dummyMessageContainingEnumFieldNames = new string[] {  };

+    private static readonly uint[] _dummyMessageContainingEnumFieldTags = new uint[] {  };

+    public static DummyMessageContainingEnum DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override DummyMessageContainingEnum DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override DummyMessageContainingEnum ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_DummyMessageContainingEnum__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<DummyMessageContainingEnum, DummyMessageContainingEnum.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_DummyMessageContainingEnum__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum TestEnumType {

+        TEST_OPTION_ENUM_TYPE1 = 22,

+        TEST_OPTION_ENUM_TYPE2 = -23,

+      }

+      

+    }

+    #endregion

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _dummyMessageContainingEnumFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static DummyMessageContainingEnum ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static DummyMessageContainingEnum ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static DummyMessageContainingEnum ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static DummyMessageContainingEnum ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static DummyMessageContainingEnum ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static DummyMessageContainingEnum ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static DummyMessageContainingEnum ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static DummyMessageContainingEnum ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static DummyMessageContainingEnum ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static DummyMessageContainingEnum ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private DummyMessageContainingEnum MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(DummyMessageContainingEnum prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<DummyMessageContainingEnum, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(DummyMessageContainingEnum cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private DummyMessageContainingEnum result;

+      

+      private DummyMessageContainingEnum PrepareBuilder() {

+        if (resultIsReadOnly) {

+          DummyMessageContainingEnum original = result;

+          result = new DummyMessageContainingEnum();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override DummyMessageContainingEnum MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.Descriptor; }

+      }

+      

+      public override DummyMessageContainingEnum DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.DefaultInstance; }

+      }

+      

+      public override DummyMessageContainingEnum BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is DummyMessageContainingEnum) {

+          return MergeFrom((DummyMessageContainingEnum) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(DummyMessageContainingEnum other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.DummyMessageContainingEnum.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_dummyMessageContainingEnumFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _dummyMessageContainingEnumFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static DummyMessageContainingEnum() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class DummyMessageInvalidAsOptionType : pb::GeneratedMessage<DummyMessageInvalidAsOptionType, DummyMessageInvalidAsOptionType.Builder> {

+    private DummyMessageInvalidAsOptionType() { }

+    private static readonly DummyMessageInvalidAsOptionType defaultInstance = new DummyMessageInvalidAsOptionType().MakeReadOnly();

+    private static readonly string[] _dummyMessageInvalidAsOptionTypeFieldNames = new string[] {  };

+    private static readonly uint[] _dummyMessageInvalidAsOptionTypeFieldTags = new uint[] {  };

+    public static DummyMessageInvalidAsOptionType DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override DummyMessageInvalidAsOptionType DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override DummyMessageInvalidAsOptionType ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<DummyMessageInvalidAsOptionType, DummyMessageInvalidAsOptionType.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_DummyMessageInvalidAsOptionType__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _dummyMessageInvalidAsOptionTypeFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static DummyMessageInvalidAsOptionType ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static DummyMessageInvalidAsOptionType ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static DummyMessageInvalidAsOptionType ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static DummyMessageInvalidAsOptionType ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static DummyMessageInvalidAsOptionType ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static DummyMessageInvalidAsOptionType ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static DummyMessageInvalidAsOptionType ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static DummyMessageInvalidAsOptionType ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static DummyMessageInvalidAsOptionType ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static DummyMessageInvalidAsOptionType ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private DummyMessageInvalidAsOptionType MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(DummyMessageInvalidAsOptionType prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<DummyMessageInvalidAsOptionType, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(DummyMessageInvalidAsOptionType cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private DummyMessageInvalidAsOptionType result;

+      

+      private DummyMessageInvalidAsOptionType PrepareBuilder() {

+        if (resultIsReadOnly) {

+          DummyMessageInvalidAsOptionType original = result;

+          result = new DummyMessageInvalidAsOptionType();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override DummyMessageInvalidAsOptionType MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType.Descriptor; }

+      }

+      

+      public override DummyMessageInvalidAsOptionType DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType.DefaultInstance; }

+      }

+      

+      public override DummyMessageInvalidAsOptionType BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is DummyMessageInvalidAsOptionType) {

+          return MergeFrom((DummyMessageInvalidAsOptionType) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(DummyMessageInvalidAsOptionType other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.DummyMessageInvalidAsOptionType.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_dummyMessageInvalidAsOptionTypeFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _dummyMessageInvalidAsOptionTypeFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static DummyMessageInvalidAsOptionType() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class CustomOptionMinIntegerValues : pb::GeneratedMessage<CustomOptionMinIntegerValues, CustomOptionMinIntegerValues.Builder> {

+    private CustomOptionMinIntegerValues() { }

+    private static readonly CustomOptionMinIntegerValues defaultInstance = new CustomOptionMinIntegerValues().MakeReadOnly();

+    private static readonly string[] _customOptionMinIntegerValuesFieldNames = new string[] {  };

+    private static readonly uint[] _customOptionMinIntegerValuesFieldTags = new uint[] {  };

+    public static CustomOptionMinIntegerValues DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override CustomOptionMinIntegerValues DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override CustomOptionMinIntegerValues ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_CustomOptionMinIntegerValues__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<CustomOptionMinIntegerValues, CustomOptionMinIntegerValues.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_CustomOptionMinIntegerValues__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _customOptionMinIntegerValuesFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static CustomOptionMinIntegerValues ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CustomOptionMinIntegerValues ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionMinIntegerValues ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CustomOptionMinIntegerValues ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionMinIntegerValues ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CustomOptionMinIntegerValues ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionMinIntegerValues ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static CustomOptionMinIntegerValues ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static CustomOptionMinIntegerValues ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CustomOptionMinIntegerValues ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private CustomOptionMinIntegerValues MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(CustomOptionMinIntegerValues prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<CustomOptionMinIntegerValues, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(CustomOptionMinIntegerValues cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private CustomOptionMinIntegerValues result;

+      

+      private CustomOptionMinIntegerValues PrepareBuilder() {

+        if (resultIsReadOnly) {

+          CustomOptionMinIntegerValues original = result;

+          result = new CustomOptionMinIntegerValues();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override CustomOptionMinIntegerValues MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues.Descriptor; }

+      }

+      

+      public override CustomOptionMinIntegerValues DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues.DefaultInstance; }

+      }

+      

+      public override CustomOptionMinIntegerValues BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is CustomOptionMinIntegerValues) {

+          return MergeFrom((CustomOptionMinIntegerValues) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(CustomOptionMinIntegerValues other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.CustomOptionMinIntegerValues.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_customOptionMinIntegerValuesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _customOptionMinIntegerValuesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static CustomOptionMinIntegerValues() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class CustomOptionMaxIntegerValues : pb::GeneratedMessage<CustomOptionMaxIntegerValues, CustomOptionMaxIntegerValues.Builder> {

+    private CustomOptionMaxIntegerValues() { }

+    private static readonly CustomOptionMaxIntegerValues defaultInstance = new CustomOptionMaxIntegerValues().MakeReadOnly();

+    private static readonly string[] _customOptionMaxIntegerValuesFieldNames = new string[] {  };

+    private static readonly uint[] _customOptionMaxIntegerValuesFieldTags = new uint[] {  };

+    public static CustomOptionMaxIntegerValues DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override CustomOptionMaxIntegerValues DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override CustomOptionMaxIntegerValues ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<CustomOptionMaxIntegerValues, CustomOptionMaxIntegerValues.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_CustomOptionMaxIntegerValues__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _customOptionMaxIntegerValuesFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static CustomOptionMaxIntegerValues ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CustomOptionMaxIntegerValues ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionMaxIntegerValues ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CustomOptionMaxIntegerValues ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionMaxIntegerValues ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CustomOptionMaxIntegerValues ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionMaxIntegerValues ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static CustomOptionMaxIntegerValues ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static CustomOptionMaxIntegerValues ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CustomOptionMaxIntegerValues ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private CustomOptionMaxIntegerValues MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(CustomOptionMaxIntegerValues prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<CustomOptionMaxIntegerValues, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(CustomOptionMaxIntegerValues cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private CustomOptionMaxIntegerValues result;

+      

+      private CustomOptionMaxIntegerValues PrepareBuilder() {

+        if (resultIsReadOnly) {

+          CustomOptionMaxIntegerValues original = result;

+          result = new CustomOptionMaxIntegerValues();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override CustomOptionMaxIntegerValues MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues.Descriptor; }

+      }

+      

+      public override CustomOptionMaxIntegerValues DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues.DefaultInstance; }

+      }

+      

+      public override CustomOptionMaxIntegerValues BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is CustomOptionMaxIntegerValues) {

+          return MergeFrom((CustomOptionMaxIntegerValues) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(CustomOptionMaxIntegerValues other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.CustomOptionMaxIntegerValues.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_customOptionMaxIntegerValuesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _customOptionMaxIntegerValuesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static CustomOptionMaxIntegerValues() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class CustomOptionOtherValues : pb::GeneratedMessage<CustomOptionOtherValues, CustomOptionOtherValues.Builder> {

+    private CustomOptionOtherValues() { }

+    private static readonly CustomOptionOtherValues defaultInstance = new CustomOptionOtherValues().MakeReadOnly();

+    private static readonly string[] _customOptionOtherValuesFieldNames = new string[] {  };

+    private static readonly uint[] _customOptionOtherValuesFieldTags = new uint[] {  };

+    public static CustomOptionOtherValues DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override CustomOptionOtherValues DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override CustomOptionOtherValues ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_CustomOptionOtherValues__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<CustomOptionOtherValues, CustomOptionOtherValues.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_CustomOptionOtherValues__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _customOptionOtherValuesFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static CustomOptionOtherValues ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CustomOptionOtherValues ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionOtherValues ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CustomOptionOtherValues ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionOtherValues ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CustomOptionOtherValues ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static CustomOptionOtherValues ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static CustomOptionOtherValues ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static CustomOptionOtherValues ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CustomOptionOtherValues ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private CustomOptionOtherValues MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(CustomOptionOtherValues prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<CustomOptionOtherValues, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(CustomOptionOtherValues cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private CustomOptionOtherValues result;

+      

+      private CustomOptionOtherValues PrepareBuilder() {

+        if (resultIsReadOnly) {

+          CustomOptionOtherValues original = result;

+          result = new CustomOptionOtherValues();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override CustomOptionOtherValues MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues.Descriptor; }

+      }

+      

+      public override CustomOptionOtherValues DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues.DefaultInstance; }

+      }

+      

+      public override CustomOptionOtherValues BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is CustomOptionOtherValues) {

+          return MergeFrom((CustomOptionOtherValues) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(CustomOptionOtherValues other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.CustomOptionOtherValues.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_customOptionOtherValuesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _customOptionOtherValuesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static CustomOptionOtherValues() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SettingRealsFromPositiveInts : pb::GeneratedMessage<SettingRealsFromPositiveInts, SettingRealsFromPositiveInts.Builder> {

+    private SettingRealsFromPositiveInts() { }

+    private static readonly SettingRealsFromPositiveInts defaultInstance = new SettingRealsFromPositiveInts().MakeReadOnly();

+    private static readonly string[] _settingRealsFromPositiveIntsFieldNames = new string[] {  };

+    private static readonly uint[] _settingRealsFromPositiveIntsFieldTags = new uint[] {  };

+    public static SettingRealsFromPositiveInts DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SettingRealsFromPositiveInts DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SettingRealsFromPositiveInts ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_SettingRealsFromPositiveInts__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SettingRealsFromPositiveInts, SettingRealsFromPositiveInts.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_SettingRealsFromPositiveInts__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _settingRealsFromPositiveIntsFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SettingRealsFromPositiveInts ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SettingRealsFromPositiveInts ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SettingRealsFromPositiveInts ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SettingRealsFromPositiveInts ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SettingRealsFromPositiveInts ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SettingRealsFromPositiveInts ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SettingRealsFromPositiveInts ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SettingRealsFromPositiveInts ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SettingRealsFromPositiveInts ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SettingRealsFromPositiveInts ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SettingRealsFromPositiveInts MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SettingRealsFromPositiveInts prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SettingRealsFromPositiveInts, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SettingRealsFromPositiveInts cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SettingRealsFromPositiveInts result;

+      

+      private SettingRealsFromPositiveInts PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SettingRealsFromPositiveInts original = result;

+          result = new SettingRealsFromPositiveInts();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SettingRealsFromPositiveInts MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts.Descriptor; }

+      }

+      

+      public override SettingRealsFromPositiveInts DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts.DefaultInstance; }

+      }

+      

+      public override SettingRealsFromPositiveInts BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SettingRealsFromPositiveInts) {

+          return MergeFrom((SettingRealsFromPositiveInts) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SettingRealsFromPositiveInts other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.SettingRealsFromPositiveInts.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_settingRealsFromPositiveIntsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _settingRealsFromPositiveIntsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static SettingRealsFromPositiveInts() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SettingRealsFromNegativeInts : pb::GeneratedMessage<SettingRealsFromNegativeInts, SettingRealsFromNegativeInts.Builder> {

+    private SettingRealsFromNegativeInts() { }

+    private static readonly SettingRealsFromNegativeInts defaultInstance = new SettingRealsFromNegativeInts().MakeReadOnly();

+    private static readonly string[] _settingRealsFromNegativeIntsFieldNames = new string[] {  };

+    private static readonly uint[] _settingRealsFromNegativeIntsFieldTags = new uint[] {  };

+    public static SettingRealsFromNegativeInts DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SettingRealsFromNegativeInts DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SettingRealsFromNegativeInts ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_SettingRealsFromNegativeInts__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SettingRealsFromNegativeInts, SettingRealsFromNegativeInts.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_SettingRealsFromNegativeInts__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _settingRealsFromNegativeIntsFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SettingRealsFromNegativeInts ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SettingRealsFromNegativeInts ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SettingRealsFromNegativeInts ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SettingRealsFromNegativeInts ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SettingRealsFromNegativeInts ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SettingRealsFromNegativeInts ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SettingRealsFromNegativeInts ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SettingRealsFromNegativeInts ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SettingRealsFromNegativeInts ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SettingRealsFromNegativeInts ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SettingRealsFromNegativeInts MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SettingRealsFromNegativeInts prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SettingRealsFromNegativeInts, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SettingRealsFromNegativeInts cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SettingRealsFromNegativeInts result;

+      

+      private SettingRealsFromNegativeInts PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SettingRealsFromNegativeInts original = result;

+          result = new SettingRealsFromNegativeInts();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SettingRealsFromNegativeInts MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts.Descriptor; }

+      }

+      

+      public override SettingRealsFromNegativeInts DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts.DefaultInstance; }

+      }

+      

+      public override SettingRealsFromNegativeInts BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SettingRealsFromNegativeInts) {

+          return MergeFrom((SettingRealsFromNegativeInts) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SettingRealsFromNegativeInts other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.SettingRealsFromNegativeInts.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_settingRealsFromNegativeIntsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _settingRealsFromNegativeIntsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static SettingRealsFromNegativeInts() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ComplexOptionType1 : pb::ExtendableMessage<ComplexOptionType1, ComplexOptionType1.Builder> {

+    private ComplexOptionType1() { }

+    private static readonly ComplexOptionType1 defaultInstance = new ComplexOptionType1().MakeReadOnly();

+    private static readonly string[] _complexOptionType1FieldNames = new string[] { "foo", "foo2", "foo3" };

+    private static readonly uint[] _complexOptionType1FieldTags = new uint[] { 8, 16, 24 };

+    public static ComplexOptionType1 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ComplexOptionType1 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ComplexOptionType1 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_ComplexOptionType1__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<ComplexOptionType1, ComplexOptionType1.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_ComplexOptionType1__FieldAccessorTable; }

+    }

+    

+    public const int FooFieldNumber = 1;

+    private bool hasFoo;

+    private int foo_;

+    public bool HasFoo {

+      get { return hasFoo; }

+    }

+    public int Foo {

+      get { return foo_; }

+    }

+    

+    public const int Foo2FieldNumber = 2;

+    private bool hasFoo2;

+    private int foo2_;

+    public bool HasFoo2 {

+      get { return hasFoo2; }

+    }

+    public int Foo2 {

+      get { return foo2_; }

+    }

+    

+    public const int Foo3FieldNumber = 3;

+    private bool hasFoo3;

+    private int foo3_;

+    public bool HasFoo3 {

+      get { return hasFoo3; }

+    }

+    public int Foo3 {

+      get { return foo3_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _complexOptionType1FieldNames;

+      pb::ExtendableMessage<ComplexOptionType1, ComplexOptionType1.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (hasFoo) {

+        output.WriteInt32(1, field_names[0], Foo);

+      }

+      if (hasFoo2) {

+        output.WriteInt32(2, field_names[1], Foo2);

+      }

+      if (hasFoo3) {

+        output.WriteInt32(3, field_names[2], Foo3);

+      }

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasFoo) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, Foo);

+      }

+      if (hasFoo2) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, Foo2);

+      }

+      if (hasFoo3) {

+        size += pb::CodedOutputStream.ComputeInt32Size(3, Foo3);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static ComplexOptionType1 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ComplexOptionType1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ComplexOptionType1 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ComplexOptionType1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ComplexOptionType1 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ComplexOptionType1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ComplexOptionType1 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ComplexOptionType1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ComplexOptionType1 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ComplexOptionType1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ComplexOptionType1 MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ComplexOptionType1 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<ComplexOptionType1, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ComplexOptionType1 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ComplexOptionType1 result;

+      

+      private ComplexOptionType1 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ComplexOptionType1 original = result;

+          result = new ComplexOptionType1();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ComplexOptionType1 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.Descriptor; }

+      }

+      

+      public override ComplexOptionType1 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.DefaultInstance; }

+      }

+      

+      public override ComplexOptionType1 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is ComplexOptionType1) {

+          return MergeFrom((ComplexOptionType1) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ComplexOptionType1 other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasFoo) {

+          Foo = other.Foo;

+        }

+        if (other.HasFoo2) {

+          Foo2 = other.Foo2;

+        }

+        if (other.HasFoo3) {

+          Foo3 = other.Foo3;

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_complexOptionType1FieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _complexOptionType1FieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasFoo = input.ReadInt32(ref result.foo_);

+              break;

+            }

+            case 16: {

+              result.hasFoo2 = input.ReadInt32(ref result.foo2_);

+              break;

+            }

+            case 24: {

+              result.hasFoo3 = input.ReadInt32(ref result.foo3_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasFoo {

+        get { return result.hasFoo; }

+      }

+      public int Foo {

+        get { return result.Foo; }

+        set { SetFoo(value); }

+      }

+      public Builder SetFoo(int value) {

+        PrepareBuilder();

+        result.hasFoo = true;

+        result.foo_ = value;

+        return this;

+      }

+      public Builder ClearFoo() {

+        PrepareBuilder();

+        result.hasFoo = false;

+        result.foo_ = 0;

+        return this;

+      }

+      

+      public bool HasFoo2 {

+        get { return result.hasFoo2; }

+      }

+      public int Foo2 {

+        get { return result.Foo2; }

+        set { SetFoo2(value); }

+      }

+      public Builder SetFoo2(int value) {

+        PrepareBuilder();

+        result.hasFoo2 = true;

+        result.foo2_ = value;

+        return this;

+      }

+      public Builder ClearFoo2() {

+        PrepareBuilder();

+        result.hasFoo2 = false;

+        result.foo2_ = 0;

+        return this;

+      }

+      

+      public bool HasFoo3 {

+        get { return result.hasFoo3; }

+      }

+      public int Foo3 {

+        get { return result.Foo3; }

+        set { SetFoo3(value); }

+      }

+      public Builder SetFoo3(int value) {

+        PrepareBuilder();

+        result.hasFoo3 = true;

+        result.foo3_ = value;

+        return this;

+      }

+      public Builder ClearFoo3() {

+        PrepareBuilder();

+        result.hasFoo3 = false;

+        result.foo3_ = 0;

+        return this;

+      }

+    }

+    static ComplexOptionType1() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ComplexOptionType2 : pb::ExtendableMessage<ComplexOptionType2, ComplexOptionType2.Builder> {

+    private ComplexOptionType2() { }

+    private static readonly ComplexOptionType2 defaultInstance = new ComplexOptionType2().MakeReadOnly();

+    private static readonly string[] _complexOptionType2FieldNames = new string[] { "bar", "baz", "fred" };

+    private static readonly uint[] _complexOptionType2FieldTags = new uint[] { 10, 16, 26 };

+    public static ComplexOptionType2 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ComplexOptionType2 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ComplexOptionType2 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_ComplexOptionType2__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<ComplexOptionType2, ComplexOptionType2.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_ComplexOptionType2__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class ComplexOptionType4 : pb::GeneratedMessage<ComplexOptionType4, ComplexOptionType4.Builder> {

+        private ComplexOptionType4() { }

+        private static readonly ComplexOptionType4 defaultInstance = new ComplexOptionType4().MakeReadOnly();

+        private static readonly string[] _complexOptionType4FieldNames = new string[] { "waldo" };

+        private static readonly uint[] _complexOptionType4FieldTags = new uint[] { 8 };

+        public static ComplexOptionType4 DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override ComplexOptionType4 DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override ComplexOptionType4 ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<ComplexOptionType4, ComplexOptionType4.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_ComplexOptionType2_ComplexOptionType4__FieldAccessorTable; }

+        }

+        

+        public const int ComplexOpt4FieldNumber = 7633546;

+        public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4> ComplexOpt4;

+        public const int WaldoFieldNumber = 1;

+        private bool hasWaldo;

+        private int waldo_;

+        public bool HasWaldo {

+          get { return hasWaldo; }

+        }

+        public int Waldo {

+          get { return waldo_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _complexOptionType4FieldNames;

+          if (hasWaldo) {

+            output.WriteInt32(1, field_names[0], Waldo);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasWaldo) {

+            size += pb::CodedOutputStream.ComputeInt32Size(1, Waldo);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static ComplexOptionType4 ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static ComplexOptionType4 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static ComplexOptionType4 ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static ComplexOptionType4 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static ComplexOptionType4 ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static ComplexOptionType4 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static ComplexOptionType4 ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static ComplexOptionType4 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static ComplexOptionType4 ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static ComplexOptionType4 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private ComplexOptionType4 MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(ComplexOptionType4 prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<ComplexOptionType4, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(ComplexOptionType4 cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private ComplexOptionType4 result;

+          

+          private ComplexOptionType4 PrepareBuilder() {

+            if (resultIsReadOnly) {

+              ComplexOptionType4 original = result;

+              result = new ComplexOptionType4();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override ComplexOptionType4 MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Descriptor; }

+          }

+          

+          public override ComplexOptionType4 DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.DefaultInstance; }

+          }

+          

+          public override ComplexOptionType4 BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is ComplexOptionType4) {

+              return MergeFrom((ComplexOptionType4) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(ComplexOptionType4 other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasWaldo) {

+              Waldo = other.Waldo;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_complexOptionType4FieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _complexOptionType4FieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 8: {

+                  result.hasWaldo = input.ReadInt32(ref result.waldo_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasWaldo {

+            get { return result.hasWaldo; }

+          }

+          public int Waldo {

+            get { return result.Waldo; }

+            set { SetWaldo(value); }

+          }

+          public Builder SetWaldo(int value) {

+            PrepareBuilder();

+            result.hasWaldo = true;

+            result.waldo_ = value;

+            return this;

+          }

+          public Builder ClearWaldo() {

+            PrepareBuilder();

+            result.hasWaldo = false;

+            result.waldo_ = 0;

+            return this;

+          }

+        }

+        static ComplexOptionType4() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int BarFieldNumber = 1;

+    private bool hasBar;

+    private global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1 bar_;

+    public bool HasBar {

+      get { return hasBar; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1 Bar {

+      get { return bar_ ?? global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.DefaultInstance; }

+    }

+    

+    public const int BazFieldNumber = 2;

+    private bool hasBaz;

+    private int baz_;

+    public bool HasBaz {

+      get { return hasBaz; }

+    }

+    public int Baz {

+      get { return baz_; }

+    }

+    

+    public const int FredFieldNumber = 3;

+    private bool hasFred;

+    private global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 fred_;

+    public bool HasFred {

+      get { return hasFred; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 Fred {

+      get { return fred_ ?? global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (HasFred) {

+          if (!Fred.IsInitialized) return false;

+        }

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _complexOptionType2FieldNames;

+      pb::ExtendableMessage<ComplexOptionType2, ComplexOptionType2.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (hasBar) {

+        output.WriteMessage(1, field_names[0], Bar);

+      }

+      if (hasBaz) {

+        output.WriteInt32(2, field_names[1], Baz);

+      }

+      if (hasFred) {

+        output.WriteMessage(3, field_names[2], Fred);

+      }

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasBar) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, Bar);

+      }

+      if (hasBaz) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, Baz);

+      }

+      if (hasFred) {

+        size += pb::CodedOutputStream.ComputeMessageSize(3, Fred);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static ComplexOptionType2 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ComplexOptionType2 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ComplexOptionType2 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ComplexOptionType2 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ComplexOptionType2 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ComplexOptionType2 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ComplexOptionType2 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ComplexOptionType2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ComplexOptionType2 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ComplexOptionType2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ComplexOptionType2 MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ComplexOptionType2 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<ComplexOptionType2, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ComplexOptionType2 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ComplexOptionType2 result;

+      

+      private ComplexOptionType2 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ComplexOptionType2 original = result;

+          result = new ComplexOptionType2();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ComplexOptionType2 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Descriptor; }

+      }

+      

+      public override ComplexOptionType2 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.DefaultInstance; }

+      }

+      

+      public override ComplexOptionType2 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is ComplexOptionType2) {

+          return MergeFrom((ComplexOptionType2) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ComplexOptionType2 other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasBar) {

+          MergeBar(other.Bar);

+        }

+        if (other.HasBaz) {

+          Baz = other.Baz;

+        }

+        if (other.HasFred) {

+          MergeFred(other.Fred);

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_complexOptionType2FieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _complexOptionType2FieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.CreateBuilder();

+              if (result.hasBar) {

+                subBuilder.MergeFrom(Bar);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Bar = subBuilder.BuildPartial();

+              break;

+            }

+            case 16: {

+              result.hasBaz = input.ReadInt32(ref result.baz_);

+              break;

+            }

+            case 26: {

+              global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.CreateBuilder();

+              if (result.hasFred) {

+                subBuilder.MergeFrom(Fred);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Fred = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasBar {

+       get { return result.hasBar; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1 Bar {

+        get { return result.Bar; }

+        set { SetBar(value); }

+      }

+      public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasBar = true;

+        result.bar_ = value;

+        return this;

+      }

+      public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasBar = true;

+        result.bar_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeBar(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasBar &&

+            result.bar_ != global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.DefaultInstance) {

+            result.bar_ = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType1.CreateBuilder(result.bar_).MergeFrom(value).BuildPartial();

+        } else {

+          result.bar_ = value;

+        }

+        result.hasBar = true;

+        return this;

+      }

+      public Builder ClearBar() {

+        PrepareBuilder();

+        result.hasBar = false;

+        result.bar_ = null;

+        return this;

+      }

+      

+      public bool HasBaz {

+        get { return result.hasBaz; }

+      }

+      public int Baz {

+        get { return result.Baz; }

+        set { SetBaz(value); }

+      }

+      public Builder SetBaz(int value) {

+        PrepareBuilder();

+        result.hasBaz = true;

+        result.baz_ = value;

+        return this;

+      }

+      public Builder ClearBaz() {

+        PrepareBuilder();

+        result.hasBaz = false;

+        result.baz_ = 0;

+        return this;

+      }

+      

+      public bool HasFred {

+       get { return result.hasFred; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 Fred {

+        get { return result.Fred; }

+        set { SetFred(value); }

+      }

+      public Builder SetFred(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasFred = true;

+        result.fred_ = value;

+        return this;

+      }

+      public Builder SetFred(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasFred = true;

+        result.fred_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeFred(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasFred &&

+            result.fred_ != global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.DefaultInstance) {

+            result.fred_ = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType2.Types.ComplexOptionType4.CreateBuilder(result.fred_).MergeFrom(value).BuildPartial();

+        } else {

+          result.fred_ = value;

+        }

+        result.hasFred = true;

+        return this;

+      }

+      public Builder ClearFred() {

+        PrepareBuilder();

+        result.hasFred = false;

+        result.fred_ = null;

+        return this;

+      }

+    }

+    static ComplexOptionType2() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ComplexOptionType3 : pb::GeneratedMessage<ComplexOptionType3, ComplexOptionType3.Builder> {

+    private ComplexOptionType3() { }

+    private static readonly ComplexOptionType3 defaultInstance = new ComplexOptionType3().MakeReadOnly();

+    private static readonly string[] _complexOptionType3FieldNames = new string[] { "complexoptiontype5", "qux" };

+    private static readonly uint[] _complexOptionType3FieldTags = new uint[] { 19, 8 };

+    public static ComplexOptionType3 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ComplexOptionType3 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ComplexOptionType3 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_ComplexOptionType3__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<ComplexOptionType3, ComplexOptionType3.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_ComplexOptionType3__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class ComplexOptionType5 : pb::GeneratedMessage<ComplexOptionType5, ComplexOptionType5.Builder> {

+        private ComplexOptionType5() { }

+        private static readonly ComplexOptionType5 defaultInstance = new ComplexOptionType5().MakeReadOnly();

+        private static readonly string[] _complexOptionType5FieldNames = new string[] { "plugh" };

+        private static readonly uint[] _complexOptionType5FieldTags = new uint[] { 24 };

+        public static ComplexOptionType5 DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override ComplexOptionType5 DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override ComplexOptionType5 ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<ComplexOptionType5, ComplexOptionType5.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_ComplexOptionType3_ComplexOptionType5__FieldAccessorTable; }

+        }

+        

+        public const int PlughFieldNumber = 3;

+        private bool hasPlugh;

+        private int plugh_;

+        public bool HasPlugh {

+          get { return hasPlugh; }

+        }

+        public int Plugh {

+          get { return plugh_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _complexOptionType5FieldNames;

+          if (hasPlugh) {

+            output.WriteInt32(3, field_names[0], Plugh);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasPlugh) {

+            size += pb::CodedOutputStream.ComputeInt32Size(3, Plugh);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static ComplexOptionType5 ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static ComplexOptionType5 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static ComplexOptionType5 ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static ComplexOptionType5 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static ComplexOptionType5 ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static ComplexOptionType5 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static ComplexOptionType5 ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static ComplexOptionType5 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static ComplexOptionType5 ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static ComplexOptionType5 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private ComplexOptionType5 MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(ComplexOptionType5 prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<ComplexOptionType5, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(ComplexOptionType5 cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private ComplexOptionType5 result;

+          

+          private ComplexOptionType5 PrepareBuilder() {

+            if (resultIsReadOnly) {

+              ComplexOptionType5 original = result;

+              result = new ComplexOptionType5();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override ComplexOptionType5 MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.Descriptor; }

+          }

+          

+          public override ComplexOptionType5 DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.DefaultInstance; }

+          }

+          

+          public override ComplexOptionType5 BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is ComplexOptionType5) {

+              return MergeFrom((ComplexOptionType5) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(ComplexOptionType5 other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasPlugh) {

+              Plugh = other.Plugh;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_complexOptionType5FieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _complexOptionType5FieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 24: {

+                  result.hasPlugh = input.ReadInt32(ref result.plugh_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasPlugh {

+            get { return result.hasPlugh; }

+          }

+          public int Plugh {

+            get { return result.Plugh; }

+            set { SetPlugh(value); }

+          }

+          public Builder SetPlugh(int value) {

+            PrepareBuilder();

+            result.hasPlugh = true;

+            result.plugh_ = value;

+            return this;

+          }

+          public Builder ClearPlugh() {

+            PrepareBuilder();

+            result.hasPlugh = false;

+            result.plugh_ = 0;

+            return this;

+          }

+        }

+        static ComplexOptionType5() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int QuxFieldNumber = 1;

+    private bool hasQux;

+    private int qux_;

+    public bool HasQux {

+      get { return hasQux; }

+    }

+    public int Qux {

+      get { return qux_; }

+    }

+    

+    public const int ComplexOptionType5FieldNumber = 2;

+    private bool hasComplexOptionType5;

+    private global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5 complexOptionType5_;

+    public bool HasComplexOptionType5 {

+      get { return hasComplexOptionType5; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5 ComplexOptionType5 {

+      get { return complexOptionType5_ ?? global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _complexOptionType3FieldNames;

+      if (hasQux) {

+        output.WriteInt32(1, field_names[1], Qux);

+      }

+      if (hasComplexOptionType5) {

+        output.WriteGroup(2, field_names[0], ComplexOptionType5);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasQux) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, Qux);

+      }

+      if (hasComplexOptionType5) {

+        size += pb::CodedOutputStream.ComputeGroupSize(2, ComplexOptionType5);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static ComplexOptionType3 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ComplexOptionType3 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ComplexOptionType3 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ComplexOptionType3 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ComplexOptionType3 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ComplexOptionType3 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ComplexOptionType3 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ComplexOptionType3 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ComplexOptionType3 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ComplexOptionType3 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ComplexOptionType3 MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ComplexOptionType3 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<ComplexOptionType3, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ComplexOptionType3 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ComplexOptionType3 result;

+      

+      private ComplexOptionType3 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ComplexOptionType3 original = result;

+          result = new ComplexOptionType3();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ComplexOptionType3 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Descriptor; }

+      }

+      

+      public override ComplexOptionType3 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.DefaultInstance; }

+      }

+      

+      public override ComplexOptionType3 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is ComplexOptionType3) {

+          return MergeFrom((ComplexOptionType3) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ComplexOptionType3 other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasQux) {

+          Qux = other.Qux;

+        }

+        if (other.HasComplexOptionType5) {

+          MergeComplexOptionType5(other.ComplexOptionType5);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_complexOptionType3FieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _complexOptionType3FieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasQux = input.ReadInt32(ref result.qux_);

+              break;

+            }

+            case 19: {

+              global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.CreateBuilder();

+              if (result.hasComplexOptionType5) {

+                subBuilder.MergeFrom(ComplexOptionType5);

+              }

+              input.ReadGroup(2, subBuilder, extensionRegistry);

+              ComplexOptionType5 = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasQux {

+        get { return result.hasQux; }

+      }

+      public int Qux {

+        get { return result.Qux; }

+        set { SetQux(value); }

+      }

+      public Builder SetQux(int value) {

+        PrepareBuilder();

+        result.hasQux = true;

+        result.qux_ = value;

+        return this;

+      }

+      public Builder ClearQux() {

+        PrepareBuilder();

+        result.hasQux = false;

+        result.qux_ = 0;

+        return this;

+      }

+      

+      public bool HasComplexOptionType5 {

+       get { return result.hasComplexOptionType5; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5 ComplexOptionType5 {

+        get { return result.ComplexOptionType5; }

+        set { SetComplexOptionType5(value); }

+      }

+      public Builder SetComplexOptionType5(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasComplexOptionType5 = true;

+        result.complexOptionType5_ = value;

+        return this;

+      }

+      public Builder SetComplexOptionType5(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasComplexOptionType5 = true;

+        result.complexOptionType5_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeComplexOptionType5(global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasComplexOptionType5 &&

+            result.complexOptionType5_ != global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.DefaultInstance) {

+            result.complexOptionType5_ = global::Google.ProtocolBuffers.TestProtos.ComplexOptionType3.Types.ComplexOptionType5.CreateBuilder(result.complexOptionType5_).MergeFrom(value).BuildPartial();

+        } else {

+          result.complexOptionType5_ = value;

+        }

+        result.hasComplexOptionType5 = true;

+        return this;

+      }

+      public Builder ClearComplexOptionType5() {

+        PrepareBuilder();

+        result.hasComplexOptionType5 = false;

+        result.complexOptionType5_ = null;

+        return this;

+      }

+    }

+    static ComplexOptionType3() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ComplexOpt6 : pb::GeneratedMessage<ComplexOpt6, ComplexOpt6.Builder> {

+    private ComplexOpt6() { }

+    private static readonly ComplexOpt6 defaultInstance = new ComplexOpt6().MakeReadOnly();

+    private static readonly string[] _complexOpt6FieldNames = new string[] { "xyzzy" };

+    private static readonly uint[] _complexOpt6FieldTags = new uint[] { 60751608 };

+    public static ComplexOpt6 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ComplexOpt6 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ComplexOpt6 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_ComplexOpt6__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<ComplexOpt6, ComplexOpt6.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_ComplexOpt6__FieldAccessorTable; }

+    }

+    

+    public const int XyzzyFieldNumber = 7593951;

+    private bool hasXyzzy;

+    private int xyzzy_;

+    public bool HasXyzzy {

+      get { return hasXyzzy; }

+    }

+    public int Xyzzy {

+      get { return xyzzy_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _complexOpt6FieldNames;

+      if (hasXyzzy) {

+        output.WriteInt32(7593951, field_names[0], Xyzzy);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasXyzzy) {

+        size += pb::CodedOutputStream.ComputeInt32Size(7593951, Xyzzy);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static ComplexOpt6 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ComplexOpt6 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ComplexOpt6 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ComplexOpt6 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ComplexOpt6 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ComplexOpt6 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ComplexOpt6 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ComplexOpt6 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ComplexOpt6 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ComplexOpt6 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ComplexOpt6 MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ComplexOpt6 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<ComplexOpt6, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ComplexOpt6 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ComplexOpt6 result;

+      

+      private ComplexOpt6 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ComplexOpt6 original = result;

+          result = new ComplexOpt6();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ComplexOpt6 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOpt6.Descriptor; }

+      }

+      

+      public override ComplexOpt6 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ComplexOpt6.DefaultInstance; }

+      }

+      

+      public override ComplexOpt6 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is ComplexOpt6) {

+          return MergeFrom((ComplexOpt6) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ComplexOpt6 other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.ComplexOpt6.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasXyzzy) {

+          Xyzzy = other.Xyzzy;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_complexOpt6FieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _complexOpt6FieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 60751608: {

+              result.hasXyzzy = input.ReadInt32(ref result.xyzzy_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasXyzzy {

+        get { return result.hasXyzzy; }

+      }

+      public int Xyzzy {

+        get { return result.Xyzzy; }

+        set { SetXyzzy(value); }

+      }

+      public Builder SetXyzzy(int value) {

+        PrepareBuilder();

+        result.hasXyzzy = true;

+        result.xyzzy_ = value;

+        return this;

+      }

+      public Builder ClearXyzzy() {

+        PrepareBuilder();

+        result.hasXyzzy = false;

+        result.xyzzy_ = 0;

+        return this;

+      }

+    }

+    static ComplexOpt6() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class VariousComplexOptions : pb::GeneratedMessage<VariousComplexOptions, VariousComplexOptions.Builder> {

+    private VariousComplexOptions() { }

+    private static readonly VariousComplexOptions defaultInstance = new VariousComplexOptions().MakeReadOnly();

+    private static readonly string[] _variousComplexOptionsFieldNames = new string[] {  };

+    private static readonly uint[] _variousComplexOptionsFieldTags = new uint[] {  };

+    public static VariousComplexOptions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override VariousComplexOptions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override VariousComplexOptions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_VariousComplexOptions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<VariousComplexOptions, VariousComplexOptions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_VariousComplexOptions__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _variousComplexOptionsFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static VariousComplexOptions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static VariousComplexOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static VariousComplexOptions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static VariousComplexOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static VariousComplexOptions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static VariousComplexOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static VariousComplexOptions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static VariousComplexOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static VariousComplexOptions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static VariousComplexOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private VariousComplexOptions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(VariousComplexOptions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<VariousComplexOptions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(VariousComplexOptions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private VariousComplexOptions result;

+      

+      private VariousComplexOptions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          VariousComplexOptions original = result;

+          result = new VariousComplexOptions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override VariousComplexOptions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions.Descriptor; }

+      }

+      

+      public override VariousComplexOptions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions.DefaultInstance; }

+      }

+      

+      public override VariousComplexOptions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is VariousComplexOptions) {

+          return MergeFrom((VariousComplexOptions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(VariousComplexOptions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.VariousComplexOptions.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_variousComplexOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _variousComplexOptionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static VariousComplexOptions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class AggregateMessageSet : pb::ExtendableMessage<AggregateMessageSet, AggregateMessageSet.Builder> {

+    private AggregateMessageSet() { }

+    private static readonly AggregateMessageSet defaultInstance = new AggregateMessageSet().MakeReadOnly();

+    private static readonly string[] _aggregateMessageSetFieldNames = new string[] {  };

+    private static readonly uint[] _aggregateMessageSetFieldTags = new uint[] {  };

+    public static AggregateMessageSet DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override AggregateMessageSet DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override AggregateMessageSet ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_AggregateMessageSet__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<AggregateMessageSet, AggregateMessageSet.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_AggregateMessageSet__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _aggregateMessageSetFieldNames;

+      pb::ExtendableMessage<AggregateMessageSet, AggregateMessageSet.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteAsMessageSetTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSizeAsMessageSet;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static AggregateMessageSet ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static AggregateMessageSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static AggregateMessageSet ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static AggregateMessageSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static AggregateMessageSet ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static AggregateMessageSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static AggregateMessageSet ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static AggregateMessageSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static AggregateMessageSet ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static AggregateMessageSet ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private AggregateMessageSet MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(AggregateMessageSet prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<AggregateMessageSet, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(AggregateMessageSet cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private AggregateMessageSet result;

+      

+      private AggregateMessageSet PrepareBuilder() {

+        if (resultIsReadOnly) {

+          AggregateMessageSet original = result;

+          result = new AggregateMessageSet();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override AggregateMessageSet MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.Descriptor; }

+      }

+      

+      public override AggregateMessageSet DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.DefaultInstance; }

+      }

+      

+      public override AggregateMessageSet BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is AggregateMessageSet) {

+          return MergeFrom((AggregateMessageSet) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(AggregateMessageSet other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_aggregateMessageSetFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _aggregateMessageSetFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static AggregateMessageSet() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class AggregateMessageSetElement : pb::GeneratedMessage<AggregateMessageSetElement, AggregateMessageSetElement.Builder> {

+    private AggregateMessageSetElement() { }

+    private static readonly AggregateMessageSetElement defaultInstance = new AggregateMessageSetElement().MakeReadOnly();

+    private static readonly string[] _aggregateMessageSetElementFieldNames = new string[] { "s" };

+    private static readonly uint[] _aggregateMessageSetElementFieldTags = new uint[] { 10 };

+    public static AggregateMessageSetElement DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override AggregateMessageSetElement DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override AggregateMessageSetElement ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_AggregateMessageSetElement__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<AggregateMessageSetElement, AggregateMessageSetElement.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_AggregateMessageSetElement__FieldAccessorTable; }

+    }

+    

+    public const int MessageSetExtensionFieldNumber = 15447542;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement> MessageSetExtension;

+    public const int SFieldNumber = 1;

+    private bool hasS;

+    private string s_ = "";

+    public bool HasS {

+      get { return hasS; }

+    }

+    public string S {

+      get { return s_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _aggregateMessageSetElementFieldNames;

+      if (hasS) {

+        output.WriteString(1, field_names[0], S);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasS) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, S);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static AggregateMessageSetElement ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static AggregateMessageSetElement ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static AggregateMessageSetElement ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static AggregateMessageSetElement ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static AggregateMessageSetElement ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static AggregateMessageSetElement ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static AggregateMessageSetElement ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static AggregateMessageSetElement ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static AggregateMessageSetElement ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static AggregateMessageSetElement ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private AggregateMessageSetElement MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(AggregateMessageSetElement prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<AggregateMessageSetElement, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(AggregateMessageSetElement cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private AggregateMessageSetElement result;

+      

+      private AggregateMessageSetElement PrepareBuilder() {

+        if (resultIsReadOnly) {

+          AggregateMessageSetElement original = result;

+          result = new AggregateMessageSetElement();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override AggregateMessageSetElement MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.Descriptor; }

+      }

+      

+      public override AggregateMessageSetElement DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.DefaultInstance; }

+      }

+      

+      public override AggregateMessageSetElement BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is AggregateMessageSetElement) {

+          return MergeFrom((AggregateMessageSetElement) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(AggregateMessageSetElement other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.AggregateMessageSetElement.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasS) {

+          S = other.S;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_aggregateMessageSetElementFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _aggregateMessageSetElementFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasS = input.ReadString(ref result.s_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasS {

+        get { return result.hasS; }

+      }

+      public string S {

+        get { return result.S; }

+        set { SetS(value); }

+      }

+      public Builder SetS(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasS = true;

+        result.s_ = value;

+        return this;

+      }

+      public Builder ClearS() {

+        PrepareBuilder();

+        result.hasS = false;

+        result.s_ = "";

+        return this;

+      }

+    }

+    static AggregateMessageSetElement() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class Aggregate : pb::GeneratedMessage<Aggregate, Aggregate.Builder> {

+    private Aggregate() { }

+    private static readonly Aggregate defaultInstance = new Aggregate().MakeReadOnly();

+    private static readonly string[] _aggregateFieldNames = new string[] { "file", "i", "mset", "s", "sub" };

+    private static readonly uint[] _aggregateFieldTags = new uint[] { 34, 8, 42, 18, 26 };

+    public static Aggregate DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override Aggregate DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override Aggregate ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_Aggregate__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<Aggregate, Aggregate.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_Aggregate__FieldAccessorTable; }

+    }

+    

+    public const int NestedFieldNumber = 15476903;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.Aggregate> Nested;

+    public const int IFieldNumber = 1;

+    private bool hasI;

+    private int i_;

+    public bool HasI {

+      get { return hasI; }

+    }

+    public int I {

+      get { return i_; }

+    }

+    

+    public const int SFieldNumber = 2;

+    private bool hasS;

+    private string s_ = "";

+    public bool HasS {

+      get { return hasS; }

+    }

+    public string S {

+      get { return s_; }

+    }

+    

+    public const int SubFieldNumber = 3;

+    private bool hasSub;

+    private global::Google.ProtocolBuffers.TestProtos.Aggregate sub_;

+    public bool HasSub {

+      get { return hasSub; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.Aggregate Sub {

+      get { return sub_ ?? global::Google.ProtocolBuffers.TestProtos.Aggregate.DefaultInstance; }

+    }

+    

+    public const int FileFieldNumber = 4;

+    private bool hasFile;

+    private global::Google.ProtocolBuffers.DescriptorProtos.FileOptions file_;

+    public bool HasFile {

+      get { return hasFile; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions File {

+      get { return file_ ?? global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance; }

+    }

+    

+    public const int MsetFieldNumber = 5;

+    private bool hasMset;

+    private global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet mset_;

+    public bool HasMset {

+      get { return hasMset; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet Mset {

+      get { return mset_ ?? global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (HasSub) {

+          if (!Sub.IsInitialized) return false;

+        }

+        if (HasFile) {

+          if (!File.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _aggregateFieldNames;

+      if (hasI) {

+        output.WriteInt32(1, field_names[1], I);

+      }

+      if (hasS) {

+        output.WriteString(2, field_names[3], S);

+      }

+      if (hasSub) {

+        output.WriteMessage(3, field_names[4], Sub);

+      }

+      if (hasFile) {

+        output.WriteMessage(4, field_names[0], File);

+      }

+      if (hasMset) {

+        output.WriteMessage(5, field_names[2], Mset);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasI) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, I);

+      }

+      if (hasS) {

+        size += pb::CodedOutputStream.ComputeStringSize(2, S);

+      }

+      if (hasSub) {

+        size += pb::CodedOutputStream.ComputeMessageSize(3, Sub);

+      }

+      if (hasFile) {

+        size += pb::CodedOutputStream.ComputeMessageSize(4, File);

+      }

+      if (hasMset) {

+        size += pb::CodedOutputStream.ComputeMessageSize(5, Mset);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static Aggregate ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static Aggregate ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static Aggregate ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static Aggregate ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static Aggregate ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static Aggregate ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static Aggregate ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static Aggregate ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static Aggregate ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static Aggregate ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private Aggregate MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(Aggregate prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<Aggregate, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(Aggregate cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private Aggregate result;

+      

+      private Aggregate PrepareBuilder() {

+        if (resultIsReadOnly) {

+          Aggregate original = result;

+          result = new Aggregate();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override Aggregate MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.Aggregate.Descriptor; }

+      }

+      

+      public override Aggregate DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.Aggregate.DefaultInstance; }

+      }

+      

+      public override Aggregate BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is Aggregate) {

+          return MergeFrom((Aggregate) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(Aggregate other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.Aggregate.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasI) {

+          I = other.I;

+        }

+        if (other.HasS) {

+          S = other.S;

+        }

+        if (other.HasSub) {

+          MergeSub(other.Sub);

+        }

+        if (other.HasFile) {

+          MergeFile(other.File);

+        }

+        if (other.HasMset) {

+          MergeMset(other.Mset);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_aggregateFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _aggregateFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasI = input.ReadInt32(ref result.i_);

+              break;

+            }

+            case 18: {

+              result.hasS = input.ReadString(ref result.s_);

+              break;

+            }

+            case 26: {

+              global::Google.ProtocolBuffers.TestProtos.Aggregate.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.Aggregate.CreateBuilder();

+              if (result.hasSub) {

+                subBuilder.MergeFrom(Sub);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Sub = subBuilder.BuildPartial();

+              break;

+            }

+            case 34: {

+              global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder();

+              if (result.hasFile) {

+                subBuilder.MergeFrom(File);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              File = subBuilder.BuildPartial();

+              break;

+            }

+            case 42: {

+              global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.CreateBuilder();

+              if (result.hasMset) {

+                subBuilder.MergeFrom(Mset);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Mset = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasI {

+        get { return result.hasI; }

+      }

+      public int I {

+        get { return result.I; }

+        set { SetI(value); }

+      }

+      public Builder SetI(int value) {

+        PrepareBuilder();

+        result.hasI = true;

+        result.i_ = value;

+        return this;

+      }

+      public Builder ClearI() {

+        PrepareBuilder();

+        result.hasI = false;

+        result.i_ = 0;

+        return this;

+      }

+      

+      public bool HasS {

+        get { return result.hasS; }

+      }

+      public string S {

+        get { return result.S; }

+        set { SetS(value); }

+      }

+      public Builder SetS(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasS = true;

+        result.s_ = value;

+        return this;

+      }

+      public Builder ClearS() {

+        PrepareBuilder();

+        result.hasS = false;

+        result.s_ = "";

+        return this;

+      }

+      

+      public bool HasSub {

+       get { return result.hasSub; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.Aggregate Sub {

+        get { return result.Sub; }

+        set { SetSub(value); }

+      }

+      public Builder SetSub(global::Google.ProtocolBuffers.TestProtos.Aggregate value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasSub = true;

+        result.sub_ = value;

+        return this;

+      }

+      public Builder SetSub(global::Google.ProtocolBuffers.TestProtos.Aggregate.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasSub = true;

+        result.sub_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeSub(global::Google.ProtocolBuffers.TestProtos.Aggregate value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasSub &&

+            result.sub_ != global::Google.ProtocolBuffers.TestProtos.Aggregate.DefaultInstance) {

+            result.sub_ = global::Google.ProtocolBuffers.TestProtos.Aggregate.CreateBuilder(result.sub_).MergeFrom(value).BuildPartial();

+        } else {

+          result.sub_ = value;

+        }

+        result.hasSub = true;

+        return this;

+      }

+      public Builder ClearSub() {

+        PrepareBuilder();

+        result.hasSub = false;

+        result.sub_ = null;

+        return this;

+      }

+      

+      public bool HasFile {

+       get { return result.hasFile; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions File {

+        get { return result.File; }

+        set { SetFile(value); }

+      }

+      public Builder SetFile(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasFile = true;

+        result.file_ = value;

+        return this;

+      }

+      public Builder SetFile(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasFile = true;

+        result.file_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeFile(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasFile &&

+            result.file_ != global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance) {

+            result.file_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder(result.file_).MergeFrom(value).BuildPartial();

+        } else {

+          result.file_ = value;

+        }

+        result.hasFile = true;

+        return this;

+      }

+      public Builder ClearFile() {

+        PrepareBuilder();

+        result.hasFile = false;

+        result.file_ = null;

+        return this;

+      }

+      

+      public bool HasMset {

+       get { return result.hasMset; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet Mset {

+        get { return result.Mset; }

+        set { SetMset(value); }

+      }

+      public Builder SetMset(global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMset = true;

+        result.mset_ = value;

+        return this;

+      }

+      public Builder SetMset(global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasMset = true;

+        result.mset_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeMset(global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasMset &&

+            result.mset_ != global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.DefaultInstance) {

+            result.mset_ = global::Google.ProtocolBuffers.TestProtos.AggregateMessageSet.CreateBuilder(result.mset_).MergeFrom(value).BuildPartial();

+        } else {

+          result.mset_ = value;

+        }

+        result.hasMset = true;

+        return this;

+      }

+      public Builder ClearMset() {

+        PrepareBuilder();

+        result.hasMset = false;

+        result.mset_ = null;

+        return this;

+      }

+    }

+    static Aggregate() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class AggregateMessage : pb::GeneratedMessage<AggregateMessage, AggregateMessage.Builder> {

+    private AggregateMessage() { }

+    private static readonly AggregateMessage defaultInstance = new AggregateMessage().MakeReadOnly();

+    private static readonly string[] _aggregateMessageFieldNames = new string[] { "fieldname" };

+    private static readonly uint[] _aggregateMessageFieldTags = new uint[] { 8 };

+    public static AggregateMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override AggregateMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override AggregateMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_AggregateMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<AggregateMessage, AggregateMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.internal__static_protobuf_unittest_AggregateMessage__FieldAccessorTable; }

+    }

+    

+    public const int FieldnameFieldNumber = 1;

+    private bool hasFieldname;

+    private int fieldname_;

+    public bool HasFieldname {

+      get { return hasFieldname; }

+    }

+    public int Fieldname {

+      get { return fieldname_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _aggregateMessageFieldNames;

+      if (hasFieldname) {

+        output.WriteInt32(1, field_names[0], Fieldname);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasFieldname) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, Fieldname);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static AggregateMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static AggregateMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static AggregateMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static AggregateMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static AggregateMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static AggregateMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static AggregateMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static AggregateMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static AggregateMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static AggregateMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private AggregateMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(AggregateMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<AggregateMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(AggregateMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private AggregateMessage result;

+      

+      private AggregateMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          AggregateMessage original = result;

+          result = new AggregateMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override AggregateMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.AggregateMessage.Descriptor; }

+      }

+      

+      public override AggregateMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.AggregateMessage.DefaultInstance; }

+      }

+      

+      public override AggregateMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is AggregateMessage) {

+          return MergeFrom((AggregateMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(AggregateMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.AggregateMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasFieldname) {

+          Fieldname = other.Fieldname;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_aggregateMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _aggregateMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasFieldname = input.ReadInt32(ref result.fieldname_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasFieldname {

+        get { return result.hasFieldname; }

+      }

+      public int Fieldname {

+        get { return result.Fieldname; }

+        set { SetFieldname(value); }

+      }

+      public Builder SetFieldname(int value) {

+        PrepareBuilder();

+        result.hasFieldname = true;

+        result.fieldname_ = value;

+        return this;

+      }

+      public Builder ClearFieldname() {

+        PrepareBuilder();

+        result.hasFieldname = false;

+        result.fieldname_ = 0;

+        return this;

+      }

+    }

+    static AggregateMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+  #region Services

+  /*

+  * Service generation is now disabled by default, use the following option to enable:

+  * option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;

+  */

+  /*

+  * Service generation is now disabled by default, use the following option to enable:

+  * option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;

+  */

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs
new file mode 100644
index 0000000..131b134
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestEmbedOptimizeForProtoFile.cs
@@ -0,0 +1,442 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestEmbedOptimizeForProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestEmbedOptimizedForSize__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmbedOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestEmbedOptimizedForSize.Builder> internal__static_protobuf_unittest_TestEmbedOptimizedForSize__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestEmbedOptimizeForProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CjFnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfZW1iZWRfb3B0aW1pemVfZm9y", 

+            "LnByb3RvEhFwcm90b2J1Zl91bml0dGVzdBokZ29vZ2xlL3Byb3RvYnVmL2Nz", 

+            "aGFycF9vcHRpb25zLnByb3RvGitnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rf", 

+            "b3B0aW1pemVfZm9yLnByb3RvIqEBChlUZXN0RW1iZWRPcHRpbWl6ZWRGb3JT", 

+            "aXplEkEKEG9wdGlvbmFsX21lc3NhZ2UYASABKAsyJy5wcm90b2J1Zl91bml0", 

+            "dGVzdC5UZXN0T3B0aW1pemVkRm9yU2l6ZRJBChByZXBlYXRlZF9tZXNzYWdl", 

+            "GAIgAygLMicucHJvdG9idWZfdW5pdHRlc3QuVGVzdE9wdGltaXplZEZvclNp", 

+            "emVCS0gBwj5GCiFHb29nbGUuUHJvdG9jb2xCdWZmZXJzLlRlc3RQcm90b3MS", 

+          "IVVuaXRUZXN0RW1iZWRPcHRpbWl6ZUZvclByb3RvRmlsZQ=="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_TestEmbedOptimizedForSize__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_TestEmbedOptimizedForSize__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmbedOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestEmbedOptimizedForSize.Builder>(internal__static_protobuf_unittest_TestEmbedOptimizedForSize__Descriptor,

+                new string[] { "OptionalMessage", "RepeatedMessage", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestOptimizeForProtoFile.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          global::Google.ProtocolBuffers.TestProtos.UnitTestOptimizeForProtoFile.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestEmbedOptimizedForSize : pb::GeneratedMessage<TestEmbedOptimizedForSize, TestEmbedOptimizedForSize.Builder> {

+    private TestEmbedOptimizedForSize() { }

+    private static readonly TestEmbedOptimizedForSize defaultInstance = new TestEmbedOptimizedForSize().MakeReadOnly();

+    private static readonly string[] _testEmbedOptimizedForSizeFieldNames = new string[] { "optional_message", "repeated_message" };

+    private static readonly uint[] _testEmbedOptimizedForSizeFieldTags = new uint[] { 10, 18 };

+    public static TestEmbedOptimizedForSize DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestEmbedOptimizedForSize DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestEmbedOptimizedForSize ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestEmbedOptimizeForProtoFile.internal__static_protobuf_unittest_TestEmbedOptimizedForSize__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestEmbedOptimizedForSize, TestEmbedOptimizedForSize.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestEmbedOptimizeForProtoFile.internal__static_protobuf_unittest_TestEmbedOptimizedForSize__FieldAccessorTable; }

+    }

+    

+    public const int OptionalMessageFieldNumber = 1;

+    private bool hasOptionalMessage;

+    private global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize optionalMessage_;

+    public bool HasOptionalMessage {

+      get { return hasOptionalMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize OptionalMessage {

+      get { return optionalMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.DefaultInstance; }

+    }

+    

+    public const int RepeatedMessageFieldNumber = 2;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize> repeatedMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize> RepeatedMessageList {

+      get { return repeatedMessage_; }

+    }

+    public int RepeatedMessageCount {

+      get { return repeatedMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize GetRepeatedMessage(int index) {

+      return repeatedMessage_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (HasOptionalMessage) {

+          if (!OptionalMessage.IsInitialized) return false;

+        }

+        foreach (global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize element in RepeatedMessageList) {

+          if (!element.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testEmbedOptimizedForSizeFieldNames;

+      if (hasOptionalMessage) {

+        output.WriteMessage(1, field_names[0], OptionalMessage);

+      }

+      if (repeatedMessage_.Count > 0) {

+        output.WriteMessageArray(2, field_names[1], repeatedMessage_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasOptionalMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, OptionalMessage);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize element in RepeatedMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2, element);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestEmbedOptimizedForSize ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmbedOptimizedForSize ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmbedOptimizedForSize ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmbedOptimizedForSize ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmbedOptimizedForSize ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmbedOptimizedForSize ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmbedOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestEmbedOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestEmbedOptimizedForSize ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmbedOptimizedForSize ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestEmbedOptimizedForSize MakeReadOnly() {

+      repeatedMessage_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestEmbedOptimizedForSize prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestEmbedOptimizedForSize, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestEmbedOptimizedForSize cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestEmbedOptimizedForSize result;

+      

+      private TestEmbedOptimizedForSize PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestEmbedOptimizedForSize original = result;

+          result = new TestEmbedOptimizedForSize();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestEmbedOptimizedForSize MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmbedOptimizedForSize.Descriptor; }

+      }

+      

+      public override TestEmbedOptimizedForSize DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmbedOptimizedForSize.DefaultInstance; }

+      }

+      

+      public override TestEmbedOptimizedForSize BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestEmbedOptimizedForSize) {

+          return MergeFrom((TestEmbedOptimizedForSize) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestEmbedOptimizedForSize other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestEmbedOptimizedForSize.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasOptionalMessage) {

+          MergeOptionalMessage(other.OptionalMessage);

+        }

+        if (other.repeatedMessage_.Count != 0) {

+          result.repeatedMessage_.Add(other.repeatedMessage_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testEmbedOptimizedForSizeFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testEmbedOptimizedForSizeFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.CreateBuilder();

+              if (result.hasOptionalMessage) {

+                subBuilder.MergeFrom(OptionalMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 18: {

+              input.ReadMessageArray(tag, field_name, result.repeatedMessage_, global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasOptionalMessage {

+       get { return result.hasOptionalMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize OptionalMessage {

+        get { return result.OptionalMessage; }

+        set { SetOptionalMessage(value); }

+      }

+      public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalMessage = true;

+        result.optionalMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalMessage = true;

+        result.optionalMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalMessage &&

+            result.optionalMessage_ != global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.DefaultInstance) {

+            result.optionalMessage_ = global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.CreateBuilder(result.optionalMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalMessage_ = value;

+        }

+        result.hasOptionalMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalMessage() {

+        PrepareBuilder();

+        result.hasOptionalMessage = false;

+        result.optionalMessage_ = null;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize> RepeatedMessageList {

+        get { return PrepareBuilder().repeatedMessage_; }

+      }

+      public int RepeatedMessageCount {

+        get { return result.RepeatedMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize GetRepeatedMessage(int index) {

+        return result.GetRepeatedMessage(index);

+      }

+      public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize> values) {

+        PrepareBuilder();

+        result.repeatedMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedMessage() {

+        PrepareBuilder();

+        result.repeatedMessage_.Clear();

+        return this;

+      }

+    }

+    static TestEmbedOptimizedForSize() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestEmbedOptimizeForProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestEmptyProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestEmptyProtoFile.cs
new file mode 100644
index 0000000..a0f1034
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestEmptyProtoFile.cs
@@ -0,0 +1,50 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestEmptyProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestEmptyProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CiRnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfZW1wdHkucHJvdG8aJGdvb2ds", 

+            "ZS9wcm90b2J1Zi9jc2hhcnBfb3B0aW9ucy5wcm90b0I+wj47CiFHb29nbGUu", 

+            "UHJvdG9jb2xCdWZmZXJzLlRlc3RQcm90b3MSFlVuaXRUZXN0RW1wdHlQcm90", 

+          "b0ZpbGU="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestExtrasIssuesProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestExtrasIssuesProtoFile.cs
new file mode 100644
index 0000000..438f4aa
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestExtrasIssuesProtoFile.cs
@@ -0,0 +1,3443 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace UnitTest.Issues.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestExtrasIssuesProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_unittest_issues_A__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.A, global::UnitTest.Issues.TestProtos.A.Builder> internal__static_unittest_issues_A__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_issues_B__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.B, global::UnitTest.Issues.TestProtos.B.Builder> internal__static_unittest_issues_B__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_issues_AB__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.AB, global::UnitTest.Issues.TestProtos.AB.Builder> internal__static_unittest_issues_AB__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_issues_NumberField__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.NumberField, global::UnitTest.Issues.TestProtos.NumberField.Builder> internal__static_unittest_issues_NumberField__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_issues_MyMessageAReferenceB__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.MyMessageAReferenceB, global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.Builder> internal__static_unittest_issues_MyMessageAReferenceB__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_issues_MyMessageBReferenceA__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.MyMessageBReferenceA, global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.Builder> internal__static_unittest_issues_MyMessageBReferenceA__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_issues_NegativeEnumMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.NegativeEnumMessage, global::UnitTest.Issues.TestProtos.NegativeEnumMessage.Builder> internal__static_unittest_issues_NegativeEnumMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_issues_DeprecatedChild__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.DeprecatedChild, global::UnitTest.Issues.TestProtos.DeprecatedChild.Builder> internal__static_unittest_issues_DeprecatedChild__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_issues_DeprecatedFieldsMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage, global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage.Builder> internal__static_unittest_issues_DeprecatedFieldsMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_issues_ItemField__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.ItemField, global::UnitTest.Issues.TestProtos.ItemField.Builder> internal__static_unittest_issues_ItemField__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestExtrasIssuesProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "ChxleHRlc3QvdW5pdHRlc3RfaXNzdWVzLnByb3RvEg91bml0dGVzdF9pc3N1", 

+            "ZXMaJGdvb2dsZS9wcm90b2J1Zi9jc2hhcnBfb3B0aW9ucy5wcm90byIPCgFB", 

+            "EgoKAl9BGAEgASgFIg8KAUISCgoCQl8YASABKAUiEQoCQUISCwoDYV9iGAEg", 

+            "ASgFIhoKC051bWJlckZpZWxkEgsKA18wMRgBIAEoBSJMChRNeU1lc3NhZ2VB", 

+            "UmVmZXJlbmNlQhI0CgV2YWx1ZRgBIAIoCzIlLnVuaXR0ZXN0X2lzc3Vlcy5N", 

+            "eU1lc3NhZ2VCUmVmZXJlbmNlQSJMChRNeU1lc3NhZ2VCUmVmZXJlbmNlQRI0", 

+            "CgV2YWx1ZRgBIAIoCzIlLnVuaXR0ZXN0X2lzc3Vlcy5NeU1lc3NhZ2VBUmVm", 

+            "ZXJlbmNlQiKsAQoTTmVnYXRpdmVFbnVtTWVzc2FnZRIsCgV2YWx1ZRgBIAEo", 

+            "DjIdLnVuaXR0ZXN0X2lzc3Vlcy5OZWdhdGl2ZUVudW0SLQoGdmFsdWVzGAIg", 

+            "AygOMh0udW5pdHRlc3RfaXNzdWVzLk5lZ2F0aXZlRW51bRI4Cg1wYWNrZWRf", 

+            "dmFsdWVzGAMgAygOMh0udW5pdHRlc3RfaXNzdWVzLk5lZ2F0aXZlRW51bUIC", 

+            "EAEiEQoPRGVwcmVjYXRlZENoaWxkIrkCChdEZXByZWNhdGVkRmllbGRzTWVz", 

+            "c2FnZRIaCg5QcmltaXRpdmVWYWx1ZRgBIAEoBUICGAESGgoOUHJpbWl0aXZl", 

+            "QXJyYXkYAiADKAVCAhgBEjoKDE1lc3NhZ2VWYWx1ZRgDIAEoCzIgLnVuaXR0", 

+            "ZXN0X2lzc3Vlcy5EZXByZWNhdGVkQ2hpbGRCAhgBEjoKDE1lc3NhZ2VBcnJh", 

+            "eRgEIAMoCzIgLnVuaXR0ZXN0X2lzc3Vlcy5EZXByZWNhdGVkQ2hpbGRCAhgB", 

+            "EjYKCUVudW1WYWx1ZRgFIAEoDjIfLnVuaXR0ZXN0X2lzc3Vlcy5EZXByZWNh", 

+            "dGVkRW51bUICGAESNgoJRW51bUFycmF5GAYgAygOMh8udW5pdHRlc3RfaXNz", 

+            "dWVzLkRlcHJlY2F0ZWRFbnVtQgIYASIZCglJdGVtRmllbGQSDAoEaXRlbRgB", 

+            "IAEoBSpHCgxOZWdhdGl2ZUVudW0SFgoJRml2ZUJlbG93EPv//////////wES", 

+            "FQoITWludXNPbmUQ////////////ARIICgRaZXJvEAAqGQoORGVwcmVjYXRl", 

+            "ZEVudW0SBwoDb25lEAFCQEgBwj47ChpVbml0VGVzdC5Jc3N1ZXMuVGVzdFBy", 

+          "b3RvcxIdVW5pdFRlc3RFeHRyYXNJc3N1ZXNQcm90b0ZpbGU="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_unittest_issues_A__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_unittest_issues_A__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.A, global::UnitTest.Issues.TestProtos.A.Builder>(internal__static_unittest_issues_A__Descriptor,

+                new string[] { "A_", });

+        internal__static_unittest_issues_B__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_unittest_issues_B__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.B, global::UnitTest.Issues.TestProtos.B.Builder>(internal__static_unittest_issues_B__Descriptor,

+                new string[] { "B_", });

+        internal__static_unittest_issues_AB__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_unittest_issues_AB__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.AB, global::UnitTest.Issues.TestProtos.AB.Builder>(internal__static_unittest_issues_AB__Descriptor,

+                new string[] { "AB_", });

+        internal__static_unittest_issues_NumberField__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_unittest_issues_NumberField__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.NumberField, global::UnitTest.Issues.TestProtos.NumberField.Builder>(internal__static_unittest_issues_NumberField__Descriptor,

+                new string[] { "_01", });

+        internal__static_unittest_issues_MyMessageAReferenceB__Descriptor = Descriptor.MessageTypes[4];

+        internal__static_unittest_issues_MyMessageAReferenceB__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.MyMessageAReferenceB, global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.Builder>(internal__static_unittest_issues_MyMessageAReferenceB__Descriptor,

+                new string[] { "Value", });

+        internal__static_unittest_issues_MyMessageBReferenceA__Descriptor = Descriptor.MessageTypes[5];

+        internal__static_unittest_issues_MyMessageBReferenceA__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.MyMessageBReferenceA, global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.Builder>(internal__static_unittest_issues_MyMessageBReferenceA__Descriptor,

+                new string[] { "Value", });

+        internal__static_unittest_issues_NegativeEnumMessage__Descriptor = Descriptor.MessageTypes[6];

+        internal__static_unittest_issues_NegativeEnumMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.NegativeEnumMessage, global::UnitTest.Issues.TestProtos.NegativeEnumMessage.Builder>(internal__static_unittest_issues_NegativeEnumMessage__Descriptor,

+                new string[] { "Value", "Values", "PackedValues", });

+        internal__static_unittest_issues_DeprecatedChild__Descriptor = Descriptor.MessageTypes[7];

+        internal__static_unittest_issues_DeprecatedChild__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.DeprecatedChild, global::UnitTest.Issues.TestProtos.DeprecatedChild.Builder>(internal__static_unittest_issues_DeprecatedChild__Descriptor,

+                new string[] { });

+        internal__static_unittest_issues_DeprecatedFieldsMessage__Descriptor = Descriptor.MessageTypes[8];

+        internal__static_unittest_issues_DeprecatedFieldsMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage, global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage.Builder>(internal__static_unittest_issues_DeprecatedFieldsMessage__Descriptor,

+                new string[] { "PrimitiveValue", "PrimitiveArray", "MessageValue", "MessageArray", "EnumValue", "EnumArray", });

+        internal__static_unittest_issues_ItemField__Descriptor = Descriptor.MessageTypes[9];

+        internal__static_unittest_issues_ItemField__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::UnitTest.Issues.TestProtos.ItemField, global::UnitTest.Issues.TestProtos.ItemField.Builder>(internal__static_unittest_issues_ItemField__Descriptor,

+                new string[] { "Item", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum NegativeEnum {

+    FiveBelow = -5,

+    MinusOne = -1,

+    Zero = 0,

+  }

+  

+  public enum DeprecatedEnum {

+    one = 1,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class A : pb::GeneratedMessage<A, A.Builder> {

+    private A() { }

+    private static readonly A defaultInstance = new A().MakeReadOnly();

+    private static readonly string[] _aFieldNames = new string[] { "_A" };

+    private static readonly uint[] _aFieldTags = new uint[] { 8 };

+    public static A DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override A DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override A ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_A__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<A, A.Builder> InternalFieldAccessors {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_A__FieldAccessorTable; }

+    }

+    

+    public const int A_FieldNumber = 1;

+    private bool hasA_;

+    private int a_;

+    public bool HasA_ {

+      get { return hasA_; }

+    }

+    public int A_ {

+      get { return a_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _aFieldNames;

+      if (hasA_) {

+        output.WriteInt32(1, field_names[0], A_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA_) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, A_);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static A ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static A ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static A ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static A ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static A ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static A ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static A ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static A ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static A ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static A ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private A MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(A prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<A, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(A cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private A result;

+      

+      private A PrepareBuilder() {

+        if (resultIsReadOnly) {

+          A original = result;

+          result = new A();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override A MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::UnitTest.Issues.TestProtos.A.Descriptor; }

+      }

+      

+      public override A DefaultInstanceForType {

+        get { return global::UnitTest.Issues.TestProtos.A.DefaultInstance; }

+      }

+      

+      public override A BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is A) {

+          return MergeFrom((A) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(A other) {

+        if (other == global::UnitTest.Issues.TestProtos.A.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA_) {

+          A_ = other.A_;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_aFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _aFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasA_ = input.ReadInt32(ref result.a_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA_ {

+        get { return result.hasA_; }

+      }

+      public int A_ {

+        get { return result.A_; }

+        set { SetA_(value); }

+      }

+      public Builder SetA_(int value) {

+        PrepareBuilder();

+        result.hasA_ = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA_() {

+        PrepareBuilder();

+        result.hasA_ = false;

+        result.a_ = 0;

+        return this;

+      }

+    }

+    static A() {

+      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class B : pb::GeneratedMessage<B, B.Builder> {

+    private B() { }

+    private static readonly B defaultInstance = new B().MakeReadOnly();

+    private static readonly string[] _bFieldNames = new string[] { "B_" };

+    private static readonly uint[] _bFieldTags = new uint[] { 8 };

+    public static B DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override B DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override B ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_B__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<B, B.Builder> InternalFieldAccessors {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_B__FieldAccessorTable; }

+    }

+    

+    public const int B_FieldNumber = 1;

+    private bool hasB_;

+    private int b_;

+    public bool HasB_ {

+      get { return hasB_; }

+    }

+    public int B_ {

+      get { return b_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _bFieldNames;

+      if (hasB_) {

+        output.WriteInt32(1, field_names[0], B_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasB_) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, B_);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static B ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static B ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static B ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static B ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static B ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static B ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static B ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static B ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static B ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static B ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private B MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(B prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<B, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(B cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private B result;

+      

+      private B PrepareBuilder() {

+        if (resultIsReadOnly) {

+          B original = result;

+          result = new B();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override B MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::UnitTest.Issues.TestProtos.B.Descriptor; }

+      }

+      

+      public override B DefaultInstanceForType {

+        get { return global::UnitTest.Issues.TestProtos.B.DefaultInstance; }

+      }

+      

+      public override B BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is B) {

+          return MergeFrom((B) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(B other) {

+        if (other == global::UnitTest.Issues.TestProtos.B.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasB_) {

+          B_ = other.B_;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_bFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _bFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasB_ = input.ReadInt32(ref result.b_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasB_ {

+        get { return result.hasB_; }

+      }

+      public int B_ {

+        get { return result.B_; }

+        set { SetB_(value); }

+      }

+      public Builder SetB_(int value) {

+        PrepareBuilder();

+        result.hasB_ = true;

+        result.b_ = value;

+        return this;

+      }

+      public Builder ClearB_() {

+        PrepareBuilder();

+        result.hasB_ = false;

+        result.b_ = 0;

+        return this;

+      }

+    }

+    static B() {

+      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class AB : pb::GeneratedMessage<AB, AB.Builder> {

+    private AB() { }

+    private static readonly AB defaultInstance = new AB().MakeReadOnly();

+    private static readonly string[] _aBFieldNames = new string[] { "a_b" };

+    private static readonly uint[] _aBFieldTags = new uint[] { 8 };

+    public static AB DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override AB DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override AB ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_AB__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<AB, AB.Builder> InternalFieldAccessors {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_AB__FieldAccessorTable; }

+    }

+    

+    public const int AB_FieldNumber = 1;

+    private bool hasAB_;

+    private int aB_;

+    public bool HasAB_ {

+      get { return hasAB_; }

+    }

+    public int AB_ {

+      get { return aB_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _aBFieldNames;

+      if (hasAB_) {

+        output.WriteInt32(1, field_names[0], AB_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasAB_) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, AB_);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static AB ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static AB ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static AB ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static AB ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static AB ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static AB ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static AB ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static AB ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static AB ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static AB ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private AB MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(AB prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<AB, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(AB cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private AB result;

+      

+      private AB PrepareBuilder() {

+        if (resultIsReadOnly) {

+          AB original = result;

+          result = new AB();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override AB MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::UnitTest.Issues.TestProtos.AB.Descriptor; }

+      }

+      

+      public override AB DefaultInstanceForType {

+        get { return global::UnitTest.Issues.TestProtos.AB.DefaultInstance; }

+      }

+      

+      public override AB BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is AB) {

+          return MergeFrom((AB) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(AB other) {

+        if (other == global::UnitTest.Issues.TestProtos.AB.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasAB_) {

+          AB_ = other.AB_;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_aBFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _aBFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasAB_ = input.ReadInt32(ref result.aB_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasAB_ {

+        get { return result.hasAB_; }

+      }

+      public int AB_ {

+        get { return result.AB_; }

+        set { SetAB_(value); }

+      }

+      public Builder SetAB_(int value) {

+        PrepareBuilder();

+        result.hasAB_ = true;

+        result.aB_ = value;

+        return this;

+      }

+      public Builder ClearAB_() {

+        PrepareBuilder();

+        result.hasAB_ = false;

+        result.aB_ = 0;

+        return this;

+      }

+    }

+    static AB() {

+      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class NumberField : pb::GeneratedMessage<NumberField, NumberField.Builder> {

+    private NumberField() { }

+    private static readonly NumberField defaultInstance = new NumberField().MakeReadOnly();

+    private static readonly string[] _numberFieldFieldNames = new string[] { "_01" };

+    private static readonly uint[] _numberFieldFieldTags = new uint[] { 8 };

+    public static NumberField DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override NumberField DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override NumberField ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_NumberField__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<NumberField, NumberField.Builder> InternalFieldAccessors {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_NumberField__FieldAccessorTable; }

+    }

+    

+    [global::System.CLSCompliant(false)]

+    public const int _01FieldNumber = 1;

+    private bool has_01;

+    private int _01_;

+    public bool Has_01 {

+      get { return has_01; }

+    }

+    [global::System.CLSCompliant(false)]

+    public int _01 {

+      get { return _01_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _numberFieldFieldNames;

+      if (has_01) {

+        output.WriteInt32(1, field_names[0], _01);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (has_01) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, _01);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static NumberField ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static NumberField ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static NumberField ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static NumberField ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static NumberField ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static NumberField ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static NumberField ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static NumberField ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static NumberField ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static NumberField ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private NumberField MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(NumberField prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<NumberField, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(NumberField cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private NumberField result;

+      

+      private NumberField PrepareBuilder() {

+        if (resultIsReadOnly) {

+          NumberField original = result;

+          result = new NumberField();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override NumberField MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::UnitTest.Issues.TestProtos.NumberField.Descriptor; }

+      }

+      

+      public override NumberField DefaultInstanceForType {

+        get { return global::UnitTest.Issues.TestProtos.NumberField.DefaultInstance; }

+      }

+      

+      public override NumberField BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is NumberField) {

+          return MergeFrom((NumberField) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(NumberField other) {

+        if (other == global::UnitTest.Issues.TestProtos.NumberField.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.Has_01) {

+          _01 = other._01;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_numberFieldFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _numberFieldFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.has_01 = input.ReadInt32(ref result._01_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool Has_01 {

+        get { return result.has_01; }

+      }

+      [global::System.CLSCompliant(false)]

+      public int _01 {

+        get { return result._01; }

+        set { Set_01(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder Set_01(int value) {

+        PrepareBuilder();

+        result.has_01 = true;

+        result._01_ = value;

+        return this;

+      }

+      public Builder Clear_01() {

+        PrepareBuilder();

+        result.has_01 = false;

+        result._01_ = 0;

+        return this;

+      }

+    }

+    static NumberField() {

+      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class MyMessageAReferenceB : pb::GeneratedMessage<MyMessageAReferenceB, MyMessageAReferenceB.Builder> {

+    private MyMessageAReferenceB() { }

+    private static readonly MyMessageAReferenceB defaultInstance = new MyMessageAReferenceB().MakeReadOnly();

+    private static readonly string[] _myMessageAReferenceBFieldNames = new string[] { "value" };

+    private static readonly uint[] _myMessageAReferenceBFieldTags = new uint[] { 10 };

+    public static MyMessageAReferenceB DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override MyMessageAReferenceB DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override MyMessageAReferenceB ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_MyMessageAReferenceB__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<MyMessageAReferenceB, MyMessageAReferenceB.Builder> InternalFieldAccessors {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_MyMessageAReferenceB__FieldAccessorTable; }

+    }

+    

+    public const int ValueFieldNumber = 1;

+    private bool hasValue;

+    private global::UnitTest.Issues.TestProtos.MyMessageBReferenceA value_;

+    public bool HasValue {

+      get { return hasValue; }

+    }

+    public global::UnitTest.Issues.TestProtos.MyMessageBReferenceA Value {

+      get { return value_ ?? global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasValue) return false;

+        if (!Value.IsInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _myMessageAReferenceBFieldNames;

+      if (hasValue) {

+        output.WriteMessage(1, field_names[0], Value);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasValue) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, Value);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static MyMessageAReferenceB ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static MyMessageAReferenceB ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static MyMessageAReferenceB ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static MyMessageAReferenceB ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static MyMessageAReferenceB ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static MyMessageAReferenceB ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static MyMessageAReferenceB ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static MyMessageAReferenceB ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static MyMessageAReferenceB ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static MyMessageAReferenceB ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private MyMessageAReferenceB MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(MyMessageAReferenceB prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<MyMessageAReferenceB, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(MyMessageAReferenceB cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private MyMessageAReferenceB result;

+      

+      private MyMessageAReferenceB PrepareBuilder() {

+        if (resultIsReadOnly) {

+          MyMessageAReferenceB original = result;

+          result = new MyMessageAReferenceB();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override MyMessageAReferenceB MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.Descriptor; }

+      }

+      

+      public override MyMessageAReferenceB DefaultInstanceForType {

+        get { return global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.DefaultInstance; }

+      }

+      

+      public override MyMessageAReferenceB BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is MyMessageAReferenceB) {

+          return MergeFrom((MyMessageAReferenceB) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(MyMessageAReferenceB other) {

+        if (other == global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasValue) {

+          MergeValue(other.Value);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_myMessageAReferenceBFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _myMessageAReferenceBFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.Builder subBuilder = global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.CreateBuilder();

+              if (result.hasValue) {

+                subBuilder.MergeFrom(Value);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Value = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasValue {

+       get { return result.hasValue; }

+      }

+      public global::UnitTest.Issues.TestProtos.MyMessageBReferenceA Value {

+        get { return result.Value; }

+        set { SetValue(value); }

+      }

+      public Builder SetValue(global::UnitTest.Issues.TestProtos.MyMessageBReferenceA value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasValue = true;

+        result.value_ = value;

+        return this;

+      }

+      public Builder SetValue(global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasValue = true;

+        result.value_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeValue(global::UnitTest.Issues.TestProtos.MyMessageBReferenceA value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasValue &&

+            result.value_ != global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.DefaultInstance) {

+            result.value_ = global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.CreateBuilder(result.value_).MergeFrom(value).BuildPartial();

+        } else {

+          result.value_ = value;

+        }

+        result.hasValue = true;

+        return this;

+      }

+      public Builder ClearValue() {

+        PrepareBuilder();

+        result.hasValue = false;

+        result.value_ = null;

+        return this;

+      }

+    }

+    static MyMessageAReferenceB() {

+      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class MyMessageBReferenceA : pb::GeneratedMessage<MyMessageBReferenceA, MyMessageBReferenceA.Builder> {

+    private MyMessageBReferenceA() { }

+    private static readonly MyMessageBReferenceA defaultInstance = new MyMessageBReferenceA().MakeReadOnly();

+    private static readonly string[] _myMessageBReferenceAFieldNames = new string[] { "value" };

+    private static readonly uint[] _myMessageBReferenceAFieldTags = new uint[] { 10 };

+    public static MyMessageBReferenceA DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override MyMessageBReferenceA DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override MyMessageBReferenceA ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_MyMessageBReferenceA__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<MyMessageBReferenceA, MyMessageBReferenceA.Builder> InternalFieldAccessors {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_MyMessageBReferenceA__FieldAccessorTable; }

+    }

+    

+    public const int ValueFieldNumber = 1;

+    private bool hasValue;

+    private global::UnitTest.Issues.TestProtos.MyMessageAReferenceB value_;

+    public bool HasValue {

+      get { return hasValue; }

+    }

+    public global::UnitTest.Issues.TestProtos.MyMessageAReferenceB Value {

+      get { return value_ ?? global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasValue) return false;

+        if (!Value.IsInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _myMessageBReferenceAFieldNames;

+      if (hasValue) {

+        output.WriteMessage(1, field_names[0], Value);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasValue) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, Value);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static MyMessageBReferenceA ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static MyMessageBReferenceA ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static MyMessageBReferenceA ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static MyMessageBReferenceA ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static MyMessageBReferenceA ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static MyMessageBReferenceA ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static MyMessageBReferenceA ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static MyMessageBReferenceA ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static MyMessageBReferenceA ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static MyMessageBReferenceA ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private MyMessageBReferenceA MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(MyMessageBReferenceA prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<MyMessageBReferenceA, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(MyMessageBReferenceA cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private MyMessageBReferenceA result;

+      

+      private MyMessageBReferenceA PrepareBuilder() {

+        if (resultIsReadOnly) {

+          MyMessageBReferenceA original = result;

+          result = new MyMessageBReferenceA();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override MyMessageBReferenceA MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.Descriptor; }

+      }

+      

+      public override MyMessageBReferenceA DefaultInstanceForType {

+        get { return global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.DefaultInstance; }

+      }

+      

+      public override MyMessageBReferenceA BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is MyMessageBReferenceA) {

+          return MergeFrom((MyMessageBReferenceA) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(MyMessageBReferenceA other) {

+        if (other == global::UnitTest.Issues.TestProtos.MyMessageBReferenceA.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasValue) {

+          MergeValue(other.Value);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_myMessageBReferenceAFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _myMessageBReferenceAFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.Builder subBuilder = global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.CreateBuilder();

+              if (result.hasValue) {

+                subBuilder.MergeFrom(Value);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Value = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasValue {

+       get { return result.hasValue; }

+      }

+      public global::UnitTest.Issues.TestProtos.MyMessageAReferenceB Value {

+        get { return result.Value; }

+        set { SetValue(value); }

+      }

+      public Builder SetValue(global::UnitTest.Issues.TestProtos.MyMessageAReferenceB value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasValue = true;

+        result.value_ = value;

+        return this;

+      }

+      public Builder SetValue(global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasValue = true;

+        result.value_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeValue(global::UnitTest.Issues.TestProtos.MyMessageAReferenceB value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasValue &&

+            result.value_ != global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.DefaultInstance) {

+            result.value_ = global::UnitTest.Issues.TestProtos.MyMessageAReferenceB.CreateBuilder(result.value_).MergeFrom(value).BuildPartial();

+        } else {

+          result.value_ = value;

+        }

+        result.hasValue = true;

+        return this;

+      }

+      public Builder ClearValue() {

+        PrepareBuilder();

+        result.hasValue = false;

+        result.value_ = null;

+        return this;

+      }

+    }

+    static MyMessageBReferenceA() {

+      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class NegativeEnumMessage : pb::GeneratedMessage<NegativeEnumMessage, NegativeEnumMessage.Builder> {

+    private NegativeEnumMessage() { }

+    private static readonly NegativeEnumMessage defaultInstance = new NegativeEnumMessage().MakeReadOnly();

+    private static readonly string[] _negativeEnumMessageFieldNames = new string[] { "packed_values", "value", "values" };

+    private static readonly uint[] _negativeEnumMessageFieldTags = new uint[] { 26, 8, 16 };

+    public static NegativeEnumMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override NegativeEnumMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override NegativeEnumMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_NegativeEnumMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<NegativeEnumMessage, NegativeEnumMessage.Builder> InternalFieldAccessors {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_NegativeEnumMessage__FieldAccessorTable; }

+    }

+    

+    public const int ValueFieldNumber = 1;

+    private bool hasValue;

+    private global::UnitTest.Issues.TestProtos.NegativeEnum value_ = global::UnitTest.Issues.TestProtos.NegativeEnum.FiveBelow;

+    public bool HasValue {

+      get { return hasValue; }

+    }

+    public global::UnitTest.Issues.TestProtos.NegativeEnum Value {

+      get { return value_; }

+    }

+    

+    public const int ValuesFieldNumber = 2;

+    private pbc::PopsicleList<global::UnitTest.Issues.TestProtos.NegativeEnum> values_ = new pbc::PopsicleList<global::UnitTest.Issues.TestProtos.NegativeEnum>();

+    public scg::IList<global::UnitTest.Issues.TestProtos.NegativeEnum> ValuesList {

+      get { return pbc::Lists.AsReadOnly(values_); }

+    }

+    public int ValuesCount {

+      get { return values_.Count; }

+    }

+    public global::UnitTest.Issues.TestProtos.NegativeEnum GetValues(int index) {

+      return values_[index];

+    }

+    

+    public const int PackedValuesFieldNumber = 3;

+    private int packedValuesMemoizedSerializedSize;

+    private pbc::PopsicleList<global::UnitTest.Issues.TestProtos.NegativeEnum> packedValues_ = new pbc::PopsicleList<global::UnitTest.Issues.TestProtos.NegativeEnum>();

+    public scg::IList<global::UnitTest.Issues.TestProtos.NegativeEnum> PackedValuesList {

+      get { return pbc::Lists.AsReadOnly(packedValues_); }

+    }

+    public int PackedValuesCount {

+      get { return packedValues_.Count; }

+    }

+    public global::UnitTest.Issues.TestProtos.NegativeEnum GetPackedValues(int index) {

+      return packedValues_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _negativeEnumMessageFieldNames;

+      if (hasValue) {

+        output.WriteEnum(1, field_names[1], (int) Value, Value);

+      }

+      if (values_.Count > 0) {

+        output.WriteEnumArray(2, field_names[2], values_);

+      }

+      if (packedValues_.Count > 0) {

+        output.WritePackedEnumArray(3, field_names[0], packedValuesMemoizedSerializedSize, packedValues_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasValue) {

+        size += pb::CodedOutputStream.ComputeEnumSize(1, (int) Value);

+      }

+      {

+        int dataSize = 0;

+        if (values_.Count > 0) {

+          foreach (global::UnitTest.Issues.TestProtos.NegativeEnum element in values_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 1 * values_.Count;

+        }

+      }

+      {

+        int dataSize = 0;

+        if (packedValues_.Count > 0) {

+          foreach (global::UnitTest.Issues.TestProtos.NegativeEnum element in packedValues_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 1;

+          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);

+        }

+        packedValuesMemoizedSerializedSize = dataSize;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static NegativeEnumMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static NegativeEnumMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static NegativeEnumMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static NegativeEnumMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static NegativeEnumMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static NegativeEnumMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static NegativeEnumMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static NegativeEnumMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static NegativeEnumMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static NegativeEnumMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private NegativeEnumMessage MakeReadOnly() {

+      values_.MakeReadOnly();

+      packedValues_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(NegativeEnumMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<NegativeEnumMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(NegativeEnumMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private NegativeEnumMessage result;

+      

+      private NegativeEnumMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          NegativeEnumMessage original = result;

+          result = new NegativeEnumMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override NegativeEnumMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::UnitTest.Issues.TestProtos.NegativeEnumMessage.Descriptor; }

+      }

+      

+      public override NegativeEnumMessage DefaultInstanceForType {

+        get { return global::UnitTest.Issues.TestProtos.NegativeEnumMessage.DefaultInstance; }

+      }

+      

+      public override NegativeEnumMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is NegativeEnumMessage) {

+          return MergeFrom((NegativeEnumMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(NegativeEnumMessage other) {

+        if (other == global::UnitTest.Issues.TestProtos.NegativeEnumMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasValue) {

+          Value = other.Value;

+        }

+        if (other.values_.Count != 0) {

+          result.values_.Add(other.values_);

+        }

+        if (other.packedValues_.Count != 0) {

+          result.packedValues_.Add(other.packedValues_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_negativeEnumMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _negativeEnumMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              object unknown;

+              if(input.ReadEnum(ref result.value_, out unknown)) {

+                result.hasValue = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(1, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 18:

+            case 16: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::UnitTest.Issues.TestProtos.NegativeEnum>(tag, field_name, result.values_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(2, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 26:

+            case 24: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::UnitTest.Issues.TestProtos.NegativeEnum>(tag, field_name, result.packedValues_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(3, (ulong)(int)rawValue);

+              }

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasValue {

+       get { return result.hasValue; }

+      }

+      public global::UnitTest.Issues.TestProtos.NegativeEnum Value {

+        get { return result.Value; }

+        set { SetValue(value); }

+      }

+      public Builder SetValue(global::UnitTest.Issues.TestProtos.NegativeEnum value) {

+        PrepareBuilder();

+        result.hasValue = true;

+        result.value_ = value;

+        return this;

+      }

+      public Builder ClearValue() {

+        PrepareBuilder();

+        result.hasValue = false;

+        result.value_ = global::UnitTest.Issues.TestProtos.NegativeEnum.FiveBelow;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::UnitTest.Issues.TestProtos.NegativeEnum> ValuesList {

+        get { return PrepareBuilder().values_; }

+      }

+      public int ValuesCount {

+        get { return result.ValuesCount; }

+      }

+      public global::UnitTest.Issues.TestProtos.NegativeEnum GetValues(int index) {

+        return result.GetValues(index);

+      }

+      public Builder SetValues(int index, global::UnitTest.Issues.TestProtos.NegativeEnum value) {

+        PrepareBuilder();

+        result.values_[index] = value;

+        return this;

+      }

+      public Builder AddValues(global::UnitTest.Issues.TestProtos.NegativeEnum value) {

+        PrepareBuilder();

+        result.values_.Add(value);

+        return this;

+      }

+      public Builder AddRangeValues(scg::IEnumerable<global::UnitTest.Issues.TestProtos.NegativeEnum> values) {

+        PrepareBuilder();

+        result.values_.Add(values);

+        return this;

+      }

+      public Builder ClearValues() {

+        PrepareBuilder();

+        result.values_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::UnitTest.Issues.TestProtos.NegativeEnum> PackedValuesList {

+        get { return PrepareBuilder().packedValues_; }

+      }

+      public int PackedValuesCount {

+        get { return result.PackedValuesCount; }

+      }

+      public global::UnitTest.Issues.TestProtos.NegativeEnum GetPackedValues(int index) {

+        return result.GetPackedValues(index);

+      }

+      public Builder SetPackedValues(int index, global::UnitTest.Issues.TestProtos.NegativeEnum value) {

+        PrepareBuilder();

+        result.packedValues_[index] = value;

+        return this;

+      }

+      public Builder AddPackedValues(global::UnitTest.Issues.TestProtos.NegativeEnum value) {

+        PrepareBuilder();

+        result.packedValues_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedValues(scg::IEnumerable<global::UnitTest.Issues.TestProtos.NegativeEnum> values) {

+        PrepareBuilder();

+        result.packedValues_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedValues() {

+        PrepareBuilder();

+        result.packedValues_.Clear();

+        return this;

+      }

+    }

+    static NegativeEnumMessage() {

+      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class DeprecatedChild : pb::GeneratedMessage<DeprecatedChild, DeprecatedChild.Builder> {

+    private DeprecatedChild() { }

+    private static readonly DeprecatedChild defaultInstance = new DeprecatedChild().MakeReadOnly();

+    private static readonly string[] _deprecatedChildFieldNames = new string[] {  };

+    private static readonly uint[] _deprecatedChildFieldTags = new uint[] {  };

+    public static DeprecatedChild DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override DeprecatedChild DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override DeprecatedChild ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_DeprecatedChild__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<DeprecatedChild, DeprecatedChild.Builder> InternalFieldAccessors {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_DeprecatedChild__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _deprecatedChildFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static DeprecatedChild ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static DeprecatedChild ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static DeprecatedChild ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static DeprecatedChild ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static DeprecatedChild ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static DeprecatedChild ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static DeprecatedChild ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static DeprecatedChild ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static DeprecatedChild ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static DeprecatedChild ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private DeprecatedChild MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(DeprecatedChild prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<DeprecatedChild, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(DeprecatedChild cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private DeprecatedChild result;

+      

+      private DeprecatedChild PrepareBuilder() {

+        if (resultIsReadOnly) {

+          DeprecatedChild original = result;

+          result = new DeprecatedChild();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override DeprecatedChild MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::UnitTest.Issues.TestProtos.DeprecatedChild.Descriptor; }

+      }

+      

+      public override DeprecatedChild DefaultInstanceForType {

+        get { return global::UnitTest.Issues.TestProtos.DeprecatedChild.DefaultInstance; }

+      }

+      

+      public override DeprecatedChild BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is DeprecatedChild) {

+          return MergeFrom((DeprecatedChild) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(DeprecatedChild other) {

+        if (other == global::UnitTest.Issues.TestProtos.DeprecatedChild.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_deprecatedChildFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _deprecatedChildFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static DeprecatedChild() {

+      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class DeprecatedFieldsMessage : pb::GeneratedMessage<DeprecatedFieldsMessage, DeprecatedFieldsMessage.Builder> {

+    private DeprecatedFieldsMessage() { }

+    private static readonly DeprecatedFieldsMessage defaultInstance = new DeprecatedFieldsMessage().MakeReadOnly();

+    private static readonly string[] _deprecatedFieldsMessageFieldNames = new string[] { "EnumArray", "EnumValue", "MessageArray", "MessageValue", "PrimitiveArray", "PrimitiveValue" };

+    private static readonly uint[] _deprecatedFieldsMessageFieldTags = new uint[] { 48, 40, 34, 26, 16, 8 };

+    public static DeprecatedFieldsMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override DeprecatedFieldsMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override DeprecatedFieldsMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_DeprecatedFieldsMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<DeprecatedFieldsMessage, DeprecatedFieldsMessage.Builder> InternalFieldAccessors {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_DeprecatedFieldsMessage__FieldAccessorTable; }

+    }

+    

+    public const int PrimitiveValueFieldNumber = 1;

+    private bool hasPrimitiveValue;

+    private int primitiveValue_;

+    [global::System.ObsoleteAttribute()]

+    public bool HasPrimitiveValue {

+      get { return hasPrimitiveValue; }

+    }

+    [global::System.ObsoleteAttribute()]

+    public int PrimitiveValue {

+      get { return primitiveValue_; }

+    }

+    

+    public const int PrimitiveArrayFieldNumber = 2;

+    private pbc::PopsicleList<int> primitiveArray_ = new pbc::PopsicleList<int>();

+    [global::System.ObsoleteAttribute()]

+    public scg::IList<int> PrimitiveArrayList {

+      get { return pbc::Lists.AsReadOnly(primitiveArray_); }

+    }

+    [global::System.ObsoleteAttribute()]

+    public int PrimitiveArrayCount {

+      get { return primitiveArray_.Count; }

+    }

+    [global::System.ObsoleteAttribute()]

+    public int GetPrimitiveArray(int index) {

+      return primitiveArray_[index];

+    }

+    

+    public const int MessageValueFieldNumber = 3;

+    private bool hasMessageValue;

+    private global::UnitTest.Issues.TestProtos.DeprecatedChild messageValue_;

+    [global::System.ObsoleteAttribute()]

+    public bool HasMessageValue {

+      get { return hasMessageValue; }

+    }

+    [global::System.ObsoleteAttribute()]

+    public global::UnitTest.Issues.TestProtos.DeprecatedChild MessageValue {

+      get { return messageValue_ ?? global::UnitTest.Issues.TestProtos.DeprecatedChild.DefaultInstance; }

+    }

+    

+    public const int MessageArrayFieldNumber = 4;

+    private pbc::PopsicleList<global::UnitTest.Issues.TestProtos.DeprecatedChild> messageArray_ = new pbc::PopsicleList<global::UnitTest.Issues.TestProtos.DeprecatedChild>();

+    [global::System.ObsoleteAttribute()]

+    public scg::IList<global::UnitTest.Issues.TestProtos.DeprecatedChild> MessageArrayList {

+      get { return messageArray_; }

+    }

+    [global::System.ObsoleteAttribute()]

+    public int MessageArrayCount {

+      get { return messageArray_.Count; }

+    }

+    [global::System.ObsoleteAttribute()]

+    public global::UnitTest.Issues.TestProtos.DeprecatedChild GetMessageArray(int index) {

+      return messageArray_[index];

+    }

+    

+    public const int EnumValueFieldNumber = 5;

+    private bool hasEnumValue;

+    private global::UnitTest.Issues.TestProtos.DeprecatedEnum enumValue_ = global::UnitTest.Issues.TestProtos.DeprecatedEnum.one;

+    [global::System.ObsoleteAttribute()]

+    public bool HasEnumValue {

+      get { return hasEnumValue; }

+    }

+    [global::System.ObsoleteAttribute()]

+    public global::UnitTest.Issues.TestProtos.DeprecatedEnum EnumValue {

+      get { return enumValue_; }

+    }

+    

+    public const int EnumArrayFieldNumber = 6;

+    private pbc::PopsicleList<global::UnitTest.Issues.TestProtos.DeprecatedEnum> enumArray_ = new pbc::PopsicleList<global::UnitTest.Issues.TestProtos.DeprecatedEnum>();

+    [global::System.ObsoleteAttribute()]

+    public scg::IList<global::UnitTest.Issues.TestProtos.DeprecatedEnum> EnumArrayList {

+      get { return pbc::Lists.AsReadOnly(enumArray_); }

+    }

+    [global::System.ObsoleteAttribute()]

+    public int EnumArrayCount {

+      get { return enumArray_.Count; }

+    }

+    [global::System.ObsoleteAttribute()]

+    public global::UnitTest.Issues.TestProtos.DeprecatedEnum GetEnumArray(int index) {

+      return enumArray_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _deprecatedFieldsMessageFieldNames;

+      if (hasPrimitiveValue) {

+        output.WriteInt32(1, field_names[5], PrimitiveValue);

+      }

+      if (primitiveArray_.Count > 0) {

+        output.WriteInt32Array(2, field_names[4], primitiveArray_);

+      }

+      if (hasMessageValue) {

+        output.WriteMessage(3, field_names[3], MessageValue);

+      }

+      if (messageArray_.Count > 0) {

+        output.WriteMessageArray(4, field_names[2], messageArray_);

+      }

+      if (hasEnumValue) {

+        output.WriteEnum(5, field_names[1], (int) EnumValue, EnumValue);

+      }

+      if (enumArray_.Count > 0) {

+        output.WriteEnumArray(6, field_names[0], enumArray_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasPrimitiveValue) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, PrimitiveValue);

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in PrimitiveArrayList) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * primitiveArray_.Count;

+      }

+      if (hasMessageValue) {

+        size += pb::CodedOutputStream.ComputeMessageSize(3, MessageValue);

+      }

+      foreach (global::UnitTest.Issues.TestProtos.DeprecatedChild element in MessageArrayList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(4, element);

+      }

+      if (hasEnumValue) {

+        size += pb::CodedOutputStream.ComputeEnumSize(5, (int) EnumValue);

+      }

+      {

+        int dataSize = 0;

+        if (enumArray_.Count > 0) {

+          foreach (global::UnitTest.Issues.TestProtos.DeprecatedEnum element in enumArray_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 1 * enumArray_.Count;

+        }

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static DeprecatedFieldsMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static DeprecatedFieldsMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static DeprecatedFieldsMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static DeprecatedFieldsMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static DeprecatedFieldsMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static DeprecatedFieldsMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static DeprecatedFieldsMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static DeprecatedFieldsMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static DeprecatedFieldsMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static DeprecatedFieldsMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private DeprecatedFieldsMessage MakeReadOnly() {

+      primitiveArray_.MakeReadOnly();

+      messageArray_.MakeReadOnly();

+      enumArray_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(DeprecatedFieldsMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<DeprecatedFieldsMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(DeprecatedFieldsMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private DeprecatedFieldsMessage result;

+      

+      private DeprecatedFieldsMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          DeprecatedFieldsMessage original = result;

+          result = new DeprecatedFieldsMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override DeprecatedFieldsMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage.Descriptor; }

+      }

+      

+      public override DeprecatedFieldsMessage DefaultInstanceForType {

+        get { return global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage.DefaultInstance; }

+      }

+      

+      public override DeprecatedFieldsMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is DeprecatedFieldsMessage) {

+          return MergeFrom((DeprecatedFieldsMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(DeprecatedFieldsMessage other) {

+        if (other == global::UnitTest.Issues.TestProtos.DeprecatedFieldsMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasPrimitiveValue) {

+          PrimitiveValue = other.PrimitiveValue;

+        }

+        if (other.primitiveArray_.Count != 0) {

+          result.primitiveArray_.Add(other.primitiveArray_);

+        }

+        if (other.HasMessageValue) {

+          MergeMessageValue(other.MessageValue);

+        }

+        if (other.messageArray_.Count != 0) {

+          result.messageArray_.Add(other.messageArray_);

+        }

+        if (other.HasEnumValue) {

+          EnumValue = other.EnumValue;

+        }

+        if (other.enumArray_.Count != 0) {

+          result.enumArray_.Add(other.enumArray_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_deprecatedFieldsMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _deprecatedFieldsMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasPrimitiveValue = input.ReadInt32(ref result.primitiveValue_);

+              break;

+            }

+            case 18:

+            case 16: {

+              input.ReadInt32Array(tag, field_name, result.primitiveArray_);

+              break;

+            }

+            case 26: {

+              global::UnitTest.Issues.TestProtos.DeprecatedChild.Builder subBuilder = global::UnitTest.Issues.TestProtos.DeprecatedChild.CreateBuilder();

+              if (result.hasMessageValue) {

+                subBuilder.MergeFrom(MessageValue);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              MessageValue = subBuilder.BuildPartial();

+              break;

+            }

+            case 34: {

+              input.ReadMessageArray(tag, field_name, result.messageArray_, global::UnitTest.Issues.TestProtos.DeprecatedChild.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 40: {

+              object unknown;

+              if(input.ReadEnum(ref result.enumValue_, out unknown)) {

+                result.hasEnumValue = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(5, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 50:

+            case 48: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::UnitTest.Issues.TestProtos.DeprecatedEnum>(tag, field_name, result.enumArray_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(6, (ulong)(int)rawValue);

+              }

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      [global::System.ObsoleteAttribute()]

+      public bool HasPrimitiveValue {

+        get { return result.hasPrimitiveValue; }

+      }

+      [global::System.ObsoleteAttribute()]

+      public int PrimitiveValue {

+        get { return result.PrimitiveValue; }

+        set { SetPrimitiveValue(value); }

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder SetPrimitiveValue(int value) {

+        PrepareBuilder();

+        result.hasPrimitiveValue = true;

+        result.primitiveValue_ = value;

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder ClearPrimitiveValue() {

+        PrepareBuilder();

+        result.hasPrimitiveValue = false;

+        result.primitiveValue_ = 0;

+        return this;

+      }

+      

+      [global::System.ObsoleteAttribute()]

+      public pbc::IPopsicleList<int> PrimitiveArrayList {

+        get { return PrepareBuilder().primitiveArray_; }

+      }

+      [global::System.ObsoleteAttribute()]

+      public int PrimitiveArrayCount {

+        get { return result.PrimitiveArrayCount; }

+      }

+      [global::System.ObsoleteAttribute()]

+      public int GetPrimitiveArray(int index) {

+        return result.GetPrimitiveArray(index);

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder SetPrimitiveArray(int index, int value) {

+        PrepareBuilder();

+        result.primitiveArray_[index] = value;

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder AddPrimitiveArray(int value) {

+        PrepareBuilder();

+        result.primitiveArray_.Add(value);

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder AddRangePrimitiveArray(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.primitiveArray_.Add(values);

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder ClearPrimitiveArray() {

+        PrepareBuilder();

+        result.primitiveArray_.Clear();

+        return this;

+      }

+      

+      [global::System.ObsoleteAttribute()]

+      public bool HasMessageValue {

+       get { return result.hasMessageValue; }

+      }

+      [global::System.ObsoleteAttribute()]

+      public global::UnitTest.Issues.TestProtos.DeprecatedChild MessageValue {

+        get { return result.MessageValue; }

+        set { SetMessageValue(value); }

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder SetMessageValue(global::UnitTest.Issues.TestProtos.DeprecatedChild value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMessageValue = true;

+        result.messageValue_ = value;

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder SetMessageValue(global::UnitTest.Issues.TestProtos.DeprecatedChild.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasMessageValue = true;

+        result.messageValue_ = builderForValue.Build();

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder MergeMessageValue(global::UnitTest.Issues.TestProtos.DeprecatedChild value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasMessageValue &&

+            result.messageValue_ != global::UnitTest.Issues.TestProtos.DeprecatedChild.DefaultInstance) {

+            result.messageValue_ = global::UnitTest.Issues.TestProtos.DeprecatedChild.CreateBuilder(result.messageValue_).MergeFrom(value).BuildPartial();

+        } else {

+          result.messageValue_ = value;

+        }

+        result.hasMessageValue = true;

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder ClearMessageValue() {

+        PrepareBuilder();

+        result.hasMessageValue = false;

+        result.messageValue_ = null;

+        return this;

+      }

+      

+      [global::System.ObsoleteAttribute()]

+      public pbc::IPopsicleList<global::UnitTest.Issues.TestProtos.DeprecatedChild> MessageArrayList {

+        get { return PrepareBuilder().messageArray_; }

+      }

+      [global::System.ObsoleteAttribute()]

+      public int MessageArrayCount {

+        get { return result.MessageArrayCount; }

+      }

+      [global::System.ObsoleteAttribute()]

+      public global::UnitTest.Issues.TestProtos.DeprecatedChild GetMessageArray(int index) {

+        return result.GetMessageArray(index);

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder SetMessageArray(int index, global::UnitTest.Issues.TestProtos.DeprecatedChild value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.messageArray_[index] = value;

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder SetMessageArray(int index, global::UnitTest.Issues.TestProtos.DeprecatedChild.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.messageArray_[index] = builderForValue.Build();

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder AddMessageArray(global::UnitTest.Issues.TestProtos.DeprecatedChild value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.messageArray_.Add(value);

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder AddMessageArray(global::UnitTest.Issues.TestProtos.DeprecatedChild.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.messageArray_.Add(builderForValue.Build());

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder AddRangeMessageArray(scg::IEnumerable<global::UnitTest.Issues.TestProtos.DeprecatedChild> values) {

+        PrepareBuilder();

+        result.messageArray_.Add(values);

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder ClearMessageArray() {

+        PrepareBuilder();

+        result.messageArray_.Clear();

+        return this;

+      }

+      

+      [global::System.ObsoleteAttribute()]

+      public bool HasEnumValue {

+       get { return result.hasEnumValue; }

+      }

+      [global::System.ObsoleteAttribute()]

+      public global::UnitTest.Issues.TestProtos.DeprecatedEnum EnumValue {

+        get { return result.EnumValue; }

+        set { SetEnumValue(value); }

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder SetEnumValue(global::UnitTest.Issues.TestProtos.DeprecatedEnum value) {

+        PrepareBuilder();

+        result.hasEnumValue = true;

+        result.enumValue_ = value;

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder ClearEnumValue() {

+        PrepareBuilder();

+        result.hasEnumValue = false;

+        result.enumValue_ = global::UnitTest.Issues.TestProtos.DeprecatedEnum.one;

+        return this;

+      }

+      

+      [global::System.ObsoleteAttribute()]

+      public pbc::IPopsicleList<global::UnitTest.Issues.TestProtos.DeprecatedEnum> EnumArrayList {

+        get { return PrepareBuilder().enumArray_; }

+      }

+      [global::System.ObsoleteAttribute()]

+      public int EnumArrayCount {

+        get { return result.EnumArrayCount; }

+      }

+      [global::System.ObsoleteAttribute()]

+      public global::UnitTest.Issues.TestProtos.DeprecatedEnum GetEnumArray(int index) {

+        return result.GetEnumArray(index);

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder SetEnumArray(int index, global::UnitTest.Issues.TestProtos.DeprecatedEnum value) {

+        PrepareBuilder();

+        result.enumArray_[index] = value;

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder AddEnumArray(global::UnitTest.Issues.TestProtos.DeprecatedEnum value) {

+        PrepareBuilder();

+        result.enumArray_.Add(value);

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder AddRangeEnumArray(scg::IEnumerable<global::UnitTest.Issues.TestProtos.DeprecatedEnum> values) {

+        PrepareBuilder();

+        result.enumArray_.Add(values);

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder ClearEnumArray() {

+        PrepareBuilder();

+        result.enumArray_.Clear();

+        return this;

+      }

+    }

+    static DeprecatedFieldsMessage() {

+      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ItemField : pb::GeneratedMessage<ItemField, ItemField.Builder> {

+    private ItemField() { }

+    private static readonly ItemField defaultInstance = new ItemField().MakeReadOnly();

+    private static readonly string[] _itemFieldFieldNames = new string[] { "item" };

+    private static readonly uint[] _itemFieldFieldTags = new uint[] { 8 };

+    public static ItemField DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ItemField DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ItemField ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_ItemField__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<ItemField, ItemField.Builder> InternalFieldAccessors {

+      get { return global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.internal__static_unittest_issues_ItemField__FieldAccessorTable; }

+    }

+    

+    public const int ItemFieldNumber = 1;

+    private bool hasItem;

+    private int item_;

+    public bool HasItem {

+      get { return hasItem; }

+    }

+    public int Item {

+      get { return item_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _itemFieldFieldNames;

+      if (hasItem) {

+        output.WriteInt32(1, field_names[0], Item);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasItem) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, Item);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static ItemField ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ItemField ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ItemField ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ItemField ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ItemField ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ItemField ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ItemField ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ItemField ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ItemField ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ItemField ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ItemField MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ItemField prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<ItemField, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ItemField cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ItemField result;

+      

+      private ItemField PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ItemField original = result;

+          result = new ItemField();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ItemField MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::UnitTest.Issues.TestProtos.ItemField.Descriptor; }

+      }

+      

+      public override ItemField DefaultInstanceForType {

+        get { return global::UnitTest.Issues.TestProtos.ItemField.DefaultInstance; }

+      }

+      

+      public override ItemField BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is ItemField) {

+          return MergeFrom((ItemField) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ItemField other) {

+        if (other == global::UnitTest.Issues.TestProtos.ItemField.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasItem) {

+          Item = other.Item;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_itemFieldFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _itemFieldFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasItem = input.ReadInt32(ref result.item_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasItem {

+        get { return result.hasItem; }

+      }

+      public int Item {

+        get { return result.Item; }

+        set { SetItem(value); }

+      }

+      public Builder SetItem(int value) {

+        PrepareBuilder();

+        result.hasItem = true;

+        result.item_ = value;

+        return this;

+      }

+      public Builder ClearItem() {

+        PrepareBuilder();

+        result.hasItem = false;

+        result.item_ = 0;

+        return this;

+      }

+    }

+    static ItemField() {

+      object.ReferenceEquals(global::UnitTest.Issues.TestProtos.UnitTestExtrasIssuesProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestExtrasProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestExtrasProtoFile.cs
new file mode 100644
index 0000000..4877c60
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestExtrasProtoFile.cs
@@ -0,0 +1,401 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestExtrasProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedInt32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedInt64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedUint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedUint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedSint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedSint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedFixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedFixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedSfixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedSfixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedFloatExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedDoubleExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedBoolExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedEnumExtension);

+    }

+    #endregion

+    #region Extensions

+    public const int UnpackedInt32ExtensionFieldNumber = 90;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> UnpackedInt32Extension;

+    public const int UnpackedInt64ExtensionFieldNumber = 91;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> UnpackedInt64Extension;

+    public const int UnpackedUint32ExtensionFieldNumber = 92;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> UnpackedUint32Extension;

+    public const int UnpackedUint64ExtensionFieldNumber = 93;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> UnpackedUint64Extension;

+    public const int UnpackedSint32ExtensionFieldNumber = 94;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> UnpackedSint32Extension;

+    public const int UnpackedSint64ExtensionFieldNumber = 95;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> UnpackedSint64Extension;

+    public const int UnpackedFixed32ExtensionFieldNumber = 96;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> UnpackedFixed32Extension;

+    public const int UnpackedFixed64ExtensionFieldNumber = 97;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> UnpackedFixed64Extension;

+    public const int UnpackedSfixed32ExtensionFieldNumber = 98;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> UnpackedSfixed32Extension;

+    public const int UnpackedSfixed64ExtensionFieldNumber = 99;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> UnpackedSfixed64Extension;

+    public const int UnpackedFloatExtensionFieldNumber = 100;

+    public static pb::GeneratedExtensionBase<scg::IList<float>> UnpackedFloatExtension;

+    public const int UnpackedDoubleExtensionFieldNumber = 101;

+    public static pb::GeneratedExtensionBase<scg::IList<double>> UnpackedDoubleExtension;

+    public const int UnpackedBoolExtensionFieldNumber = 102;

+    public static pb::GeneratedExtensionBase<scg::IList<bool>> UnpackedBoolExtension;

+    public const int UnpackedEnumExtensionFieldNumber = 103;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.UnpackedExtensionsForeignEnum>> UnpackedEnumExtension;

+    #endregion

+    

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestUnpackedExtensions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions, global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions.Builder> internal__static_protobuf_unittest_extra_TestUnpackedExtensions__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestExtrasProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "ChxleHRlc3QvdW5pdHRlc3RfZXh0cmFzLnByb3RvEhdwcm90b2J1Zl91bml0", 

+            "dGVzdF9leHRyYRokZ29vZ2xlL3Byb3RvYnVmL2NzaGFycF9vcHRpb25zLnBy", 

+            "b3RvIiIKFlRlc3RVbnBhY2tlZEV4dGVuc2lvbnMqCAgBEICAgIACKlIKHVVu", 

+            "cGFja2VkRXh0ZW5zaW9uc0ZvcmVpZ25FbnVtEg8KC0ZPUkVJR05fRk9PEAQS", 

+            "DwoLRk9SRUlHTl9CQVIQBRIPCgtGT1JFSUdOX0JBWhAGOlEKGHVucGFja2Vk", 

+            "X2ludDMyX2V4dGVuc2lvbhIvLnByb3RvYnVmX3VuaXR0ZXN0X2V4dHJhLlRl", 

+            "c3RVbnBhY2tlZEV4dGVuc2lvbnMYWiADKAU6UQoYdW5wYWNrZWRfaW50NjRf", 

+            "ZXh0ZW5zaW9uEi8ucHJvdG9idWZfdW5pdHRlc3RfZXh0cmEuVGVzdFVucGFj", 

+            "a2VkRXh0ZW5zaW9ucxhbIAMoAzpSChl1bnBhY2tlZF91aW50MzJfZXh0ZW5z", 

+            "aW9uEi8ucHJvdG9idWZfdW5pdHRlc3RfZXh0cmEuVGVzdFVucGFja2VkRXh0", 

+            "ZW5zaW9ucxhcIAMoDTpSChl1bnBhY2tlZF91aW50NjRfZXh0ZW5zaW9uEi8u", 

+            "cHJvdG9idWZfdW5pdHRlc3RfZXh0cmEuVGVzdFVucGFja2VkRXh0ZW5zaW9u", 

+            "cxhdIAMoBDpSChl1bnBhY2tlZF9zaW50MzJfZXh0ZW5zaW9uEi8ucHJvdG9i", 

+            "dWZfdW5pdHRlc3RfZXh0cmEuVGVzdFVucGFja2VkRXh0ZW5zaW9ucxheIAMo", 

+            "ETpSChl1bnBhY2tlZF9zaW50NjRfZXh0ZW5zaW9uEi8ucHJvdG9idWZfdW5p", 

+            "dHRlc3RfZXh0cmEuVGVzdFVucGFja2VkRXh0ZW5zaW9ucxhfIAMoEjpTChp1", 

+            "bnBhY2tlZF9maXhlZDMyX2V4dGVuc2lvbhIvLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "X2V4dHJhLlRlc3RVbnBhY2tlZEV4dGVuc2lvbnMYYCADKAc6UwoadW5wYWNr", 

+            "ZWRfZml4ZWQ2NF9leHRlbnNpb24SLy5wcm90b2J1Zl91bml0dGVzdF9leHRy", 

+            "YS5UZXN0VW5wYWNrZWRFeHRlbnNpb25zGGEgAygGOlQKG3VucGFja2VkX3Nm", 

+            "aXhlZDMyX2V4dGVuc2lvbhIvLnByb3RvYnVmX3VuaXR0ZXN0X2V4dHJhLlRl", 

+            "c3RVbnBhY2tlZEV4dGVuc2lvbnMYYiADKA86VAobdW5wYWNrZWRfc2ZpeGVk", 

+            "NjRfZXh0ZW5zaW9uEi8ucHJvdG9idWZfdW5pdHRlc3RfZXh0cmEuVGVzdFVu", 

+            "cGFja2VkRXh0ZW5zaW9ucxhjIAMoEDpRChh1bnBhY2tlZF9mbG9hdF9leHRl", 

+            "bnNpb24SLy5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5UZXN0VW5wYWNrZWRF", 

+            "eHRlbnNpb25zGGQgAygCOlIKGXVucGFja2VkX2RvdWJsZV9leHRlbnNpb24S", 

+            "Ly5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5UZXN0VW5wYWNrZWRFeHRlbnNp", 

+            "b25zGGUgAygBOlAKF3VucGFja2VkX2Jvb2xfZXh0ZW5zaW9uEi8ucHJvdG9i", 

+            "dWZfdW5pdHRlc3RfZXh0cmEuVGVzdFVucGFja2VkRXh0ZW5zaW9ucxhmIAMo", 

+            "CDqIAQoXdW5wYWNrZWRfZW51bV9leHRlbnNpb24SLy5wcm90b2J1Zl91bml0", 

+            "dGVzdF9leHRyYS5UZXN0VW5wYWNrZWRFeHRlbnNpb25zGGcgAygOMjYucHJv", 

+            "dG9idWZfdW5pdHRlc3RfZXh0cmEuVW5wYWNrZWRFeHRlbnNpb25zRm9yZWln", 

+            "bkVudW1CVgoTY29tLmdvb2dsZS5wcm90b2J1ZsI+PgohR29vZ2xlLlByb3Rv", 

+            "Y29sQnVmZmVycy5UZXN0UHJvdG9zEhdVbml0VGVzdEV4dHJhc1Byb3RvRmls", 

+          "ZUgB"));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_extra_TestUnpackedExtensions__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_extra_TestUnpackedExtensions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions, global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions.Builder>(internal__static_protobuf_unittest_extra_TestUnpackedExtensions__Descriptor,

+                new string[] { });

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedInt32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[0]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedInt64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[1]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedUint32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[2]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedUint64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[3]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedSint32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[4]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedSint64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[5]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedFixed32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[6]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedFixed64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[7]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedSfixed32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[8]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedSfixed64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[9]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedFloatExtension = pb::GeneratedRepeatExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[10]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedDoubleExtension = pb::GeneratedRepeatExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[11]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedBoolExtension = pb::GeneratedRepeatExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[12]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.UnpackedEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.UnpackedExtensionsForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor.Extensions[13]);

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum UnpackedExtensionsForeignEnum {

+    FOREIGN_FOO = 4,

+    FOREIGN_BAR = 5,

+    FOREIGN_BAZ = 6,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.SerializableAttribute()]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestUnpackedExtensions : pb::ExtendableMessage<TestUnpackedExtensions, TestUnpackedExtensions.Builder> {

+    private TestUnpackedExtensions() { }

+    private static readonly TestUnpackedExtensions defaultInstance = new TestUnpackedExtensions().MakeReadOnly();

+    private static readonly string[] _testUnpackedExtensionsFieldNames = new string[] {  };

+    private static readonly uint[] _testUnpackedExtensionsFieldTags = new uint[] {  };

+    public static TestUnpackedExtensions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestUnpackedExtensions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestUnpackedExtensions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.internal__static_protobuf_unittest_extra_TestUnpackedExtensions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestUnpackedExtensions, TestUnpackedExtensions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.internal__static_protobuf_unittest_extra_TestUnpackedExtensions__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testUnpackedExtensionsFieldNames;

+      pb::ExtendableMessage<TestUnpackedExtensions, TestUnpackedExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestUnpackedExtensions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestUnpackedExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedExtensions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestUnpackedExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedExtensions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestUnpackedExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedExtensions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestUnpackedExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestUnpackedExtensions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestUnpackedExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestUnpackedExtensions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestUnpackedExtensions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.SerializableAttribute()]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestUnpackedExtensions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestUnpackedExtensions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestUnpackedExtensions result;

+      

+      private TestUnpackedExtensions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestUnpackedExtensions original = result;

+          result = new TestUnpackedExtensions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestUnpackedExtensions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions.Descriptor; }

+      }

+      

+      public override TestUnpackedExtensions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions.DefaultInstance; }

+      }

+      

+      public override TestUnpackedExtensions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestUnpackedExtensions) {

+          return MergeFrom((TestUnpackedExtensions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestUnpackedExtensions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensions.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testUnpackedExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testUnpackedExtensionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestUnpackedExtensions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestGenericServices.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestGenericServices.cs
new file mode 100644
index 0000000..15b7e08
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestGenericServices.cs
@@ -0,0 +1,260 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestGenericServices {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestGenericServices() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CiZleHRlc3QvdW5pdHRlc3RfZ2VuZXJpY19zZXJ2aWNlcy5wcm90bxIRcHJv", 

+            "dG9idWZfdW5pdHRlc3QaJGdvb2dsZS9wcm90b2J1Zi9jc2hhcnBfb3B0aW9u", 

+            "cy5wcm90bxoeZ29vZ2xlL3Byb3RvYnVmL3VuaXR0ZXN0LnByb3RvGi1nb29n", 

+            "bGUvcHJvdG9idWYvdW5pdHRlc3RfY3VzdG9tX29wdGlvbnMucHJvdG8yoAEK", 

+            "ElRlc3RHZW5lcmljU2VydmljZRJECgNGb28SHS5wcm90b2J1Zl91bml0dGVz", 

+            "dC5Gb29SZXF1ZXN0Gh4ucHJvdG9idWZfdW5pdHRlc3QuRm9vUmVzcG9uc2US", 

+            "RAoDQmFyEh0ucHJvdG9idWZfdW5pdHRlc3QuQmFyUmVxdWVzdBoeLnByb3Rv", 

+            "YnVmX3VuaXR0ZXN0LkJhclJlc3BvbnNlMpUBCiNUZXN0R2VuZXJpY1NlcnZp", 

+            "Y2VXaXRoQ3VzdG9tT3B0aW9ucxJjCgNGb28SKS5wcm90b2J1Zl91bml0dGVz", 

+            "dC5DdXN0b21PcHRpb25Gb29SZXF1ZXN0GioucHJvdG9idWZfdW5pdHRlc3Qu", 

+            "Q3VzdG9tT3B0aW9uRm9vUmVzcG9uc2UiBeD6jB4CGgmQsose09uAy0lCREgB", 

+            "wj4/CiFHb29nbGUuUHJvdG9jb2xCdWZmZXJzLlRlc3RQcm90b3MSF1VuaXRU", 

+          "ZXN0R2VuZXJpY1NlcnZpY2VziA4B"));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, 

+          global::Google.ProtocolBuffers.TestProtos.UnitTestCustomOptionsProtoFile.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Services

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public abstract class TestGenericService : pb::IService {

+    public abstract void Foo(

+        pb::IRpcController controller,

+        global::Google.ProtocolBuffers.TestProtos.FooRequest request,

+        global::System.Action<global::Google.ProtocolBuffers.TestProtos.FooResponse> done);

+    public abstract void Bar(

+        pb::IRpcController controller,

+        global::Google.ProtocolBuffers.TestProtos.BarRequest request,

+        global::System.Action<global::Google.ProtocolBuffers.TestProtos.BarResponse> done);

+    

+    public static pbd::ServiceDescriptor Descriptor {

+      get { return UnitTestGenericServices.Descriptor.Services[0]; }

+    }

+    public pbd::ServiceDescriptor DescriptorForType {

+      get { return Descriptor; }

+    }

+    

+    public void CallMethod(

+        pbd::MethodDescriptor method,

+        pb::IRpcController controller,

+        pb::IMessage request,

+        global::System.Action<pb::IMessage> done) {

+      if (method.Service != Descriptor) {

+        throw new global::System.ArgumentException(

+            "Service.CallMethod() given method descriptor for wrong service type.");

+      }

+      switch(method.Index) {

+        case 0:

+          this.Foo(controller, (global::Google.ProtocolBuffers.TestProtos.FooRequest) request,

+              pb::RpcUtil.SpecializeCallback<global::Google.ProtocolBuffers.TestProtos.FooResponse>(

+              done));

+          return;

+        case 1:

+          this.Bar(controller, (global::Google.ProtocolBuffers.TestProtos.BarRequest) request,

+              pb::RpcUtil.SpecializeCallback<global::Google.ProtocolBuffers.TestProtos.BarResponse>(

+              done));

+          return;

+        default:

+          throw new global::System.InvalidOperationException("Can't get here.");

+      }

+    }

+    

+    public pb::IMessage GetRequestPrototype(pbd::MethodDescriptor method) {

+      if (method.Service != Descriptor) {

+        throw new global::System.ArgumentException(

+            "Service.GetRequestPrototype() given method descriptor for wrong service type.");

+      }

+      switch(method.Index) {

+        case 0:

+          return global::Google.ProtocolBuffers.TestProtos.FooRequest.DefaultInstance;

+        case 1:

+          return global::Google.ProtocolBuffers.TestProtos.BarRequest.DefaultInstance;

+        default:

+          throw new global::System.InvalidOperationException("Can't get here.");

+      }

+    }

+    

+    public pb::IMessage GetResponsePrototype(pbd::MethodDescriptor method) {

+      if (method.Service != Descriptor) {

+        throw new global::System.ArgumentException(

+            "Service.GetResponsePrototype() given method descriptor for wrong service type.");

+      }

+      switch(method.Index) {

+        case 0:

+          return global::Google.ProtocolBuffers.TestProtos.FooResponse.DefaultInstance;

+        case 1:

+          return global::Google.ProtocolBuffers.TestProtos.BarResponse.DefaultInstance;

+        default:

+          throw new global::System.InvalidOperationException("Can't get here.");

+      }

+    }

+    

+    public static Stub CreateStub(pb::IRpcChannel channel) {

+      return new Stub(channel);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public class Stub : global::Google.ProtocolBuffers.TestProtos.TestGenericService {

+      internal Stub(pb::IRpcChannel channel) {

+        this.channel = channel;

+      }

+      

+      private readonly pb::IRpcChannel channel;

+      

+      public pb::IRpcChannel Channel {

+        get { return channel; }

+      }

+      

+      public override void Foo(

+          pb::IRpcController controller,

+          global::Google.ProtocolBuffers.TestProtos.FooRequest request,

+          global::System.Action<global::Google.ProtocolBuffers.TestProtos.FooResponse> done) {

+        channel.CallMethod(Descriptor.Methods[0],

+            controller, request, global::Google.ProtocolBuffers.TestProtos.FooResponse.DefaultInstance,

+            pb::RpcUtil.GeneralizeCallback<global::Google.ProtocolBuffers.TestProtos.FooResponse, global::Google.ProtocolBuffers.TestProtos.FooResponse.Builder>(done, global::Google.ProtocolBuffers.TestProtos.FooResponse.DefaultInstance));

+      }

+      

+      public override void Bar(

+          pb::IRpcController controller,

+          global::Google.ProtocolBuffers.TestProtos.BarRequest request,

+          global::System.Action<global::Google.ProtocolBuffers.TestProtos.BarResponse> done) {

+        channel.CallMethod(Descriptor.Methods[1],

+            controller, request, global::Google.ProtocolBuffers.TestProtos.BarResponse.DefaultInstance,

+            pb::RpcUtil.GeneralizeCallback<global::Google.ProtocolBuffers.TestProtos.BarResponse, global::Google.ProtocolBuffers.TestProtos.BarResponse.Builder>(done, global::Google.ProtocolBuffers.TestProtos.BarResponse.DefaultInstance));

+      }

+    }

+  }

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public abstract class TestGenericServiceWithCustomOptions : pb::IService {

+    public abstract void Foo(

+        pb::IRpcController controller,

+        global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest request,

+        global::System.Action<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse> done);

+    

+    public static pbd::ServiceDescriptor Descriptor {

+      get { return UnitTestGenericServices.Descriptor.Services[1]; }

+    }

+    public pbd::ServiceDescriptor DescriptorForType {

+      get { return Descriptor; }

+    }

+    

+    public void CallMethod(

+        pbd::MethodDescriptor method,

+        pb::IRpcController controller,

+        pb::IMessage request,

+        global::System.Action<pb::IMessage> done) {

+      if (method.Service != Descriptor) {

+        throw new global::System.ArgumentException(

+            "Service.CallMethod() given method descriptor for wrong service type.");

+      }

+      switch(method.Index) {

+        case 0:

+          this.Foo(controller, (global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest) request,

+              pb::RpcUtil.SpecializeCallback<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse>(

+              done));

+          return;

+        default:

+          throw new global::System.InvalidOperationException("Can't get here.");

+      }

+    }

+    

+    public pb::IMessage GetRequestPrototype(pbd::MethodDescriptor method) {

+      if (method.Service != Descriptor) {

+        throw new global::System.ArgumentException(

+            "Service.GetRequestPrototype() given method descriptor for wrong service type.");

+      }

+      switch(method.Index) {

+        case 0:

+          return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest.DefaultInstance;

+        default:

+          throw new global::System.InvalidOperationException("Can't get here.");

+      }

+    }

+    

+    public pb::IMessage GetResponsePrototype(pbd::MethodDescriptor method) {

+      if (method.Service != Descriptor) {

+        throw new global::System.ArgumentException(

+            "Service.GetResponsePrototype() given method descriptor for wrong service type.");

+      }

+      switch(method.Index) {

+        case 0:

+          return global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.DefaultInstance;

+        default:

+          throw new global::System.InvalidOperationException("Can't get here.");

+      }

+    }

+    

+    public static Stub CreateStub(pb::IRpcChannel channel) {

+      return new Stub(channel);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public class Stub : global::Google.ProtocolBuffers.TestProtos.TestGenericServiceWithCustomOptions {

+      internal Stub(pb::IRpcChannel channel) {

+        this.channel = channel;

+      }

+      

+      private readonly pb::IRpcChannel channel;

+      

+      public pb::IRpcChannel Channel {

+        get { return channel; }

+      }

+      

+      public override void Foo(

+          pb::IRpcController controller,

+          global::Google.ProtocolBuffers.TestProtos.CustomOptionFooRequest request,

+          global::System.Action<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse> done) {

+        channel.CallMethod(Descriptor.Methods[0],

+            controller, request, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.DefaultInstance,

+            pb::RpcUtil.GeneralizeCallback<global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.Builder>(done, global::Google.ProtocolBuffers.TestProtos.CustomOptionFooResponse.DefaultInstance));

+      }

+    }

+  }

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSizeProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSizeProtoFile.cs
new file mode 100644
index 0000000..6def8d5
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSizeProtoFile.cs
@@ -0,0 +1,4573 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestGoogleSizeProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_unittest_google_size_SizeMessage1__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage1, global::Google.ProtocolBuffers.TestProtos.SizeMessage1.Builder> internal__static_unittest_google_size_SizeMessage1__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_google_size_SizeMessage1SubMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage, global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.Builder> internal__static_unittest_google_size_SizeMessage1SubMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_google_size_SizeMessage2__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2, global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Builder> internal__static_unittest_google_size_SizeMessage2__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_google_size_SizeMessage2_Group1__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1, global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1.Builder> internal__static_unittest_google_size_SizeMessage2_Group1__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_google_size_SizeMessage2GroupedMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage, global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.Builder> internal__static_unittest_google_size_SizeMessage2GroupedMessage__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestGoogleSizeProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "Ch1nb29nbGUvdGVzdC9nb29nbGVfc2l6ZS5wcm90bxIUdW5pdHRlc3RfZ29v", 

+            "Z2xlX3NpemUaJGdvb2dsZS9wcm90b2J1Zi9jc2hhcnBfb3B0aW9ucy5wcm90", 

+            "byKABwoMU2l6ZU1lc3NhZ2UxEg4KBmZpZWxkMRgBIAIoCRIOCgZmaWVsZDkY", 

+            "CSABKAkSDwoHZmllbGQxOBgSIAEoCRIWCgdmaWVsZDgwGFAgASgIOgVmYWxz", 

+            "ZRIVCgdmaWVsZDgxGFEgASgIOgR0cnVlEg4KBmZpZWxkMhgCIAIoBRIOCgZm", 

+            "aWVsZDMYAyACKAUSEQoIZmllbGQyODAYmAIgASgFEhEKBmZpZWxkNhgGIAEo", 

+            "BToBMBIPCgdmaWVsZDIyGBYgASgDEg4KBmZpZWxkNBgEIAEoCRIOCgZmaWVs", 

+            "ZDUYBSADKAYSFgoHZmllbGQ1ORg7IAEoCDoFZmFsc2USDgoGZmllbGQ3GAcg", 

+            "ASgJEg8KB2ZpZWxkMTYYECABKAUSFAoIZmllbGQxMzAYggEgASgFOgEwEhUK", 

+            "B2ZpZWxkMTIYDCABKAg6BHRydWUSFQoHZmllbGQxNxgRIAEoCDoEdHJ1ZRIV", 

+            "CgdmaWVsZDEzGA0gASgIOgR0cnVlEhUKB2ZpZWxkMTQYDiABKAg6BHRydWUS", 

+            "EwoIZmllbGQxMDQYaCABKAU6ATASEwoIZmllbGQxMDAYZCABKAU6ATASEwoI", 

+            "ZmllbGQxMDEYZSABKAU6ATASEAoIZmllbGQxMDIYZiABKAkSEAoIZmllbGQx", 

+            "MDMYZyABKAkSEgoHZmllbGQyORgdIAEoBToBMBIWCgdmaWVsZDMwGB4gASgI", 

+            "OgVmYWxzZRITCgdmaWVsZDYwGDwgASgFOgItMRIVCghmaWVsZDI3MRiPAiAB", 

+            "KAU6Ai0xEhUKCGZpZWxkMjcyGJACIAEoBToCLTESEQoIZmllbGQxNTAYlgEg", 

+            "ASgFEhIKB2ZpZWxkMjMYFyABKAU6ATASFgoHZmllbGQyNBgYIAEoCDoFZmFs", 

+            "c2USEgoHZmllbGQyNRgZIAEoBToBMBI9CgdmaWVsZDE1GA8gASgLMiwudW5p", 

+            "dHRlc3RfZ29vZ2xlX3NpemUuU2l6ZU1lc3NhZ2UxU3ViTWVzc2FnZRIPCgdm", 

+            "aWVsZDc4GE4gASgIEhIKB2ZpZWxkNjcYQyABKAU6ATASDwoHZmllbGQ2OBhE", 

+            "IAEoBRIUCghmaWVsZDEyOBiAASABKAU6ATASKAoIZmllbGQxMjkYgQEgASgJ", 

+            "OhV4eHh4eHh4eHh4eHh4eHh4eHh4eHgSFAoIZmllbGQxMzEYgwEgASgFOgEw", 

+            "IqEDChZTaXplTWVzc2FnZTFTdWJNZXNzYWdlEhEKBmZpZWxkMRgBIAEoBToB", 

+            "MBIRCgZmaWVsZDIYAiABKAU6ATASEQoGZmllbGQzGAMgASgFOgEwEg8KB2Zp", 

+            "ZWxkMTUYDyABKAkSFQoHZmllbGQxMhgMIAEoCDoEdHJ1ZRIPCgdmaWVsZDEz", 

+            "GA0gASgDEg8KB2ZpZWxkMTQYDiABKAMSDwoHZmllbGQxNhgQIAEoBRISCgdm", 

+            "aWVsZDE5GBMgASgFOgEyEhUKB2ZpZWxkMjAYFCABKAg6BHRydWUSFQoHZmll", 

+            "bGQyOBgcIAEoCDoEdHJ1ZRIPCgdmaWVsZDIxGBUgASgGEg8KB2ZpZWxkMjIY", 

+            "FiABKAUSFgoHZmllbGQyMxgXIAEoCDoFZmFsc2USGAoIZmllbGQyMDYYzgEg", 

+            "ASgIOgVmYWxzZRIRCghmaWVsZDIwMxjLASABKAcSEQoIZmllbGQyMDQYzAEg", 

+            "ASgFEhEKCGZpZWxkMjA1GM0BIAEoCRIRCghmaWVsZDIwNxjPASABKAQSEQoI", 

+            "ZmllbGQzMDAYrAIgASgEItsHCgxTaXplTWVzc2FnZTISDgoGZmllbGQxGAEg", 

+            "ASgJEg4KBmZpZWxkMxgDIAEoAxIOCgZmaWVsZDQYBCABKAMSDwoHZmllbGQz", 

+            "MBgeIAEoAxIWCgdmaWVsZDc1GEsgASgIOgVmYWxzZRIOCgZmaWVsZDYYBiAB", 

+            "KAkSDgoGZmllbGQyGAIgASgMEhIKB2ZpZWxkMjEYFSABKAU6ATASDwoHZmll", 

+            "bGQ3MRhHIAEoBRIPCgdmaWVsZDI1GBkgASgCEhMKCGZpZWxkMTA5GG0gASgF", 

+            "OgEwEhQKCGZpZWxkMjEwGNIBIAEoBToBMBIUCghmaWVsZDIxMRjTASABKAU6", 

+            "ATASFAoIZmllbGQyMTIY1AEgASgFOgEwEhQKCGZpZWxkMjEzGNUBIAEoBToB", 

+            "MBIUCghmaWVsZDIxNhjYASABKAU6ATASFAoIZmllbGQyMTcY2QEgASgFOgEw", 

+            "EhQKCGZpZWxkMjE4GNoBIAEoBToBMBIUCghmaWVsZDIyMBjcASABKAU6ATAS", 

+            "FAoIZmllbGQyMjEY3QEgASgFOgEwEhQKCGZpZWxkMjIyGN4BIAEoAjoBMBIP", 

+            "CgdmaWVsZDYzGD8gASgFEjkKBmdyb3VwMRgKIAMoCjIpLnVuaXR0ZXN0X2dv", 

+            "b2dsZV9zaXplLlNpemVNZXNzYWdlMi5Hcm91cDESEQoIZmllbGQxMjgYgAEg", 

+            "AygJEhEKCGZpZWxkMTMxGIMBIAEoAxIQCghmaWVsZDEyNxh/IAMoCRIRCghm", 

+            "aWVsZDEyORiBASABKAUSEQoIZmllbGQxMzAYggEgAygDEhgKCGZpZWxkMjA1", 

+            "GM0BIAEoCDoFZmFsc2USGAoIZmllbGQyMDYYzgEgASgIOgVmYWxzZRrMAgoG", 

+            "R3JvdXAxEg8KB2ZpZWxkMTEYCyACKAISDwoHZmllbGQyNhgaIAEoAhIPCgdm", 

+            "aWVsZDEyGAwgASgJEg8KB2ZpZWxkMTMYDSABKAkSDwoHZmllbGQxNBgOIAMo", 

+            "CRIPCgdmaWVsZDE1GA8gAigEEg4KBmZpZWxkNRgFIAEoBRIPCgdmaWVsZDI3", 

+            "GBsgASgJEg8KB2ZpZWxkMjgYHCABKAUSDwoHZmllbGQyORgdIAEoCRIPCgdm", 

+            "aWVsZDE2GBAgASgJEg8KB2ZpZWxkMjIYFiADKAkSDwoHZmllbGQ3MxhJIAMo", 

+            "BRISCgdmaWVsZDIwGBQgASgFOgEwEg8KB2ZpZWxkMjQYGCABKAkSQQoHZmll", 

+            "bGQzMRgfIAEoCzIwLnVuaXR0ZXN0X2dvb2dsZV9zaXplLlNpemVNZXNzYWdl", 

+            "Mkdyb3VwZWRNZXNzYWdlIt4BChpTaXplTWVzc2FnZTJHcm91cGVkTWVzc2Fn", 

+            "ZRIOCgZmaWVsZDEYASABKAISDgoGZmllbGQyGAIgASgCEhEKBmZpZWxkMxgD", 

+            "IAEoAjoBMBIOCgZmaWVsZDQYBCABKAgSDgoGZmllbGQ1GAUgASgIEhQKBmZp", 

+            "ZWxkNhgGIAEoCDoEdHJ1ZRIVCgZmaWVsZDcYByABKAg6BWZhbHNlEg4KBmZp", 

+            "ZWxkOBgIIAEoAhIOCgZmaWVsZDkYCSABKAgSDwoHZmllbGQxMBgKIAEoAhIP", 

+            "CgdmaWVsZDExGAsgASgDQlFCCkdvb2dsZVNpemVIAsI+QAohR29vZ2xlLlBy", 

+            "b3RvY29sQnVmZmVycy5UZXN0UHJvdG9zEhtVbml0VGVzdEdvb2dsZVNpemVQ", 

+          "cm90b0ZpbGU="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_unittest_google_size_SizeMessage1__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_unittest_google_size_SizeMessage1__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage1, global::Google.ProtocolBuffers.TestProtos.SizeMessage1.Builder>(internal__static_unittest_google_size_SizeMessage1__Descriptor,

+                new string[] { "Field1", "Field9", "Field18", "Field80", "Field81", "Field2", "Field3", "Field280", "Field6", "Field22", "Field4", "Field5", "Field59", "Field7", "Field16", "Field130", "Field12", "Field17", "Field13", "Field14", "Field104", "Field100", "Field101", "Field102", "Field103", "Field29", "Field30", "Field60", "Field271", "Field272", "Field150", "Field23", "Field24", "Field25", "Field15", "Field78", "Field67", "Field68", "Field128", "Field129", "Field131", });

+        internal__static_unittest_google_size_SizeMessage1SubMessage__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_unittest_google_size_SizeMessage1SubMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage, global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.Builder>(internal__static_unittest_google_size_SizeMessage1SubMessage__Descriptor,

+                new string[] { "Field1", "Field2", "Field3", "Field15", "Field12", "Field13", "Field14", "Field16", "Field19", "Field20", "Field28", "Field21", "Field22", "Field23", "Field206", "Field203", "Field204", "Field205", "Field207", "Field300", });

+        internal__static_unittest_google_size_SizeMessage2__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_unittest_google_size_SizeMessage2__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2, global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Builder>(internal__static_unittest_google_size_SizeMessage2__Descriptor,

+                new string[] { "Field1", "Field3", "Field4", "Field30", "Field75", "Field6", "Field2", "Field21", "Field71", "Field25", "Field109", "Field210", "Field211", "Field212", "Field213", "Field216", "Field217", "Field218", "Field220", "Field221", "Field222", "Field63", "Group1", "Field128", "Field131", "Field127", "Field129", "Field130", "Field205", "Field206", });

+        internal__static_unittest_google_size_SizeMessage2_Group1__Descriptor = internal__static_unittest_google_size_SizeMessage2__Descriptor.NestedTypes[0];

+        internal__static_unittest_google_size_SizeMessage2_Group1__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1, global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1.Builder>(internal__static_unittest_google_size_SizeMessage2_Group1__Descriptor,

+                new string[] { "Field11", "Field26", "Field12", "Field13", "Field14", "Field15", "Field5", "Field27", "Field28", "Field29", "Field16", "Field22", "Field73", "Field20", "Field24", "Field31", });

+        internal__static_unittest_google_size_SizeMessage2GroupedMessage__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_unittest_google_size_SizeMessage2GroupedMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage, global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.Builder>(internal__static_unittest_google_size_SizeMessage2GroupedMessage__Descriptor,

+                new string[] { "Field1", "Field2", "Field3", "Field4", "Field5", "Field6", "Field7", "Field8", "Field9", "Field10", "Field11", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SizeMessage1 : pb::GeneratedMessage<SizeMessage1, SizeMessage1.Builder> {

+    private SizeMessage1() { }

+    private static readonly SizeMessage1 defaultInstance = new SizeMessage1().MakeReadOnly();

+    public static SizeMessage1 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SizeMessage1 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SizeMessage1 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_unittest_google_size_SizeMessage1__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage1, SizeMessage1.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_unittest_google_size_SizeMessage1__FieldAccessorTable; }

+    }

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private string field1_ = "";

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public string Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field9FieldNumber = 9;

+    private bool hasField9;

+    private string field9_ = "";

+    public bool HasField9 {

+      get { return hasField9; }

+    }

+    public string Field9 {

+      get { return field9_; }

+    }

+    

+    public const int Field18FieldNumber = 18;

+    private bool hasField18;

+    private string field18_ = "";

+    public bool HasField18 {

+      get { return hasField18; }

+    }

+    public string Field18 {

+      get { return field18_; }

+    }

+    

+    public const int Field80FieldNumber = 80;

+    private bool hasField80;

+    private bool field80_;

+    public bool HasField80 {

+      get { return hasField80; }

+    }

+    public bool Field80 {

+      get { return field80_; }

+    }

+    

+    public const int Field81FieldNumber = 81;

+    private bool hasField81;

+    private bool field81_ = true;

+    public bool HasField81 {

+      get { return hasField81; }

+    }

+    public bool Field81 {

+      get { return field81_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private int field2_;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public int Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private int field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public int Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field280FieldNumber = 280;

+    private bool hasField280;

+    private int field280_;

+    public bool HasField280 {

+      get { return hasField280; }

+    }

+    public int Field280 {

+      get { return field280_; }

+    }

+    

+    public const int Field6FieldNumber = 6;

+    private bool hasField6;

+    private int field6_;

+    public bool HasField6 {

+      get { return hasField6; }

+    }

+    public int Field6 {

+      get { return field6_; }

+    }

+    

+    public const int Field22FieldNumber = 22;

+    private bool hasField22;

+    private long field22_;

+    public bool HasField22 {

+      get { return hasField22; }

+    }

+    public long Field22 {

+      get { return field22_; }

+    }

+    

+    public const int Field4FieldNumber = 4;

+    private bool hasField4;

+    private string field4_ = "";

+    public bool HasField4 {

+      get { return hasField4; }

+    }

+    public string Field4 {

+      get { return field4_; }

+    }

+    

+    public const int Field5FieldNumber = 5;

+    private pbc::PopsicleList<ulong> field5_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> Field5List {

+      get { return pbc::Lists.AsReadOnly(field5_); }

+    }

+    public int Field5Count {

+      get { return field5_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetField5(int index) {

+      return field5_[index];

+    }

+    

+    public const int Field59FieldNumber = 59;

+    private bool hasField59;

+    private bool field59_;

+    public bool HasField59 {

+      get { return hasField59; }

+    }

+    public bool Field59 {

+      get { return field59_; }

+    }

+    

+    public const int Field7FieldNumber = 7;

+    private bool hasField7;

+    private string field7_ = "";

+    public bool HasField7 {

+      get { return hasField7; }

+    }

+    public string Field7 {

+      get { return field7_; }

+    }

+    

+    public const int Field16FieldNumber = 16;

+    private bool hasField16;

+    private int field16_;

+    public bool HasField16 {

+      get { return hasField16; }

+    }

+    public int Field16 {

+      get { return field16_; }

+    }

+    

+    public const int Field130FieldNumber = 130;

+    private bool hasField130;

+    private int field130_;

+    public bool HasField130 {

+      get { return hasField130; }

+    }

+    public int Field130 {

+      get { return field130_; }

+    }

+    

+    public const int Field12FieldNumber = 12;

+    private bool hasField12;

+    private bool field12_ = true;

+    public bool HasField12 {

+      get { return hasField12; }

+    }

+    public bool Field12 {

+      get { return field12_; }

+    }

+    

+    public const int Field17FieldNumber = 17;

+    private bool hasField17;

+    private bool field17_ = true;

+    public bool HasField17 {

+      get { return hasField17; }

+    }

+    public bool Field17 {

+      get { return field17_; }

+    }

+    

+    public const int Field13FieldNumber = 13;

+    private bool hasField13;

+    private bool field13_ = true;

+    public bool HasField13 {

+      get { return hasField13; }

+    }

+    public bool Field13 {

+      get { return field13_; }

+    }

+    

+    public const int Field14FieldNumber = 14;

+    private bool hasField14;

+    private bool field14_ = true;

+    public bool HasField14 {

+      get { return hasField14; }

+    }

+    public bool Field14 {

+      get { return field14_; }

+    }

+    

+    public const int Field104FieldNumber = 104;

+    private bool hasField104;

+    private int field104_;

+    public bool HasField104 {

+      get { return hasField104; }

+    }

+    public int Field104 {

+      get { return field104_; }

+    }

+    

+    public const int Field100FieldNumber = 100;

+    private bool hasField100;

+    private int field100_;

+    public bool HasField100 {

+      get { return hasField100; }

+    }

+    public int Field100 {

+      get { return field100_; }

+    }

+    

+    public const int Field101FieldNumber = 101;

+    private bool hasField101;

+    private int field101_;

+    public bool HasField101 {

+      get { return hasField101; }

+    }

+    public int Field101 {

+      get { return field101_; }

+    }

+    

+    public const int Field102FieldNumber = 102;

+    private bool hasField102;

+    private string field102_ = "";

+    public bool HasField102 {

+      get { return hasField102; }

+    }

+    public string Field102 {

+      get { return field102_; }

+    }

+    

+    public const int Field103FieldNumber = 103;

+    private bool hasField103;

+    private string field103_ = "";

+    public bool HasField103 {

+      get { return hasField103; }

+    }

+    public string Field103 {

+      get { return field103_; }

+    }

+    

+    public const int Field29FieldNumber = 29;

+    private bool hasField29;

+    private int field29_;

+    public bool HasField29 {

+      get { return hasField29; }

+    }

+    public int Field29 {

+      get { return field29_; }

+    }

+    

+    public const int Field30FieldNumber = 30;

+    private bool hasField30;

+    private bool field30_;

+    public bool HasField30 {

+      get { return hasField30; }

+    }

+    public bool Field30 {

+      get { return field30_; }

+    }

+    

+    public const int Field60FieldNumber = 60;

+    private bool hasField60;

+    private int field60_ = -1;

+    public bool HasField60 {

+      get { return hasField60; }

+    }

+    public int Field60 {

+      get { return field60_; }

+    }

+    

+    public const int Field271FieldNumber = 271;

+    private bool hasField271;

+    private int field271_ = -1;

+    public bool HasField271 {

+      get { return hasField271; }

+    }

+    public int Field271 {

+      get { return field271_; }

+    }

+    

+    public const int Field272FieldNumber = 272;

+    private bool hasField272;

+    private int field272_ = -1;

+    public bool HasField272 {

+      get { return hasField272; }

+    }

+    public int Field272 {

+      get { return field272_; }

+    }

+    

+    public const int Field150FieldNumber = 150;

+    private bool hasField150;

+    private int field150_;

+    public bool HasField150 {

+      get { return hasField150; }

+    }

+    public int Field150 {

+      get { return field150_; }

+    }

+    

+    public const int Field23FieldNumber = 23;

+    private bool hasField23;

+    private int field23_;

+    public bool HasField23 {

+      get { return hasField23; }

+    }

+    public int Field23 {

+      get { return field23_; }

+    }

+    

+    public const int Field24FieldNumber = 24;

+    private bool hasField24;

+    private bool field24_;

+    public bool HasField24 {

+      get { return hasField24; }

+    }

+    public bool Field24 {

+      get { return field24_; }

+    }

+    

+    public const int Field25FieldNumber = 25;

+    private bool hasField25;

+    private int field25_;

+    public bool HasField25 {

+      get { return hasField25; }

+    }

+    public int Field25 {

+      get { return field25_; }

+    }

+    

+    public const int Field15FieldNumber = 15;

+    private bool hasField15;

+    private global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage field15_;

+    public bool HasField15 {

+      get { return hasField15; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage Field15 {

+      get { return field15_ ?? global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.DefaultInstance; }

+    }

+    

+    public const int Field78FieldNumber = 78;

+    private bool hasField78;

+    private bool field78_;

+    public bool HasField78 {

+      get { return hasField78; }

+    }

+    public bool Field78 {

+      get { return field78_; }

+    }

+    

+    public const int Field67FieldNumber = 67;

+    private bool hasField67;

+    private int field67_;

+    public bool HasField67 {

+      get { return hasField67; }

+    }

+    public int Field67 {

+      get { return field67_; }

+    }

+    

+    public const int Field68FieldNumber = 68;

+    private bool hasField68;

+    private int field68_;

+    public bool HasField68 {

+      get { return hasField68; }

+    }

+    public int Field68 {

+      get { return field68_; }

+    }

+    

+    public const int Field128FieldNumber = 128;

+    private bool hasField128;

+    private int field128_;

+    public bool HasField128 {

+      get { return hasField128; }

+    }

+    public int Field128 {

+      get { return field128_; }

+    }

+    

+    public const int Field129FieldNumber = 129;

+    private bool hasField129;

+    private string field129_ = "xxxxxxxxxxxxxxxxxxxxx";

+    public bool HasField129 {

+      get { return hasField129; }

+    }

+    public string Field129 {

+      get { return field129_; }

+    }

+    

+    public const int Field131FieldNumber = 131;

+    private bool hasField131;

+    private int field131_;

+    public bool HasField131 {

+      get { return hasField131; }

+    }

+    public int Field131 {

+      get { return field131_; }

+    }

+    

+    public static SizeMessage1 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage1 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SizeMessage1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SizeMessage1 MakeReadOnly() {

+      field5_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SizeMessage1 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage1, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SizeMessage1 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SizeMessage1 result;

+      

+      private SizeMessage1 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SizeMessage1 original = result;

+          result = new SizeMessage1();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SizeMessage1 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage1.Descriptor; }

+      }

+      

+      public override SizeMessage1 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage1.DefaultInstance; }

+      }

+      

+      public override SizeMessage1 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public string Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = "";

+        return this;

+      }

+      

+      public bool HasField9 {

+        get { return result.hasField9; }

+      }

+      public string Field9 {

+        get { return result.Field9; }

+        set { SetField9(value); }

+      }

+      public Builder SetField9(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField9 = true;

+        result.field9_ = value;

+        return this;

+      }

+      public Builder ClearField9() {

+        PrepareBuilder();

+        result.hasField9 = false;

+        result.field9_ = "";

+        return this;

+      }

+      

+      public bool HasField18 {

+        get { return result.hasField18; }

+      }

+      public string Field18 {

+        get { return result.Field18; }

+        set { SetField18(value); }

+      }

+      public Builder SetField18(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField18 = true;

+        result.field18_ = value;

+        return this;

+      }

+      public Builder ClearField18() {

+        PrepareBuilder();

+        result.hasField18 = false;

+        result.field18_ = "";

+        return this;

+      }

+      

+      public bool HasField80 {

+        get { return result.hasField80; }

+      }

+      public bool Field80 {

+        get { return result.Field80; }

+        set { SetField80(value); }

+      }

+      public Builder SetField80(bool value) {

+        PrepareBuilder();

+        result.hasField80 = true;

+        result.field80_ = value;

+        return this;

+      }

+      public Builder ClearField80() {

+        PrepareBuilder();

+        result.hasField80 = false;

+        result.field80_ = false;

+        return this;

+      }

+      

+      public bool HasField81 {

+        get { return result.hasField81; }

+      }

+      public bool Field81 {

+        get { return result.Field81; }

+        set { SetField81(value); }

+      }

+      public Builder SetField81(bool value) {

+        PrepareBuilder();

+        result.hasField81 = true;

+        result.field81_ = value;

+        return this;

+      }

+      public Builder ClearField81() {

+        PrepareBuilder();

+        result.hasField81 = false;

+        result.field81_ = true;

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public int Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(int value) {

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = 0;

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public int Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(int value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0;

+        return this;

+      }

+      

+      public bool HasField280 {

+        get { return result.hasField280; }

+      }

+      public int Field280 {

+        get { return result.Field280; }

+        set { SetField280(value); }

+      }

+      public Builder SetField280(int value) {

+        PrepareBuilder();

+        result.hasField280 = true;

+        result.field280_ = value;

+        return this;

+      }

+      public Builder ClearField280() {

+        PrepareBuilder();

+        result.hasField280 = false;

+        result.field280_ = 0;

+        return this;

+      }

+      

+      public bool HasField6 {

+        get { return result.hasField6; }

+      }

+      public int Field6 {

+        get { return result.Field6; }

+        set { SetField6(value); }

+      }

+      public Builder SetField6(int value) {

+        PrepareBuilder();

+        result.hasField6 = true;

+        result.field6_ = value;

+        return this;

+      }

+      public Builder ClearField6() {

+        PrepareBuilder();

+        result.hasField6 = false;

+        result.field6_ = 0;

+        return this;

+      }

+      

+      public bool HasField22 {

+        get { return result.hasField22; }

+      }

+      public long Field22 {

+        get { return result.Field22; }

+        set { SetField22(value); }

+      }

+      public Builder SetField22(long value) {

+        PrepareBuilder();

+        result.hasField22 = true;

+        result.field22_ = value;

+        return this;

+      }

+      public Builder ClearField22() {

+        PrepareBuilder();

+        result.hasField22 = false;

+        result.field22_ = 0L;

+        return this;

+      }

+      

+      public bool HasField4 {

+        get { return result.hasField4; }

+      }

+      public string Field4 {

+        get { return result.Field4; }

+        set { SetField4(value); }

+      }

+      public Builder SetField4(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField4 = true;

+        result.field4_ = value;

+        return this;

+      }

+      public Builder ClearField4() {

+        PrepareBuilder();

+        result.hasField4 = false;

+        result.field4_ = "";

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> Field5List {

+        get { return PrepareBuilder().field5_; }

+      }

+      public int Field5Count {

+        get { return result.Field5Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetField5(int index) {

+        return result.GetField5(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField5(int index, ulong value) {

+        PrepareBuilder();

+        result.field5_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddField5(ulong value) {

+        PrepareBuilder();

+        result.field5_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeField5(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.field5_.Add(values);

+        return this;

+      }

+      public Builder ClearField5() {

+        PrepareBuilder();

+        result.field5_.Clear();

+        return this;

+      }

+      

+      public bool HasField59 {

+        get { return result.hasField59; }

+      }

+      public bool Field59 {

+        get { return result.Field59; }

+        set { SetField59(value); }

+      }

+      public Builder SetField59(bool value) {

+        PrepareBuilder();

+        result.hasField59 = true;

+        result.field59_ = value;

+        return this;

+      }

+      public Builder ClearField59() {

+        PrepareBuilder();

+        result.hasField59 = false;

+        result.field59_ = false;

+        return this;

+      }

+      

+      public bool HasField7 {

+        get { return result.hasField7; }

+      }

+      public string Field7 {

+        get { return result.Field7; }

+        set { SetField7(value); }

+      }

+      public Builder SetField7(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField7 = true;

+        result.field7_ = value;

+        return this;

+      }

+      public Builder ClearField7() {

+        PrepareBuilder();

+        result.hasField7 = false;

+        result.field7_ = "";

+        return this;

+      }

+      

+      public bool HasField16 {

+        get { return result.hasField16; }

+      }

+      public int Field16 {

+        get { return result.Field16; }

+        set { SetField16(value); }

+      }

+      public Builder SetField16(int value) {

+        PrepareBuilder();

+        result.hasField16 = true;

+        result.field16_ = value;

+        return this;

+      }

+      public Builder ClearField16() {

+        PrepareBuilder();

+        result.hasField16 = false;

+        result.field16_ = 0;

+        return this;

+      }

+      

+      public bool HasField130 {

+        get { return result.hasField130; }

+      }

+      public int Field130 {

+        get { return result.Field130; }

+        set { SetField130(value); }

+      }

+      public Builder SetField130(int value) {

+        PrepareBuilder();

+        result.hasField130 = true;

+        result.field130_ = value;

+        return this;

+      }

+      public Builder ClearField130() {

+        PrepareBuilder();

+        result.hasField130 = false;

+        result.field130_ = 0;

+        return this;

+      }

+      

+      public bool HasField12 {

+        get { return result.hasField12; }

+      }

+      public bool Field12 {

+        get { return result.Field12; }

+        set { SetField12(value); }

+      }

+      public Builder SetField12(bool value) {

+        PrepareBuilder();

+        result.hasField12 = true;

+        result.field12_ = value;

+        return this;

+      }

+      public Builder ClearField12() {

+        PrepareBuilder();

+        result.hasField12 = false;

+        result.field12_ = true;

+        return this;

+      }

+      

+      public bool HasField17 {

+        get { return result.hasField17; }

+      }

+      public bool Field17 {

+        get { return result.Field17; }

+        set { SetField17(value); }

+      }

+      public Builder SetField17(bool value) {

+        PrepareBuilder();

+        result.hasField17 = true;

+        result.field17_ = value;

+        return this;

+      }

+      public Builder ClearField17() {

+        PrepareBuilder();

+        result.hasField17 = false;

+        result.field17_ = true;

+        return this;

+      }

+      

+      public bool HasField13 {

+        get { return result.hasField13; }

+      }

+      public bool Field13 {

+        get { return result.Field13; }

+        set { SetField13(value); }

+      }

+      public Builder SetField13(bool value) {

+        PrepareBuilder();

+        result.hasField13 = true;

+        result.field13_ = value;

+        return this;

+      }

+      public Builder ClearField13() {

+        PrepareBuilder();

+        result.hasField13 = false;

+        result.field13_ = true;

+        return this;

+      }

+      

+      public bool HasField14 {

+        get { return result.hasField14; }

+      }

+      public bool Field14 {

+        get { return result.Field14; }

+        set { SetField14(value); }

+      }

+      public Builder SetField14(bool value) {

+        PrepareBuilder();

+        result.hasField14 = true;

+        result.field14_ = value;

+        return this;

+      }

+      public Builder ClearField14() {

+        PrepareBuilder();

+        result.hasField14 = false;

+        result.field14_ = true;

+        return this;

+      }

+      

+      public bool HasField104 {

+        get { return result.hasField104; }

+      }

+      public int Field104 {

+        get { return result.Field104; }

+        set { SetField104(value); }

+      }

+      public Builder SetField104(int value) {

+        PrepareBuilder();

+        result.hasField104 = true;

+        result.field104_ = value;

+        return this;

+      }

+      public Builder ClearField104() {

+        PrepareBuilder();

+        result.hasField104 = false;

+        result.field104_ = 0;

+        return this;

+      }

+      

+      public bool HasField100 {

+        get { return result.hasField100; }

+      }

+      public int Field100 {

+        get { return result.Field100; }

+        set { SetField100(value); }

+      }

+      public Builder SetField100(int value) {

+        PrepareBuilder();

+        result.hasField100 = true;

+        result.field100_ = value;

+        return this;

+      }

+      public Builder ClearField100() {

+        PrepareBuilder();

+        result.hasField100 = false;

+        result.field100_ = 0;

+        return this;

+      }

+      

+      public bool HasField101 {

+        get { return result.hasField101; }

+      }

+      public int Field101 {

+        get { return result.Field101; }

+        set { SetField101(value); }

+      }

+      public Builder SetField101(int value) {

+        PrepareBuilder();

+        result.hasField101 = true;

+        result.field101_ = value;

+        return this;

+      }

+      public Builder ClearField101() {

+        PrepareBuilder();

+        result.hasField101 = false;

+        result.field101_ = 0;

+        return this;

+      }

+      

+      public bool HasField102 {

+        get { return result.hasField102; }

+      }

+      public string Field102 {

+        get { return result.Field102; }

+        set { SetField102(value); }

+      }

+      public Builder SetField102(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField102 = true;

+        result.field102_ = value;

+        return this;

+      }

+      public Builder ClearField102() {

+        PrepareBuilder();

+        result.hasField102 = false;

+        result.field102_ = "";

+        return this;

+      }

+      

+      public bool HasField103 {

+        get { return result.hasField103; }

+      }

+      public string Field103 {

+        get { return result.Field103; }

+        set { SetField103(value); }

+      }

+      public Builder SetField103(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField103 = true;

+        result.field103_ = value;

+        return this;

+      }

+      public Builder ClearField103() {

+        PrepareBuilder();

+        result.hasField103 = false;

+        result.field103_ = "";

+        return this;

+      }

+      

+      public bool HasField29 {

+        get { return result.hasField29; }

+      }

+      public int Field29 {

+        get { return result.Field29; }

+        set { SetField29(value); }

+      }

+      public Builder SetField29(int value) {

+        PrepareBuilder();

+        result.hasField29 = true;

+        result.field29_ = value;

+        return this;

+      }

+      public Builder ClearField29() {

+        PrepareBuilder();

+        result.hasField29 = false;

+        result.field29_ = 0;

+        return this;

+      }

+      

+      public bool HasField30 {

+        get { return result.hasField30; }

+      }

+      public bool Field30 {

+        get { return result.Field30; }

+        set { SetField30(value); }

+      }

+      public Builder SetField30(bool value) {

+        PrepareBuilder();

+        result.hasField30 = true;

+        result.field30_ = value;

+        return this;

+      }

+      public Builder ClearField30() {

+        PrepareBuilder();

+        result.hasField30 = false;

+        result.field30_ = false;

+        return this;

+      }

+      

+      public bool HasField60 {

+        get { return result.hasField60; }

+      }

+      public int Field60 {

+        get { return result.Field60; }

+        set { SetField60(value); }

+      }

+      public Builder SetField60(int value) {

+        PrepareBuilder();

+        result.hasField60 = true;

+        result.field60_ = value;

+        return this;

+      }

+      public Builder ClearField60() {

+        PrepareBuilder();

+        result.hasField60 = false;

+        result.field60_ = -1;

+        return this;

+      }

+      

+      public bool HasField271 {

+        get { return result.hasField271; }

+      }

+      public int Field271 {

+        get { return result.Field271; }

+        set { SetField271(value); }

+      }

+      public Builder SetField271(int value) {

+        PrepareBuilder();

+        result.hasField271 = true;

+        result.field271_ = value;

+        return this;

+      }

+      public Builder ClearField271() {

+        PrepareBuilder();

+        result.hasField271 = false;

+        result.field271_ = -1;

+        return this;

+      }

+      

+      public bool HasField272 {

+        get { return result.hasField272; }

+      }

+      public int Field272 {

+        get { return result.Field272; }

+        set { SetField272(value); }

+      }

+      public Builder SetField272(int value) {

+        PrepareBuilder();

+        result.hasField272 = true;

+        result.field272_ = value;

+        return this;

+      }

+      public Builder ClearField272() {

+        PrepareBuilder();

+        result.hasField272 = false;

+        result.field272_ = -1;

+        return this;

+      }

+      

+      public bool HasField150 {

+        get { return result.hasField150; }

+      }

+      public int Field150 {

+        get { return result.Field150; }

+        set { SetField150(value); }

+      }

+      public Builder SetField150(int value) {

+        PrepareBuilder();

+        result.hasField150 = true;

+        result.field150_ = value;

+        return this;

+      }

+      public Builder ClearField150() {

+        PrepareBuilder();

+        result.hasField150 = false;

+        result.field150_ = 0;

+        return this;

+      }

+      

+      public bool HasField23 {

+        get { return result.hasField23; }

+      }

+      public int Field23 {

+        get { return result.Field23; }

+        set { SetField23(value); }

+      }

+      public Builder SetField23(int value) {

+        PrepareBuilder();

+        result.hasField23 = true;

+        result.field23_ = value;

+        return this;

+      }

+      public Builder ClearField23() {

+        PrepareBuilder();

+        result.hasField23 = false;

+        result.field23_ = 0;

+        return this;

+      }

+      

+      public bool HasField24 {

+        get { return result.hasField24; }

+      }

+      public bool Field24 {

+        get { return result.Field24; }

+        set { SetField24(value); }

+      }

+      public Builder SetField24(bool value) {

+        PrepareBuilder();

+        result.hasField24 = true;

+        result.field24_ = value;

+        return this;

+      }

+      public Builder ClearField24() {

+        PrepareBuilder();

+        result.hasField24 = false;

+        result.field24_ = false;

+        return this;

+      }

+      

+      public bool HasField25 {

+        get { return result.hasField25; }

+      }

+      public int Field25 {

+        get { return result.Field25; }

+        set { SetField25(value); }

+      }

+      public Builder SetField25(int value) {

+        PrepareBuilder();

+        result.hasField25 = true;

+        result.field25_ = value;

+        return this;

+      }

+      public Builder ClearField25() {

+        PrepareBuilder();

+        result.hasField25 = false;

+        result.field25_ = 0;

+        return this;

+      }

+      

+      public bool HasField15 {

+       get { return result.hasField15; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage Field15 {

+        get { return result.Field15; }

+        set { SetField15(value); }

+      }

+      public Builder SetField15(global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField15 = true;

+        result.field15_ = value;

+        return this;

+      }

+      public Builder SetField15(global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasField15 = true;

+        result.field15_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeField15(global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasField15 &&

+            result.field15_ != global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.DefaultInstance) {

+            result.field15_ = global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.CreateBuilder(result.field15_).MergeFrom(value).BuildPartial();

+        } else {

+          result.field15_ = value;

+        }

+        result.hasField15 = true;

+        return this;

+      }

+      public Builder ClearField15() {

+        PrepareBuilder();

+        result.hasField15 = false;

+        result.field15_ = null;

+        return this;

+      }

+      

+      public bool HasField78 {

+        get { return result.hasField78; }

+      }

+      public bool Field78 {

+        get { return result.Field78; }

+        set { SetField78(value); }

+      }

+      public Builder SetField78(bool value) {

+        PrepareBuilder();

+        result.hasField78 = true;

+        result.field78_ = value;

+        return this;

+      }

+      public Builder ClearField78() {

+        PrepareBuilder();

+        result.hasField78 = false;

+        result.field78_ = false;

+        return this;

+      }

+      

+      public bool HasField67 {

+        get { return result.hasField67; }

+      }

+      public int Field67 {

+        get { return result.Field67; }

+        set { SetField67(value); }

+      }

+      public Builder SetField67(int value) {

+        PrepareBuilder();

+        result.hasField67 = true;

+        result.field67_ = value;

+        return this;

+      }

+      public Builder ClearField67() {

+        PrepareBuilder();

+        result.hasField67 = false;

+        result.field67_ = 0;

+        return this;

+      }

+      

+      public bool HasField68 {

+        get { return result.hasField68; }

+      }

+      public int Field68 {

+        get { return result.Field68; }

+        set { SetField68(value); }

+      }

+      public Builder SetField68(int value) {

+        PrepareBuilder();

+        result.hasField68 = true;

+        result.field68_ = value;

+        return this;

+      }

+      public Builder ClearField68() {

+        PrepareBuilder();

+        result.hasField68 = false;

+        result.field68_ = 0;

+        return this;

+      }

+      

+      public bool HasField128 {

+        get { return result.hasField128; }

+      }

+      public int Field128 {

+        get { return result.Field128; }

+        set { SetField128(value); }

+      }

+      public Builder SetField128(int value) {

+        PrepareBuilder();

+        result.hasField128 = true;

+        result.field128_ = value;

+        return this;

+      }

+      public Builder ClearField128() {

+        PrepareBuilder();

+        result.hasField128 = false;

+        result.field128_ = 0;

+        return this;

+      }

+      

+      public bool HasField129 {

+        get { return result.hasField129; }

+      }

+      public string Field129 {

+        get { return result.Field129; }

+        set { SetField129(value); }

+      }

+      public Builder SetField129(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField129 = true;

+        result.field129_ = value;

+        return this;

+      }

+      public Builder ClearField129() {

+        PrepareBuilder();

+        result.hasField129 = false;

+        result.field129_ = "xxxxxxxxxxxxxxxxxxxxx";

+        return this;

+      }

+      

+      public bool HasField131 {

+        get { return result.hasField131; }

+      }

+      public int Field131 {

+        get { return result.Field131; }

+        set { SetField131(value); }

+      }

+      public Builder SetField131(int value) {

+        PrepareBuilder();

+        result.hasField131 = true;

+        result.field131_ = value;

+        return this;

+      }

+      public Builder ClearField131() {

+        PrepareBuilder();

+        result.hasField131 = false;

+        result.field131_ = 0;

+        return this;

+      }

+    }

+    static SizeMessage1() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SizeMessage1SubMessage : pb::GeneratedMessage<SizeMessage1SubMessage, SizeMessage1SubMessage.Builder> {

+    private SizeMessage1SubMessage() { }

+    private static readonly SizeMessage1SubMessage defaultInstance = new SizeMessage1SubMessage().MakeReadOnly();

+    public static SizeMessage1SubMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SizeMessage1SubMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SizeMessage1SubMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_unittest_google_size_SizeMessage1SubMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage1SubMessage, SizeMessage1SubMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_unittest_google_size_SizeMessage1SubMessage__FieldAccessorTable; }

+    }

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private int field1_;

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public int Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private int field2_;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public int Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private int field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public int Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field15FieldNumber = 15;

+    private bool hasField15;

+    private string field15_ = "";

+    public bool HasField15 {

+      get { return hasField15; }

+    }

+    public string Field15 {

+      get { return field15_; }

+    }

+    

+    public const int Field12FieldNumber = 12;

+    private bool hasField12;

+    private bool field12_ = true;

+    public bool HasField12 {

+      get { return hasField12; }

+    }

+    public bool Field12 {

+      get { return field12_; }

+    }

+    

+    public const int Field13FieldNumber = 13;

+    private bool hasField13;

+    private long field13_;

+    public bool HasField13 {

+      get { return hasField13; }

+    }

+    public long Field13 {

+      get { return field13_; }

+    }

+    

+    public const int Field14FieldNumber = 14;

+    private bool hasField14;

+    private long field14_;

+    public bool HasField14 {

+      get { return hasField14; }

+    }

+    public long Field14 {

+      get { return field14_; }

+    }

+    

+    public const int Field16FieldNumber = 16;

+    private bool hasField16;

+    private int field16_;

+    public bool HasField16 {

+      get { return hasField16; }

+    }

+    public int Field16 {

+      get { return field16_; }

+    }

+    

+    public const int Field19FieldNumber = 19;

+    private bool hasField19;

+    private int field19_ = 2;

+    public bool HasField19 {

+      get { return hasField19; }

+    }

+    public int Field19 {

+      get { return field19_; }

+    }

+    

+    public const int Field20FieldNumber = 20;

+    private bool hasField20;

+    private bool field20_ = true;

+    public bool HasField20 {

+      get { return hasField20; }

+    }

+    public bool Field20 {

+      get { return field20_; }

+    }

+    

+    public const int Field28FieldNumber = 28;

+    private bool hasField28;

+    private bool field28_ = true;

+    public bool HasField28 {

+      get { return hasField28; }

+    }

+    public bool Field28 {

+      get { return field28_; }

+    }

+    

+    public const int Field21FieldNumber = 21;

+    private bool hasField21;

+    private ulong field21_;

+    public bool HasField21 {

+      get { return hasField21; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong Field21 {

+      get { return field21_; }

+    }

+    

+    public const int Field22FieldNumber = 22;

+    private bool hasField22;

+    private int field22_;

+    public bool HasField22 {

+      get { return hasField22; }

+    }

+    public int Field22 {

+      get { return field22_; }

+    }

+    

+    public const int Field23FieldNumber = 23;

+    private bool hasField23;

+    private bool field23_;

+    public bool HasField23 {

+      get { return hasField23; }

+    }

+    public bool Field23 {

+      get { return field23_; }

+    }

+    

+    public const int Field206FieldNumber = 206;

+    private bool hasField206;

+    private bool field206_;

+    public bool HasField206 {

+      get { return hasField206; }

+    }

+    public bool Field206 {

+      get { return field206_; }

+    }

+    

+    public const int Field203FieldNumber = 203;

+    private bool hasField203;

+    private uint field203_;

+    public bool HasField203 {

+      get { return hasField203; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint Field203 {

+      get { return field203_; }

+    }

+    

+    public const int Field204FieldNumber = 204;

+    private bool hasField204;

+    private int field204_;

+    public bool HasField204 {

+      get { return hasField204; }

+    }

+    public int Field204 {

+      get { return field204_; }

+    }

+    

+    public const int Field205FieldNumber = 205;

+    private bool hasField205;

+    private string field205_ = "";

+    public bool HasField205 {

+      get { return hasField205; }

+    }

+    public string Field205 {

+      get { return field205_; }

+    }

+    

+    public const int Field207FieldNumber = 207;

+    private bool hasField207;

+    private ulong field207_;

+    public bool HasField207 {

+      get { return hasField207; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong Field207 {

+      get { return field207_; }

+    }

+    

+    public const int Field300FieldNumber = 300;

+    private bool hasField300;

+    private ulong field300_;

+    public bool HasField300 {

+      get { return hasField300; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong Field300 {

+      get { return field300_; }

+    }

+    

+    public static SizeMessage1SubMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage1SubMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SizeMessage1SubMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SizeMessage1SubMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage1SubMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SizeMessage1SubMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SizeMessage1SubMessage result;

+      

+      private SizeMessage1SubMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SizeMessage1SubMessage original = result;

+          result = new SizeMessage1SubMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SizeMessage1SubMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.Descriptor; }

+      }

+      

+      public override SizeMessage1SubMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage1SubMessage.DefaultInstance; }

+      }

+      

+      public override SizeMessage1SubMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public int Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(int value) {

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = 0;

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public int Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(int value) {

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = 0;

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public int Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(int value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0;

+        return this;

+      }

+      

+      public bool HasField15 {

+        get { return result.hasField15; }

+      }

+      public string Field15 {

+        get { return result.Field15; }

+        set { SetField15(value); }

+      }

+      public Builder SetField15(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField15 = true;

+        result.field15_ = value;

+        return this;

+      }

+      public Builder ClearField15() {

+        PrepareBuilder();

+        result.hasField15 = false;

+        result.field15_ = "";

+        return this;

+      }

+      

+      public bool HasField12 {

+        get { return result.hasField12; }

+      }

+      public bool Field12 {

+        get { return result.Field12; }

+        set { SetField12(value); }

+      }

+      public Builder SetField12(bool value) {

+        PrepareBuilder();

+        result.hasField12 = true;

+        result.field12_ = value;

+        return this;

+      }

+      public Builder ClearField12() {

+        PrepareBuilder();

+        result.hasField12 = false;

+        result.field12_ = true;

+        return this;

+      }

+      

+      public bool HasField13 {

+        get { return result.hasField13; }

+      }

+      public long Field13 {

+        get { return result.Field13; }

+        set { SetField13(value); }

+      }

+      public Builder SetField13(long value) {

+        PrepareBuilder();

+        result.hasField13 = true;

+        result.field13_ = value;

+        return this;

+      }

+      public Builder ClearField13() {

+        PrepareBuilder();

+        result.hasField13 = false;

+        result.field13_ = 0L;

+        return this;

+      }

+      

+      public bool HasField14 {

+        get { return result.hasField14; }

+      }

+      public long Field14 {

+        get { return result.Field14; }

+        set { SetField14(value); }

+      }

+      public Builder SetField14(long value) {

+        PrepareBuilder();

+        result.hasField14 = true;

+        result.field14_ = value;

+        return this;

+      }

+      public Builder ClearField14() {

+        PrepareBuilder();

+        result.hasField14 = false;

+        result.field14_ = 0L;

+        return this;

+      }

+      

+      public bool HasField16 {

+        get { return result.hasField16; }

+      }

+      public int Field16 {

+        get { return result.Field16; }

+        set { SetField16(value); }

+      }

+      public Builder SetField16(int value) {

+        PrepareBuilder();

+        result.hasField16 = true;

+        result.field16_ = value;

+        return this;

+      }

+      public Builder ClearField16() {

+        PrepareBuilder();

+        result.hasField16 = false;

+        result.field16_ = 0;

+        return this;

+      }

+      

+      public bool HasField19 {

+        get { return result.hasField19; }

+      }

+      public int Field19 {

+        get { return result.Field19; }

+        set { SetField19(value); }

+      }

+      public Builder SetField19(int value) {

+        PrepareBuilder();

+        result.hasField19 = true;

+        result.field19_ = value;

+        return this;

+      }

+      public Builder ClearField19() {

+        PrepareBuilder();

+        result.hasField19 = false;

+        result.field19_ = 2;

+        return this;

+      }

+      

+      public bool HasField20 {

+        get { return result.hasField20; }

+      }

+      public bool Field20 {

+        get { return result.Field20; }

+        set { SetField20(value); }

+      }

+      public Builder SetField20(bool value) {

+        PrepareBuilder();

+        result.hasField20 = true;

+        result.field20_ = value;

+        return this;

+      }

+      public Builder ClearField20() {

+        PrepareBuilder();

+        result.hasField20 = false;

+        result.field20_ = true;

+        return this;

+      }

+      

+      public bool HasField28 {

+        get { return result.hasField28; }

+      }

+      public bool Field28 {

+        get { return result.Field28; }

+        set { SetField28(value); }

+      }

+      public Builder SetField28(bool value) {

+        PrepareBuilder();

+        result.hasField28 = true;

+        result.field28_ = value;

+        return this;

+      }

+      public Builder ClearField28() {

+        PrepareBuilder();

+        result.hasField28 = false;

+        result.field28_ = true;

+        return this;

+      }

+      

+      public bool HasField21 {

+        get { return result.hasField21; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong Field21 {

+        get { return result.Field21; }

+        set { SetField21(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField21(ulong value) {

+        PrepareBuilder();

+        result.hasField21 = true;

+        result.field21_ = value;

+        return this;

+      }

+      public Builder ClearField21() {

+        PrepareBuilder();

+        result.hasField21 = false;

+        result.field21_ = 0;

+        return this;

+      }

+      

+      public bool HasField22 {

+        get { return result.hasField22; }

+      }

+      public int Field22 {

+        get { return result.Field22; }

+        set { SetField22(value); }

+      }

+      public Builder SetField22(int value) {

+        PrepareBuilder();

+        result.hasField22 = true;

+        result.field22_ = value;

+        return this;

+      }

+      public Builder ClearField22() {

+        PrepareBuilder();

+        result.hasField22 = false;

+        result.field22_ = 0;

+        return this;

+      }

+      

+      public bool HasField23 {

+        get { return result.hasField23; }

+      }

+      public bool Field23 {

+        get { return result.Field23; }

+        set { SetField23(value); }

+      }

+      public Builder SetField23(bool value) {

+        PrepareBuilder();

+        result.hasField23 = true;

+        result.field23_ = value;

+        return this;

+      }

+      public Builder ClearField23() {

+        PrepareBuilder();

+        result.hasField23 = false;

+        result.field23_ = false;

+        return this;

+      }

+      

+      public bool HasField206 {

+        get { return result.hasField206; }

+      }

+      public bool Field206 {

+        get { return result.Field206; }

+        set { SetField206(value); }

+      }

+      public Builder SetField206(bool value) {

+        PrepareBuilder();

+        result.hasField206 = true;

+        result.field206_ = value;

+        return this;

+      }

+      public Builder ClearField206() {

+        PrepareBuilder();

+        result.hasField206 = false;

+        result.field206_ = false;

+        return this;

+      }

+      

+      public bool HasField203 {

+        get { return result.hasField203; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint Field203 {

+        get { return result.Field203; }

+        set { SetField203(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField203(uint value) {

+        PrepareBuilder();

+        result.hasField203 = true;

+        result.field203_ = value;

+        return this;

+      }

+      public Builder ClearField203() {

+        PrepareBuilder();

+        result.hasField203 = false;

+        result.field203_ = 0;

+        return this;

+      }

+      

+      public bool HasField204 {

+        get { return result.hasField204; }

+      }

+      public int Field204 {

+        get { return result.Field204; }

+        set { SetField204(value); }

+      }

+      public Builder SetField204(int value) {

+        PrepareBuilder();

+        result.hasField204 = true;

+        result.field204_ = value;

+        return this;

+      }

+      public Builder ClearField204() {

+        PrepareBuilder();

+        result.hasField204 = false;

+        result.field204_ = 0;

+        return this;

+      }

+      

+      public bool HasField205 {

+        get { return result.hasField205; }

+      }

+      public string Field205 {

+        get { return result.Field205; }

+        set { SetField205(value); }

+      }

+      public Builder SetField205(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField205 = true;

+        result.field205_ = value;

+        return this;

+      }

+      public Builder ClearField205() {

+        PrepareBuilder();

+        result.hasField205 = false;

+        result.field205_ = "";

+        return this;

+      }

+      

+      public bool HasField207 {

+        get { return result.hasField207; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong Field207 {

+        get { return result.Field207; }

+        set { SetField207(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField207(ulong value) {

+        PrepareBuilder();

+        result.hasField207 = true;

+        result.field207_ = value;

+        return this;

+      }

+      public Builder ClearField207() {

+        PrepareBuilder();

+        result.hasField207 = false;

+        result.field207_ = 0UL;

+        return this;

+      }

+      

+      public bool HasField300 {

+        get { return result.hasField300; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong Field300 {

+        get { return result.Field300; }

+        set { SetField300(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField300(ulong value) {

+        PrepareBuilder();

+        result.hasField300 = true;

+        result.field300_ = value;

+        return this;

+      }

+      public Builder ClearField300() {

+        PrepareBuilder();

+        result.hasField300 = false;

+        result.field300_ = 0UL;

+        return this;

+      }

+    }

+    static SizeMessage1SubMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SizeMessage2 : pb::GeneratedMessage<SizeMessage2, SizeMessage2.Builder> {

+    private SizeMessage2() { }

+    private static readonly SizeMessage2 defaultInstance = new SizeMessage2().MakeReadOnly();

+    public static SizeMessage2 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SizeMessage2 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SizeMessage2 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_unittest_google_size_SizeMessage2__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage2, SizeMessage2.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_unittest_google_size_SizeMessage2__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Group1 : pb::GeneratedMessage<Group1, Group1.Builder> {

+        private Group1() { }

+        private static readonly Group1 defaultInstance = new Group1().MakeReadOnly();

+        public static Group1 DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Group1 DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Group1 ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_unittest_google_size_SizeMessage2_Group1__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Group1, Group1.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_unittest_google_size_SizeMessage2_Group1__FieldAccessorTable; }

+        }

+        

+        public const int Field11FieldNumber = 11;

+        private bool hasField11;

+        private float field11_;

+        public bool HasField11 {

+          get { return hasField11; }

+        }

+        public float Field11 {

+          get { return field11_; }

+        }

+        

+        public const int Field26FieldNumber = 26;

+        private bool hasField26;

+        private float field26_;

+        public bool HasField26 {

+          get { return hasField26; }

+        }

+        public float Field26 {

+          get { return field26_; }

+        }

+        

+        public const int Field12FieldNumber = 12;

+        private bool hasField12;

+        private string field12_ = "";

+        public bool HasField12 {

+          get { return hasField12; }

+        }

+        public string Field12 {

+          get { return field12_; }

+        }

+        

+        public const int Field13FieldNumber = 13;

+        private bool hasField13;

+        private string field13_ = "";

+        public bool HasField13 {

+          get { return hasField13; }

+        }

+        public string Field13 {

+          get { return field13_; }

+        }

+        

+        public const int Field14FieldNumber = 14;

+        private pbc::PopsicleList<string> field14_ = new pbc::PopsicleList<string>();

+        public scg::IList<string> Field14List {

+          get { return pbc::Lists.AsReadOnly(field14_); }

+        }

+        public int Field14Count {

+          get { return field14_.Count; }

+        }

+        public string GetField14(int index) {

+          return field14_[index];

+        }

+        

+        public const int Field15FieldNumber = 15;

+        private bool hasField15;

+        private ulong field15_;

+        public bool HasField15 {

+          get { return hasField15; }

+        }

+        [global::System.CLSCompliant(false)]

+        public ulong Field15 {

+          get { return field15_; }

+        }

+        

+        public const int Field5FieldNumber = 5;

+        private bool hasField5;

+        private int field5_;

+        public bool HasField5 {

+          get { return hasField5; }

+        }

+        public int Field5 {

+          get { return field5_; }

+        }

+        

+        public const int Field27FieldNumber = 27;

+        private bool hasField27;

+        private string field27_ = "";

+        public bool HasField27 {

+          get { return hasField27; }

+        }

+        public string Field27 {

+          get { return field27_; }

+        }

+        

+        public const int Field28FieldNumber = 28;

+        private bool hasField28;

+        private int field28_;

+        public bool HasField28 {

+          get { return hasField28; }

+        }

+        public int Field28 {

+          get { return field28_; }

+        }

+        

+        public const int Field29FieldNumber = 29;

+        private bool hasField29;

+        private string field29_ = "";

+        public bool HasField29 {

+          get { return hasField29; }

+        }

+        public string Field29 {

+          get { return field29_; }

+        }

+        

+        public const int Field16FieldNumber = 16;

+        private bool hasField16;

+        private string field16_ = "";

+        public bool HasField16 {

+          get { return hasField16; }

+        }

+        public string Field16 {

+          get { return field16_; }

+        }

+        

+        public const int Field22FieldNumber = 22;

+        private pbc::PopsicleList<string> field22_ = new pbc::PopsicleList<string>();

+        public scg::IList<string> Field22List {

+          get { return pbc::Lists.AsReadOnly(field22_); }

+        }

+        public int Field22Count {

+          get { return field22_.Count; }

+        }

+        public string GetField22(int index) {

+          return field22_[index];

+        }

+        

+        public const int Field73FieldNumber = 73;

+        private pbc::PopsicleList<int> field73_ = new pbc::PopsicleList<int>();

+        public scg::IList<int> Field73List {

+          get { return pbc::Lists.AsReadOnly(field73_); }

+        }

+        public int Field73Count {

+          get { return field73_.Count; }

+        }

+        public int GetField73(int index) {

+          return field73_[index];

+        }

+        

+        public const int Field20FieldNumber = 20;

+        private bool hasField20;

+        private int field20_;

+        public bool HasField20 {

+          get { return hasField20; }

+        }

+        public int Field20 {

+          get { return field20_; }

+        }

+        

+        public const int Field24FieldNumber = 24;

+        private bool hasField24;

+        private string field24_ = "";

+        public bool HasField24 {

+          get { return hasField24; }

+        }

+        public string Field24 {

+          get { return field24_; }

+        }

+        

+        public const int Field31FieldNumber = 31;

+        private bool hasField31;

+        private global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage field31_;

+        public bool HasField31 {

+          get { return hasField31; }

+        }

+        public global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage Field31 {

+          get { return field31_ ?? global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.DefaultInstance; }

+        }

+        

+        public static Group1 ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Group1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Group1 ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Group1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Group1 ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Group1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Group1 ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Group1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Group1 ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Group1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Group1 MakeReadOnly() {

+          field14_.MakeReadOnly();

+          field22_.MakeReadOnly();

+          field73_.MakeReadOnly();

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Group1 prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Group1, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Group1 cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Group1 result;

+          

+          private Group1 PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Group1 original = result;

+              result = new Group1();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Group1 MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1.Descriptor; }

+          }

+          

+          public override Group1 DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1.DefaultInstance; }

+          }

+          

+          public override Group1 BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          

+          public bool HasField11 {

+            get { return result.hasField11; }

+          }

+          public float Field11 {

+            get { return result.Field11; }

+            set { SetField11(value); }

+          }

+          public Builder SetField11(float value) {

+            PrepareBuilder();

+            result.hasField11 = true;

+            result.field11_ = value;

+            return this;

+          }

+          public Builder ClearField11() {

+            PrepareBuilder();

+            result.hasField11 = false;

+            result.field11_ = 0F;

+            return this;

+          }

+          

+          public bool HasField26 {

+            get { return result.hasField26; }

+          }

+          public float Field26 {

+            get { return result.Field26; }

+            set { SetField26(value); }

+          }

+          public Builder SetField26(float value) {

+            PrepareBuilder();

+            result.hasField26 = true;

+            result.field26_ = value;

+            return this;

+          }

+          public Builder ClearField26() {

+            PrepareBuilder();

+            result.hasField26 = false;

+            result.field26_ = 0F;

+            return this;

+          }

+          

+          public bool HasField12 {

+            get { return result.hasField12; }

+          }

+          public string Field12 {

+            get { return result.Field12; }

+            set { SetField12(value); }

+          }

+          public Builder SetField12(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField12 = true;

+            result.field12_ = value;

+            return this;

+          }

+          public Builder ClearField12() {

+            PrepareBuilder();

+            result.hasField12 = false;

+            result.field12_ = "";

+            return this;

+          }

+          

+          public bool HasField13 {

+            get { return result.hasField13; }

+          }

+          public string Field13 {

+            get { return result.Field13; }

+            set { SetField13(value); }

+          }

+          public Builder SetField13(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField13 = true;

+            result.field13_ = value;

+            return this;

+          }

+          public Builder ClearField13() {

+            PrepareBuilder();

+            result.hasField13 = false;

+            result.field13_ = "";

+            return this;

+          }

+          

+          public pbc::IPopsicleList<string> Field14List {

+            get { return PrepareBuilder().field14_; }

+          }

+          public int Field14Count {

+            get { return result.Field14Count; }

+          }

+          public string GetField14(int index) {

+            return result.GetField14(index);

+          }

+          public Builder SetField14(int index, string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field14_[index] = value;

+            return this;

+          }

+          public Builder AddField14(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field14_.Add(value);

+            return this;

+          }

+          public Builder AddRangeField14(scg::IEnumerable<string> values) {

+            PrepareBuilder();

+            result.field14_.Add(values);

+            return this;

+          }

+          public Builder ClearField14() {

+            PrepareBuilder();

+            result.field14_.Clear();

+            return this;

+          }

+          

+          public bool HasField15 {

+            get { return result.hasField15; }

+          }

+          [global::System.CLSCompliant(false)]

+          public ulong Field15 {

+            get { return result.Field15; }

+            set { SetField15(value); }

+          }

+          [global::System.CLSCompliant(false)]

+          public Builder SetField15(ulong value) {

+            PrepareBuilder();

+            result.hasField15 = true;

+            result.field15_ = value;

+            return this;

+          }

+          public Builder ClearField15() {

+            PrepareBuilder();

+            result.hasField15 = false;

+            result.field15_ = 0UL;

+            return this;

+          }

+          

+          public bool HasField5 {

+            get { return result.hasField5; }

+          }

+          public int Field5 {

+            get { return result.Field5; }

+            set { SetField5(value); }

+          }

+          public Builder SetField5(int value) {

+            PrepareBuilder();

+            result.hasField5 = true;

+            result.field5_ = value;

+            return this;

+          }

+          public Builder ClearField5() {

+            PrepareBuilder();

+            result.hasField5 = false;

+            result.field5_ = 0;

+            return this;

+          }

+          

+          public bool HasField27 {

+            get { return result.hasField27; }

+          }

+          public string Field27 {

+            get { return result.Field27; }

+            set { SetField27(value); }

+          }

+          public Builder SetField27(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField27 = true;

+            result.field27_ = value;

+            return this;

+          }

+          public Builder ClearField27() {

+            PrepareBuilder();

+            result.hasField27 = false;

+            result.field27_ = "";

+            return this;

+          }

+          

+          public bool HasField28 {

+            get { return result.hasField28; }

+          }

+          public int Field28 {

+            get { return result.Field28; }

+            set { SetField28(value); }

+          }

+          public Builder SetField28(int value) {

+            PrepareBuilder();

+            result.hasField28 = true;

+            result.field28_ = value;

+            return this;

+          }

+          public Builder ClearField28() {

+            PrepareBuilder();

+            result.hasField28 = false;

+            result.field28_ = 0;

+            return this;

+          }

+          

+          public bool HasField29 {

+            get { return result.hasField29; }

+          }

+          public string Field29 {

+            get { return result.Field29; }

+            set { SetField29(value); }

+          }

+          public Builder SetField29(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField29 = true;

+            result.field29_ = value;

+            return this;

+          }

+          public Builder ClearField29() {

+            PrepareBuilder();

+            result.hasField29 = false;

+            result.field29_ = "";

+            return this;

+          }

+          

+          public bool HasField16 {

+            get { return result.hasField16; }

+          }

+          public string Field16 {

+            get { return result.Field16; }

+            set { SetField16(value); }

+          }

+          public Builder SetField16(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField16 = true;

+            result.field16_ = value;

+            return this;

+          }

+          public Builder ClearField16() {

+            PrepareBuilder();

+            result.hasField16 = false;

+            result.field16_ = "";

+            return this;

+          }

+          

+          public pbc::IPopsicleList<string> Field22List {

+            get { return PrepareBuilder().field22_; }

+          }

+          public int Field22Count {

+            get { return result.Field22Count; }

+          }

+          public string GetField22(int index) {

+            return result.GetField22(index);

+          }

+          public Builder SetField22(int index, string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field22_[index] = value;

+            return this;

+          }

+          public Builder AddField22(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field22_.Add(value);

+            return this;

+          }

+          public Builder AddRangeField22(scg::IEnumerable<string> values) {

+            PrepareBuilder();

+            result.field22_.Add(values);

+            return this;

+          }

+          public Builder ClearField22() {

+            PrepareBuilder();

+            result.field22_.Clear();

+            return this;

+          }

+          

+          public pbc::IPopsicleList<int> Field73List {

+            get { return PrepareBuilder().field73_; }

+          }

+          public int Field73Count {

+            get { return result.Field73Count; }

+          }

+          public int GetField73(int index) {

+            return result.GetField73(index);

+          }

+          public Builder SetField73(int index, int value) {

+            PrepareBuilder();

+            result.field73_[index] = value;

+            return this;

+          }

+          public Builder AddField73(int value) {

+            PrepareBuilder();

+            result.field73_.Add(value);

+            return this;

+          }

+          public Builder AddRangeField73(scg::IEnumerable<int> values) {

+            PrepareBuilder();

+            result.field73_.Add(values);

+            return this;

+          }

+          public Builder ClearField73() {

+            PrepareBuilder();

+            result.field73_.Clear();

+            return this;

+          }

+          

+          public bool HasField20 {

+            get { return result.hasField20; }

+          }

+          public int Field20 {

+            get { return result.Field20; }

+            set { SetField20(value); }

+          }

+          public Builder SetField20(int value) {

+            PrepareBuilder();

+            result.hasField20 = true;

+            result.field20_ = value;

+            return this;

+          }

+          public Builder ClearField20() {

+            PrepareBuilder();

+            result.hasField20 = false;

+            result.field20_ = 0;

+            return this;

+          }

+          

+          public bool HasField24 {

+            get { return result.hasField24; }

+          }

+          public string Field24 {

+            get { return result.Field24; }

+            set { SetField24(value); }

+          }

+          public Builder SetField24(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField24 = true;

+            result.field24_ = value;

+            return this;

+          }

+          public Builder ClearField24() {

+            PrepareBuilder();

+            result.hasField24 = false;

+            result.field24_ = "";

+            return this;

+          }

+          

+          public bool HasField31 {

+           get { return result.hasField31; }

+          }

+          public global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage Field31 {

+            get { return result.Field31; }

+            set { SetField31(value); }

+          }

+          public Builder SetField31(global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField31 = true;

+            result.field31_ = value;

+            return this;

+          }

+          public Builder SetField31(global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.Builder builderForValue) {

+            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+            PrepareBuilder();

+            result.hasField31 = true;

+            result.field31_ = builderForValue.Build();

+            return this;

+          }

+          public Builder MergeField31(global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            if (result.hasField31 &&

+                result.field31_ != global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.DefaultInstance) {

+                result.field31_ = global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.CreateBuilder(result.field31_).MergeFrom(value).BuildPartial();

+            } else {

+              result.field31_ = value;

+            }

+            result.hasField31 = true;

+            return this;

+          }

+          public Builder ClearField31() {

+            PrepareBuilder();

+            result.hasField31 = false;

+            result.field31_ = null;

+            return this;

+          }

+        }

+        static Group1() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private string field1_ = "";

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public string Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private long field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public long Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field4FieldNumber = 4;

+    private bool hasField4;

+    private long field4_;

+    public bool HasField4 {

+      get { return hasField4; }

+    }

+    public long Field4 {

+      get { return field4_; }

+    }

+    

+    public const int Field30FieldNumber = 30;

+    private bool hasField30;

+    private long field30_;

+    public bool HasField30 {

+      get { return hasField30; }

+    }

+    public long Field30 {

+      get { return field30_; }

+    }

+    

+    public const int Field75FieldNumber = 75;

+    private bool hasField75;

+    private bool field75_;

+    public bool HasField75 {

+      get { return hasField75; }

+    }

+    public bool Field75 {

+      get { return field75_; }

+    }

+    

+    public const int Field6FieldNumber = 6;

+    private bool hasField6;

+    private string field6_ = "";

+    public bool HasField6 {

+      get { return hasField6; }

+    }

+    public string Field6 {

+      get { return field6_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private pb::ByteString field2_ = pb::ByteString.Empty;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public pb::ByteString Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field21FieldNumber = 21;

+    private bool hasField21;

+    private int field21_;

+    public bool HasField21 {

+      get { return hasField21; }

+    }

+    public int Field21 {

+      get { return field21_; }

+    }

+    

+    public const int Field71FieldNumber = 71;

+    private bool hasField71;

+    private int field71_;

+    public bool HasField71 {

+      get { return hasField71; }

+    }

+    public int Field71 {

+      get { return field71_; }

+    }

+    

+    public const int Field25FieldNumber = 25;

+    private bool hasField25;

+    private float field25_;

+    public bool HasField25 {

+      get { return hasField25; }

+    }

+    public float Field25 {

+      get { return field25_; }

+    }

+    

+    public const int Field109FieldNumber = 109;

+    private bool hasField109;

+    private int field109_;

+    public bool HasField109 {

+      get { return hasField109; }

+    }

+    public int Field109 {

+      get { return field109_; }

+    }

+    

+    public const int Field210FieldNumber = 210;

+    private bool hasField210;

+    private int field210_;

+    public bool HasField210 {

+      get { return hasField210; }

+    }

+    public int Field210 {

+      get { return field210_; }

+    }

+    

+    public const int Field211FieldNumber = 211;

+    private bool hasField211;

+    private int field211_;

+    public bool HasField211 {

+      get { return hasField211; }

+    }

+    public int Field211 {

+      get { return field211_; }

+    }

+    

+    public const int Field212FieldNumber = 212;

+    private bool hasField212;

+    private int field212_;

+    public bool HasField212 {

+      get { return hasField212; }

+    }

+    public int Field212 {

+      get { return field212_; }

+    }

+    

+    public const int Field213FieldNumber = 213;

+    private bool hasField213;

+    private int field213_;

+    public bool HasField213 {

+      get { return hasField213; }

+    }

+    public int Field213 {

+      get { return field213_; }

+    }

+    

+    public const int Field216FieldNumber = 216;

+    private bool hasField216;

+    private int field216_;

+    public bool HasField216 {

+      get { return hasField216; }

+    }

+    public int Field216 {

+      get { return field216_; }

+    }

+    

+    public const int Field217FieldNumber = 217;

+    private bool hasField217;

+    private int field217_;

+    public bool HasField217 {

+      get { return hasField217; }

+    }

+    public int Field217 {

+      get { return field217_; }

+    }

+    

+    public const int Field218FieldNumber = 218;

+    private bool hasField218;

+    private int field218_;

+    public bool HasField218 {

+      get { return hasField218; }

+    }

+    public int Field218 {

+      get { return field218_; }

+    }

+    

+    public const int Field220FieldNumber = 220;

+    private bool hasField220;

+    private int field220_;

+    public bool HasField220 {

+      get { return hasField220; }

+    }

+    public int Field220 {

+      get { return field220_; }

+    }

+    

+    public const int Field221FieldNumber = 221;

+    private bool hasField221;

+    private int field221_;

+    public bool HasField221 {

+      get { return hasField221; }

+    }

+    public int Field221 {

+      get { return field221_; }

+    }

+    

+    public const int Field222FieldNumber = 222;

+    private bool hasField222;

+    private float field222_;

+    public bool HasField222 {

+      get { return hasField222; }

+    }

+    public float Field222 {

+      get { return field222_; }

+    }

+    

+    public const int Field63FieldNumber = 63;

+    private bool hasField63;

+    private int field63_;

+    public bool HasField63 {

+      get { return hasField63; }

+    }

+    public int Field63 {

+      get { return field63_; }

+    }

+    

+    public const int Group1FieldNumber = 10;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1> group1_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1> Group1List {

+      get { return group1_; }

+    }

+    public int Group1Count {

+      get { return group1_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1 GetGroup1(int index) {

+      return group1_[index];

+    }

+    

+    public const int Field128FieldNumber = 128;

+    private pbc::PopsicleList<string> field128_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> Field128List {

+      get { return pbc::Lists.AsReadOnly(field128_); }

+    }

+    public int Field128Count {

+      get { return field128_.Count; }

+    }

+    public string GetField128(int index) {

+      return field128_[index];

+    }

+    

+    public const int Field131FieldNumber = 131;

+    private bool hasField131;

+    private long field131_;

+    public bool HasField131 {

+      get { return hasField131; }

+    }

+    public long Field131 {

+      get { return field131_; }

+    }

+    

+    public const int Field127FieldNumber = 127;

+    private pbc::PopsicleList<string> field127_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> Field127List {

+      get { return pbc::Lists.AsReadOnly(field127_); }

+    }

+    public int Field127Count {

+      get { return field127_.Count; }

+    }

+    public string GetField127(int index) {

+      return field127_[index];

+    }

+    

+    public const int Field129FieldNumber = 129;

+    private bool hasField129;

+    private int field129_;

+    public bool HasField129 {

+      get { return hasField129; }

+    }

+    public int Field129 {

+      get { return field129_; }

+    }

+    

+    public const int Field130FieldNumber = 130;

+    private pbc::PopsicleList<long> field130_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> Field130List {

+      get { return pbc::Lists.AsReadOnly(field130_); }

+    }

+    public int Field130Count {

+      get { return field130_.Count; }

+    }

+    public long GetField130(int index) {

+      return field130_[index];

+    }

+    

+    public const int Field205FieldNumber = 205;

+    private bool hasField205;

+    private bool field205_;

+    public bool HasField205 {

+      get { return hasField205; }

+    }

+    public bool Field205 {

+      get { return field205_; }

+    }

+    

+    public const int Field206FieldNumber = 206;

+    private bool hasField206;

+    private bool field206_;

+    public bool HasField206 {

+      get { return hasField206; }

+    }

+    public bool Field206 {

+      get { return field206_; }

+    }

+    

+    public static SizeMessage2 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage2 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SizeMessage2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SizeMessage2 MakeReadOnly() {

+      group1_.MakeReadOnly();

+      field128_.MakeReadOnly();

+      field127_.MakeReadOnly();

+      field130_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SizeMessage2 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage2, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SizeMessage2 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SizeMessage2 result;

+      

+      private SizeMessage2 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SizeMessage2 original = result;

+          result = new SizeMessage2();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SizeMessage2 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Descriptor; }

+      }

+      

+      public override SizeMessage2 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage2.DefaultInstance; }

+      }

+      

+      public override SizeMessage2 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public string Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = "";

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public long Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(long value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0L;

+        return this;

+      }

+      

+      public bool HasField4 {

+        get { return result.hasField4; }

+      }

+      public long Field4 {

+        get { return result.Field4; }

+        set { SetField4(value); }

+      }

+      public Builder SetField4(long value) {

+        PrepareBuilder();

+        result.hasField4 = true;

+        result.field4_ = value;

+        return this;

+      }

+      public Builder ClearField4() {

+        PrepareBuilder();

+        result.hasField4 = false;

+        result.field4_ = 0L;

+        return this;

+      }

+      

+      public bool HasField30 {

+        get { return result.hasField30; }

+      }

+      public long Field30 {

+        get { return result.Field30; }

+        set { SetField30(value); }

+      }

+      public Builder SetField30(long value) {

+        PrepareBuilder();

+        result.hasField30 = true;

+        result.field30_ = value;

+        return this;

+      }

+      public Builder ClearField30() {

+        PrepareBuilder();

+        result.hasField30 = false;

+        result.field30_ = 0L;

+        return this;

+      }

+      

+      public bool HasField75 {

+        get { return result.hasField75; }

+      }

+      public bool Field75 {

+        get { return result.Field75; }

+        set { SetField75(value); }

+      }

+      public Builder SetField75(bool value) {

+        PrepareBuilder();

+        result.hasField75 = true;

+        result.field75_ = value;

+        return this;

+      }

+      public Builder ClearField75() {

+        PrepareBuilder();

+        result.hasField75 = false;

+        result.field75_ = false;

+        return this;

+      }

+      

+      public bool HasField6 {

+        get { return result.hasField6; }

+      }

+      public string Field6 {

+        get { return result.Field6; }

+        set { SetField6(value); }

+      }

+      public Builder SetField6(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField6 = true;

+        result.field6_ = value;

+        return this;

+      }

+      public Builder ClearField6() {

+        PrepareBuilder();

+        result.hasField6 = false;

+        result.field6_ = "";

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public pb::ByteString Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = pb::ByteString.Empty;

+        return this;

+      }

+      

+      public bool HasField21 {

+        get { return result.hasField21; }

+      }

+      public int Field21 {

+        get { return result.Field21; }

+        set { SetField21(value); }

+      }

+      public Builder SetField21(int value) {

+        PrepareBuilder();

+        result.hasField21 = true;

+        result.field21_ = value;

+        return this;

+      }

+      public Builder ClearField21() {

+        PrepareBuilder();

+        result.hasField21 = false;

+        result.field21_ = 0;

+        return this;

+      }

+      

+      public bool HasField71 {

+        get { return result.hasField71; }

+      }

+      public int Field71 {

+        get { return result.Field71; }

+        set { SetField71(value); }

+      }

+      public Builder SetField71(int value) {

+        PrepareBuilder();

+        result.hasField71 = true;

+        result.field71_ = value;

+        return this;

+      }

+      public Builder ClearField71() {

+        PrepareBuilder();

+        result.hasField71 = false;

+        result.field71_ = 0;

+        return this;

+      }

+      

+      public bool HasField25 {

+        get { return result.hasField25; }

+      }

+      public float Field25 {

+        get { return result.Field25; }

+        set { SetField25(value); }

+      }

+      public Builder SetField25(float value) {

+        PrepareBuilder();

+        result.hasField25 = true;

+        result.field25_ = value;

+        return this;

+      }

+      public Builder ClearField25() {

+        PrepareBuilder();

+        result.hasField25 = false;

+        result.field25_ = 0F;

+        return this;

+      }

+      

+      public bool HasField109 {

+        get { return result.hasField109; }

+      }

+      public int Field109 {

+        get { return result.Field109; }

+        set { SetField109(value); }

+      }

+      public Builder SetField109(int value) {

+        PrepareBuilder();

+        result.hasField109 = true;

+        result.field109_ = value;

+        return this;

+      }

+      public Builder ClearField109() {

+        PrepareBuilder();

+        result.hasField109 = false;

+        result.field109_ = 0;

+        return this;

+      }

+      

+      public bool HasField210 {

+        get { return result.hasField210; }

+      }

+      public int Field210 {

+        get { return result.Field210; }

+        set { SetField210(value); }

+      }

+      public Builder SetField210(int value) {

+        PrepareBuilder();

+        result.hasField210 = true;

+        result.field210_ = value;

+        return this;

+      }

+      public Builder ClearField210() {

+        PrepareBuilder();

+        result.hasField210 = false;

+        result.field210_ = 0;

+        return this;

+      }

+      

+      public bool HasField211 {

+        get { return result.hasField211; }

+      }

+      public int Field211 {

+        get { return result.Field211; }

+        set { SetField211(value); }

+      }

+      public Builder SetField211(int value) {

+        PrepareBuilder();

+        result.hasField211 = true;

+        result.field211_ = value;

+        return this;

+      }

+      public Builder ClearField211() {

+        PrepareBuilder();

+        result.hasField211 = false;

+        result.field211_ = 0;

+        return this;

+      }

+      

+      public bool HasField212 {

+        get { return result.hasField212; }

+      }

+      public int Field212 {

+        get { return result.Field212; }

+        set { SetField212(value); }

+      }

+      public Builder SetField212(int value) {

+        PrepareBuilder();

+        result.hasField212 = true;

+        result.field212_ = value;

+        return this;

+      }

+      public Builder ClearField212() {

+        PrepareBuilder();

+        result.hasField212 = false;

+        result.field212_ = 0;

+        return this;

+      }

+      

+      public bool HasField213 {

+        get { return result.hasField213; }

+      }

+      public int Field213 {

+        get { return result.Field213; }

+        set { SetField213(value); }

+      }

+      public Builder SetField213(int value) {

+        PrepareBuilder();

+        result.hasField213 = true;

+        result.field213_ = value;

+        return this;

+      }

+      public Builder ClearField213() {

+        PrepareBuilder();

+        result.hasField213 = false;

+        result.field213_ = 0;

+        return this;

+      }

+      

+      public bool HasField216 {

+        get { return result.hasField216; }

+      }

+      public int Field216 {

+        get { return result.Field216; }

+        set { SetField216(value); }

+      }

+      public Builder SetField216(int value) {

+        PrepareBuilder();

+        result.hasField216 = true;

+        result.field216_ = value;

+        return this;

+      }

+      public Builder ClearField216() {

+        PrepareBuilder();

+        result.hasField216 = false;

+        result.field216_ = 0;

+        return this;

+      }

+      

+      public bool HasField217 {

+        get { return result.hasField217; }

+      }

+      public int Field217 {

+        get { return result.Field217; }

+        set { SetField217(value); }

+      }

+      public Builder SetField217(int value) {

+        PrepareBuilder();

+        result.hasField217 = true;

+        result.field217_ = value;

+        return this;

+      }

+      public Builder ClearField217() {

+        PrepareBuilder();

+        result.hasField217 = false;

+        result.field217_ = 0;

+        return this;

+      }

+      

+      public bool HasField218 {

+        get { return result.hasField218; }

+      }

+      public int Field218 {

+        get { return result.Field218; }

+        set { SetField218(value); }

+      }

+      public Builder SetField218(int value) {

+        PrepareBuilder();

+        result.hasField218 = true;

+        result.field218_ = value;

+        return this;

+      }

+      public Builder ClearField218() {

+        PrepareBuilder();

+        result.hasField218 = false;

+        result.field218_ = 0;

+        return this;

+      }

+      

+      public bool HasField220 {

+        get { return result.hasField220; }

+      }

+      public int Field220 {

+        get { return result.Field220; }

+        set { SetField220(value); }

+      }

+      public Builder SetField220(int value) {

+        PrepareBuilder();

+        result.hasField220 = true;

+        result.field220_ = value;

+        return this;

+      }

+      public Builder ClearField220() {

+        PrepareBuilder();

+        result.hasField220 = false;

+        result.field220_ = 0;

+        return this;

+      }

+      

+      public bool HasField221 {

+        get { return result.hasField221; }

+      }

+      public int Field221 {

+        get { return result.Field221; }

+        set { SetField221(value); }

+      }

+      public Builder SetField221(int value) {

+        PrepareBuilder();

+        result.hasField221 = true;

+        result.field221_ = value;

+        return this;

+      }

+      public Builder ClearField221() {

+        PrepareBuilder();

+        result.hasField221 = false;

+        result.field221_ = 0;

+        return this;

+      }

+      

+      public bool HasField222 {

+        get { return result.hasField222; }

+      }

+      public float Field222 {

+        get { return result.Field222; }

+        set { SetField222(value); }

+      }

+      public Builder SetField222(float value) {

+        PrepareBuilder();

+        result.hasField222 = true;

+        result.field222_ = value;

+        return this;

+      }

+      public Builder ClearField222() {

+        PrepareBuilder();

+        result.hasField222 = false;

+        result.field222_ = 0F;

+        return this;

+      }

+      

+      public bool HasField63 {

+        get { return result.hasField63; }

+      }

+      public int Field63 {

+        get { return result.Field63; }

+        set { SetField63(value); }

+      }

+      public Builder SetField63(int value) {

+        PrepareBuilder();

+        result.hasField63 = true;

+        result.field63_ = value;

+        return this;

+      }

+      public Builder ClearField63() {

+        PrepareBuilder();

+        result.hasField63 = false;

+        result.field63_ = 0;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1> Group1List {

+        get { return PrepareBuilder().group1_; }

+      }

+      public int Group1Count {

+        get { return result.Group1Count; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1 GetGroup1(int index) {

+        return result.GetGroup1(index);

+      }

+      public Builder SetGroup1(int index, global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.group1_[index] = value;

+        return this;

+      }

+      public Builder SetGroup1(int index, global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.group1_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.group1_.Add(value);

+        return this;

+      }

+      public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.group1_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeGroup1(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.SizeMessage2.Types.Group1> values) {

+        PrepareBuilder();

+        result.group1_.Add(values);

+        return this;

+      }

+      public Builder ClearGroup1() {

+        PrepareBuilder();

+        result.group1_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> Field128List {

+        get { return PrepareBuilder().field128_; }

+      }

+      public int Field128Count {

+        get { return result.Field128Count; }

+      }

+      public string GetField128(int index) {

+        return result.GetField128(index);

+      }

+      public Builder SetField128(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field128_[index] = value;

+        return this;

+      }

+      public Builder AddField128(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field128_.Add(value);

+        return this;

+      }

+      public Builder AddRangeField128(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.field128_.Add(values);

+        return this;

+      }

+      public Builder ClearField128() {

+        PrepareBuilder();

+        result.field128_.Clear();

+        return this;

+      }

+      

+      public bool HasField131 {

+        get { return result.hasField131; }

+      }

+      public long Field131 {

+        get { return result.Field131; }

+        set { SetField131(value); }

+      }

+      public Builder SetField131(long value) {

+        PrepareBuilder();

+        result.hasField131 = true;

+        result.field131_ = value;

+        return this;

+      }

+      public Builder ClearField131() {

+        PrepareBuilder();

+        result.hasField131 = false;

+        result.field131_ = 0L;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> Field127List {

+        get { return PrepareBuilder().field127_; }

+      }

+      public int Field127Count {

+        get { return result.Field127Count; }

+      }

+      public string GetField127(int index) {

+        return result.GetField127(index);

+      }

+      public Builder SetField127(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field127_[index] = value;

+        return this;

+      }

+      public Builder AddField127(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field127_.Add(value);

+        return this;

+      }

+      public Builder AddRangeField127(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.field127_.Add(values);

+        return this;

+      }

+      public Builder ClearField127() {

+        PrepareBuilder();

+        result.field127_.Clear();

+        return this;

+      }

+      

+      public bool HasField129 {

+        get { return result.hasField129; }

+      }

+      public int Field129 {

+        get { return result.Field129; }

+        set { SetField129(value); }

+      }

+      public Builder SetField129(int value) {

+        PrepareBuilder();

+        result.hasField129 = true;

+        result.field129_ = value;

+        return this;

+      }

+      public Builder ClearField129() {

+        PrepareBuilder();

+        result.hasField129 = false;

+        result.field129_ = 0;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> Field130List {

+        get { return PrepareBuilder().field130_; }

+      }

+      public int Field130Count {

+        get { return result.Field130Count; }

+      }

+      public long GetField130(int index) {

+        return result.GetField130(index);

+      }

+      public Builder SetField130(int index, long value) {

+        PrepareBuilder();

+        result.field130_[index] = value;

+        return this;

+      }

+      public Builder AddField130(long value) {

+        PrepareBuilder();

+        result.field130_.Add(value);

+        return this;

+      }

+      public Builder AddRangeField130(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.field130_.Add(values);

+        return this;

+      }

+      public Builder ClearField130() {

+        PrepareBuilder();

+        result.field130_.Clear();

+        return this;

+      }

+      

+      public bool HasField205 {

+        get { return result.hasField205; }

+      }

+      public bool Field205 {

+        get { return result.Field205; }

+        set { SetField205(value); }

+      }

+      public Builder SetField205(bool value) {

+        PrepareBuilder();

+        result.hasField205 = true;

+        result.field205_ = value;

+        return this;

+      }

+      public Builder ClearField205() {

+        PrepareBuilder();

+        result.hasField205 = false;

+        result.field205_ = false;

+        return this;

+      }

+      

+      public bool HasField206 {

+        get { return result.hasField206; }

+      }

+      public bool Field206 {

+        get { return result.Field206; }

+        set { SetField206(value); }

+      }

+      public Builder SetField206(bool value) {

+        PrepareBuilder();

+        result.hasField206 = true;

+        result.field206_ = value;

+        return this;

+      }

+      public Builder ClearField206() {

+        PrepareBuilder();

+        result.hasField206 = false;

+        result.field206_ = false;

+        return this;

+      }

+    }

+    static SizeMessage2() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SizeMessage2GroupedMessage : pb::GeneratedMessage<SizeMessage2GroupedMessage, SizeMessage2GroupedMessage.Builder> {

+    private SizeMessage2GroupedMessage() { }

+    private static readonly SizeMessage2GroupedMessage defaultInstance = new SizeMessage2GroupedMessage().MakeReadOnly();

+    public static SizeMessage2GroupedMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SizeMessage2GroupedMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SizeMessage2GroupedMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_unittest_google_size_SizeMessage2GroupedMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SizeMessage2GroupedMessage, SizeMessage2GroupedMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.internal__static_unittest_google_size_SizeMessage2GroupedMessage__FieldAccessorTable; }

+    }

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private float field1_;

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public float Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private float field2_;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public float Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private float field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public float Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field4FieldNumber = 4;

+    private bool hasField4;

+    private bool field4_;

+    public bool HasField4 {

+      get { return hasField4; }

+    }

+    public bool Field4 {

+      get { return field4_; }

+    }

+    

+    public const int Field5FieldNumber = 5;

+    private bool hasField5;

+    private bool field5_;

+    public bool HasField5 {

+      get { return hasField5; }

+    }

+    public bool Field5 {

+      get { return field5_; }

+    }

+    

+    public const int Field6FieldNumber = 6;

+    private bool hasField6;

+    private bool field6_ = true;

+    public bool HasField6 {

+      get { return hasField6; }

+    }

+    public bool Field6 {

+      get { return field6_; }

+    }

+    

+    public const int Field7FieldNumber = 7;

+    private bool hasField7;

+    private bool field7_;

+    public bool HasField7 {

+      get { return hasField7; }

+    }

+    public bool Field7 {

+      get { return field7_; }

+    }

+    

+    public const int Field8FieldNumber = 8;

+    private bool hasField8;

+    private float field8_;

+    public bool HasField8 {

+      get { return hasField8; }

+    }

+    public float Field8 {

+      get { return field8_; }

+    }

+    

+    public const int Field9FieldNumber = 9;

+    private bool hasField9;

+    private bool field9_;

+    public bool HasField9 {

+      get { return hasField9; }

+    }

+    public bool Field9 {

+      get { return field9_; }

+    }

+    

+    public const int Field10FieldNumber = 10;

+    private bool hasField10;

+    private float field10_;

+    public bool HasField10 {

+      get { return hasField10; }

+    }

+    public float Field10 {

+      get { return field10_; }

+    }

+    

+    public const int Field11FieldNumber = 11;

+    private bool hasField11;

+    private long field11_;

+    public bool HasField11 {

+      get { return hasField11; }

+    }

+    public long Field11 {

+      get { return field11_; }

+    }

+    

+    public static SizeMessage2GroupedMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SizeMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SizeMessage2GroupedMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SizeMessage2GroupedMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SizeMessage2GroupedMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SizeMessage2GroupedMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SizeMessage2GroupedMessage result;

+      

+      private SizeMessage2GroupedMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SizeMessage2GroupedMessage original = result;

+          result = new SizeMessage2GroupedMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SizeMessage2GroupedMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.Descriptor; }

+      }

+      

+      public override SizeMessage2GroupedMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SizeMessage2GroupedMessage.DefaultInstance; }

+      }

+      

+      public override SizeMessage2GroupedMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public float Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(float value) {

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = 0F;

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public float Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(float value) {

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = 0F;

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public float Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(float value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0F;

+        return this;

+      }

+      

+      public bool HasField4 {

+        get { return result.hasField4; }

+      }

+      public bool Field4 {

+        get { return result.Field4; }

+        set { SetField4(value); }

+      }

+      public Builder SetField4(bool value) {

+        PrepareBuilder();

+        result.hasField4 = true;

+        result.field4_ = value;

+        return this;

+      }

+      public Builder ClearField4() {

+        PrepareBuilder();

+        result.hasField4 = false;

+        result.field4_ = false;

+        return this;

+      }

+      

+      public bool HasField5 {

+        get { return result.hasField5; }

+      }

+      public bool Field5 {

+        get { return result.Field5; }

+        set { SetField5(value); }

+      }

+      public Builder SetField5(bool value) {

+        PrepareBuilder();

+        result.hasField5 = true;

+        result.field5_ = value;

+        return this;

+      }

+      public Builder ClearField5() {

+        PrepareBuilder();

+        result.hasField5 = false;

+        result.field5_ = false;

+        return this;

+      }

+      

+      public bool HasField6 {

+        get { return result.hasField6; }

+      }

+      public bool Field6 {

+        get { return result.Field6; }

+        set { SetField6(value); }

+      }

+      public Builder SetField6(bool value) {

+        PrepareBuilder();

+        result.hasField6 = true;

+        result.field6_ = value;

+        return this;

+      }

+      public Builder ClearField6() {

+        PrepareBuilder();

+        result.hasField6 = false;

+        result.field6_ = true;

+        return this;

+      }

+      

+      public bool HasField7 {

+        get { return result.hasField7; }

+      }

+      public bool Field7 {

+        get { return result.Field7; }

+        set { SetField7(value); }

+      }

+      public Builder SetField7(bool value) {

+        PrepareBuilder();

+        result.hasField7 = true;

+        result.field7_ = value;

+        return this;

+      }

+      public Builder ClearField7() {

+        PrepareBuilder();

+        result.hasField7 = false;

+        result.field7_ = false;

+        return this;

+      }

+      

+      public bool HasField8 {

+        get { return result.hasField8; }

+      }

+      public float Field8 {

+        get { return result.Field8; }

+        set { SetField8(value); }

+      }

+      public Builder SetField8(float value) {

+        PrepareBuilder();

+        result.hasField8 = true;

+        result.field8_ = value;

+        return this;

+      }

+      public Builder ClearField8() {

+        PrepareBuilder();

+        result.hasField8 = false;

+        result.field8_ = 0F;

+        return this;

+      }

+      

+      public bool HasField9 {

+        get { return result.hasField9; }

+      }

+      public bool Field9 {

+        get { return result.Field9; }

+        set { SetField9(value); }

+      }

+      public Builder SetField9(bool value) {

+        PrepareBuilder();

+        result.hasField9 = true;

+        result.field9_ = value;

+        return this;

+      }

+      public Builder ClearField9() {

+        PrepareBuilder();

+        result.hasField9 = false;

+        result.field9_ = false;

+        return this;

+      }

+      

+      public bool HasField10 {

+        get { return result.hasField10; }

+      }

+      public float Field10 {

+        get { return result.Field10; }

+        set { SetField10(value); }

+      }

+      public Builder SetField10(float value) {

+        PrepareBuilder();

+        result.hasField10 = true;

+        result.field10_ = value;

+        return this;

+      }

+      public Builder ClearField10() {

+        PrepareBuilder();

+        result.hasField10 = false;

+        result.field10_ = 0F;

+        return this;

+      }

+      

+      public bool HasField11 {

+        get { return result.hasField11; }

+      }

+      public long Field11 {

+        get { return result.Field11; }

+        set { SetField11(value); }

+      }

+      public Builder SetField11(long value) {

+        PrepareBuilder();

+        result.hasField11 = true;

+        result.field11_ = value;

+        return this;

+      }

+      public Builder ClearField11() {

+        PrepareBuilder();

+        result.hasField11 = false;

+        result.field11_ = 0L;

+        return this;

+      }

+    }

+    static SizeMessage2GroupedMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSizeProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSpeedProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSpeedProtoFile.cs
new file mode 100644
index 0000000..ffa0e44
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestGoogleSpeedProtoFile.cs
@@ -0,0 +1,6638 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestGoogleSpeedProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_unittest_google_speed_SpeedMessage1__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage1, global::Google.ProtocolBuffers.TestProtos.SpeedMessage1.Builder> internal__static_unittest_google_speed_SpeedMessage1__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_google_speed_SpeedMessage1SubMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage, global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.Builder> internal__static_unittest_google_speed_SpeedMessage1SubMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_google_speed_SpeedMessage2__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Builder> internal__static_unittest_google_speed_SpeedMessage2__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_google_speed_SpeedMessage2_Group1__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.Builder> internal__static_unittest_google_speed_SpeedMessage2_Group1__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_unittest_google_speed_SpeedMessage2GroupedMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.Builder> internal__static_unittest_google_speed_SpeedMessage2GroupedMessage__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestGoogleSpeedProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "Ch5nb29nbGUvdGVzdC9nb29nbGVfc3BlZWQucHJvdG8SFXVuaXR0ZXN0X2dv", 

+            "b2dsZV9zcGVlZBokZ29vZ2xlL3Byb3RvYnVmL2NzaGFycF9vcHRpb25zLnBy", 

+            "b3RvIoMHCg1TcGVlZE1lc3NhZ2UxEg4KBmZpZWxkMRgBIAIoCRIOCgZmaWVs", 

+            "ZDkYCSABKAkSDwoHZmllbGQxOBgSIAEoCRIWCgdmaWVsZDgwGFAgASgIOgVm", 

+            "YWxzZRIVCgdmaWVsZDgxGFEgASgIOgR0cnVlEg4KBmZpZWxkMhgCIAIoBRIO", 

+            "CgZmaWVsZDMYAyACKAUSEQoIZmllbGQyODAYmAIgASgFEhEKBmZpZWxkNhgG", 

+            "IAEoBToBMBIPCgdmaWVsZDIyGBYgASgDEg4KBmZpZWxkNBgEIAEoCRIOCgZm", 

+            "aWVsZDUYBSADKAYSFgoHZmllbGQ1ORg7IAEoCDoFZmFsc2USDgoGZmllbGQ3", 

+            "GAcgASgJEg8KB2ZpZWxkMTYYECABKAUSFAoIZmllbGQxMzAYggEgASgFOgEw", 

+            "EhUKB2ZpZWxkMTIYDCABKAg6BHRydWUSFQoHZmllbGQxNxgRIAEoCDoEdHJ1", 

+            "ZRIVCgdmaWVsZDEzGA0gASgIOgR0cnVlEhUKB2ZpZWxkMTQYDiABKAg6BHRy", 

+            "dWUSEwoIZmllbGQxMDQYaCABKAU6ATASEwoIZmllbGQxMDAYZCABKAU6ATAS", 

+            "EwoIZmllbGQxMDEYZSABKAU6ATASEAoIZmllbGQxMDIYZiABKAkSEAoIZmll", 

+            "bGQxMDMYZyABKAkSEgoHZmllbGQyORgdIAEoBToBMBIWCgdmaWVsZDMwGB4g", 

+            "ASgIOgVmYWxzZRITCgdmaWVsZDYwGDwgASgFOgItMRIVCghmaWVsZDI3MRiP", 

+            "AiABKAU6Ai0xEhUKCGZpZWxkMjcyGJACIAEoBToCLTESEQoIZmllbGQxNTAY", 

+            "lgEgASgFEhIKB2ZpZWxkMjMYFyABKAU6ATASFgoHZmllbGQyNBgYIAEoCDoF", 

+            "ZmFsc2USEgoHZmllbGQyNRgZIAEoBToBMBI/CgdmaWVsZDE1GA8gASgLMi4u", 

+            "dW5pdHRlc3RfZ29vZ2xlX3NwZWVkLlNwZWVkTWVzc2FnZTFTdWJNZXNzYWdl", 

+            "Eg8KB2ZpZWxkNzgYTiABKAgSEgoHZmllbGQ2NxhDIAEoBToBMBIPCgdmaWVs", 

+            "ZDY4GEQgASgFEhQKCGZpZWxkMTI4GIABIAEoBToBMBIoCghmaWVsZDEyORiB", 

+            "ASABKAk6FXh4eHh4eHh4eHh4eHh4eHh4eHh4eBIUCghmaWVsZDEzMRiDASAB", 

+            "KAU6ATAiogMKF1NwZWVkTWVzc2FnZTFTdWJNZXNzYWdlEhEKBmZpZWxkMRgB", 

+            "IAEoBToBMBIRCgZmaWVsZDIYAiABKAU6ATASEQoGZmllbGQzGAMgASgFOgEw", 

+            "Eg8KB2ZpZWxkMTUYDyABKAkSFQoHZmllbGQxMhgMIAEoCDoEdHJ1ZRIPCgdm", 

+            "aWVsZDEzGA0gASgDEg8KB2ZpZWxkMTQYDiABKAMSDwoHZmllbGQxNhgQIAEo", 

+            "BRISCgdmaWVsZDE5GBMgASgFOgEyEhUKB2ZpZWxkMjAYFCABKAg6BHRydWUS", 

+            "FQoHZmllbGQyOBgcIAEoCDoEdHJ1ZRIPCgdmaWVsZDIxGBUgASgGEg8KB2Zp", 

+            "ZWxkMjIYFiABKAUSFgoHZmllbGQyMxgXIAEoCDoFZmFsc2USGAoIZmllbGQy", 

+            "MDYYzgEgASgIOgVmYWxzZRIRCghmaWVsZDIwMxjLASABKAcSEQoIZmllbGQy", 

+            "MDQYzAEgASgFEhEKCGZpZWxkMjA1GM0BIAEoCRIRCghmaWVsZDIwNxjPASAB", 

+            "KAQSEQoIZmllbGQzMDAYrAIgASgEIuAHCg1TcGVlZE1lc3NhZ2UyEg4KBmZp", 

+            "ZWxkMRgBIAEoCRIOCgZmaWVsZDMYAyABKAMSDgoGZmllbGQ0GAQgASgDEg8K", 

+            "B2ZpZWxkMzAYHiABKAMSFgoHZmllbGQ3NRhLIAEoCDoFZmFsc2USDgoGZmll", 

+            "bGQ2GAYgASgJEg4KBmZpZWxkMhgCIAEoDBISCgdmaWVsZDIxGBUgASgFOgEw", 

+            "Eg8KB2ZpZWxkNzEYRyABKAUSDwoHZmllbGQyNRgZIAEoAhITCghmaWVsZDEw", 

+            "ORhtIAEoBToBMBIUCghmaWVsZDIxMBjSASABKAU6ATASFAoIZmllbGQyMTEY", 

+            "0wEgASgFOgEwEhQKCGZpZWxkMjEyGNQBIAEoBToBMBIUCghmaWVsZDIxMxjV", 

+            "ASABKAU6ATASFAoIZmllbGQyMTYY2AEgASgFOgEwEhQKCGZpZWxkMjE3GNkB", 

+            "IAEoBToBMBIUCghmaWVsZDIxOBjaASABKAU6ATASFAoIZmllbGQyMjAY3AEg", 

+            "ASgFOgEwEhQKCGZpZWxkMjIxGN0BIAEoBToBMBIUCghmaWVsZDIyMhjeASAB", 

+            "KAI6ATASDwoHZmllbGQ2Mxg/IAEoBRI7CgZncm91cDEYCiADKAoyKy51bml0", 

+            "dGVzdF9nb29nbGVfc3BlZWQuU3BlZWRNZXNzYWdlMi5Hcm91cDESEQoIZmll", 

+            "bGQxMjgYgAEgAygJEhEKCGZpZWxkMTMxGIMBIAEoAxIQCghmaWVsZDEyNxh/", 

+            "IAMoCRIRCghmaWVsZDEyORiBASABKAUSEQoIZmllbGQxMzAYggEgAygDEhgK", 

+            "CGZpZWxkMjA1GM0BIAEoCDoFZmFsc2USGAoIZmllbGQyMDYYzgEgASgIOgVm", 

+            "YWxzZRrOAgoGR3JvdXAxEg8KB2ZpZWxkMTEYCyACKAISDwoHZmllbGQyNhga", 

+            "IAEoAhIPCgdmaWVsZDEyGAwgASgJEg8KB2ZpZWxkMTMYDSABKAkSDwoHZmll", 

+            "bGQxNBgOIAMoCRIPCgdmaWVsZDE1GA8gAigEEg4KBmZpZWxkNRgFIAEoBRIP", 

+            "CgdmaWVsZDI3GBsgASgJEg8KB2ZpZWxkMjgYHCABKAUSDwoHZmllbGQyORgd", 

+            "IAEoCRIPCgdmaWVsZDE2GBAgASgJEg8KB2ZpZWxkMjIYFiADKAkSDwoHZmll", 

+            "bGQ3MxhJIAMoBRISCgdmaWVsZDIwGBQgASgFOgEwEg8KB2ZpZWxkMjQYGCAB", 

+            "KAkSQwoHZmllbGQzMRgfIAEoCzIyLnVuaXR0ZXN0X2dvb2dsZV9zcGVlZC5T", 

+            "cGVlZE1lc3NhZ2UyR3JvdXBlZE1lc3NhZ2Ui3wEKG1NwZWVkTWVzc2FnZTJH", 

+            "cm91cGVkTWVzc2FnZRIOCgZmaWVsZDEYASABKAISDgoGZmllbGQyGAIgASgC", 

+            "EhEKBmZpZWxkMxgDIAEoAjoBMBIOCgZmaWVsZDQYBCABKAgSDgoGZmllbGQ1", 

+            "GAUgASgIEhQKBmZpZWxkNhgGIAEoCDoEdHJ1ZRIVCgZmaWVsZDcYByABKAg6", 

+            "BWZhbHNlEg4KBmZpZWxkOBgIIAEoAhIOCgZmaWVsZDkYCSABKAgSDwoHZmll", 

+            "bGQxMBgKIAEoAhIPCgdmaWVsZDExGAsgASgDQlNCC0dvb2dsZVNwZWVkSAHC", 

+            "PkEKIUdvb2dsZS5Qcm90b2NvbEJ1ZmZlcnMuVGVzdFByb3RvcxIcVW5pdFRl", 

+          "c3RHb29nbGVTcGVlZFByb3RvRmlsZQ=="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_unittest_google_speed_SpeedMessage1__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_unittest_google_speed_SpeedMessage1__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage1, global::Google.ProtocolBuffers.TestProtos.SpeedMessage1.Builder>(internal__static_unittest_google_speed_SpeedMessage1__Descriptor,

+                new string[] { "Field1", "Field9", "Field18", "Field80", "Field81", "Field2", "Field3", "Field280", "Field6", "Field22", "Field4", "Field5", "Field59", "Field7", "Field16", "Field130", "Field12", "Field17", "Field13", "Field14", "Field104", "Field100", "Field101", "Field102", "Field103", "Field29", "Field30", "Field60", "Field271", "Field272", "Field150", "Field23", "Field24", "Field25", "Field15", "Field78", "Field67", "Field68", "Field128", "Field129", "Field131", });

+        internal__static_unittest_google_speed_SpeedMessage1SubMessage__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_unittest_google_speed_SpeedMessage1SubMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage, global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.Builder>(internal__static_unittest_google_speed_SpeedMessage1SubMessage__Descriptor,

+                new string[] { "Field1", "Field2", "Field3", "Field15", "Field12", "Field13", "Field14", "Field16", "Field19", "Field20", "Field28", "Field21", "Field22", "Field23", "Field206", "Field203", "Field204", "Field205", "Field207", "Field300", });

+        internal__static_unittest_google_speed_SpeedMessage2__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_unittest_google_speed_SpeedMessage2__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Builder>(internal__static_unittest_google_speed_SpeedMessage2__Descriptor,

+                new string[] { "Field1", "Field3", "Field4", "Field30", "Field75", "Field6", "Field2", "Field21", "Field71", "Field25", "Field109", "Field210", "Field211", "Field212", "Field213", "Field216", "Field217", "Field218", "Field220", "Field221", "Field222", "Field63", "Group1", "Field128", "Field131", "Field127", "Field129", "Field130", "Field205", "Field206", });

+        internal__static_unittest_google_speed_SpeedMessage2_Group1__Descriptor = internal__static_unittest_google_speed_SpeedMessage2__Descriptor.NestedTypes[0];

+        internal__static_unittest_google_speed_SpeedMessage2_Group1__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.Builder>(internal__static_unittest_google_speed_SpeedMessage2_Group1__Descriptor,

+                new string[] { "Field11", "Field26", "Field12", "Field13", "Field14", "Field15", "Field5", "Field27", "Field28", "Field29", "Field16", "Field22", "Field73", "Field20", "Field24", "Field31", });

+        internal__static_unittest_google_speed_SpeedMessage2GroupedMessage__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_unittest_google_speed_SpeedMessage2GroupedMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.Builder>(internal__static_unittest_google_speed_SpeedMessage2GroupedMessage__Descriptor,

+                new string[] { "Field1", "Field2", "Field3", "Field4", "Field5", "Field6", "Field7", "Field8", "Field9", "Field10", "Field11", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SpeedMessage1 : pb::GeneratedMessage<SpeedMessage1, SpeedMessage1.Builder> {

+    private SpeedMessage1() { }

+    private static readonly SpeedMessage1 defaultInstance = new SpeedMessage1().MakeReadOnly();

+    private static readonly string[] _speedMessage1FieldNames = new string[] { "field1", "field100", "field101", "field102", "field103", "field104", "field12", "field128", "field129", "field13", "field130", "field131", "field14", "field15", "field150", "field16", "field17", "field18", "field2", "field22", "field23", "field24", "field25", "field271", "field272", "field280", "field29", "field3", "field30", "field4", "field5", "field59", "field6", "field60", "field67", "field68", "field7", "field78", "field80", "field81", "field9" };

+    private static readonly uint[] _speedMessage1FieldTags = new uint[] { 10, 800, 808, 818, 826, 832, 96, 1024, 1034, 104, 1040, 1048, 112, 122, 1200, 128, 136, 146, 16, 176, 184, 192, 200, 2168, 2176, 2240, 232, 24, 240, 34, 41, 472, 48, 480, 536, 544, 58, 624, 640, 648, 74 };

+    public static SpeedMessage1 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SpeedMessage1 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SpeedMessage1 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_unittest_google_speed_SpeedMessage1__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage1, SpeedMessage1.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_unittest_google_speed_SpeedMessage1__FieldAccessorTable; }

+    }

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private string field1_ = "";

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public string Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field9FieldNumber = 9;

+    private bool hasField9;

+    private string field9_ = "";

+    public bool HasField9 {

+      get { return hasField9; }

+    }

+    public string Field9 {

+      get { return field9_; }

+    }

+    

+    public const int Field18FieldNumber = 18;

+    private bool hasField18;

+    private string field18_ = "";

+    public bool HasField18 {

+      get { return hasField18; }

+    }

+    public string Field18 {

+      get { return field18_; }

+    }

+    

+    public const int Field80FieldNumber = 80;

+    private bool hasField80;

+    private bool field80_;

+    public bool HasField80 {

+      get { return hasField80; }

+    }

+    public bool Field80 {

+      get { return field80_; }

+    }

+    

+    public const int Field81FieldNumber = 81;

+    private bool hasField81;

+    private bool field81_ = true;

+    public bool HasField81 {

+      get { return hasField81; }

+    }

+    public bool Field81 {

+      get { return field81_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private int field2_;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public int Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private int field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public int Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field280FieldNumber = 280;

+    private bool hasField280;

+    private int field280_;

+    public bool HasField280 {

+      get { return hasField280; }

+    }

+    public int Field280 {

+      get { return field280_; }

+    }

+    

+    public const int Field6FieldNumber = 6;

+    private bool hasField6;

+    private int field6_;

+    public bool HasField6 {

+      get { return hasField6; }

+    }

+    public int Field6 {

+      get { return field6_; }

+    }

+    

+    public const int Field22FieldNumber = 22;

+    private bool hasField22;

+    private long field22_;

+    public bool HasField22 {

+      get { return hasField22; }

+    }

+    public long Field22 {

+      get { return field22_; }

+    }

+    

+    public const int Field4FieldNumber = 4;

+    private bool hasField4;

+    private string field4_ = "";

+    public bool HasField4 {

+      get { return hasField4; }

+    }

+    public string Field4 {

+      get { return field4_; }

+    }

+    

+    public const int Field5FieldNumber = 5;

+    private pbc::PopsicleList<ulong> field5_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> Field5List {

+      get { return pbc::Lists.AsReadOnly(field5_); }

+    }

+    public int Field5Count {

+      get { return field5_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetField5(int index) {

+      return field5_[index];

+    }

+    

+    public const int Field59FieldNumber = 59;

+    private bool hasField59;

+    private bool field59_;

+    public bool HasField59 {

+      get { return hasField59; }

+    }

+    public bool Field59 {

+      get { return field59_; }

+    }

+    

+    public const int Field7FieldNumber = 7;

+    private bool hasField7;

+    private string field7_ = "";

+    public bool HasField7 {

+      get { return hasField7; }

+    }

+    public string Field7 {

+      get { return field7_; }

+    }

+    

+    public const int Field16FieldNumber = 16;

+    private bool hasField16;

+    private int field16_;

+    public bool HasField16 {

+      get { return hasField16; }

+    }

+    public int Field16 {

+      get { return field16_; }

+    }

+    

+    public const int Field130FieldNumber = 130;

+    private bool hasField130;

+    private int field130_;

+    public bool HasField130 {

+      get { return hasField130; }

+    }

+    public int Field130 {

+      get { return field130_; }

+    }

+    

+    public const int Field12FieldNumber = 12;

+    private bool hasField12;

+    private bool field12_ = true;

+    public bool HasField12 {

+      get { return hasField12; }

+    }

+    public bool Field12 {

+      get { return field12_; }

+    }

+    

+    public const int Field17FieldNumber = 17;

+    private bool hasField17;

+    private bool field17_ = true;

+    public bool HasField17 {

+      get { return hasField17; }

+    }

+    public bool Field17 {

+      get { return field17_; }

+    }

+    

+    public const int Field13FieldNumber = 13;

+    private bool hasField13;

+    private bool field13_ = true;

+    public bool HasField13 {

+      get { return hasField13; }

+    }

+    public bool Field13 {

+      get { return field13_; }

+    }

+    

+    public const int Field14FieldNumber = 14;

+    private bool hasField14;

+    private bool field14_ = true;

+    public bool HasField14 {

+      get { return hasField14; }

+    }

+    public bool Field14 {

+      get { return field14_; }

+    }

+    

+    public const int Field104FieldNumber = 104;

+    private bool hasField104;

+    private int field104_;

+    public bool HasField104 {

+      get { return hasField104; }

+    }

+    public int Field104 {

+      get { return field104_; }

+    }

+    

+    public const int Field100FieldNumber = 100;

+    private bool hasField100;

+    private int field100_;

+    public bool HasField100 {

+      get { return hasField100; }

+    }

+    public int Field100 {

+      get { return field100_; }

+    }

+    

+    public const int Field101FieldNumber = 101;

+    private bool hasField101;

+    private int field101_;

+    public bool HasField101 {

+      get { return hasField101; }

+    }

+    public int Field101 {

+      get { return field101_; }

+    }

+    

+    public const int Field102FieldNumber = 102;

+    private bool hasField102;

+    private string field102_ = "";

+    public bool HasField102 {

+      get { return hasField102; }

+    }

+    public string Field102 {

+      get { return field102_; }

+    }

+    

+    public const int Field103FieldNumber = 103;

+    private bool hasField103;

+    private string field103_ = "";

+    public bool HasField103 {

+      get { return hasField103; }

+    }

+    public string Field103 {

+      get { return field103_; }

+    }

+    

+    public const int Field29FieldNumber = 29;

+    private bool hasField29;

+    private int field29_;

+    public bool HasField29 {

+      get { return hasField29; }

+    }

+    public int Field29 {

+      get { return field29_; }

+    }

+    

+    public const int Field30FieldNumber = 30;

+    private bool hasField30;

+    private bool field30_;

+    public bool HasField30 {

+      get { return hasField30; }

+    }

+    public bool Field30 {

+      get { return field30_; }

+    }

+    

+    public const int Field60FieldNumber = 60;

+    private bool hasField60;

+    private int field60_ = -1;

+    public bool HasField60 {

+      get { return hasField60; }

+    }

+    public int Field60 {

+      get { return field60_; }

+    }

+    

+    public const int Field271FieldNumber = 271;

+    private bool hasField271;

+    private int field271_ = -1;

+    public bool HasField271 {

+      get { return hasField271; }

+    }

+    public int Field271 {

+      get { return field271_; }

+    }

+    

+    public const int Field272FieldNumber = 272;

+    private bool hasField272;

+    private int field272_ = -1;

+    public bool HasField272 {

+      get { return hasField272; }

+    }

+    public int Field272 {

+      get { return field272_; }

+    }

+    

+    public const int Field150FieldNumber = 150;

+    private bool hasField150;

+    private int field150_;

+    public bool HasField150 {

+      get { return hasField150; }

+    }

+    public int Field150 {

+      get { return field150_; }

+    }

+    

+    public const int Field23FieldNumber = 23;

+    private bool hasField23;

+    private int field23_;

+    public bool HasField23 {

+      get { return hasField23; }

+    }

+    public int Field23 {

+      get { return field23_; }

+    }

+    

+    public const int Field24FieldNumber = 24;

+    private bool hasField24;

+    private bool field24_;

+    public bool HasField24 {

+      get { return hasField24; }

+    }

+    public bool Field24 {

+      get { return field24_; }

+    }

+    

+    public const int Field25FieldNumber = 25;

+    private bool hasField25;

+    private int field25_;

+    public bool HasField25 {

+      get { return hasField25; }

+    }

+    public int Field25 {

+      get { return field25_; }

+    }

+    

+    public const int Field15FieldNumber = 15;

+    private bool hasField15;

+    private global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage field15_;

+    public bool HasField15 {

+      get { return hasField15; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage Field15 {

+      get { return field15_ ?? global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.DefaultInstance; }

+    }

+    

+    public const int Field78FieldNumber = 78;

+    private bool hasField78;

+    private bool field78_;

+    public bool HasField78 {

+      get { return hasField78; }

+    }

+    public bool Field78 {

+      get { return field78_; }

+    }

+    

+    public const int Field67FieldNumber = 67;

+    private bool hasField67;

+    private int field67_;

+    public bool HasField67 {

+      get { return hasField67; }

+    }

+    public int Field67 {

+      get { return field67_; }

+    }

+    

+    public const int Field68FieldNumber = 68;

+    private bool hasField68;

+    private int field68_;

+    public bool HasField68 {

+      get { return hasField68; }

+    }

+    public int Field68 {

+      get { return field68_; }

+    }

+    

+    public const int Field128FieldNumber = 128;

+    private bool hasField128;

+    private int field128_;

+    public bool HasField128 {

+      get { return hasField128; }

+    }

+    public int Field128 {

+      get { return field128_; }

+    }

+    

+    public const int Field129FieldNumber = 129;

+    private bool hasField129;

+    private string field129_ = "xxxxxxxxxxxxxxxxxxxxx";

+    public bool HasField129 {

+      get { return hasField129; }

+    }

+    public string Field129 {

+      get { return field129_; }

+    }

+    

+    public const int Field131FieldNumber = 131;

+    private bool hasField131;

+    private int field131_;

+    public bool HasField131 {

+      get { return hasField131; }

+    }

+    public int Field131 {

+      get { return field131_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasField1) return false;

+        if (!hasField2) return false;

+        if (!hasField3) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _speedMessage1FieldNames;

+      if (hasField1) {

+        output.WriteString(1, field_names[0], Field1);

+      }

+      if (hasField2) {

+        output.WriteInt32(2, field_names[18], Field2);

+      }

+      if (hasField3) {

+        output.WriteInt32(3, field_names[27], Field3);

+      }

+      if (hasField4) {

+        output.WriteString(4, field_names[29], Field4);

+      }

+      if (field5_.Count > 0) {

+        output.WriteFixed64Array(5, field_names[30], field5_);

+      }

+      if (hasField6) {

+        output.WriteInt32(6, field_names[32], Field6);

+      }

+      if (hasField7) {

+        output.WriteString(7, field_names[36], Field7);

+      }

+      if (hasField9) {

+        output.WriteString(9, field_names[40], Field9);

+      }

+      if (hasField12) {

+        output.WriteBool(12, field_names[6], Field12);

+      }

+      if (hasField13) {

+        output.WriteBool(13, field_names[9], Field13);

+      }

+      if (hasField14) {

+        output.WriteBool(14, field_names[12], Field14);

+      }

+      if (hasField15) {

+        output.WriteMessage(15, field_names[13], Field15);

+      }

+      if (hasField16) {

+        output.WriteInt32(16, field_names[15], Field16);

+      }

+      if (hasField17) {

+        output.WriteBool(17, field_names[16], Field17);

+      }

+      if (hasField18) {

+        output.WriteString(18, field_names[17], Field18);

+      }

+      if (hasField22) {

+        output.WriteInt64(22, field_names[19], Field22);

+      }

+      if (hasField23) {

+        output.WriteInt32(23, field_names[20], Field23);

+      }

+      if (hasField24) {

+        output.WriteBool(24, field_names[21], Field24);

+      }

+      if (hasField25) {

+        output.WriteInt32(25, field_names[22], Field25);

+      }

+      if (hasField29) {

+        output.WriteInt32(29, field_names[26], Field29);

+      }

+      if (hasField30) {

+        output.WriteBool(30, field_names[28], Field30);

+      }

+      if (hasField59) {

+        output.WriteBool(59, field_names[31], Field59);

+      }

+      if (hasField60) {

+        output.WriteInt32(60, field_names[33], Field60);

+      }

+      if (hasField67) {

+        output.WriteInt32(67, field_names[34], Field67);

+      }

+      if (hasField68) {

+        output.WriteInt32(68, field_names[35], Field68);

+      }

+      if (hasField78) {

+        output.WriteBool(78, field_names[37], Field78);

+      }

+      if (hasField80) {

+        output.WriteBool(80, field_names[38], Field80);

+      }

+      if (hasField81) {

+        output.WriteBool(81, field_names[39], Field81);

+      }

+      if (hasField100) {

+        output.WriteInt32(100, field_names[1], Field100);

+      }

+      if (hasField101) {

+        output.WriteInt32(101, field_names[2], Field101);

+      }

+      if (hasField102) {

+        output.WriteString(102, field_names[3], Field102);

+      }

+      if (hasField103) {

+        output.WriteString(103, field_names[4], Field103);

+      }

+      if (hasField104) {

+        output.WriteInt32(104, field_names[5], Field104);

+      }

+      if (hasField128) {

+        output.WriteInt32(128, field_names[7], Field128);

+      }

+      if (hasField129) {

+        output.WriteString(129, field_names[8], Field129);

+      }

+      if (hasField130) {

+        output.WriteInt32(130, field_names[10], Field130);

+      }

+      if (hasField131) {

+        output.WriteInt32(131, field_names[11], Field131);

+      }

+      if (hasField150) {

+        output.WriteInt32(150, field_names[14], Field150);

+      }

+      if (hasField271) {

+        output.WriteInt32(271, field_names[23], Field271);

+      }

+      if (hasField272) {

+        output.WriteInt32(272, field_names[24], Field272);

+      }

+      if (hasField280) {

+        output.WriteInt32(280, field_names[25], Field280);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasField1) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Field1);

+      }

+      if (hasField9) {

+        size += pb::CodedOutputStream.ComputeStringSize(9, Field9);

+      }

+      if (hasField18) {

+        size += pb::CodedOutputStream.ComputeStringSize(18, Field18);

+      }

+      if (hasField80) {

+        size += pb::CodedOutputStream.ComputeBoolSize(80, Field80);

+      }

+      if (hasField81) {

+        size += pb::CodedOutputStream.ComputeBoolSize(81, Field81);

+      }

+      if (hasField2) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, Field2);

+      }

+      if (hasField3) {

+        size += pb::CodedOutputStream.ComputeInt32Size(3, Field3);

+      }

+      if (hasField280) {

+        size += pb::CodedOutputStream.ComputeInt32Size(280, Field280);

+      }

+      if (hasField6) {

+        size += pb::CodedOutputStream.ComputeInt32Size(6, Field6);

+      }

+      if (hasField22) {

+        size += pb::CodedOutputStream.ComputeInt64Size(22, Field22);

+      }

+      if (hasField4) {

+        size += pb::CodedOutputStream.ComputeStringSize(4, Field4);

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * field5_.Count;

+        size += dataSize;

+        size += 1 * field5_.Count;

+      }

+      if (hasField59) {

+        size += pb::CodedOutputStream.ComputeBoolSize(59, Field59);

+      }

+      if (hasField7) {

+        size += pb::CodedOutputStream.ComputeStringSize(7, Field7);

+      }

+      if (hasField16) {

+        size += pb::CodedOutputStream.ComputeInt32Size(16, Field16);

+      }

+      if (hasField130) {

+        size += pb::CodedOutputStream.ComputeInt32Size(130, Field130);

+      }

+      if (hasField12) {

+        size += pb::CodedOutputStream.ComputeBoolSize(12, Field12);

+      }

+      if (hasField17) {

+        size += pb::CodedOutputStream.ComputeBoolSize(17, Field17);

+      }

+      if (hasField13) {

+        size += pb::CodedOutputStream.ComputeBoolSize(13, Field13);

+      }

+      if (hasField14) {

+        size += pb::CodedOutputStream.ComputeBoolSize(14, Field14);

+      }

+      if (hasField104) {

+        size += pb::CodedOutputStream.ComputeInt32Size(104, Field104);

+      }

+      if (hasField100) {

+        size += pb::CodedOutputStream.ComputeInt32Size(100, Field100);

+      }

+      if (hasField101) {

+        size += pb::CodedOutputStream.ComputeInt32Size(101, Field101);

+      }

+      if (hasField102) {

+        size += pb::CodedOutputStream.ComputeStringSize(102, Field102);

+      }

+      if (hasField103) {

+        size += pb::CodedOutputStream.ComputeStringSize(103, Field103);

+      }

+      if (hasField29) {

+        size += pb::CodedOutputStream.ComputeInt32Size(29, Field29);

+      }

+      if (hasField30) {

+        size += pb::CodedOutputStream.ComputeBoolSize(30, Field30);

+      }

+      if (hasField60) {

+        size += pb::CodedOutputStream.ComputeInt32Size(60, Field60);

+      }

+      if (hasField271) {

+        size += pb::CodedOutputStream.ComputeInt32Size(271, Field271);

+      }

+      if (hasField272) {

+        size += pb::CodedOutputStream.ComputeInt32Size(272, Field272);

+      }

+      if (hasField150) {

+        size += pb::CodedOutputStream.ComputeInt32Size(150, Field150);

+      }

+      if (hasField23) {

+        size += pb::CodedOutputStream.ComputeInt32Size(23, Field23);

+      }

+      if (hasField24) {

+        size += pb::CodedOutputStream.ComputeBoolSize(24, Field24);

+      }

+      if (hasField25) {

+        size += pb::CodedOutputStream.ComputeInt32Size(25, Field25);

+      }

+      if (hasField15) {

+        size += pb::CodedOutputStream.ComputeMessageSize(15, Field15);

+      }

+      if (hasField78) {

+        size += pb::CodedOutputStream.ComputeBoolSize(78, Field78);

+      }

+      if (hasField67) {

+        size += pb::CodedOutputStream.ComputeInt32Size(67, Field67);

+      }

+      if (hasField68) {

+        size += pb::CodedOutputStream.ComputeInt32Size(68, Field68);

+      }

+      if (hasField128) {

+        size += pb::CodedOutputStream.ComputeInt32Size(128, Field128);

+      }

+      if (hasField129) {

+        size += pb::CodedOutputStream.ComputeStringSize(129, Field129);

+      }

+      if (hasField131) {

+        size += pb::CodedOutputStream.ComputeInt32Size(131, Field131);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SpeedMessage1 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SpeedMessage1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SpeedMessage1 MakeReadOnly() {

+      field5_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SpeedMessage1 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage1, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SpeedMessage1 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SpeedMessage1 result;

+      

+      private SpeedMessage1 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SpeedMessage1 original = result;

+          result = new SpeedMessage1();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SpeedMessage1 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage1.Descriptor; }

+      }

+      

+      public override SpeedMessage1 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage1.DefaultInstance; }

+      }

+      

+      public override SpeedMessage1 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SpeedMessage1) {

+          return MergeFrom((SpeedMessage1) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SpeedMessage1 other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.SpeedMessage1.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasField1) {

+          Field1 = other.Field1;

+        }

+        if (other.HasField9) {

+          Field9 = other.Field9;

+        }

+        if (other.HasField18) {

+          Field18 = other.Field18;

+        }

+        if (other.HasField80) {

+          Field80 = other.Field80;

+        }

+        if (other.HasField81) {

+          Field81 = other.Field81;

+        }

+        if (other.HasField2) {

+          Field2 = other.Field2;

+        }

+        if (other.HasField3) {

+          Field3 = other.Field3;

+        }

+        if (other.HasField280) {

+          Field280 = other.Field280;

+        }

+        if (other.HasField6) {

+          Field6 = other.Field6;

+        }

+        if (other.HasField22) {

+          Field22 = other.Field22;

+        }

+        if (other.HasField4) {

+          Field4 = other.Field4;

+        }

+        if (other.field5_.Count != 0) {

+          result.field5_.Add(other.field5_);

+        }

+        if (other.HasField59) {

+          Field59 = other.Field59;

+        }

+        if (other.HasField7) {

+          Field7 = other.Field7;

+        }

+        if (other.HasField16) {

+          Field16 = other.Field16;

+        }

+        if (other.HasField130) {

+          Field130 = other.Field130;

+        }

+        if (other.HasField12) {

+          Field12 = other.Field12;

+        }

+        if (other.HasField17) {

+          Field17 = other.Field17;

+        }

+        if (other.HasField13) {

+          Field13 = other.Field13;

+        }

+        if (other.HasField14) {

+          Field14 = other.Field14;

+        }

+        if (other.HasField104) {

+          Field104 = other.Field104;

+        }

+        if (other.HasField100) {

+          Field100 = other.Field100;

+        }

+        if (other.HasField101) {

+          Field101 = other.Field101;

+        }

+        if (other.HasField102) {

+          Field102 = other.Field102;

+        }

+        if (other.HasField103) {

+          Field103 = other.Field103;

+        }

+        if (other.HasField29) {

+          Field29 = other.Field29;

+        }

+        if (other.HasField30) {

+          Field30 = other.Field30;

+        }

+        if (other.HasField60) {

+          Field60 = other.Field60;

+        }

+        if (other.HasField271) {

+          Field271 = other.Field271;

+        }

+        if (other.HasField272) {

+          Field272 = other.Field272;

+        }

+        if (other.HasField150) {

+          Field150 = other.Field150;

+        }

+        if (other.HasField23) {

+          Field23 = other.Field23;

+        }

+        if (other.HasField24) {

+          Field24 = other.Field24;

+        }

+        if (other.HasField25) {

+          Field25 = other.Field25;

+        }

+        if (other.HasField15) {

+          MergeField15(other.Field15);

+        }

+        if (other.HasField78) {

+          Field78 = other.Field78;

+        }

+        if (other.HasField67) {

+          Field67 = other.Field67;

+        }

+        if (other.HasField68) {

+          Field68 = other.Field68;

+        }

+        if (other.HasField128) {

+          Field128 = other.Field128;

+        }

+        if (other.HasField129) {

+          Field129 = other.Field129;

+        }

+        if (other.HasField131) {

+          Field131 = other.Field131;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_speedMessage1FieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _speedMessage1FieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasField1 = input.ReadString(ref result.field1_);

+              break;

+            }

+            case 16: {

+              result.hasField2 = input.ReadInt32(ref result.field2_);

+              break;

+            }

+            case 24: {

+              result.hasField3 = input.ReadInt32(ref result.field3_);

+              break;

+            }

+            case 34: {

+              result.hasField4 = input.ReadString(ref result.field4_);

+              break;

+            }

+            case 42:

+            case 41: {

+              input.ReadFixed64Array(tag, field_name, result.field5_);

+              break;

+            }

+            case 48: {

+              result.hasField6 = input.ReadInt32(ref result.field6_);

+              break;

+            }

+            case 58: {

+              result.hasField7 = input.ReadString(ref result.field7_);

+              break;

+            }

+            case 74: {

+              result.hasField9 = input.ReadString(ref result.field9_);

+              break;

+            }

+            case 96: {

+              result.hasField12 = input.ReadBool(ref result.field12_);

+              break;

+            }

+            case 104: {

+              result.hasField13 = input.ReadBool(ref result.field13_);

+              break;

+            }

+            case 112: {

+              result.hasField14 = input.ReadBool(ref result.field14_);

+              break;

+            }

+            case 122: {

+              global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.CreateBuilder();

+              if (result.hasField15) {

+                subBuilder.MergeFrom(Field15);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Field15 = subBuilder.BuildPartial();

+              break;

+            }

+            case 128: {

+              result.hasField16 = input.ReadInt32(ref result.field16_);

+              break;

+            }

+            case 136: {

+              result.hasField17 = input.ReadBool(ref result.field17_);

+              break;

+            }

+            case 146: {

+              result.hasField18 = input.ReadString(ref result.field18_);

+              break;

+            }

+            case 176: {

+              result.hasField22 = input.ReadInt64(ref result.field22_);

+              break;

+            }

+            case 184: {

+              result.hasField23 = input.ReadInt32(ref result.field23_);

+              break;

+            }

+            case 192: {

+              result.hasField24 = input.ReadBool(ref result.field24_);

+              break;

+            }

+            case 200: {

+              result.hasField25 = input.ReadInt32(ref result.field25_);

+              break;

+            }

+            case 232: {

+              result.hasField29 = input.ReadInt32(ref result.field29_);

+              break;

+            }

+            case 240: {

+              result.hasField30 = input.ReadBool(ref result.field30_);

+              break;

+            }

+            case 472: {

+              result.hasField59 = input.ReadBool(ref result.field59_);

+              break;

+            }

+            case 480: {

+              result.hasField60 = input.ReadInt32(ref result.field60_);

+              break;

+            }

+            case 536: {

+              result.hasField67 = input.ReadInt32(ref result.field67_);

+              break;

+            }

+            case 544: {

+              result.hasField68 = input.ReadInt32(ref result.field68_);

+              break;

+            }

+            case 624: {

+              result.hasField78 = input.ReadBool(ref result.field78_);

+              break;

+            }

+            case 640: {

+              result.hasField80 = input.ReadBool(ref result.field80_);

+              break;

+            }

+            case 648: {

+              result.hasField81 = input.ReadBool(ref result.field81_);

+              break;

+            }

+            case 800: {

+              result.hasField100 = input.ReadInt32(ref result.field100_);

+              break;

+            }

+            case 808: {

+              result.hasField101 = input.ReadInt32(ref result.field101_);

+              break;

+            }

+            case 818: {

+              result.hasField102 = input.ReadString(ref result.field102_);

+              break;

+            }

+            case 826: {

+              result.hasField103 = input.ReadString(ref result.field103_);

+              break;

+            }

+            case 832: {

+              result.hasField104 = input.ReadInt32(ref result.field104_);

+              break;

+            }

+            case 1024: {

+              result.hasField128 = input.ReadInt32(ref result.field128_);

+              break;

+            }

+            case 1034: {

+              result.hasField129 = input.ReadString(ref result.field129_);

+              break;

+            }

+            case 1040: {

+              result.hasField130 = input.ReadInt32(ref result.field130_);

+              break;

+            }

+            case 1048: {

+              result.hasField131 = input.ReadInt32(ref result.field131_);

+              break;

+            }

+            case 1200: {

+              result.hasField150 = input.ReadInt32(ref result.field150_);

+              break;

+            }

+            case 2168: {

+              result.hasField271 = input.ReadInt32(ref result.field271_);

+              break;

+            }

+            case 2176: {

+              result.hasField272 = input.ReadInt32(ref result.field272_);

+              break;

+            }

+            case 2240: {

+              result.hasField280 = input.ReadInt32(ref result.field280_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public string Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = "";

+        return this;

+      }

+      

+      public bool HasField9 {

+        get { return result.hasField9; }

+      }

+      public string Field9 {

+        get { return result.Field9; }

+        set { SetField9(value); }

+      }

+      public Builder SetField9(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField9 = true;

+        result.field9_ = value;

+        return this;

+      }

+      public Builder ClearField9() {

+        PrepareBuilder();

+        result.hasField9 = false;

+        result.field9_ = "";

+        return this;

+      }

+      

+      public bool HasField18 {

+        get { return result.hasField18; }

+      }

+      public string Field18 {

+        get { return result.Field18; }

+        set { SetField18(value); }

+      }

+      public Builder SetField18(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField18 = true;

+        result.field18_ = value;

+        return this;

+      }

+      public Builder ClearField18() {

+        PrepareBuilder();

+        result.hasField18 = false;

+        result.field18_ = "";

+        return this;

+      }

+      

+      public bool HasField80 {

+        get { return result.hasField80; }

+      }

+      public bool Field80 {

+        get { return result.Field80; }

+        set { SetField80(value); }

+      }

+      public Builder SetField80(bool value) {

+        PrepareBuilder();

+        result.hasField80 = true;

+        result.field80_ = value;

+        return this;

+      }

+      public Builder ClearField80() {

+        PrepareBuilder();

+        result.hasField80 = false;

+        result.field80_ = false;

+        return this;

+      }

+      

+      public bool HasField81 {

+        get { return result.hasField81; }

+      }

+      public bool Field81 {

+        get { return result.Field81; }

+        set { SetField81(value); }

+      }

+      public Builder SetField81(bool value) {

+        PrepareBuilder();

+        result.hasField81 = true;

+        result.field81_ = value;

+        return this;

+      }

+      public Builder ClearField81() {

+        PrepareBuilder();

+        result.hasField81 = false;

+        result.field81_ = true;

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public int Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(int value) {

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = 0;

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public int Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(int value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0;

+        return this;

+      }

+      

+      public bool HasField280 {

+        get { return result.hasField280; }

+      }

+      public int Field280 {

+        get { return result.Field280; }

+        set { SetField280(value); }

+      }

+      public Builder SetField280(int value) {

+        PrepareBuilder();

+        result.hasField280 = true;

+        result.field280_ = value;

+        return this;

+      }

+      public Builder ClearField280() {

+        PrepareBuilder();

+        result.hasField280 = false;

+        result.field280_ = 0;

+        return this;

+      }

+      

+      public bool HasField6 {

+        get { return result.hasField6; }

+      }

+      public int Field6 {

+        get { return result.Field6; }

+        set { SetField6(value); }

+      }

+      public Builder SetField6(int value) {

+        PrepareBuilder();

+        result.hasField6 = true;

+        result.field6_ = value;

+        return this;

+      }

+      public Builder ClearField6() {

+        PrepareBuilder();

+        result.hasField6 = false;

+        result.field6_ = 0;

+        return this;

+      }

+      

+      public bool HasField22 {

+        get { return result.hasField22; }

+      }

+      public long Field22 {

+        get { return result.Field22; }

+        set { SetField22(value); }

+      }

+      public Builder SetField22(long value) {

+        PrepareBuilder();

+        result.hasField22 = true;

+        result.field22_ = value;

+        return this;

+      }

+      public Builder ClearField22() {

+        PrepareBuilder();

+        result.hasField22 = false;

+        result.field22_ = 0L;

+        return this;

+      }

+      

+      public bool HasField4 {

+        get { return result.hasField4; }

+      }

+      public string Field4 {

+        get { return result.Field4; }

+        set { SetField4(value); }

+      }

+      public Builder SetField4(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField4 = true;

+        result.field4_ = value;

+        return this;

+      }

+      public Builder ClearField4() {

+        PrepareBuilder();

+        result.hasField4 = false;

+        result.field4_ = "";

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> Field5List {

+        get { return PrepareBuilder().field5_; }

+      }

+      public int Field5Count {

+        get { return result.Field5Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetField5(int index) {

+        return result.GetField5(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField5(int index, ulong value) {

+        PrepareBuilder();

+        result.field5_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddField5(ulong value) {

+        PrepareBuilder();

+        result.field5_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeField5(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.field5_.Add(values);

+        return this;

+      }

+      public Builder ClearField5() {

+        PrepareBuilder();

+        result.field5_.Clear();

+        return this;

+      }

+      

+      public bool HasField59 {

+        get { return result.hasField59; }

+      }

+      public bool Field59 {

+        get { return result.Field59; }

+        set { SetField59(value); }

+      }

+      public Builder SetField59(bool value) {

+        PrepareBuilder();

+        result.hasField59 = true;

+        result.field59_ = value;

+        return this;

+      }

+      public Builder ClearField59() {

+        PrepareBuilder();

+        result.hasField59 = false;

+        result.field59_ = false;

+        return this;

+      }

+      

+      public bool HasField7 {

+        get { return result.hasField7; }

+      }

+      public string Field7 {

+        get { return result.Field7; }

+        set { SetField7(value); }

+      }

+      public Builder SetField7(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField7 = true;

+        result.field7_ = value;

+        return this;

+      }

+      public Builder ClearField7() {

+        PrepareBuilder();

+        result.hasField7 = false;

+        result.field7_ = "";

+        return this;

+      }

+      

+      public bool HasField16 {

+        get { return result.hasField16; }

+      }

+      public int Field16 {

+        get { return result.Field16; }

+        set { SetField16(value); }

+      }

+      public Builder SetField16(int value) {

+        PrepareBuilder();

+        result.hasField16 = true;

+        result.field16_ = value;

+        return this;

+      }

+      public Builder ClearField16() {

+        PrepareBuilder();

+        result.hasField16 = false;

+        result.field16_ = 0;

+        return this;

+      }

+      

+      public bool HasField130 {

+        get { return result.hasField130; }

+      }

+      public int Field130 {

+        get { return result.Field130; }

+        set { SetField130(value); }

+      }

+      public Builder SetField130(int value) {

+        PrepareBuilder();

+        result.hasField130 = true;

+        result.field130_ = value;

+        return this;

+      }

+      public Builder ClearField130() {

+        PrepareBuilder();

+        result.hasField130 = false;

+        result.field130_ = 0;

+        return this;

+      }

+      

+      public bool HasField12 {

+        get { return result.hasField12; }

+      }

+      public bool Field12 {

+        get { return result.Field12; }

+        set { SetField12(value); }

+      }

+      public Builder SetField12(bool value) {

+        PrepareBuilder();

+        result.hasField12 = true;

+        result.field12_ = value;

+        return this;

+      }

+      public Builder ClearField12() {

+        PrepareBuilder();

+        result.hasField12 = false;

+        result.field12_ = true;

+        return this;

+      }

+      

+      public bool HasField17 {

+        get { return result.hasField17; }

+      }

+      public bool Field17 {

+        get { return result.Field17; }

+        set { SetField17(value); }

+      }

+      public Builder SetField17(bool value) {

+        PrepareBuilder();

+        result.hasField17 = true;

+        result.field17_ = value;

+        return this;

+      }

+      public Builder ClearField17() {

+        PrepareBuilder();

+        result.hasField17 = false;

+        result.field17_ = true;

+        return this;

+      }

+      

+      public bool HasField13 {

+        get { return result.hasField13; }

+      }

+      public bool Field13 {

+        get { return result.Field13; }

+        set { SetField13(value); }

+      }

+      public Builder SetField13(bool value) {

+        PrepareBuilder();

+        result.hasField13 = true;

+        result.field13_ = value;

+        return this;

+      }

+      public Builder ClearField13() {

+        PrepareBuilder();

+        result.hasField13 = false;

+        result.field13_ = true;

+        return this;

+      }

+      

+      public bool HasField14 {

+        get { return result.hasField14; }

+      }

+      public bool Field14 {

+        get { return result.Field14; }

+        set { SetField14(value); }

+      }

+      public Builder SetField14(bool value) {

+        PrepareBuilder();

+        result.hasField14 = true;

+        result.field14_ = value;

+        return this;

+      }

+      public Builder ClearField14() {

+        PrepareBuilder();

+        result.hasField14 = false;

+        result.field14_ = true;

+        return this;

+      }

+      

+      public bool HasField104 {

+        get { return result.hasField104; }

+      }

+      public int Field104 {

+        get { return result.Field104; }

+        set { SetField104(value); }

+      }

+      public Builder SetField104(int value) {

+        PrepareBuilder();

+        result.hasField104 = true;

+        result.field104_ = value;

+        return this;

+      }

+      public Builder ClearField104() {

+        PrepareBuilder();

+        result.hasField104 = false;

+        result.field104_ = 0;

+        return this;

+      }

+      

+      public bool HasField100 {

+        get { return result.hasField100; }

+      }

+      public int Field100 {

+        get { return result.Field100; }

+        set { SetField100(value); }

+      }

+      public Builder SetField100(int value) {

+        PrepareBuilder();

+        result.hasField100 = true;

+        result.field100_ = value;

+        return this;

+      }

+      public Builder ClearField100() {

+        PrepareBuilder();

+        result.hasField100 = false;

+        result.field100_ = 0;

+        return this;

+      }

+      

+      public bool HasField101 {

+        get { return result.hasField101; }

+      }

+      public int Field101 {

+        get { return result.Field101; }

+        set { SetField101(value); }

+      }

+      public Builder SetField101(int value) {

+        PrepareBuilder();

+        result.hasField101 = true;

+        result.field101_ = value;

+        return this;

+      }

+      public Builder ClearField101() {

+        PrepareBuilder();

+        result.hasField101 = false;

+        result.field101_ = 0;

+        return this;

+      }

+      

+      public bool HasField102 {

+        get { return result.hasField102; }

+      }

+      public string Field102 {

+        get { return result.Field102; }

+        set { SetField102(value); }

+      }

+      public Builder SetField102(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField102 = true;

+        result.field102_ = value;

+        return this;

+      }

+      public Builder ClearField102() {

+        PrepareBuilder();

+        result.hasField102 = false;

+        result.field102_ = "";

+        return this;

+      }

+      

+      public bool HasField103 {

+        get { return result.hasField103; }

+      }

+      public string Field103 {

+        get { return result.Field103; }

+        set { SetField103(value); }

+      }

+      public Builder SetField103(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField103 = true;

+        result.field103_ = value;

+        return this;

+      }

+      public Builder ClearField103() {

+        PrepareBuilder();

+        result.hasField103 = false;

+        result.field103_ = "";

+        return this;

+      }

+      

+      public bool HasField29 {

+        get { return result.hasField29; }

+      }

+      public int Field29 {

+        get { return result.Field29; }

+        set { SetField29(value); }

+      }

+      public Builder SetField29(int value) {

+        PrepareBuilder();

+        result.hasField29 = true;

+        result.field29_ = value;

+        return this;

+      }

+      public Builder ClearField29() {

+        PrepareBuilder();

+        result.hasField29 = false;

+        result.field29_ = 0;

+        return this;

+      }

+      

+      public bool HasField30 {

+        get { return result.hasField30; }

+      }

+      public bool Field30 {

+        get { return result.Field30; }

+        set { SetField30(value); }

+      }

+      public Builder SetField30(bool value) {

+        PrepareBuilder();

+        result.hasField30 = true;

+        result.field30_ = value;

+        return this;

+      }

+      public Builder ClearField30() {

+        PrepareBuilder();

+        result.hasField30 = false;

+        result.field30_ = false;

+        return this;

+      }

+      

+      public bool HasField60 {

+        get { return result.hasField60; }

+      }

+      public int Field60 {

+        get { return result.Field60; }

+        set { SetField60(value); }

+      }

+      public Builder SetField60(int value) {

+        PrepareBuilder();

+        result.hasField60 = true;

+        result.field60_ = value;

+        return this;

+      }

+      public Builder ClearField60() {

+        PrepareBuilder();

+        result.hasField60 = false;

+        result.field60_ = -1;

+        return this;

+      }

+      

+      public bool HasField271 {

+        get { return result.hasField271; }

+      }

+      public int Field271 {

+        get { return result.Field271; }

+        set { SetField271(value); }

+      }

+      public Builder SetField271(int value) {

+        PrepareBuilder();

+        result.hasField271 = true;

+        result.field271_ = value;

+        return this;

+      }

+      public Builder ClearField271() {

+        PrepareBuilder();

+        result.hasField271 = false;

+        result.field271_ = -1;

+        return this;

+      }

+      

+      public bool HasField272 {

+        get { return result.hasField272; }

+      }

+      public int Field272 {

+        get { return result.Field272; }

+        set { SetField272(value); }

+      }

+      public Builder SetField272(int value) {

+        PrepareBuilder();

+        result.hasField272 = true;

+        result.field272_ = value;

+        return this;

+      }

+      public Builder ClearField272() {

+        PrepareBuilder();

+        result.hasField272 = false;

+        result.field272_ = -1;

+        return this;

+      }

+      

+      public bool HasField150 {

+        get { return result.hasField150; }

+      }

+      public int Field150 {

+        get { return result.Field150; }

+        set { SetField150(value); }

+      }

+      public Builder SetField150(int value) {

+        PrepareBuilder();

+        result.hasField150 = true;

+        result.field150_ = value;

+        return this;

+      }

+      public Builder ClearField150() {

+        PrepareBuilder();

+        result.hasField150 = false;

+        result.field150_ = 0;

+        return this;

+      }

+      

+      public bool HasField23 {

+        get { return result.hasField23; }

+      }

+      public int Field23 {

+        get { return result.Field23; }

+        set { SetField23(value); }

+      }

+      public Builder SetField23(int value) {

+        PrepareBuilder();

+        result.hasField23 = true;

+        result.field23_ = value;

+        return this;

+      }

+      public Builder ClearField23() {

+        PrepareBuilder();

+        result.hasField23 = false;

+        result.field23_ = 0;

+        return this;

+      }

+      

+      public bool HasField24 {

+        get { return result.hasField24; }

+      }

+      public bool Field24 {

+        get { return result.Field24; }

+        set { SetField24(value); }

+      }

+      public Builder SetField24(bool value) {

+        PrepareBuilder();

+        result.hasField24 = true;

+        result.field24_ = value;

+        return this;

+      }

+      public Builder ClearField24() {

+        PrepareBuilder();

+        result.hasField24 = false;

+        result.field24_ = false;

+        return this;

+      }

+      

+      public bool HasField25 {

+        get { return result.hasField25; }

+      }

+      public int Field25 {

+        get { return result.Field25; }

+        set { SetField25(value); }

+      }

+      public Builder SetField25(int value) {

+        PrepareBuilder();

+        result.hasField25 = true;

+        result.field25_ = value;

+        return this;

+      }

+      public Builder ClearField25() {

+        PrepareBuilder();

+        result.hasField25 = false;

+        result.field25_ = 0;

+        return this;

+      }

+      

+      public bool HasField15 {

+       get { return result.hasField15; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage Field15 {

+        get { return result.Field15; }

+        set { SetField15(value); }

+      }

+      public Builder SetField15(global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField15 = true;

+        result.field15_ = value;

+        return this;

+      }

+      public Builder SetField15(global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasField15 = true;

+        result.field15_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeField15(global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasField15 &&

+            result.field15_ != global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.DefaultInstance) {

+            result.field15_ = global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.CreateBuilder(result.field15_).MergeFrom(value).BuildPartial();

+        } else {

+          result.field15_ = value;

+        }

+        result.hasField15 = true;

+        return this;

+      }

+      public Builder ClearField15() {

+        PrepareBuilder();

+        result.hasField15 = false;

+        result.field15_ = null;

+        return this;

+      }

+      

+      public bool HasField78 {

+        get { return result.hasField78; }

+      }

+      public bool Field78 {

+        get { return result.Field78; }

+        set { SetField78(value); }

+      }

+      public Builder SetField78(bool value) {

+        PrepareBuilder();

+        result.hasField78 = true;

+        result.field78_ = value;

+        return this;

+      }

+      public Builder ClearField78() {

+        PrepareBuilder();

+        result.hasField78 = false;

+        result.field78_ = false;

+        return this;

+      }

+      

+      public bool HasField67 {

+        get { return result.hasField67; }

+      }

+      public int Field67 {

+        get { return result.Field67; }

+        set { SetField67(value); }

+      }

+      public Builder SetField67(int value) {

+        PrepareBuilder();

+        result.hasField67 = true;

+        result.field67_ = value;

+        return this;

+      }

+      public Builder ClearField67() {

+        PrepareBuilder();

+        result.hasField67 = false;

+        result.field67_ = 0;

+        return this;

+      }

+      

+      public bool HasField68 {

+        get { return result.hasField68; }

+      }

+      public int Field68 {

+        get { return result.Field68; }

+        set { SetField68(value); }

+      }

+      public Builder SetField68(int value) {

+        PrepareBuilder();

+        result.hasField68 = true;

+        result.field68_ = value;

+        return this;

+      }

+      public Builder ClearField68() {

+        PrepareBuilder();

+        result.hasField68 = false;

+        result.field68_ = 0;

+        return this;

+      }

+      

+      public bool HasField128 {

+        get { return result.hasField128; }

+      }

+      public int Field128 {

+        get { return result.Field128; }

+        set { SetField128(value); }

+      }

+      public Builder SetField128(int value) {

+        PrepareBuilder();

+        result.hasField128 = true;

+        result.field128_ = value;

+        return this;

+      }

+      public Builder ClearField128() {

+        PrepareBuilder();

+        result.hasField128 = false;

+        result.field128_ = 0;

+        return this;

+      }

+      

+      public bool HasField129 {

+        get { return result.hasField129; }

+      }

+      public string Field129 {

+        get { return result.Field129; }

+        set { SetField129(value); }

+      }

+      public Builder SetField129(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField129 = true;

+        result.field129_ = value;

+        return this;

+      }

+      public Builder ClearField129() {

+        PrepareBuilder();

+        result.hasField129 = false;

+        result.field129_ = "xxxxxxxxxxxxxxxxxxxxx";

+        return this;

+      }

+      

+      public bool HasField131 {

+        get { return result.hasField131; }

+      }

+      public int Field131 {

+        get { return result.Field131; }

+        set { SetField131(value); }

+      }

+      public Builder SetField131(int value) {

+        PrepareBuilder();

+        result.hasField131 = true;

+        result.field131_ = value;

+        return this;

+      }

+      public Builder ClearField131() {

+        PrepareBuilder();

+        result.hasField131 = false;

+        result.field131_ = 0;

+        return this;

+      }

+    }

+    static SpeedMessage1() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SpeedMessage1SubMessage : pb::GeneratedMessage<SpeedMessage1SubMessage, SpeedMessage1SubMessage.Builder> {

+    private SpeedMessage1SubMessage() { }

+    private static readonly SpeedMessage1SubMessage defaultInstance = new SpeedMessage1SubMessage().MakeReadOnly();

+    private static readonly string[] _speedMessage1SubMessageFieldNames = new string[] { "field1", "field12", "field13", "field14", "field15", "field16", "field19", "field2", "field20", "field203", "field204", "field205", "field206", "field207", "field21", "field22", "field23", "field28", "field3", "field300" };

+    private static readonly uint[] _speedMessage1SubMessageFieldTags = new uint[] { 8, 96, 104, 112, 122, 128, 152, 16, 160, 1629, 1632, 1642, 1648, 1656, 169, 176, 184, 224, 24, 2400 };

+    public static SpeedMessage1SubMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SpeedMessage1SubMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SpeedMessage1SubMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_unittest_google_speed_SpeedMessage1SubMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage1SubMessage, SpeedMessage1SubMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_unittest_google_speed_SpeedMessage1SubMessage__FieldAccessorTable; }

+    }

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private int field1_;

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public int Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private int field2_;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public int Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private int field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public int Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field15FieldNumber = 15;

+    private bool hasField15;

+    private string field15_ = "";

+    public bool HasField15 {

+      get { return hasField15; }

+    }

+    public string Field15 {

+      get { return field15_; }

+    }

+    

+    public const int Field12FieldNumber = 12;

+    private bool hasField12;

+    private bool field12_ = true;

+    public bool HasField12 {

+      get { return hasField12; }

+    }

+    public bool Field12 {

+      get { return field12_; }

+    }

+    

+    public const int Field13FieldNumber = 13;

+    private bool hasField13;

+    private long field13_;

+    public bool HasField13 {

+      get { return hasField13; }

+    }

+    public long Field13 {

+      get { return field13_; }

+    }

+    

+    public const int Field14FieldNumber = 14;

+    private bool hasField14;

+    private long field14_;

+    public bool HasField14 {

+      get { return hasField14; }

+    }

+    public long Field14 {

+      get { return field14_; }

+    }

+    

+    public const int Field16FieldNumber = 16;

+    private bool hasField16;

+    private int field16_;

+    public bool HasField16 {

+      get { return hasField16; }

+    }

+    public int Field16 {

+      get { return field16_; }

+    }

+    

+    public const int Field19FieldNumber = 19;

+    private bool hasField19;

+    private int field19_ = 2;

+    public bool HasField19 {

+      get { return hasField19; }

+    }

+    public int Field19 {

+      get { return field19_; }

+    }

+    

+    public const int Field20FieldNumber = 20;

+    private bool hasField20;

+    private bool field20_ = true;

+    public bool HasField20 {

+      get { return hasField20; }

+    }

+    public bool Field20 {

+      get { return field20_; }

+    }

+    

+    public const int Field28FieldNumber = 28;

+    private bool hasField28;

+    private bool field28_ = true;

+    public bool HasField28 {

+      get { return hasField28; }

+    }

+    public bool Field28 {

+      get { return field28_; }

+    }

+    

+    public const int Field21FieldNumber = 21;

+    private bool hasField21;

+    private ulong field21_;

+    public bool HasField21 {

+      get { return hasField21; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong Field21 {

+      get { return field21_; }

+    }

+    

+    public const int Field22FieldNumber = 22;

+    private bool hasField22;

+    private int field22_;

+    public bool HasField22 {

+      get { return hasField22; }

+    }

+    public int Field22 {

+      get { return field22_; }

+    }

+    

+    public const int Field23FieldNumber = 23;

+    private bool hasField23;

+    private bool field23_;

+    public bool HasField23 {

+      get { return hasField23; }

+    }

+    public bool Field23 {

+      get { return field23_; }

+    }

+    

+    public const int Field206FieldNumber = 206;

+    private bool hasField206;

+    private bool field206_;

+    public bool HasField206 {

+      get { return hasField206; }

+    }

+    public bool Field206 {

+      get { return field206_; }

+    }

+    

+    public const int Field203FieldNumber = 203;

+    private bool hasField203;

+    private uint field203_;

+    public bool HasField203 {

+      get { return hasField203; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint Field203 {

+      get { return field203_; }

+    }

+    

+    public const int Field204FieldNumber = 204;

+    private bool hasField204;

+    private int field204_;

+    public bool HasField204 {

+      get { return hasField204; }

+    }

+    public int Field204 {

+      get { return field204_; }

+    }

+    

+    public const int Field205FieldNumber = 205;

+    private bool hasField205;

+    private string field205_ = "";

+    public bool HasField205 {

+      get { return hasField205; }

+    }

+    public string Field205 {

+      get { return field205_; }

+    }

+    

+    public const int Field207FieldNumber = 207;

+    private bool hasField207;

+    private ulong field207_;

+    public bool HasField207 {

+      get { return hasField207; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong Field207 {

+      get { return field207_; }

+    }

+    

+    public const int Field300FieldNumber = 300;

+    private bool hasField300;

+    private ulong field300_;

+    public bool HasField300 {

+      get { return hasField300; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong Field300 {

+      get { return field300_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _speedMessage1SubMessageFieldNames;

+      if (hasField1) {

+        output.WriteInt32(1, field_names[0], Field1);

+      }

+      if (hasField2) {

+        output.WriteInt32(2, field_names[7], Field2);

+      }

+      if (hasField3) {

+        output.WriteInt32(3, field_names[18], Field3);

+      }

+      if (hasField12) {

+        output.WriteBool(12, field_names[1], Field12);

+      }

+      if (hasField13) {

+        output.WriteInt64(13, field_names[2], Field13);

+      }

+      if (hasField14) {

+        output.WriteInt64(14, field_names[3], Field14);

+      }

+      if (hasField15) {

+        output.WriteString(15, field_names[4], Field15);

+      }

+      if (hasField16) {

+        output.WriteInt32(16, field_names[5], Field16);

+      }

+      if (hasField19) {

+        output.WriteInt32(19, field_names[6], Field19);

+      }

+      if (hasField20) {

+        output.WriteBool(20, field_names[8], Field20);

+      }

+      if (hasField21) {

+        output.WriteFixed64(21, field_names[14], Field21);

+      }

+      if (hasField22) {

+        output.WriteInt32(22, field_names[15], Field22);

+      }

+      if (hasField23) {

+        output.WriteBool(23, field_names[16], Field23);

+      }

+      if (hasField28) {

+        output.WriteBool(28, field_names[17], Field28);

+      }

+      if (hasField203) {

+        output.WriteFixed32(203, field_names[9], Field203);

+      }

+      if (hasField204) {

+        output.WriteInt32(204, field_names[10], Field204);

+      }

+      if (hasField205) {

+        output.WriteString(205, field_names[11], Field205);

+      }

+      if (hasField206) {

+        output.WriteBool(206, field_names[12], Field206);

+      }

+      if (hasField207) {

+        output.WriteUInt64(207, field_names[13], Field207);

+      }

+      if (hasField300) {

+        output.WriteUInt64(300, field_names[19], Field300);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasField1) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, Field1);

+      }

+      if (hasField2) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, Field2);

+      }

+      if (hasField3) {

+        size += pb::CodedOutputStream.ComputeInt32Size(3, Field3);

+      }

+      if (hasField15) {

+        size += pb::CodedOutputStream.ComputeStringSize(15, Field15);

+      }

+      if (hasField12) {

+        size += pb::CodedOutputStream.ComputeBoolSize(12, Field12);

+      }

+      if (hasField13) {

+        size += pb::CodedOutputStream.ComputeInt64Size(13, Field13);

+      }

+      if (hasField14) {

+        size += pb::CodedOutputStream.ComputeInt64Size(14, Field14);

+      }

+      if (hasField16) {

+        size += pb::CodedOutputStream.ComputeInt32Size(16, Field16);

+      }

+      if (hasField19) {

+        size += pb::CodedOutputStream.ComputeInt32Size(19, Field19);

+      }

+      if (hasField20) {

+        size += pb::CodedOutputStream.ComputeBoolSize(20, Field20);

+      }

+      if (hasField28) {

+        size += pb::CodedOutputStream.ComputeBoolSize(28, Field28);

+      }

+      if (hasField21) {

+        size += pb::CodedOutputStream.ComputeFixed64Size(21, Field21);

+      }

+      if (hasField22) {

+        size += pb::CodedOutputStream.ComputeInt32Size(22, Field22);

+      }

+      if (hasField23) {

+        size += pb::CodedOutputStream.ComputeBoolSize(23, Field23);

+      }

+      if (hasField206) {

+        size += pb::CodedOutputStream.ComputeBoolSize(206, Field206);

+      }

+      if (hasField203) {

+        size += pb::CodedOutputStream.ComputeFixed32Size(203, Field203);

+      }

+      if (hasField204) {

+        size += pb::CodedOutputStream.ComputeInt32Size(204, Field204);

+      }

+      if (hasField205) {

+        size += pb::CodedOutputStream.ComputeStringSize(205, Field205);

+      }

+      if (hasField207) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(207, Field207);

+      }

+      if (hasField300) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(300, Field300);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SpeedMessage1SubMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage1SubMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SpeedMessage1SubMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SpeedMessage1SubMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage1SubMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SpeedMessage1SubMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SpeedMessage1SubMessage result;

+      

+      private SpeedMessage1SubMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SpeedMessage1SubMessage original = result;

+          result = new SpeedMessage1SubMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SpeedMessage1SubMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.Descriptor; }

+      }

+      

+      public override SpeedMessage1SubMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.DefaultInstance; }

+      }

+      

+      public override SpeedMessage1SubMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SpeedMessage1SubMessage) {

+          return MergeFrom((SpeedMessage1SubMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SpeedMessage1SubMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.SpeedMessage1SubMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasField1) {

+          Field1 = other.Field1;

+        }

+        if (other.HasField2) {

+          Field2 = other.Field2;

+        }

+        if (other.HasField3) {

+          Field3 = other.Field3;

+        }

+        if (other.HasField15) {

+          Field15 = other.Field15;

+        }

+        if (other.HasField12) {

+          Field12 = other.Field12;

+        }

+        if (other.HasField13) {

+          Field13 = other.Field13;

+        }

+        if (other.HasField14) {

+          Field14 = other.Field14;

+        }

+        if (other.HasField16) {

+          Field16 = other.Field16;

+        }

+        if (other.HasField19) {

+          Field19 = other.Field19;

+        }

+        if (other.HasField20) {

+          Field20 = other.Field20;

+        }

+        if (other.HasField28) {

+          Field28 = other.Field28;

+        }

+        if (other.HasField21) {

+          Field21 = other.Field21;

+        }

+        if (other.HasField22) {

+          Field22 = other.Field22;

+        }

+        if (other.HasField23) {

+          Field23 = other.Field23;

+        }

+        if (other.HasField206) {

+          Field206 = other.Field206;

+        }

+        if (other.HasField203) {

+          Field203 = other.Field203;

+        }

+        if (other.HasField204) {

+          Field204 = other.Field204;

+        }

+        if (other.HasField205) {

+          Field205 = other.Field205;

+        }

+        if (other.HasField207) {

+          Field207 = other.Field207;

+        }

+        if (other.HasField300) {

+          Field300 = other.Field300;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_speedMessage1SubMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _speedMessage1SubMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasField1 = input.ReadInt32(ref result.field1_);

+              break;

+            }

+            case 16: {

+              result.hasField2 = input.ReadInt32(ref result.field2_);

+              break;

+            }

+            case 24: {

+              result.hasField3 = input.ReadInt32(ref result.field3_);

+              break;

+            }

+            case 96: {

+              result.hasField12 = input.ReadBool(ref result.field12_);

+              break;

+            }

+            case 104: {

+              result.hasField13 = input.ReadInt64(ref result.field13_);

+              break;

+            }

+            case 112: {

+              result.hasField14 = input.ReadInt64(ref result.field14_);

+              break;

+            }

+            case 122: {

+              result.hasField15 = input.ReadString(ref result.field15_);

+              break;

+            }

+            case 128: {

+              result.hasField16 = input.ReadInt32(ref result.field16_);

+              break;

+            }

+            case 152: {

+              result.hasField19 = input.ReadInt32(ref result.field19_);

+              break;

+            }

+            case 160: {

+              result.hasField20 = input.ReadBool(ref result.field20_);

+              break;

+            }

+            case 169: {

+              result.hasField21 = input.ReadFixed64(ref result.field21_);

+              break;

+            }

+            case 176: {

+              result.hasField22 = input.ReadInt32(ref result.field22_);

+              break;

+            }

+            case 184: {

+              result.hasField23 = input.ReadBool(ref result.field23_);

+              break;

+            }

+            case 224: {

+              result.hasField28 = input.ReadBool(ref result.field28_);

+              break;

+            }

+            case 1629: {

+              result.hasField203 = input.ReadFixed32(ref result.field203_);

+              break;

+            }

+            case 1632: {

+              result.hasField204 = input.ReadInt32(ref result.field204_);

+              break;

+            }

+            case 1642: {

+              result.hasField205 = input.ReadString(ref result.field205_);

+              break;

+            }

+            case 1648: {

+              result.hasField206 = input.ReadBool(ref result.field206_);

+              break;

+            }

+            case 1656: {

+              result.hasField207 = input.ReadUInt64(ref result.field207_);

+              break;

+            }

+            case 2400: {

+              result.hasField300 = input.ReadUInt64(ref result.field300_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public int Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(int value) {

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = 0;

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public int Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(int value) {

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = 0;

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public int Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(int value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0;

+        return this;

+      }

+      

+      public bool HasField15 {

+        get { return result.hasField15; }

+      }

+      public string Field15 {

+        get { return result.Field15; }

+        set { SetField15(value); }

+      }

+      public Builder SetField15(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField15 = true;

+        result.field15_ = value;

+        return this;

+      }

+      public Builder ClearField15() {

+        PrepareBuilder();

+        result.hasField15 = false;

+        result.field15_ = "";

+        return this;

+      }

+      

+      public bool HasField12 {

+        get { return result.hasField12; }

+      }

+      public bool Field12 {

+        get { return result.Field12; }

+        set { SetField12(value); }

+      }

+      public Builder SetField12(bool value) {

+        PrepareBuilder();

+        result.hasField12 = true;

+        result.field12_ = value;

+        return this;

+      }

+      public Builder ClearField12() {

+        PrepareBuilder();

+        result.hasField12 = false;

+        result.field12_ = true;

+        return this;

+      }

+      

+      public bool HasField13 {

+        get { return result.hasField13; }

+      }

+      public long Field13 {

+        get { return result.Field13; }

+        set { SetField13(value); }

+      }

+      public Builder SetField13(long value) {

+        PrepareBuilder();

+        result.hasField13 = true;

+        result.field13_ = value;

+        return this;

+      }

+      public Builder ClearField13() {

+        PrepareBuilder();

+        result.hasField13 = false;

+        result.field13_ = 0L;

+        return this;

+      }

+      

+      public bool HasField14 {

+        get { return result.hasField14; }

+      }

+      public long Field14 {

+        get { return result.Field14; }

+        set { SetField14(value); }

+      }

+      public Builder SetField14(long value) {

+        PrepareBuilder();

+        result.hasField14 = true;

+        result.field14_ = value;

+        return this;

+      }

+      public Builder ClearField14() {

+        PrepareBuilder();

+        result.hasField14 = false;

+        result.field14_ = 0L;

+        return this;

+      }

+      

+      public bool HasField16 {

+        get { return result.hasField16; }

+      }

+      public int Field16 {

+        get { return result.Field16; }

+        set { SetField16(value); }

+      }

+      public Builder SetField16(int value) {

+        PrepareBuilder();

+        result.hasField16 = true;

+        result.field16_ = value;

+        return this;

+      }

+      public Builder ClearField16() {

+        PrepareBuilder();

+        result.hasField16 = false;

+        result.field16_ = 0;

+        return this;

+      }

+      

+      public bool HasField19 {

+        get { return result.hasField19; }

+      }

+      public int Field19 {

+        get { return result.Field19; }

+        set { SetField19(value); }

+      }

+      public Builder SetField19(int value) {

+        PrepareBuilder();

+        result.hasField19 = true;

+        result.field19_ = value;

+        return this;

+      }

+      public Builder ClearField19() {

+        PrepareBuilder();

+        result.hasField19 = false;

+        result.field19_ = 2;

+        return this;

+      }

+      

+      public bool HasField20 {

+        get { return result.hasField20; }

+      }

+      public bool Field20 {

+        get { return result.Field20; }

+        set { SetField20(value); }

+      }

+      public Builder SetField20(bool value) {

+        PrepareBuilder();

+        result.hasField20 = true;

+        result.field20_ = value;

+        return this;

+      }

+      public Builder ClearField20() {

+        PrepareBuilder();

+        result.hasField20 = false;

+        result.field20_ = true;

+        return this;

+      }

+      

+      public bool HasField28 {

+        get { return result.hasField28; }

+      }

+      public bool Field28 {

+        get { return result.Field28; }

+        set { SetField28(value); }

+      }

+      public Builder SetField28(bool value) {

+        PrepareBuilder();

+        result.hasField28 = true;

+        result.field28_ = value;

+        return this;

+      }

+      public Builder ClearField28() {

+        PrepareBuilder();

+        result.hasField28 = false;

+        result.field28_ = true;

+        return this;

+      }

+      

+      public bool HasField21 {

+        get { return result.hasField21; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong Field21 {

+        get { return result.Field21; }

+        set { SetField21(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField21(ulong value) {

+        PrepareBuilder();

+        result.hasField21 = true;

+        result.field21_ = value;

+        return this;

+      }

+      public Builder ClearField21() {

+        PrepareBuilder();

+        result.hasField21 = false;

+        result.field21_ = 0;

+        return this;

+      }

+      

+      public bool HasField22 {

+        get { return result.hasField22; }

+      }

+      public int Field22 {

+        get { return result.Field22; }

+        set { SetField22(value); }

+      }

+      public Builder SetField22(int value) {

+        PrepareBuilder();

+        result.hasField22 = true;

+        result.field22_ = value;

+        return this;

+      }

+      public Builder ClearField22() {

+        PrepareBuilder();

+        result.hasField22 = false;

+        result.field22_ = 0;

+        return this;

+      }

+      

+      public bool HasField23 {

+        get { return result.hasField23; }

+      }

+      public bool Field23 {

+        get { return result.Field23; }

+        set { SetField23(value); }

+      }

+      public Builder SetField23(bool value) {

+        PrepareBuilder();

+        result.hasField23 = true;

+        result.field23_ = value;

+        return this;

+      }

+      public Builder ClearField23() {

+        PrepareBuilder();

+        result.hasField23 = false;

+        result.field23_ = false;

+        return this;

+      }

+      

+      public bool HasField206 {

+        get { return result.hasField206; }

+      }

+      public bool Field206 {

+        get { return result.Field206; }

+        set { SetField206(value); }

+      }

+      public Builder SetField206(bool value) {

+        PrepareBuilder();

+        result.hasField206 = true;

+        result.field206_ = value;

+        return this;

+      }

+      public Builder ClearField206() {

+        PrepareBuilder();

+        result.hasField206 = false;

+        result.field206_ = false;

+        return this;

+      }

+      

+      public bool HasField203 {

+        get { return result.hasField203; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint Field203 {

+        get { return result.Field203; }

+        set { SetField203(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField203(uint value) {

+        PrepareBuilder();

+        result.hasField203 = true;

+        result.field203_ = value;

+        return this;

+      }

+      public Builder ClearField203() {

+        PrepareBuilder();

+        result.hasField203 = false;

+        result.field203_ = 0;

+        return this;

+      }

+      

+      public bool HasField204 {

+        get { return result.hasField204; }

+      }

+      public int Field204 {

+        get { return result.Field204; }

+        set { SetField204(value); }

+      }

+      public Builder SetField204(int value) {

+        PrepareBuilder();

+        result.hasField204 = true;

+        result.field204_ = value;

+        return this;

+      }

+      public Builder ClearField204() {

+        PrepareBuilder();

+        result.hasField204 = false;

+        result.field204_ = 0;

+        return this;

+      }

+      

+      public bool HasField205 {

+        get { return result.hasField205; }

+      }

+      public string Field205 {

+        get { return result.Field205; }

+        set { SetField205(value); }

+      }

+      public Builder SetField205(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField205 = true;

+        result.field205_ = value;

+        return this;

+      }

+      public Builder ClearField205() {

+        PrepareBuilder();

+        result.hasField205 = false;

+        result.field205_ = "";

+        return this;

+      }

+      

+      public bool HasField207 {

+        get { return result.hasField207; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong Field207 {

+        get { return result.Field207; }

+        set { SetField207(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField207(ulong value) {

+        PrepareBuilder();

+        result.hasField207 = true;

+        result.field207_ = value;

+        return this;

+      }

+      public Builder ClearField207() {

+        PrepareBuilder();

+        result.hasField207 = false;

+        result.field207_ = 0UL;

+        return this;

+      }

+      

+      public bool HasField300 {

+        get { return result.hasField300; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong Field300 {

+        get { return result.Field300; }

+        set { SetField300(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetField300(ulong value) {

+        PrepareBuilder();

+        result.hasField300 = true;

+        result.field300_ = value;

+        return this;

+      }

+      public Builder ClearField300() {

+        PrepareBuilder();

+        result.hasField300 = false;

+        result.field300_ = 0UL;

+        return this;

+      }

+    }

+    static SpeedMessage1SubMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SpeedMessage2 : pb::GeneratedMessage<SpeedMessage2, SpeedMessage2.Builder> {

+    private SpeedMessage2() { }

+    private static readonly SpeedMessage2 defaultInstance = new SpeedMessage2().MakeReadOnly();

+    private static readonly string[] _speedMessage2FieldNames = new string[] { "field1", "field109", "field127", "field128", "field129", "field130", "field131", "field2", "field205", "field206", "field21", "field210", "field211", "field212", "field213", "field216", "field217", "field218", "field220", "field221", "field222", "field25", "field3", "field30", "field4", "field6", "field63", "field71", "field75", "group1" };

+    private static readonly uint[] _speedMessage2FieldTags = new uint[] { 10, 872, 1018, 1026, 1032, 1040, 1048, 18, 1640, 1648, 168, 1680, 1688, 1696, 1704, 1728, 1736, 1744, 1760, 1768, 1781, 205, 24, 240, 32, 50, 504, 568, 600, 83 };

+    public static SpeedMessage2 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SpeedMessage2 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SpeedMessage2 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_unittest_google_speed_SpeedMessage2__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage2, SpeedMessage2.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_unittest_google_speed_SpeedMessage2__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Group1 : pb::GeneratedMessage<Group1, Group1.Builder> {

+        private Group1() { }

+        private static readonly Group1 defaultInstance = new Group1().MakeReadOnly();

+        private static readonly string[] _group1FieldNames = new string[] { "field11", "field12", "field13", "field14", "field15", "field16", "field20", "field22", "field24", "field26", "field27", "field28", "field29", "field31", "field5", "field73" };

+        private static readonly uint[] _group1FieldTags = new uint[] { 93, 98, 106, 114, 120, 130, 160, 178, 194, 213, 218, 224, 234, 250, 40, 584 };

+        public static Group1 DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Group1 DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Group1 ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_unittest_google_speed_SpeedMessage2_Group1__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Group1, Group1.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_unittest_google_speed_SpeedMessage2_Group1__FieldAccessorTable; }

+        }

+        

+        public const int Field11FieldNumber = 11;

+        private bool hasField11;

+        private float field11_;

+        public bool HasField11 {

+          get { return hasField11; }

+        }

+        public float Field11 {

+          get { return field11_; }

+        }

+        

+        public const int Field26FieldNumber = 26;

+        private bool hasField26;

+        private float field26_;

+        public bool HasField26 {

+          get { return hasField26; }

+        }

+        public float Field26 {

+          get { return field26_; }

+        }

+        

+        public const int Field12FieldNumber = 12;

+        private bool hasField12;

+        private string field12_ = "";

+        public bool HasField12 {

+          get { return hasField12; }

+        }

+        public string Field12 {

+          get { return field12_; }

+        }

+        

+        public const int Field13FieldNumber = 13;

+        private bool hasField13;

+        private string field13_ = "";

+        public bool HasField13 {

+          get { return hasField13; }

+        }

+        public string Field13 {

+          get { return field13_; }

+        }

+        

+        public const int Field14FieldNumber = 14;

+        private pbc::PopsicleList<string> field14_ = new pbc::PopsicleList<string>();

+        public scg::IList<string> Field14List {

+          get { return pbc::Lists.AsReadOnly(field14_); }

+        }

+        public int Field14Count {

+          get { return field14_.Count; }

+        }

+        public string GetField14(int index) {

+          return field14_[index];

+        }

+        

+        public const int Field15FieldNumber = 15;

+        private bool hasField15;

+        private ulong field15_;

+        public bool HasField15 {

+          get { return hasField15; }

+        }

+        [global::System.CLSCompliant(false)]

+        public ulong Field15 {

+          get { return field15_; }

+        }

+        

+        public const int Field5FieldNumber = 5;

+        private bool hasField5;

+        private int field5_;

+        public bool HasField5 {

+          get { return hasField5; }

+        }

+        public int Field5 {

+          get { return field5_; }

+        }

+        

+        public const int Field27FieldNumber = 27;

+        private bool hasField27;

+        private string field27_ = "";

+        public bool HasField27 {

+          get { return hasField27; }

+        }

+        public string Field27 {

+          get { return field27_; }

+        }

+        

+        public const int Field28FieldNumber = 28;

+        private bool hasField28;

+        private int field28_;

+        public bool HasField28 {

+          get { return hasField28; }

+        }

+        public int Field28 {

+          get { return field28_; }

+        }

+        

+        public const int Field29FieldNumber = 29;

+        private bool hasField29;

+        private string field29_ = "";

+        public bool HasField29 {

+          get { return hasField29; }

+        }

+        public string Field29 {

+          get { return field29_; }

+        }

+        

+        public const int Field16FieldNumber = 16;

+        private bool hasField16;

+        private string field16_ = "";

+        public bool HasField16 {

+          get { return hasField16; }

+        }

+        public string Field16 {

+          get { return field16_; }

+        }

+        

+        public const int Field22FieldNumber = 22;

+        private pbc::PopsicleList<string> field22_ = new pbc::PopsicleList<string>();

+        public scg::IList<string> Field22List {

+          get { return pbc::Lists.AsReadOnly(field22_); }

+        }

+        public int Field22Count {

+          get { return field22_.Count; }

+        }

+        public string GetField22(int index) {

+          return field22_[index];

+        }

+        

+        public const int Field73FieldNumber = 73;

+        private pbc::PopsicleList<int> field73_ = new pbc::PopsicleList<int>();

+        public scg::IList<int> Field73List {

+          get { return pbc::Lists.AsReadOnly(field73_); }

+        }

+        public int Field73Count {

+          get { return field73_.Count; }

+        }

+        public int GetField73(int index) {

+          return field73_[index];

+        }

+        

+        public const int Field20FieldNumber = 20;

+        private bool hasField20;

+        private int field20_;

+        public bool HasField20 {

+          get { return hasField20; }

+        }

+        public int Field20 {

+          get { return field20_; }

+        }

+        

+        public const int Field24FieldNumber = 24;

+        private bool hasField24;

+        private string field24_ = "";

+        public bool HasField24 {

+          get { return hasField24; }

+        }

+        public string Field24 {

+          get { return field24_; }

+        }

+        

+        public const int Field31FieldNumber = 31;

+        private bool hasField31;

+        private global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage field31_;

+        public bool HasField31 {

+          get { return hasField31; }

+        }

+        public global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage Field31 {

+          get { return field31_ ?? global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.DefaultInstance; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            if (!hasField11) return false;

+            if (!hasField15) return false;

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _group1FieldNames;

+          if (hasField5) {

+            output.WriteInt32(5, field_names[14], Field5);

+          }

+          if (hasField11) {

+            output.WriteFloat(11, field_names[0], Field11);

+          }

+          if (hasField12) {

+            output.WriteString(12, field_names[1], Field12);

+          }

+          if (hasField13) {

+            output.WriteString(13, field_names[2], Field13);

+          }

+          if (field14_.Count > 0) {

+            output.WriteStringArray(14, field_names[3], field14_);

+          }

+          if (hasField15) {

+            output.WriteUInt64(15, field_names[4], Field15);

+          }

+          if (hasField16) {

+            output.WriteString(16, field_names[5], Field16);

+          }

+          if (hasField20) {

+            output.WriteInt32(20, field_names[6], Field20);

+          }

+          if (field22_.Count > 0) {

+            output.WriteStringArray(22, field_names[7], field22_);

+          }

+          if (hasField24) {

+            output.WriteString(24, field_names[8], Field24);

+          }

+          if (hasField26) {

+            output.WriteFloat(26, field_names[9], Field26);

+          }

+          if (hasField27) {

+            output.WriteString(27, field_names[10], Field27);

+          }

+          if (hasField28) {

+            output.WriteInt32(28, field_names[11], Field28);

+          }

+          if (hasField29) {

+            output.WriteString(29, field_names[12], Field29);

+          }

+          if (hasField31) {

+            output.WriteMessage(31, field_names[13], Field31);

+          }

+          if (field73_.Count > 0) {

+            output.WriteInt32Array(73, field_names[15], field73_);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasField11) {

+            size += pb::CodedOutputStream.ComputeFloatSize(11, Field11);

+          }

+          if (hasField26) {

+            size += pb::CodedOutputStream.ComputeFloatSize(26, Field26);

+          }

+          if (hasField12) {

+            size += pb::CodedOutputStream.ComputeStringSize(12, Field12);

+          }

+          if (hasField13) {

+            size += pb::CodedOutputStream.ComputeStringSize(13, Field13);

+          }

+          {

+            int dataSize = 0;

+            foreach (string element in Field14List) {

+              dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+            }

+            size += dataSize;

+            size += 1 * field14_.Count;

+          }

+          if (hasField15) {

+            size += pb::CodedOutputStream.ComputeUInt64Size(15, Field15);

+          }

+          if (hasField5) {

+            size += pb::CodedOutputStream.ComputeInt32Size(5, Field5);

+          }

+          if (hasField27) {

+            size += pb::CodedOutputStream.ComputeStringSize(27, Field27);

+          }

+          if (hasField28) {

+            size += pb::CodedOutputStream.ComputeInt32Size(28, Field28);

+          }

+          if (hasField29) {

+            size += pb::CodedOutputStream.ComputeStringSize(29, Field29);

+          }

+          if (hasField16) {

+            size += pb::CodedOutputStream.ComputeStringSize(16, Field16);

+          }

+          {

+            int dataSize = 0;

+            foreach (string element in Field22List) {

+              dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+            }

+            size += dataSize;

+            size += 2 * field22_.Count;

+          }

+          {

+            int dataSize = 0;

+            foreach (int element in Field73List) {

+              dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+            }

+            size += dataSize;

+            size += 2 * field73_.Count;

+          }

+          if (hasField20) {

+            size += pb::CodedOutputStream.ComputeInt32Size(20, Field20);

+          }

+          if (hasField24) {

+            size += pb::CodedOutputStream.ComputeStringSize(24, Field24);

+          }

+          if (hasField31) {

+            size += pb::CodedOutputStream.ComputeMessageSize(31, Field31);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static Group1 ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Group1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Group1 ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Group1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Group1 ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Group1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Group1 ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Group1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Group1 ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Group1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Group1 MakeReadOnly() {

+          field14_.MakeReadOnly();

+          field22_.MakeReadOnly();

+          field73_.MakeReadOnly();

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Group1 prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Group1, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Group1 cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Group1 result;

+          

+          private Group1 PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Group1 original = result;

+              result = new Group1();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Group1 MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.Descriptor; }

+          }

+          

+          public override Group1 DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.DefaultInstance; }

+          }

+          

+          public override Group1 BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is Group1) {

+              return MergeFrom((Group1) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(Group1 other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasField11) {

+              Field11 = other.Field11;

+            }

+            if (other.HasField26) {

+              Field26 = other.Field26;

+            }

+            if (other.HasField12) {

+              Field12 = other.Field12;

+            }

+            if (other.HasField13) {

+              Field13 = other.Field13;

+            }

+            if (other.field14_.Count != 0) {

+              result.field14_.Add(other.field14_);

+            }

+            if (other.HasField15) {

+              Field15 = other.Field15;

+            }

+            if (other.HasField5) {

+              Field5 = other.Field5;

+            }

+            if (other.HasField27) {

+              Field27 = other.Field27;

+            }

+            if (other.HasField28) {

+              Field28 = other.Field28;

+            }

+            if (other.HasField29) {

+              Field29 = other.Field29;

+            }

+            if (other.HasField16) {

+              Field16 = other.Field16;

+            }

+            if (other.field22_.Count != 0) {

+              result.field22_.Add(other.field22_);

+            }

+            if (other.field73_.Count != 0) {

+              result.field73_.Add(other.field73_);

+            }

+            if (other.HasField20) {

+              Field20 = other.Field20;

+            }

+            if (other.HasField24) {

+              Field24 = other.Field24;

+            }

+            if (other.HasField31) {

+              MergeField31(other.Field31);

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_group1FieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _group1FieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 40: {

+                  result.hasField5 = input.ReadInt32(ref result.field5_);

+                  break;

+                }

+                case 93: {

+                  result.hasField11 = input.ReadFloat(ref result.field11_);

+                  break;

+                }

+                case 98: {

+                  result.hasField12 = input.ReadString(ref result.field12_);

+                  break;

+                }

+                case 106: {

+                  result.hasField13 = input.ReadString(ref result.field13_);

+                  break;

+                }

+                case 114: {

+                  input.ReadStringArray(tag, field_name, result.field14_);

+                  break;

+                }

+                case 120: {

+                  result.hasField15 = input.ReadUInt64(ref result.field15_);

+                  break;

+                }

+                case 130: {

+                  result.hasField16 = input.ReadString(ref result.field16_);

+                  break;

+                }

+                case 160: {

+                  result.hasField20 = input.ReadInt32(ref result.field20_);

+                  break;

+                }

+                case 178: {

+                  input.ReadStringArray(tag, field_name, result.field22_);

+                  break;

+                }

+                case 194: {

+                  result.hasField24 = input.ReadString(ref result.field24_);

+                  break;

+                }

+                case 213: {

+                  result.hasField26 = input.ReadFloat(ref result.field26_);

+                  break;

+                }

+                case 218: {

+                  result.hasField27 = input.ReadString(ref result.field27_);

+                  break;

+                }

+                case 224: {

+                  result.hasField28 = input.ReadInt32(ref result.field28_);

+                  break;

+                }

+                case 234: {

+                  result.hasField29 = input.ReadString(ref result.field29_);

+                  break;

+                }

+                case 250: {

+                  global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.CreateBuilder();

+                  if (result.hasField31) {

+                    subBuilder.MergeFrom(Field31);

+                  }

+                  input.ReadMessage(subBuilder, extensionRegistry);

+                  Field31 = subBuilder.BuildPartial();

+                  break;

+                }

+                case 586:

+                case 584: {

+                  input.ReadInt32Array(tag, field_name, result.field73_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasField11 {

+            get { return result.hasField11; }

+          }

+          public float Field11 {

+            get { return result.Field11; }

+            set { SetField11(value); }

+          }

+          public Builder SetField11(float value) {

+            PrepareBuilder();

+            result.hasField11 = true;

+            result.field11_ = value;

+            return this;

+          }

+          public Builder ClearField11() {

+            PrepareBuilder();

+            result.hasField11 = false;

+            result.field11_ = 0F;

+            return this;

+          }

+          

+          public bool HasField26 {

+            get { return result.hasField26; }

+          }

+          public float Field26 {

+            get { return result.Field26; }

+            set { SetField26(value); }

+          }

+          public Builder SetField26(float value) {

+            PrepareBuilder();

+            result.hasField26 = true;

+            result.field26_ = value;

+            return this;

+          }

+          public Builder ClearField26() {

+            PrepareBuilder();

+            result.hasField26 = false;

+            result.field26_ = 0F;

+            return this;

+          }

+          

+          public bool HasField12 {

+            get { return result.hasField12; }

+          }

+          public string Field12 {

+            get { return result.Field12; }

+            set { SetField12(value); }

+          }

+          public Builder SetField12(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField12 = true;

+            result.field12_ = value;

+            return this;

+          }

+          public Builder ClearField12() {

+            PrepareBuilder();

+            result.hasField12 = false;

+            result.field12_ = "";

+            return this;

+          }

+          

+          public bool HasField13 {

+            get { return result.hasField13; }

+          }

+          public string Field13 {

+            get { return result.Field13; }

+            set { SetField13(value); }

+          }

+          public Builder SetField13(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField13 = true;

+            result.field13_ = value;

+            return this;

+          }

+          public Builder ClearField13() {

+            PrepareBuilder();

+            result.hasField13 = false;

+            result.field13_ = "";

+            return this;

+          }

+          

+          public pbc::IPopsicleList<string> Field14List {

+            get { return PrepareBuilder().field14_; }

+          }

+          public int Field14Count {

+            get { return result.Field14Count; }

+          }

+          public string GetField14(int index) {

+            return result.GetField14(index);

+          }

+          public Builder SetField14(int index, string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field14_[index] = value;

+            return this;

+          }

+          public Builder AddField14(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field14_.Add(value);

+            return this;

+          }

+          public Builder AddRangeField14(scg::IEnumerable<string> values) {

+            PrepareBuilder();

+            result.field14_.Add(values);

+            return this;

+          }

+          public Builder ClearField14() {

+            PrepareBuilder();

+            result.field14_.Clear();

+            return this;

+          }

+          

+          public bool HasField15 {

+            get { return result.hasField15; }

+          }

+          [global::System.CLSCompliant(false)]

+          public ulong Field15 {

+            get { return result.Field15; }

+            set { SetField15(value); }

+          }

+          [global::System.CLSCompliant(false)]

+          public Builder SetField15(ulong value) {

+            PrepareBuilder();

+            result.hasField15 = true;

+            result.field15_ = value;

+            return this;

+          }

+          public Builder ClearField15() {

+            PrepareBuilder();

+            result.hasField15 = false;

+            result.field15_ = 0UL;

+            return this;

+          }

+          

+          public bool HasField5 {

+            get { return result.hasField5; }

+          }

+          public int Field5 {

+            get { return result.Field5; }

+            set { SetField5(value); }

+          }

+          public Builder SetField5(int value) {

+            PrepareBuilder();

+            result.hasField5 = true;

+            result.field5_ = value;

+            return this;

+          }

+          public Builder ClearField5() {

+            PrepareBuilder();

+            result.hasField5 = false;

+            result.field5_ = 0;

+            return this;

+          }

+          

+          public bool HasField27 {

+            get { return result.hasField27; }

+          }

+          public string Field27 {

+            get { return result.Field27; }

+            set { SetField27(value); }

+          }

+          public Builder SetField27(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField27 = true;

+            result.field27_ = value;

+            return this;

+          }

+          public Builder ClearField27() {

+            PrepareBuilder();

+            result.hasField27 = false;

+            result.field27_ = "";

+            return this;

+          }

+          

+          public bool HasField28 {

+            get { return result.hasField28; }

+          }

+          public int Field28 {

+            get { return result.Field28; }

+            set { SetField28(value); }

+          }

+          public Builder SetField28(int value) {

+            PrepareBuilder();

+            result.hasField28 = true;

+            result.field28_ = value;

+            return this;

+          }

+          public Builder ClearField28() {

+            PrepareBuilder();

+            result.hasField28 = false;

+            result.field28_ = 0;

+            return this;

+          }

+          

+          public bool HasField29 {

+            get { return result.hasField29; }

+          }

+          public string Field29 {

+            get { return result.Field29; }

+            set { SetField29(value); }

+          }

+          public Builder SetField29(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField29 = true;

+            result.field29_ = value;

+            return this;

+          }

+          public Builder ClearField29() {

+            PrepareBuilder();

+            result.hasField29 = false;

+            result.field29_ = "";

+            return this;

+          }

+          

+          public bool HasField16 {

+            get { return result.hasField16; }

+          }

+          public string Field16 {

+            get { return result.Field16; }

+            set { SetField16(value); }

+          }

+          public Builder SetField16(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField16 = true;

+            result.field16_ = value;

+            return this;

+          }

+          public Builder ClearField16() {

+            PrepareBuilder();

+            result.hasField16 = false;

+            result.field16_ = "";

+            return this;

+          }

+          

+          public pbc::IPopsicleList<string> Field22List {

+            get { return PrepareBuilder().field22_; }

+          }

+          public int Field22Count {

+            get { return result.Field22Count; }

+          }

+          public string GetField22(int index) {

+            return result.GetField22(index);

+          }

+          public Builder SetField22(int index, string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field22_[index] = value;

+            return this;

+          }

+          public Builder AddField22(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.field22_.Add(value);

+            return this;

+          }

+          public Builder AddRangeField22(scg::IEnumerable<string> values) {

+            PrepareBuilder();

+            result.field22_.Add(values);

+            return this;

+          }

+          public Builder ClearField22() {

+            PrepareBuilder();

+            result.field22_.Clear();

+            return this;

+          }

+          

+          public pbc::IPopsicleList<int> Field73List {

+            get { return PrepareBuilder().field73_; }

+          }

+          public int Field73Count {

+            get { return result.Field73Count; }

+          }

+          public int GetField73(int index) {

+            return result.GetField73(index);

+          }

+          public Builder SetField73(int index, int value) {

+            PrepareBuilder();

+            result.field73_[index] = value;

+            return this;

+          }

+          public Builder AddField73(int value) {

+            PrepareBuilder();

+            result.field73_.Add(value);

+            return this;

+          }

+          public Builder AddRangeField73(scg::IEnumerable<int> values) {

+            PrepareBuilder();

+            result.field73_.Add(values);

+            return this;

+          }

+          public Builder ClearField73() {

+            PrepareBuilder();

+            result.field73_.Clear();

+            return this;

+          }

+          

+          public bool HasField20 {

+            get { return result.hasField20; }

+          }

+          public int Field20 {

+            get { return result.Field20; }

+            set { SetField20(value); }

+          }

+          public Builder SetField20(int value) {

+            PrepareBuilder();

+            result.hasField20 = true;

+            result.field20_ = value;

+            return this;

+          }

+          public Builder ClearField20() {

+            PrepareBuilder();

+            result.hasField20 = false;

+            result.field20_ = 0;

+            return this;

+          }

+          

+          public bool HasField24 {

+            get { return result.hasField24; }

+          }

+          public string Field24 {

+            get { return result.Field24; }

+            set { SetField24(value); }

+          }

+          public Builder SetField24(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField24 = true;

+            result.field24_ = value;

+            return this;

+          }

+          public Builder ClearField24() {

+            PrepareBuilder();

+            result.hasField24 = false;

+            result.field24_ = "";

+            return this;

+          }

+          

+          public bool HasField31 {

+           get { return result.hasField31; }

+          }

+          public global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage Field31 {

+            get { return result.Field31; }

+            set { SetField31(value); }

+          }

+          public Builder SetField31(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasField31 = true;

+            result.field31_ = value;

+            return this;

+          }

+          public Builder SetField31(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.Builder builderForValue) {

+            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+            PrepareBuilder();

+            result.hasField31 = true;

+            result.field31_ = builderForValue.Build();

+            return this;

+          }

+          public Builder MergeField31(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            if (result.hasField31 &&

+                result.field31_ != global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.DefaultInstance) {

+                result.field31_ = global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.CreateBuilder(result.field31_).MergeFrom(value).BuildPartial();

+            } else {

+              result.field31_ = value;

+            }

+            result.hasField31 = true;

+            return this;

+          }

+          public Builder ClearField31() {

+            PrepareBuilder();

+            result.hasField31 = false;

+            result.field31_ = null;

+            return this;

+          }

+        }

+        static Group1() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private string field1_ = "";

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public string Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private long field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public long Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field4FieldNumber = 4;

+    private bool hasField4;

+    private long field4_;

+    public bool HasField4 {

+      get { return hasField4; }

+    }

+    public long Field4 {

+      get { return field4_; }

+    }

+    

+    public const int Field30FieldNumber = 30;

+    private bool hasField30;

+    private long field30_;

+    public bool HasField30 {

+      get { return hasField30; }

+    }

+    public long Field30 {

+      get { return field30_; }

+    }

+    

+    public const int Field75FieldNumber = 75;

+    private bool hasField75;

+    private bool field75_;

+    public bool HasField75 {

+      get { return hasField75; }

+    }

+    public bool Field75 {

+      get { return field75_; }

+    }

+    

+    public const int Field6FieldNumber = 6;

+    private bool hasField6;

+    private string field6_ = "";

+    public bool HasField6 {

+      get { return hasField6; }

+    }

+    public string Field6 {

+      get { return field6_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private pb::ByteString field2_ = pb::ByteString.Empty;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public pb::ByteString Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field21FieldNumber = 21;

+    private bool hasField21;

+    private int field21_;

+    public bool HasField21 {

+      get { return hasField21; }

+    }

+    public int Field21 {

+      get { return field21_; }

+    }

+    

+    public const int Field71FieldNumber = 71;

+    private bool hasField71;

+    private int field71_;

+    public bool HasField71 {

+      get { return hasField71; }

+    }

+    public int Field71 {

+      get { return field71_; }

+    }

+    

+    public const int Field25FieldNumber = 25;

+    private bool hasField25;

+    private float field25_;

+    public bool HasField25 {

+      get { return hasField25; }

+    }

+    public float Field25 {

+      get { return field25_; }

+    }

+    

+    public const int Field109FieldNumber = 109;

+    private bool hasField109;

+    private int field109_;

+    public bool HasField109 {

+      get { return hasField109; }

+    }

+    public int Field109 {

+      get { return field109_; }

+    }

+    

+    public const int Field210FieldNumber = 210;

+    private bool hasField210;

+    private int field210_;

+    public bool HasField210 {

+      get { return hasField210; }

+    }

+    public int Field210 {

+      get { return field210_; }

+    }

+    

+    public const int Field211FieldNumber = 211;

+    private bool hasField211;

+    private int field211_;

+    public bool HasField211 {

+      get { return hasField211; }

+    }

+    public int Field211 {

+      get { return field211_; }

+    }

+    

+    public const int Field212FieldNumber = 212;

+    private bool hasField212;

+    private int field212_;

+    public bool HasField212 {

+      get { return hasField212; }

+    }

+    public int Field212 {

+      get { return field212_; }

+    }

+    

+    public const int Field213FieldNumber = 213;

+    private bool hasField213;

+    private int field213_;

+    public bool HasField213 {

+      get { return hasField213; }

+    }

+    public int Field213 {

+      get { return field213_; }

+    }

+    

+    public const int Field216FieldNumber = 216;

+    private bool hasField216;

+    private int field216_;

+    public bool HasField216 {

+      get { return hasField216; }

+    }

+    public int Field216 {

+      get { return field216_; }

+    }

+    

+    public const int Field217FieldNumber = 217;

+    private bool hasField217;

+    private int field217_;

+    public bool HasField217 {

+      get { return hasField217; }

+    }

+    public int Field217 {

+      get { return field217_; }

+    }

+    

+    public const int Field218FieldNumber = 218;

+    private bool hasField218;

+    private int field218_;

+    public bool HasField218 {

+      get { return hasField218; }

+    }

+    public int Field218 {

+      get { return field218_; }

+    }

+    

+    public const int Field220FieldNumber = 220;

+    private bool hasField220;

+    private int field220_;

+    public bool HasField220 {

+      get { return hasField220; }

+    }

+    public int Field220 {

+      get { return field220_; }

+    }

+    

+    public const int Field221FieldNumber = 221;

+    private bool hasField221;

+    private int field221_;

+    public bool HasField221 {

+      get { return hasField221; }

+    }

+    public int Field221 {

+      get { return field221_; }

+    }

+    

+    public const int Field222FieldNumber = 222;

+    private bool hasField222;

+    private float field222_;

+    public bool HasField222 {

+      get { return hasField222; }

+    }

+    public float Field222 {

+      get { return field222_; }

+    }

+    

+    public const int Field63FieldNumber = 63;

+    private bool hasField63;

+    private int field63_;

+    public bool HasField63 {

+      get { return hasField63; }

+    }

+    public int Field63 {

+      get { return field63_; }

+    }

+    

+    public const int Group1FieldNumber = 10;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1> group1_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1> Group1List {

+      get { return group1_; }

+    }

+    public int Group1Count {

+      get { return group1_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1 GetGroup1(int index) {

+      return group1_[index];

+    }

+    

+    public const int Field128FieldNumber = 128;

+    private pbc::PopsicleList<string> field128_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> Field128List {

+      get { return pbc::Lists.AsReadOnly(field128_); }

+    }

+    public int Field128Count {

+      get { return field128_.Count; }

+    }

+    public string GetField128(int index) {

+      return field128_[index];

+    }

+    

+    public const int Field131FieldNumber = 131;

+    private bool hasField131;

+    private long field131_;

+    public bool HasField131 {

+      get { return hasField131; }

+    }

+    public long Field131 {

+      get { return field131_; }

+    }

+    

+    public const int Field127FieldNumber = 127;

+    private pbc::PopsicleList<string> field127_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> Field127List {

+      get { return pbc::Lists.AsReadOnly(field127_); }

+    }

+    public int Field127Count {

+      get { return field127_.Count; }

+    }

+    public string GetField127(int index) {

+      return field127_[index];

+    }

+    

+    public const int Field129FieldNumber = 129;

+    private bool hasField129;

+    private int field129_;

+    public bool HasField129 {

+      get { return hasField129; }

+    }

+    public int Field129 {

+      get { return field129_; }

+    }

+    

+    public const int Field130FieldNumber = 130;

+    private pbc::PopsicleList<long> field130_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> Field130List {

+      get { return pbc::Lists.AsReadOnly(field130_); }

+    }

+    public int Field130Count {

+      get { return field130_.Count; }

+    }

+    public long GetField130(int index) {

+      return field130_[index];

+    }

+    

+    public const int Field205FieldNumber = 205;

+    private bool hasField205;

+    private bool field205_;

+    public bool HasField205 {

+      get { return hasField205; }

+    }

+    public bool Field205 {

+      get { return field205_; }

+    }

+    

+    public const int Field206FieldNumber = 206;

+    private bool hasField206;

+    private bool field206_;

+    public bool HasField206 {

+      get { return hasField206; }

+    }

+    public bool Field206 {

+      get { return field206_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _speedMessage2FieldNames;

+      if (hasField1) {

+        output.WriteString(1, field_names[0], Field1);

+      }

+      if (hasField2) {

+        output.WriteBytes(2, field_names[7], Field2);

+      }

+      if (hasField3) {

+        output.WriteInt64(3, field_names[22], Field3);

+      }

+      if (hasField4) {

+        output.WriteInt64(4, field_names[24], Field4);

+      }

+      if (hasField6) {

+        output.WriteString(6, field_names[25], Field6);

+      }

+      if (group1_.Count > 0) {

+        output.WriteGroupArray(10, field_names[29], group1_);

+      }

+      if (hasField21) {

+        output.WriteInt32(21, field_names[10], Field21);

+      }

+      if (hasField25) {

+        output.WriteFloat(25, field_names[21], Field25);

+      }

+      if (hasField30) {

+        output.WriteInt64(30, field_names[23], Field30);

+      }

+      if (hasField63) {

+        output.WriteInt32(63, field_names[26], Field63);

+      }

+      if (hasField71) {

+        output.WriteInt32(71, field_names[27], Field71);

+      }

+      if (hasField75) {

+        output.WriteBool(75, field_names[28], Field75);

+      }

+      if (hasField109) {

+        output.WriteInt32(109, field_names[1], Field109);

+      }

+      if (field127_.Count > 0) {

+        output.WriteStringArray(127, field_names[2], field127_);

+      }

+      if (field128_.Count > 0) {

+        output.WriteStringArray(128, field_names[3], field128_);

+      }

+      if (hasField129) {

+        output.WriteInt32(129, field_names[4], Field129);

+      }

+      if (field130_.Count > 0) {

+        output.WriteInt64Array(130, field_names[5], field130_);

+      }

+      if (hasField131) {

+        output.WriteInt64(131, field_names[6], Field131);

+      }

+      if (hasField205) {

+        output.WriteBool(205, field_names[8], Field205);

+      }

+      if (hasField206) {

+        output.WriteBool(206, field_names[9], Field206);

+      }

+      if (hasField210) {

+        output.WriteInt32(210, field_names[11], Field210);

+      }

+      if (hasField211) {

+        output.WriteInt32(211, field_names[12], Field211);

+      }

+      if (hasField212) {

+        output.WriteInt32(212, field_names[13], Field212);

+      }

+      if (hasField213) {

+        output.WriteInt32(213, field_names[14], Field213);

+      }

+      if (hasField216) {

+        output.WriteInt32(216, field_names[15], Field216);

+      }

+      if (hasField217) {

+        output.WriteInt32(217, field_names[16], Field217);

+      }

+      if (hasField218) {

+        output.WriteInt32(218, field_names[17], Field218);

+      }

+      if (hasField220) {

+        output.WriteInt32(220, field_names[18], Field220);

+      }

+      if (hasField221) {

+        output.WriteInt32(221, field_names[19], Field221);

+      }

+      if (hasField222) {

+        output.WriteFloat(222, field_names[20], Field222);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasField1) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Field1);

+      }

+      if (hasField3) {

+        size += pb::CodedOutputStream.ComputeInt64Size(3, Field3);

+      }

+      if (hasField4) {

+        size += pb::CodedOutputStream.ComputeInt64Size(4, Field4);

+      }

+      if (hasField30) {

+        size += pb::CodedOutputStream.ComputeInt64Size(30, Field30);

+      }

+      if (hasField75) {

+        size += pb::CodedOutputStream.ComputeBoolSize(75, Field75);

+      }

+      if (hasField6) {

+        size += pb::CodedOutputStream.ComputeStringSize(6, Field6);

+      }

+      if (hasField2) {

+        size += pb::CodedOutputStream.ComputeBytesSize(2, Field2);

+      }

+      if (hasField21) {

+        size += pb::CodedOutputStream.ComputeInt32Size(21, Field21);

+      }

+      if (hasField71) {

+        size += pb::CodedOutputStream.ComputeInt32Size(71, Field71);

+      }

+      if (hasField25) {

+        size += pb::CodedOutputStream.ComputeFloatSize(25, Field25);

+      }

+      if (hasField109) {

+        size += pb::CodedOutputStream.ComputeInt32Size(109, Field109);

+      }

+      if (hasField210) {

+        size += pb::CodedOutputStream.ComputeInt32Size(210, Field210);

+      }

+      if (hasField211) {

+        size += pb::CodedOutputStream.ComputeInt32Size(211, Field211);

+      }

+      if (hasField212) {

+        size += pb::CodedOutputStream.ComputeInt32Size(212, Field212);

+      }

+      if (hasField213) {

+        size += pb::CodedOutputStream.ComputeInt32Size(213, Field213);

+      }

+      if (hasField216) {

+        size += pb::CodedOutputStream.ComputeInt32Size(216, Field216);

+      }

+      if (hasField217) {

+        size += pb::CodedOutputStream.ComputeInt32Size(217, Field217);

+      }

+      if (hasField218) {

+        size += pb::CodedOutputStream.ComputeInt32Size(218, Field218);

+      }

+      if (hasField220) {

+        size += pb::CodedOutputStream.ComputeInt32Size(220, Field220);

+      }

+      if (hasField221) {

+        size += pb::CodedOutputStream.ComputeInt32Size(221, Field221);

+      }

+      if (hasField222) {

+        size += pb::CodedOutputStream.ComputeFloatSize(222, Field222);

+      }

+      if (hasField63) {

+        size += pb::CodedOutputStream.ComputeInt32Size(63, Field63);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1 element in Group1List) {

+        size += pb::CodedOutputStream.ComputeGroupSize(10, element);

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in Field128List) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * field128_.Count;

+      }

+      if (hasField131) {

+        size += pb::CodedOutputStream.ComputeInt64Size(131, Field131);

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in Field127List) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * field127_.Count;

+      }

+      if (hasField129) {

+        size += pb::CodedOutputStream.ComputeInt32Size(129, Field129);

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in Field130List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * field130_.Count;

+      }

+      if (hasField205) {

+        size += pb::CodedOutputStream.ComputeBoolSize(205, Field205);

+      }

+      if (hasField206) {

+        size += pb::CodedOutputStream.ComputeBoolSize(206, Field206);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SpeedMessage2 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SpeedMessage2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SpeedMessage2 MakeReadOnly() {

+      group1_.MakeReadOnly();

+      field128_.MakeReadOnly();

+      field127_.MakeReadOnly();

+      field130_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SpeedMessage2 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage2, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SpeedMessage2 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SpeedMessage2 result;

+      

+      private SpeedMessage2 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SpeedMessage2 original = result;

+          result = new SpeedMessage2();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SpeedMessage2 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Descriptor; }

+      }

+      

+      public override SpeedMessage2 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.DefaultInstance; }

+      }

+      

+      public override SpeedMessage2 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SpeedMessage2) {

+          return MergeFrom((SpeedMessage2) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SpeedMessage2 other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasField1) {

+          Field1 = other.Field1;

+        }

+        if (other.HasField3) {

+          Field3 = other.Field3;

+        }

+        if (other.HasField4) {

+          Field4 = other.Field4;

+        }

+        if (other.HasField30) {

+          Field30 = other.Field30;

+        }

+        if (other.HasField75) {

+          Field75 = other.Field75;

+        }

+        if (other.HasField6) {

+          Field6 = other.Field6;

+        }

+        if (other.HasField2) {

+          Field2 = other.Field2;

+        }

+        if (other.HasField21) {

+          Field21 = other.Field21;

+        }

+        if (other.HasField71) {

+          Field71 = other.Field71;

+        }

+        if (other.HasField25) {

+          Field25 = other.Field25;

+        }

+        if (other.HasField109) {

+          Field109 = other.Field109;

+        }

+        if (other.HasField210) {

+          Field210 = other.Field210;

+        }

+        if (other.HasField211) {

+          Field211 = other.Field211;

+        }

+        if (other.HasField212) {

+          Field212 = other.Field212;

+        }

+        if (other.HasField213) {

+          Field213 = other.Field213;

+        }

+        if (other.HasField216) {

+          Field216 = other.Field216;

+        }

+        if (other.HasField217) {

+          Field217 = other.Field217;

+        }

+        if (other.HasField218) {

+          Field218 = other.Field218;

+        }

+        if (other.HasField220) {

+          Field220 = other.Field220;

+        }

+        if (other.HasField221) {

+          Field221 = other.Field221;

+        }

+        if (other.HasField222) {

+          Field222 = other.Field222;

+        }

+        if (other.HasField63) {

+          Field63 = other.Field63;

+        }

+        if (other.group1_.Count != 0) {

+          result.group1_.Add(other.group1_);

+        }

+        if (other.field128_.Count != 0) {

+          result.field128_.Add(other.field128_);

+        }

+        if (other.HasField131) {

+          Field131 = other.Field131;

+        }

+        if (other.field127_.Count != 0) {

+          result.field127_.Add(other.field127_);

+        }

+        if (other.HasField129) {

+          Field129 = other.Field129;

+        }

+        if (other.field130_.Count != 0) {

+          result.field130_.Add(other.field130_);

+        }

+        if (other.HasField205) {

+          Field205 = other.Field205;

+        }

+        if (other.HasField206) {

+          Field206 = other.Field206;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_speedMessage2FieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _speedMessage2FieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasField1 = input.ReadString(ref result.field1_);

+              break;

+            }

+            case 18: {

+              result.hasField2 = input.ReadBytes(ref result.field2_);

+              break;

+            }

+            case 24: {

+              result.hasField3 = input.ReadInt64(ref result.field3_);

+              break;

+            }

+            case 32: {

+              result.hasField4 = input.ReadInt64(ref result.field4_);

+              break;

+            }

+            case 50: {

+              result.hasField6 = input.ReadString(ref result.field6_);

+              break;

+            }

+            case 83: {

+              input.ReadGroupArray(tag, field_name, result.group1_, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 168: {

+              result.hasField21 = input.ReadInt32(ref result.field21_);

+              break;

+            }

+            case 205: {

+              result.hasField25 = input.ReadFloat(ref result.field25_);

+              break;

+            }

+            case 240: {

+              result.hasField30 = input.ReadInt64(ref result.field30_);

+              break;

+            }

+            case 504: {

+              result.hasField63 = input.ReadInt32(ref result.field63_);

+              break;

+            }

+            case 568: {

+              result.hasField71 = input.ReadInt32(ref result.field71_);

+              break;

+            }

+            case 600: {

+              result.hasField75 = input.ReadBool(ref result.field75_);

+              break;

+            }

+            case 872: {

+              result.hasField109 = input.ReadInt32(ref result.field109_);

+              break;

+            }

+            case 1018: {

+              input.ReadStringArray(tag, field_name, result.field127_);

+              break;

+            }

+            case 1026: {

+              input.ReadStringArray(tag, field_name, result.field128_);

+              break;

+            }

+            case 1032: {

+              result.hasField129 = input.ReadInt32(ref result.field129_);

+              break;

+            }

+            case 1042:

+            case 1040: {

+              input.ReadInt64Array(tag, field_name, result.field130_);

+              break;

+            }

+            case 1048: {

+              result.hasField131 = input.ReadInt64(ref result.field131_);

+              break;

+            }

+            case 1640: {

+              result.hasField205 = input.ReadBool(ref result.field205_);

+              break;

+            }

+            case 1648: {

+              result.hasField206 = input.ReadBool(ref result.field206_);

+              break;

+            }

+            case 1680: {

+              result.hasField210 = input.ReadInt32(ref result.field210_);

+              break;

+            }

+            case 1688: {

+              result.hasField211 = input.ReadInt32(ref result.field211_);

+              break;

+            }

+            case 1696: {

+              result.hasField212 = input.ReadInt32(ref result.field212_);

+              break;

+            }

+            case 1704: {

+              result.hasField213 = input.ReadInt32(ref result.field213_);

+              break;

+            }

+            case 1728: {

+              result.hasField216 = input.ReadInt32(ref result.field216_);

+              break;

+            }

+            case 1736: {

+              result.hasField217 = input.ReadInt32(ref result.field217_);

+              break;

+            }

+            case 1744: {

+              result.hasField218 = input.ReadInt32(ref result.field218_);

+              break;

+            }

+            case 1760: {

+              result.hasField220 = input.ReadInt32(ref result.field220_);

+              break;

+            }

+            case 1768: {

+              result.hasField221 = input.ReadInt32(ref result.field221_);

+              break;

+            }

+            case 1781: {

+              result.hasField222 = input.ReadFloat(ref result.field222_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public string Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = "";

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public long Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(long value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0L;

+        return this;

+      }

+      

+      public bool HasField4 {

+        get { return result.hasField4; }

+      }

+      public long Field4 {

+        get { return result.Field4; }

+        set { SetField4(value); }

+      }

+      public Builder SetField4(long value) {

+        PrepareBuilder();

+        result.hasField4 = true;

+        result.field4_ = value;

+        return this;

+      }

+      public Builder ClearField4() {

+        PrepareBuilder();

+        result.hasField4 = false;

+        result.field4_ = 0L;

+        return this;

+      }

+      

+      public bool HasField30 {

+        get { return result.hasField30; }

+      }

+      public long Field30 {

+        get { return result.Field30; }

+        set { SetField30(value); }

+      }

+      public Builder SetField30(long value) {

+        PrepareBuilder();

+        result.hasField30 = true;

+        result.field30_ = value;

+        return this;

+      }

+      public Builder ClearField30() {

+        PrepareBuilder();

+        result.hasField30 = false;

+        result.field30_ = 0L;

+        return this;

+      }

+      

+      public bool HasField75 {

+        get { return result.hasField75; }

+      }

+      public bool Field75 {

+        get { return result.Field75; }

+        set { SetField75(value); }

+      }

+      public Builder SetField75(bool value) {

+        PrepareBuilder();

+        result.hasField75 = true;

+        result.field75_ = value;

+        return this;

+      }

+      public Builder ClearField75() {

+        PrepareBuilder();

+        result.hasField75 = false;

+        result.field75_ = false;

+        return this;

+      }

+      

+      public bool HasField6 {

+        get { return result.hasField6; }

+      }

+      public string Field6 {

+        get { return result.Field6; }

+        set { SetField6(value); }

+      }

+      public Builder SetField6(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField6 = true;

+        result.field6_ = value;

+        return this;

+      }

+      public Builder ClearField6() {

+        PrepareBuilder();

+        result.hasField6 = false;

+        result.field6_ = "";

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public pb::ByteString Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = pb::ByteString.Empty;

+        return this;

+      }

+      

+      public bool HasField21 {

+        get { return result.hasField21; }

+      }

+      public int Field21 {

+        get { return result.Field21; }

+        set { SetField21(value); }

+      }

+      public Builder SetField21(int value) {

+        PrepareBuilder();

+        result.hasField21 = true;

+        result.field21_ = value;

+        return this;

+      }

+      public Builder ClearField21() {

+        PrepareBuilder();

+        result.hasField21 = false;

+        result.field21_ = 0;

+        return this;

+      }

+      

+      public bool HasField71 {

+        get { return result.hasField71; }

+      }

+      public int Field71 {

+        get { return result.Field71; }

+        set { SetField71(value); }

+      }

+      public Builder SetField71(int value) {

+        PrepareBuilder();

+        result.hasField71 = true;

+        result.field71_ = value;

+        return this;

+      }

+      public Builder ClearField71() {

+        PrepareBuilder();

+        result.hasField71 = false;

+        result.field71_ = 0;

+        return this;

+      }

+      

+      public bool HasField25 {

+        get { return result.hasField25; }

+      }

+      public float Field25 {

+        get { return result.Field25; }

+        set { SetField25(value); }

+      }

+      public Builder SetField25(float value) {

+        PrepareBuilder();

+        result.hasField25 = true;

+        result.field25_ = value;

+        return this;

+      }

+      public Builder ClearField25() {

+        PrepareBuilder();

+        result.hasField25 = false;

+        result.field25_ = 0F;

+        return this;

+      }

+      

+      public bool HasField109 {

+        get { return result.hasField109; }

+      }

+      public int Field109 {

+        get { return result.Field109; }

+        set { SetField109(value); }

+      }

+      public Builder SetField109(int value) {

+        PrepareBuilder();

+        result.hasField109 = true;

+        result.field109_ = value;

+        return this;

+      }

+      public Builder ClearField109() {

+        PrepareBuilder();

+        result.hasField109 = false;

+        result.field109_ = 0;

+        return this;

+      }

+      

+      public bool HasField210 {

+        get { return result.hasField210; }

+      }

+      public int Field210 {

+        get { return result.Field210; }

+        set { SetField210(value); }

+      }

+      public Builder SetField210(int value) {

+        PrepareBuilder();

+        result.hasField210 = true;

+        result.field210_ = value;

+        return this;

+      }

+      public Builder ClearField210() {

+        PrepareBuilder();

+        result.hasField210 = false;

+        result.field210_ = 0;

+        return this;

+      }

+      

+      public bool HasField211 {

+        get { return result.hasField211; }

+      }

+      public int Field211 {

+        get { return result.Field211; }

+        set { SetField211(value); }

+      }

+      public Builder SetField211(int value) {

+        PrepareBuilder();

+        result.hasField211 = true;

+        result.field211_ = value;

+        return this;

+      }

+      public Builder ClearField211() {

+        PrepareBuilder();

+        result.hasField211 = false;

+        result.field211_ = 0;

+        return this;

+      }

+      

+      public bool HasField212 {

+        get { return result.hasField212; }

+      }

+      public int Field212 {

+        get { return result.Field212; }

+        set { SetField212(value); }

+      }

+      public Builder SetField212(int value) {

+        PrepareBuilder();

+        result.hasField212 = true;

+        result.field212_ = value;

+        return this;

+      }

+      public Builder ClearField212() {

+        PrepareBuilder();

+        result.hasField212 = false;

+        result.field212_ = 0;

+        return this;

+      }

+      

+      public bool HasField213 {

+        get { return result.hasField213; }

+      }

+      public int Field213 {

+        get { return result.Field213; }

+        set { SetField213(value); }

+      }

+      public Builder SetField213(int value) {

+        PrepareBuilder();

+        result.hasField213 = true;

+        result.field213_ = value;

+        return this;

+      }

+      public Builder ClearField213() {

+        PrepareBuilder();

+        result.hasField213 = false;

+        result.field213_ = 0;

+        return this;

+      }

+      

+      public bool HasField216 {

+        get { return result.hasField216; }

+      }

+      public int Field216 {

+        get { return result.Field216; }

+        set { SetField216(value); }

+      }

+      public Builder SetField216(int value) {

+        PrepareBuilder();

+        result.hasField216 = true;

+        result.field216_ = value;

+        return this;

+      }

+      public Builder ClearField216() {

+        PrepareBuilder();

+        result.hasField216 = false;

+        result.field216_ = 0;

+        return this;

+      }

+      

+      public bool HasField217 {

+        get { return result.hasField217; }

+      }

+      public int Field217 {

+        get { return result.Field217; }

+        set { SetField217(value); }

+      }

+      public Builder SetField217(int value) {

+        PrepareBuilder();

+        result.hasField217 = true;

+        result.field217_ = value;

+        return this;

+      }

+      public Builder ClearField217() {

+        PrepareBuilder();

+        result.hasField217 = false;

+        result.field217_ = 0;

+        return this;

+      }

+      

+      public bool HasField218 {

+        get { return result.hasField218; }

+      }

+      public int Field218 {

+        get { return result.Field218; }

+        set { SetField218(value); }

+      }

+      public Builder SetField218(int value) {

+        PrepareBuilder();

+        result.hasField218 = true;

+        result.field218_ = value;

+        return this;

+      }

+      public Builder ClearField218() {

+        PrepareBuilder();

+        result.hasField218 = false;

+        result.field218_ = 0;

+        return this;

+      }

+      

+      public bool HasField220 {

+        get { return result.hasField220; }

+      }

+      public int Field220 {

+        get { return result.Field220; }

+        set { SetField220(value); }

+      }

+      public Builder SetField220(int value) {

+        PrepareBuilder();

+        result.hasField220 = true;

+        result.field220_ = value;

+        return this;

+      }

+      public Builder ClearField220() {

+        PrepareBuilder();

+        result.hasField220 = false;

+        result.field220_ = 0;

+        return this;

+      }

+      

+      public bool HasField221 {

+        get { return result.hasField221; }

+      }

+      public int Field221 {

+        get { return result.Field221; }

+        set { SetField221(value); }

+      }

+      public Builder SetField221(int value) {

+        PrepareBuilder();

+        result.hasField221 = true;

+        result.field221_ = value;

+        return this;

+      }

+      public Builder ClearField221() {

+        PrepareBuilder();

+        result.hasField221 = false;

+        result.field221_ = 0;

+        return this;

+      }

+      

+      public bool HasField222 {

+        get { return result.hasField222; }

+      }

+      public float Field222 {

+        get { return result.Field222; }

+        set { SetField222(value); }

+      }

+      public Builder SetField222(float value) {

+        PrepareBuilder();

+        result.hasField222 = true;

+        result.field222_ = value;

+        return this;

+      }

+      public Builder ClearField222() {

+        PrepareBuilder();

+        result.hasField222 = false;

+        result.field222_ = 0F;

+        return this;

+      }

+      

+      public bool HasField63 {

+        get { return result.hasField63; }

+      }

+      public int Field63 {

+        get { return result.Field63; }

+        set { SetField63(value); }

+      }

+      public Builder SetField63(int value) {

+        PrepareBuilder();

+        result.hasField63 = true;

+        result.field63_ = value;

+        return this;

+      }

+      public Builder ClearField63() {

+        PrepareBuilder();

+        result.hasField63 = false;

+        result.field63_ = 0;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1> Group1List {

+        get { return PrepareBuilder().group1_; }

+      }

+      public int Group1Count {

+        get { return result.Group1Count; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1 GetGroup1(int index) {

+        return result.GetGroup1(index);

+      }

+      public Builder SetGroup1(int index, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.group1_[index] = value;

+        return this;

+      }

+      public Builder SetGroup1(int index, global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.group1_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1 value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.group1_.Add(value);

+        return this;

+      }

+      public Builder AddGroup1(global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.group1_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeGroup1(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.SpeedMessage2.Types.Group1> values) {

+        PrepareBuilder();

+        result.group1_.Add(values);

+        return this;

+      }

+      public Builder ClearGroup1() {

+        PrepareBuilder();

+        result.group1_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> Field128List {

+        get { return PrepareBuilder().field128_; }

+      }

+      public int Field128Count {

+        get { return result.Field128Count; }

+      }

+      public string GetField128(int index) {

+        return result.GetField128(index);

+      }

+      public Builder SetField128(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field128_[index] = value;

+        return this;

+      }

+      public Builder AddField128(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field128_.Add(value);

+        return this;

+      }

+      public Builder AddRangeField128(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.field128_.Add(values);

+        return this;

+      }

+      public Builder ClearField128() {

+        PrepareBuilder();

+        result.field128_.Clear();

+        return this;

+      }

+      

+      public bool HasField131 {

+        get { return result.hasField131; }

+      }

+      public long Field131 {

+        get { return result.Field131; }

+        set { SetField131(value); }

+      }

+      public Builder SetField131(long value) {

+        PrepareBuilder();

+        result.hasField131 = true;

+        result.field131_ = value;

+        return this;

+      }

+      public Builder ClearField131() {

+        PrepareBuilder();

+        result.hasField131 = false;

+        result.field131_ = 0L;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> Field127List {

+        get { return PrepareBuilder().field127_; }

+      }

+      public int Field127Count {

+        get { return result.Field127Count; }

+      }

+      public string GetField127(int index) {

+        return result.GetField127(index);

+      }

+      public Builder SetField127(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field127_[index] = value;

+        return this;

+      }

+      public Builder AddField127(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field127_.Add(value);

+        return this;

+      }

+      public Builder AddRangeField127(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.field127_.Add(values);

+        return this;

+      }

+      public Builder ClearField127() {

+        PrepareBuilder();

+        result.field127_.Clear();

+        return this;

+      }

+      

+      public bool HasField129 {

+        get { return result.hasField129; }

+      }

+      public int Field129 {

+        get { return result.Field129; }

+        set { SetField129(value); }

+      }

+      public Builder SetField129(int value) {

+        PrepareBuilder();

+        result.hasField129 = true;

+        result.field129_ = value;

+        return this;

+      }

+      public Builder ClearField129() {

+        PrepareBuilder();

+        result.hasField129 = false;

+        result.field129_ = 0;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> Field130List {

+        get { return PrepareBuilder().field130_; }

+      }

+      public int Field130Count {

+        get { return result.Field130Count; }

+      }

+      public long GetField130(int index) {

+        return result.GetField130(index);

+      }

+      public Builder SetField130(int index, long value) {

+        PrepareBuilder();

+        result.field130_[index] = value;

+        return this;

+      }

+      public Builder AddField130(long value) {

+        PrepareBuilder();

+        result.field130_.Add(value);

+        return this;

+      }

+      public Builder AddRangeField130(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.field130_.Add(values);

+        return this;

+      }

+      public Builder ClearField130() {

+        PrepareBuilder();

+        result.field130_.Clear();

+        return this;

+      }

+      

+      public bool HasField205 {

+        get { return result.hasField205; }

+      }

+      public bool Field205 {

+        get { return result.Field205; }

+        set { SetField205(value); }

+      }

+      public Builder SetField205(bool value) {

+        PrepareBuilder();

+        result.hasField205 = true;

+        result.field205_ = value;

+        return this;

+      }

+      public Builder ClearField205() {

+        PrepareBuilder();

+        result.hasField205 = false;

+        result.field205_ = false;

+        return this;

+      }

+      

+      public bool HasField206 {

+        get { return result.hasField206; }

+      }

+      public bool Field206 {

+        get { return result.Field206; }

+        set { SetField206(value); }

+      }

+      public Builder SetField206(bool value) {

+        PrepareBuilder();

+        result.hasField206 = true;

+        result.field206_ = value;

+        return this;

+      }

+      public Builder ClearField206() {

+        PrepareBuilder();

+        result.hasField206 = false;

+        result.field206_ = false;

+        return this;

+      }

+    }

+    static SpeedMessage2() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SpeedMessage2GroupedMessage : pb::GeneratedMessage<SpeedMessage2GroupedMessage, SpeedMessage2GroupedMessage.Builder> {

+    private SpeedMessage2GroupedMessage() { }

+    private static readonly SpeedMessage2GroupedMessage defaultInstance = new SpeedMessage2GroupedMessage().MakeReadOnly();

+    private static readonly string[] _speedMessage2GroupedMessageFieldNames = new string[] { "field1", "field10", "field11", "field2", "field3", "field4", "field5", "field6", "field7", "field8", "field9" };

+    private static readonly uint[] _speedMessage2GroupedMessageFieldTags = new uint[] { 13, 85, 88, 21, 29, 32, 40, 48, 56, 69, 72 };

+    public static SpeedMessage2GroupedMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SpeedMessage2GroupedMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SpeedMessage2GroupedMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_unittest_google_speed_SpeedMessage2GroupedMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SpeedMessage2GroupedMessage, SpeedMessage2GroupedMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.internal__static_unittest_google_speed_SpeedMessage2GroupedMessage__FieldAccessorTable; }

+    }

+    

+    public const int Field1FieldNumber = 1;

+    private bool hasField1;

+    private float field1_;

+    public bool HasField1 {

+      get { return hasField1; }

+    }

+    public float Field1 {

+      get { return field1_; }

+    }

+    

+    public const int Field2FieldNumber = 2;

+    private bool hasField2;

+    private float field2_;

+    public bool HasField2 {

+      get { return hasField2; }

+    }

+    public float Field2 {

+      get { return field2_; }

+    }

+    

+    public const int Field3FieldNumber = 3;

+    private bool hasField3;

+    private float field3_;

+    public bool HasField3 {

+      get { return hasField3; }

+    }

+    public float Field3 {

+      get { return field3_; }

+    }

+    

+    public const int Field4FieldNumber = 4;

+    private bool hasField4;

+    private bool field4_;

+    public bool HasField4 {

+      get { return hasField4; }

+    }

+    public bool Field4 {

+      get { return field4_; }

+    }

+    

+    public const int Field5FieldNumber = 5;

+    private bool hasField5;

+    private bool field5_;

+    public bool HasField5 {

+      get { return hasField5; }

+    }

+    public bool Field5 {

+      get { return field5_; }

+    }

+    

+    public const int Field6FieldNumber = 6;

+    private bool hasField6;

+    private bool field6_ = true;

+    public bool HasField6 {

+      get { return hasField6; }

+    }

+    public bool Field6 {

+      get { return field6_; }

+    }

+    

+    public const int Field7FieldNumber = 7;

+    private bool hasField7;

+    private bool field7_;

+    public bool HasField7 {

+      get { return hasField7; }

+    }

+    public bool Field7 {

+      get { return field7_; }

+    }

+    

+    public const int Field8FieldNumber = 8;

+    private bool hasField8;

+    private float field8_;

+    public bool HasField8 {

+      get { return hasField8; }

+    }

+    public float Field8 {

+      get { return field8_; }

+    }

+    

+    public const int Field9FieldNumber = 9;

+    private bool hasField9;

+    private bool field9_;

+    public bool HasField9 {

+      get { return hasField9; }

+    }

+    public bool Field9 {

+      get { return field9_; }

+    }

+    

+    public const int Field10FieldNumber = 10;

+    private bool hasField10;

+    private float field10_;

+    public bool HasField10 {

+      get { return hasField10; }

+    }

+    public float Field10 {

+      get { return field10_; }

+    }

+    

+    public const int Field11FieldNumber = 11;

+    private bool hasField11;

+    private long field11_;

+    public bool HasField11 {

+      get { return hasField11; }

+    }

+    public long Field11 {

+      get { return field11_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _speedMessage2GroupedMessageFieldNames;

+      if (hasField1) {

+        output.WriteFloat(1, field_names[0], Field1);

+      }

+      if (hasField2) {

+        output.WriteFloat(2, field_names[3], Field2);

+      }

+      if (hasField3) {

+        output.WriteFloat(3, field_names[4], Field3);

+      }

+      if (hasField4) {

+        output.WriteBool(4, field_names[5], Field4);

+      }

+      if (hasField5) {

+        output.WriteBool(5, field_names[6], Field5);

+      }

+      if (hasField6) {

+        output.WriteBool(6, field_names[7], Field6);

+      }

+      if (hasField7) {

+        output.WriteBool(7, field_names[8], Field7);

+      }

+      if (hasField8) {

+        output.WriteFloat(8, field_names[9], Field8);

+      }

+      if (hasField9) {

+        output.WriteBool(9, field_names[10], Field9);

+      }

+      if (hasField10) {

+        output.WriteFloat(10, field_names[1], Field10);

+      }

+      if (hasField11) {

+        output.WriteInt64(11, field_names[2], Field11);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasField1) {

+        size += pb::CodedOutputStream.ComputeFloatSize(1, Field1);

+      }

+      if (hasField2) {

+        size += pb::CodedOutputStream.ComputeFloatSize(2, Field2);

+      }

+      if (hasField3) {

+        size += pb::CodedOutputStream.ComputeFloatSize(3, Field3);

+      }

+      if (hasField4) {

+        size += pb::CodedOutputStream.ComputeBoolSize(4, Field4);

+      }

+      if (hasField5) {

+        size += pb::CodedOutputStream.ComputeBoolSize(5, Field5);

+      }

+      if (hasField6) {

+        size += pb::CodedOutputStream.ComputeBoolSize(6, Field6);

+      }

+      if (hasField7) {

+        size += pb::CodedOutputStream.ComputeBoolSize(7, Field7);

+      }

+      if (hasField8) {

+        size += pb::CodedOutputStream.ComputeFloatSize(8, Field8);

+      }

+      if (hasField9) {

+        size += pb::CodedOutputStream.ComputeBoolSize(9, Field9);

+      }

+      if (hasField10) {

+        size += pb::CodedOutputStream.ComputeFloatSize(10, Field10);

+      }

+      if (hasField11) {

+        size += pb::CodedOutputStream.ComputeInt64Size(11, Field11);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SpeedMessage2GroupedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SpeedMessage2GroupedMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SpeedMessage2GroupedMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SpeedMessage2GroupedMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SpeedMessage2GroupedMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SpeedMessage2GroupedMessage result;

+      

+      private SpeedMessage2GroupedMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SpeedMessage2GroupedMessage original = result;

+          result = new SpeedMessage2GroupedMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SpeedMessage2GroupedMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.Descriptor; }

+      }

+      

+      public override SpeedMessage2GroupedMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.DefaultInstance; }

+      }

+      

+      public override SpeedMessage2GroupedMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SpeedMessage2GroupedMessage) {

+          return MergeFrom((SpeedMessage2GroupedMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SpeedMessage2GroupedMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.SpeedMessage2GroupedMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasField1) {

+          Field1 = other.Field1;

+        }

+        if (other.HasField2) {

+          Field2 = other.Field2;

+        }

+        if (other.HasField3) {

+          Field3 = other.Field3;

+        }

+        if (other.HasField4) {

+          Field4 = other.Field4;

+        }

+        if (other.HasField5) {

+          Field5 = other.Field5;

+        }

+        if (other.HasField6) {

+          Field6 = other.Field6;

+        }

+        if (other.HasField7) {

+          Field7 = other.Field7;

+        }

+        if (other.HasField8) {

+          Field8 = other.Field8;

+        }

+        if (other.HasField9) {

+          Field9 = other.Field9;

+        }

+        if (other.HasField10) {

+          Field10 = other.Field10;

+        }

+        if (other.HasField11) {

+          Field11 = other.Field11;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_speedMessage2GroupedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _speedMessage2GroupedMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 13: {

+              result.hasField1 = input.ReadFloat(ref result.field1_);

+              break;

+            }

+            case 21: {

+              result.hasField2 = input.ReadFloat(ref result.field2_);

+              break;

+            }

+            case 29: {

+              result.hasField3 = input.ReadFloat(ref result.field3_);

+              break;

+            }

+            case 32: {

+              result.hasField4 = input.ReadBool(ref result.field4_);

+              break;

+            }

+            case 40: {

+              result.hasField5 = input.ReadBool(ref result.field5_);

+              break;

+            }

+            case 48: {

+              result.hasField6 = input.ReadBool(ref result.field6_);

+              break;

+            }

+            case 56: {

+              result.hasField7 = input.ReadBool(ref result.field7_);

+              break;

+            }

+            case 69: {

+              result.hasField8 = input.ReadFloat(ref result.field8_);

+              break;

+            }

+            case 72: {

+              result.hasField9 = input.ReadBool(ref result.field9_);

+              break;

+            }

+            case 85: {

+              result.hasField10 = input.ReadFloat(ref result.field10_);

+              break;

+            }

+            case 88: {

+              result.hasField11 = input.ReadInt64(ref result.field11_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasField1 {

+        get { return result.hasField1; }

+      }

+      public float Field1 {

+        get { return result.Field1; }

+        set { SetField1(value); }

+      }

+      public Builder SetField1(float value) {

+        PrepareBuilder();

+        result.hasField1 = true;

+        result.field1_ = value;

+        return this;

+      }

+      public Builder ClearField1() {

+        PrepareBuilder();

+        result.hasField1 = false;

+        result.field1_ = 0F;

+        return this;

+      }

+      

+      public bool HasField2 {

+        get { return result.hasField2; }

+      }

+      public float Field2 {

+        get { return result.Field2; }

+        set { SetField2(value); }

+      }

+      public Builder SetField2(float value) {

+        PrepareBuilder();

+        result.hasField2 = true;

+        result.field2_ = value;

+        return this;

+      }

+      public Builder ClearField2() {

+        PrepareBuilder();

+        result.hasField2 = false;

+        result.field2_ = 0F;

+        return this;

+      }

+      

+      public bool HasField3 {

+        get { return result.hasField3; }

+      }

+      public float Field3 {

+        get { return result.Field3; }

+        set { SetField3(value); }

+      }

+      public Builder SetField3(float value) {

+        PrepareBuilder();

+        result.hasField3 = true;

+        result.field3_ = value;

+        return this;

+      }

+      public Builder ClearField3() {

+        PrepareBuilder();

+        result.hasField3 = false;

+        result.field3_ = 0F;

+        return this;

+      }

+      

+      public bool HasField4 {

+        get { return result.hasField4; }

+      }

+      public bool Field4 {

+        get { return result.Field4; }

+        set { SetField4(value); }

+      }

+      public Builder SetField4(bool value) {

+        PrepareBuilder();

+        result.hasField4 = true;

+        result.field4_ = value;

+        return this;

+      }

+      public Builder ClearField4() {

+        PrepareBuilder();

+        result.hasField4 = false;

+        result.field4_ = false;

+        return this;

+      }

+      

+      public bool HasField5 {

+        get { return result.hasField5; }

+      }

+      public bool Field5 {

+        get { return result.Field5; }

+        set { SetField5(value); }

+      }

+      public Builder SetField5(bool value) {

+        PrepareBuilder();

+        result.hasField5 = true;

+        result.field5_ = value;

+        return this;

+      }

+      public Builder ClearField5() {

+        PrepareBuilder();

+        result.hasField5 = false;

+        result.field5_ = false;

+        return this;

+      }

+      

+      public bool HasField6 {

+        get { return result.hasField6; }

+      }

+      public bool Field6 {

+        get { return result.Field6; }

+        set { SetField6(value); }

+      }

+      public Builder SetField6(bool value) {

+        PrepareBuilder();

+        result.hasField6 = true;

+        result.field6_ = value;

+        return this;

+      }

+      public Builder ClearField6() {

+        PrepareBuilder();

+        result.hasField6 = false;

+        result.field6_ = true;

+        return this;

+      }

+      

+      public bool HasField7 {

+        get { return result.hasField7; }

+      }

+      public bool Field7 {

+        get { return result.Field7; }

+        set { SetField7(value); }

+      }

+      public Builder SetField7(bool value) {

+        PrepareBuilder();

+        result.hasField7 = true;

+        result.field7_ = value;

+        return this;

+      }

+      public Builder ClearField7() {

+        PrepareBuilder();

+        result.hasField7 = false;

+        result.field7_ = false;

+        return this;

+      }

+      

+      public bool HasField8 {

+        get { return result.hasField8; }

+      }

+      public float Field8 {

+        get { return result.Field8; }

+        set { SetField8(value); }

+      }

+      public Builder SetField8(float value) {

+        PrepareBuilder();

+        result.hasField8 = true;

+        result.field8_ = value;

+        return this;

+      }

+      public Builder ClearField8() {

+        PrepareBuilder();

+        result.hasField8 = false;

+        result.field8_ = 0F;

+        return this;

+      }

+      

+      public bool HasField9 {

+        get { return result.hasField9; }

+      }

+      public bool Field9 {

+        get { return result.Field9; }

+        set { SetField9(value); }

+      }

+      public Builder SetField9(bool value) {

+        PrepareBuilder();

+        result.hasField9 = true;

+        result.field9_ = value;

+        return this;

+      }

+      public Builder ClearField9() {

+        PrepareBuilder();

+        result.hasField9 = false;

+        result.field9_ = false;

+        return this;

+      }

+      

+      public bool HasField10 {

+        get { return result.hasField10; }

+      }

+      public float Field10 {

+        get { return result.Field10; }

+        set { SetField10(value); }

+      }

+      public Builder SetField10(float value) {

+        PrepareBuilder();

+        result.hasField10 = true;

+        result.field10_ = value;

+        return this;

+      }

+      public Builder ClearField10() {

+        PrepareBuilder();

+        result.hasField10 = false;

+        result.field10_ = 0F;

+        return this;

+      }

+      

+      public bool HasField11 {

+        get { return result.hasField11; }

+      }

+      public long Field11 {

+        get { return result.Field11; }

+        set { SetField11(value); }

+      }

+      public Builder SetField11(long value) {

+        PrepareBuilder();

+        result.hasField11 = true;

+        result.field11_ = value;

+        return this;

+      }

+      public Builder ClearField11() {

+        PrepareBuilder();

+        result.hasField11 = false;

+        result.field11_ = 0L;

+        return this;

+      }

+    }

+    static SpeedMessage2GroupedMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestGoogleSpeedProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestImportLiteProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestImportLiteProtoFile.cs
new file mode 100644
index 0000000..fe1f408
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestImportLiteProtoFile.cs
@@ -0,0 +1,308 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestImportLiteProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    #endregion

+    #region Extensions

+    internal static readonly object Descriptor;

+    static UnitTestImportLiteProtoFile() {

+      Descriptor = null;

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum ImportEnumLite {

+    IMPORT_LITE_FOO = 7,

+    IMPORT_LITE_BAR = 8,

+    IMPORT_LITE_BAZ = 9,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ImportMessageLite : pb::GeneratedMessageLite<ImportMessageLite, ImportMessageLite.Builder> {

+    private ImportMessageLite() { }

+    private static readonly ImportMessageLite defaultInstance = new ImportMessageLite().MakeReadOnly();

+    private static readonly string[] _importMessageLiteFieldNames = new string[] { "d" };

+    private static readonly uint[] _importMessageLiteFieldTags = new uint[] { 8 };

+    public static ImportMessageLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ImportMessageLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ImportMessageLite ThisMessage {

+      get { return this; }

+    }

+    

+    public const int DFieldNumber = 1;

+    private bool hasD;

+    private int d_;

+    public bool HasD {

+      get { return hasD; }

+    }

+    public int D {

+      get { return d_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _importMessageLiteFieldNames;

+      if (hasD) {

+        output.WriteInt32(1, field_names[0], D);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasD) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, D);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      if (hasD) hash ^= d_.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      ImportMessageLite other = obj as ImportMessageLite;

+      if (other == null) return false;

+      if (hasD != other.hasD || (hasD && !d_.Equals(other.d_))) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("d", hasD, d_, writer);

+    }

+    #endregion

+    

+    public static ImportMessageLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessageLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ImportMessageLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ImportMessageLite MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ImportMessageLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<ImportMessageLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ImportMessageLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ImportMessageLite result;

+      

+      private ImportMessageLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ImportMessageLite original = result;

+          result = new ImportMessageLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ImportMessageLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override ImportMessageLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance; }

+      }

+      

+      public override ImportMessageLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is ImportMessageLite) {

+          return MergeFrom((ImportMessageLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ImportMessageLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasD) {

+          D = other.D;

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_importMessageLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _importMessageLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasD = input.ReadInt32(ref result.d_);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public bool HasD {

+        get { return result.hasD; }

+      }

+      public int D {

+        get { return result.D; }

+        set { SetD(value); }

+      }

+      public Builder SetD(int value) {

+        PrepareBuilder();

+        result.hasD = true;

+        result.d_ = value;

+        return this;

+      }

+      public Builder ClearD() {

+        PrepareBuilder();

+        result.hasD = false;

+        result.d_ = 0;

+        return this;

+      }

+    }

+    static ImportMessageLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestImportLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs
new file mode 100644
index 0000000..4cae2b8
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestImportProtoFile.cs
@@ -0,0 +1,346 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestImportProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_import_ImportMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ImportMessage, global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder> internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestImportProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CiVnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0LnByb3RvEhhwcm90", 

+            "b2J1Zl91bml0dGVzdF9pbXBvcnQaJGdvb2dsZS9wcm90b2J1Zi9jc2hhcnBf", 

+            "b3B0aW9ucy5wcm90byIaCg1JbXBvcnRNZXNzYWdlEgkKAWQYASABKAUqPAoK", 

+            "SW1wb3J0RW51bRIOCgpJTVBPUlRfRk9PEAcSDgoKSU1QT1JUX0JBUhAIEg4K", 

+            "CklNUE9SVF9CQVoQCUJbChhjb20uZ29vZ2xlLnByb3RvYnVmLnRlc3RIAcI+", 

+            "PAohR29vZ2xlLlByb3RvY29sQnVmZmVycy5UZXN0UHJvdG9zEhdVbml0VGVz", 

+          "dEltcG9ydFByb3RvRmlsZQ=="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_import_ImportMessage__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ImportMessage, global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder>(internal__static_protobuf_unittest_import_ImportMessage__Descriptor,

+                new string[] { "D", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum ImportEnum {

+    IMPORT_FOO = 7,

+    IMPORT_BAR = 8,

+    IMPORT_BAZ = 9,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ImportMessage : pb::GeneratedMessage<ImportMessage, ImportMessage.Builder> {

+    private ImportMessage() { }

+    private static readonly ImportMessage defaultInstance = new ImportMessage().MakeReadOnly();

+    private static readonly string[] _importMessageFieldNames = new string[] { "d" };

+    private static readonly uint[] _importMessageFieldTags = new uint[] { 8 };

+    public static ImportMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ImportMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ImportMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.internal__static_protobuf_unittest_import_ImportMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<ImportMessage, ImportMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable; }

+    }

+    

+    public const int DFieldNumber = 1;

+    private bool hasD;

+    private int d_;

+    public bool HasD {

+      get { return hasD; }

+    }

+    public int D {

+      get { return d_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _importMessageFieldNames;

+      if (hasD) {

+        output.WriteInt32(1, field_names[0], D);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasD) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, D);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static ImportMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ImportMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ImportMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ImportMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<ImportMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ImportMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ImportMessage result;

+      

+      private ImportMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ImportMessage original = result;

+          result = new ImportMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ImportMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ImportMessage.Descriptor; }

+      }

+      

+      public override ImportMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance; }

+      }

+      

+      public override ImportMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is ImportMessage) {

+          return MergeFrom((ImportMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ImportMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasD) {

+          D = other.D;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_importMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _importMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasD = input.ReadInt32(ref result.d_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasD {

+        get { return result.hasD; }

+      }

+      public int D {

+        get { return result.D; }

+        set { SetD(value); }

+      }

+      public Builder SetD(int value) {

+        PrepareBuilder();

+        result.hasD = true;

+        result.d_ = value;

+        return this;

+      }

+      public Builder ClearD() {

+        PrepareBuilder();

+        result.hasD = false;

+        result.d_ = 0;

+        return this;

+      }

+    }

+    static ImportMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs
new file mode 100644
index 0000000..7a2875c
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestMessageSetProtoFile.cs
@@ -0,0 +1,1826 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestMessageSetProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.MessageSetExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.MessageSetExtension);

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMessageSet__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSet, global::Google.ProtocolBuffers.TestProtos.TestMessageSet.Builder> internal__static_protobuf_unittest_TestMessageSet__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMessageSetContainer__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer, global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer.Builder> internal__static_protobuf_unittest_TestMessageSetContainer__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMessageSetExtension1__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1, global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.Builder> internal__static_protobuf_unittest_TestMessageSetExtension1__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMessageSetExtension2__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2, global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.Builder> internal__static_protobuf_unittest_TestMessageSetExtension2__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_RawMessageSet__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RawMessageSet, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Builder> internal__static_protobuf_unittest_RawMessageSet__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_RawMessageSet_Item__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.Builder> internal__static_protobuf_unittest_RawMessageSet_Item__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestMessageSetProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CiNnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfbXNldC5wcm90bxIRcHJvdG9i", 

+            "dWZfdW5pdHRlc3QaJGdvb2dsZS9wcm90b2J1Zi9jc2hhcnBfb3B0aW9ucy5w", 

+            "cm90byIeCg5UZXN0TWVzc2FnZVNldCoICAQQgICAgAI6AggBIlEKF1Rlc3RN", 

+            "ZXNzYWdlU2V0Q29udGFpbmVyEjYKC21lc3NhZ2Vfc2V0GAEgASgLMiEucHJv", 

+            "dG9idWZfdW5pdHRlc3QuVGVzdE1lc3NhZ2VTZXQilgEKGFRlc3RNZXNzYWdl", 

+            "U2V0RXh0ZW5zaW9uMRIJCgFpGA8gASgFMm8KFW1lc3NhZ2Vfc2V0X2V4dGVu", 

+            "c2lvbhIhLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNZXNzYWdlU2V0GLCmXiAB", 

+            "KAsyKy5wcm90b2J1Zl91bml0dGVzdC5UZXN0TWVzc2FnZVNldEV4dGVuc2lv", 

+            "bjEimAEKGFRlc3RNZXNzYWdlU2V0RXh0ZW5zaW9uMhILCgNzdHIYGSABKAky", 

+            "bwoVbWVzc2FnZV9zZXRfZXh0ZW5zaW9uEiEucHJvdG9idWZfdW5pdHRlc3Qu", 

+            "VGVzdE1lc3NhZ2VTZXQY+bteIAEoCzIrLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 

+            "c3RNZXNzYWdlU2V0RXh0ZW5zaW9uMiJuCg1SYXdNZXNzYWdlU2V0EjMKBGl0", 

+            "ZW0YASADKAoyJS5wcm90b2J1Zl91bml0dGVzdC5SYXdNZXNzYWdlU2V0Lkl0", 

+            "ZW0aKAoESXRlbRIPCgd0eXBlX2lkGAIgAigFEg8KB21lc3NhZ2UYAyACKAxC", 

+            "RUgBwj5ACiFHb29nbGUuUHJvdG9jb2xCdWZmZXJzLlRlc3RQcm90b3MSG1Vu", 

+          "aXRUZXN0TWVzc2FnZVNldFByb3RvRmlsZQ=="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_TestMessageSet__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_TestMessageSet__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSet, global::Google.ProtocolBuffers.TestProtos.TestMessageSet.Builder>(internal__static_protobuf_unittest_TestMessageSet__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_TestMessageSetContainer__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_protobuf_unittest_TestMessageSetContainer__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer, global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer.Builder>(internal__static_protobuf_unittest_TestMessageSetContainer__Descriptor,

+                new string[] { "MessageSet", });

+        internal__static_protobuf_unittest_TestMessageSetExtension1__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_protobuf_unittest_TestMessageSetExtension1__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1, global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.Builder>(internal__static_protobuf_unittest_TestMessageSetExtension1__Descriptor,

+                new string[] { "I", });

+        global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.MessageSetExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.Descriptor.Extensions[0]);

+        internal__static_protobuf_unittest_TestMessageSetExtension2__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_protobuf_unittest_TestMessageSetExtension2__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2, global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.Builder>(internal__static_protobuf_unittest_TestMessageSetExtension2__Descriptor,

+                new string[] { "Str", });

+        global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.MessageSetExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.Descriptor.Extensions[0]);

+        internal__static_protobuf_unittest_RawMessageSet__Descriptor = Descriptor.MessageTypes[4];

+        internal__static_protobuf_unittest_RawMessageSet__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RawMessageSet, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Builder>(internal__static_protobuf_unittest_RawMessageSet__Descriptor,

+                new string[] { "Item", });

+        internal__static_protobuf_unittest_RawMessageSet_Item__Descriptor = internal__static_protobuf_unittest_RawMessageSet__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_RawMessageSet_Item__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.Builder>(internal__static_protobuf_unittest_RawMessageSet_Item__Descriptor,

+                new string[] { "TypeId", "Message", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMessageSet : pb::ExtendableMessage<TestMessageSet, TestMessageSet.Builder> {

+    private TestMessageSet() { }

+    private static readonly TestMessageSet defaultInstance = new TestMessageSet().MakeReadOnly();

+    private static readonly string[] _testMessageSetFieldNames = new string[] {  };

+    private static readonly uint[] _testMessageSetFieldTags = new uint[] {  };

+    public static TestMessageSet DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMessageSet DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMessageSet ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_TestMessageSet__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMessageSet, TestMessageSet.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_TestMessageSet__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMessageSetFieldNames;

+      pb::ExtendableMessage<TestMessageSet, TestMessageSet.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteAsMessageSetTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSizeAsMessageSet;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMessageSet ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMessageSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageSet ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMessageSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageSet ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMessageSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageSet ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMessageSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMessageSet ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMessageSet ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMessageSet MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMessageSet prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestMessageSet, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMessageSet cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMessageSet result;

+      

+      private TestMessageSet PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMessageSet original = result;

+          result = new TestMessageSet();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMessageSet MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSet.Descriptor; }

+      }

+      

+      public override TestMessageSet DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSet.DefaultInstance; }

+      }

+      

+      public override TestMessageSet BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMessageSet) {

+          return MergeFrom((TestMessageSet) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMessageSet other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMessageSet.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMessageSetFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMessageSetFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestMessageSet() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMessageSetContainer : pb::GeneratedMessage<TestMessageSetContainer, TestMessageSetContainer.Builder> {

+    private TestMessageSetContainer() { }

+    private static readonly TestMessageSetContainer defaultInstance = new TestMessageSetContainer().MakeReadOnly();

+    private static readonly string[] _testMessageSetContainerFieldNames = new string[] { "message_set" };

+    private static readonly uint[] _testMessageSetContainerFieldTags = new uint[] { 10 };

+    public static TestMessageSetContainer DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMessageSetContainer DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMessageSetContainer ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_TestMessageSetContainer__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMessageSetContainer, TestMessageSetContainer.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_TestMessageSetContainer__FieldAccessorTable; }

+    }

+    

+    public const int MessageSetFieldNumber = 1;

+    private bool hasMessageSet;

+    private global::Google.ProtocolBuffers.TestProtos.TestMessageSet messageSet_;

+    public bool HasMessageSet {

+      get { return hasMessageSet; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestMessageSet MessageSet {

+      get { return messageSet_ ?? global::Google.ProtocolBuffers.TestProtos.TestMessageSet.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMessageSetContainerFieldNames;

+      if (hasMessageSet) {

+        output.WriteMessage(1, field_names[0], MessageSet);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasMessageSet) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, MessageSet);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMessageSetContainer ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMessageSetContainer ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageSetContainer ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMessageSetContainer ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageSetContainer ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMessageSetContainer ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageSetContainer ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMessageSetContainer ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMessageSetContainer ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMessageSetContainer ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMessageSetContainer MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMessageSetContainer prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestMessageSetContainer, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMessageSetContainer cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMessageSetContainer result;

+      

+      private TestMessageSetContainer PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMessageSetContainer original = result;

+          result = new TestMessageSetContainer();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMessageSetContainer MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer.Descriptor; }

+      }

+      

+      public override TestMessageSetContainer DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer.DefaultInstance; }

+      }

+      

+      public override TestMessageSetContainer BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMessageSetContainer) {

+          return MergeFrom((TestMessageSetContainer) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMessageSetContainer other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMessageSetContainer.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasMessageSet) {

+          MergeMessageSet(other.MessageSet);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMessageSetContainerFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMessageSetContainerFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestMessageSet.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestMessageSet.CreateBuilder();

+              if (result.hasMessageSet) {

+                subBuilder.MergeFrom(MessageSet);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              MessageSet = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasMessageSet {

+       get { return result.hasMessageSet; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestMessageSet MessageSet {

+        get { return result.MessageSet; }

+        set { SetMessageSet(value); }

+      }

+      public Builder SetMessageSet(global::Google.ProtocolBuffers.TestProtos.TestMessageSet value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMessageSet = true;

+        result.messageSet_ = value;

+        return this;

+      }

+      public Builder SetMessageSet(global::Google.ProtocolBuffers.TestProtos.TestMessageSet.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasMessageSet = true;

+        result.messageSet_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeMessageSet(global::Google.ProtocolBuffers.TestProtos.TestMessageSet value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasMessageSet &&

+            result.messageSet_ != global::Google.ProtocolBuffers.TestProtos.TestMessageSet.DefaultInstance) {

+            result.messageSet_ = global::Google.ProtocolBuffers.TestProtos.TestMessageSet.CreateBuilder(result.messageSet_).MergeFrom(value).BuildPartial();

+        } else {

+          result.messageSet_ = value;

+        }

+        result.hasMessageSet = true;

+        return this;

+      }

+      public Builder ClearMessageSet() {

+        PrepareBuilder();

+        result.hasMessageSet = false;

+        result.messageSet_ = null;

+        return this;

+      }

+    }

+    static TestMessageSetContainer() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMessageSetExtension1 : pb::GeneratedMessage<TestMessageSetExtension1, TestMessageSetExtension1.Builder> {

+    private TestMessageSetExtension1() { }

+    private static readonly TestMessageSetExtension1 defaultInstance = new TestMessageSetExtension1().MakeReadOnly();

+    private static readonly string[] _testMessageSetExtension1FieldNames = new string[] { "i" };

+    private static readonly uint[] _testMessageSetExtension1FieldTags = new uint[] { 120 };

+    public static TestMessageSetExtension1 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMessageSetExtension1 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMessageSetExtension1 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_TestMessageSetExtension1__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMessageSetExtension1, TestMessageSetExtension1.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_TestMessageSetExtension1__FieldAccessorTable; }

+    }

+    

+    public const int MessageSetExtensionFieldNumber = 1545008;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1> MessageSetExtension;

+    public const int IFieldNumber = 15;

+    private bool hasI;

+    private int i_;

+    public bool HasI {

+      get { return hasI; }

+    }

+    public int I {

+      get { return i_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMessageSetExtension1FieldNames;

+      if (hasI) {

+        output.WriteInt32(15, field_names[0], I);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasI) {

+        size += pb::CodedOutputStream.ComputeInt32Size(15, I);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMessageSetExtension1 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMessageSetExtension1 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageSetExtension1 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMessageSetExtension1 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageSetExtension1 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMessageSetExtension1 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageSetExtension1 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMessageSetExtension1 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMessageSetExtension1 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMessageSetExtension1 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMessageSetExtension1 MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMessageSetExtension1 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestMessageSetExtension1, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMessageSetExtension1 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMessageSetExtension1 result;

+      

+      private TestMessageSetExtension1 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMessageSetExtension1 original = result;

+          result = new TestMessageSetExtension1();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMessageSetExtension1 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.Descriptor; }

+      }

+      

+      public override TestMessageSetExtension1 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.DefaultInstance; }

+      }

+      

+      public override TestMessageSetExtension1 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMessageSetExtension1) {

+          return MergeFrom((TestMessageSetExtension1) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMessageSetExtension1 other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension1.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasI) {

+          I = other.I;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMessageSetExtension1FieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMessageSetExtension1FieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 120: {

+              result.hasI = input.ReadInt32(ref result.i_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasI {

+        get { return result.hasI; }

+      }

+      public int I {

+        get { return result.I; }

+        set { SetI(value); }

+      }

+      public Builder SetI(int value) {

+        PrepareBuilder();

+        result.hasI = true;

+        result.i_ = value;

+        return this;

+      }

+      public Builder ClearI() {

+        PrepareBuilder();

+        result.hasI = false;

+        result.i_ = 0;

+        return this;

+      }

+    }

+    static TestMessageSetExtension1() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMessageSetExtension2 : pb::GeneratedMessage<TestMessageSetExtension2, TestMessageSetExtension2.Builder> {

+    private TestMessageSetExtension2() { }

+    private static readonly TestMessageSetExtension2 defaultInstance = new TestMessageSetExtension2().MakeReadOnly();

+    private static readonly string[] _testMessageSetExtension2FieldNames = new string[] { "str" };

+    private static readonly uint[] _testMessageSetExtension2FieldTags = new uint[] { 202 };

+    public static TestMessageSetExtension2 DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMessageSetExtension2 DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMessageSetExtension2 ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_TestMessageSetExtension2__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMessageSetExtension2, TestMessageSetExtension2.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_TestMessageSetExtension2__FieldAccessorTable; }

+    }

+    

+    public const int MessageSetExtensionFieldNumber = 1547769;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2> MessageSetExtension;

+    public const int StrFieldNumber = 25;

+    private bool hasStr;

+    private string str_ = "";

+    public bool HasStr {

+      get { return hasStr; }

+    }

+    public string Str {

+      get { return str_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMessageSetExtension2FieldNames;

+      if (hasStr) {

+        output.WriteString(25, field_names[0], Str);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasStr) {

+        size += pb::CodedOutputStream.ComputeStringSize(25, Str);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMessageSetExtension2 ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMessageSetExtension2 ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageSetExtension2 ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMessageSetExtension2 ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageSetExtension2 ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMessageSetExtension2 ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessageSetExtension2 ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMessageSetExtension2 ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMessageSetExtension2 ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMessageSetExtension2 ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMessageSetExtension2 MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMessageSetExtension2 prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestMessageSetExtension2, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMessageSetExtension2 cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMessageSetExtension2 result;

+      

+      private TestMessageSetExtension2 PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMessageSetExtension2 original = result;

+          result = new TestMessageSetExtension2();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMessageSetExtension2 MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.Descriptor; }

+      }

+      

+      public override TestMessageSetExtension2 DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.DefaultInstance; }

+      }

+      

+      public override TestMessageSetExtension2 BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMessageSetExtension2) {

+          return MergeFrom((TestMessageSetExtension2) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMessageSetExtension2 other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMessageSetExtension2.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasStr) {

+          Str = other.Str;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMessageSetExtension2FieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMessageSetExtension2FieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 202: {

+              result.hasStr = input.ReadString(ref result.str_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasStr {

+        get { return result.hasStr; }

+      }

+      public string Str {

+        get { return result.Str; }

+        set { SetStr(value); }

+      }

+      public Builder SetStr(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasStr = true;

+        result.str_ = value;

+        return this;

+      }

+      public Builder ClearStr() {

+        PrepareBuilder();

+        result.hasStr = false;

+        result.str_ = "";

+        return this;

+      }

+    }

+    static TestMessageSetExtension2() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class RawMessageSet : pb::GeneratedMessage<RawMessageSet, RawMessageSet.Builder> {

+    private RawMessageSet() { }

+    private static readonly RawMessageSet defaultInstance = new RawMessageSet().MakeReadOnly();

+    private static readonly string[] _rawMessageSetFieldNames = new string[] { "item" };

+    private static readonly uint[] _rawMessageSetFieldTags = new uint[] { 11 };

+    public static RawMessageSet DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override RawMessageSet DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override RawMessageSet ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_RawMessageSet__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<RawMessageSet, RawMessageSet.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_RawMessageSet__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Item : pb::GeneratedMessage<Item, Item.Builder> {

+        private Item() { }

+        private static readonly Item defaultInstance = new Item().MakeReadOnly();

+        private static readonly string[] _itemFieldNames = new string[] { "message", "type_id" };

+        private static readonly uint[] _itemFieldTags = new uint[] { 26, 16 };

+        public static Item DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Item DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Item ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_RawMessageSet_Item__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Item, Item.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.internal__static_protobuf_unittest_RawMessageSet_Item__FieldAccessorTable; }

+        }

+        

+        public const int TypeIdFieldNumber = 2;

+        private bool hasTypeId;

+        private int typeId_;

+        public bool HasTypeId {

+          get { return hasTypeId; }

+        }

+        public int TypeId {

+          get { return typeId_; }

+        }

+        

+        public const int MessageFieldNumber = 3;

+        private bool hasMessage;

+        private pb::ByteString message_ = pb::ByteString.Empty;

+        public bool HasMessage {

+          get { return hasMessage; }

+        }

+        public pb::ByteString Message {

+          get { return message_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            if (!hasTypeId) return false;

+            if (!hasMessage) return false;

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _itemFieldNames;

+          if (hasTypeId) {

+            output.WriteInt32(2, field_names[1], TypeId);

+          }

+          if (hasMessage) {

+            output.WriteBytes(3, field_names[0], Message);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasTypeId) {

+            size += pb::CodedOutputStream.ComputeInt32Size(2, TypeId);

+          }

+          if (hasMessage) {

+            size += pb::CodedOutputStream.ComputeBytesSize(3, Message);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static Item ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Item ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Item ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Item ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Item ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Item ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Item ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Item ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Item ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Item ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Item MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Item prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Item, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Item cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Item result;

+          

+          private Item PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Item original = result;

+              result = new Item();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Item MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.Descriptor; }

+          }

+          

+          public override Item DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.DefaultInstance; }

+          }

+          

+          public override Item BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is Item) {

+              return MergeFrom((Item) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(Item other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasTypeId) {

+              TypeId = other.TypeId;

+            }

+            if (other.HasMessage) {

+              Message = other.Message;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_itemFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _itemFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 16: {

+                  result.hasTypeId = input.ReadInt32(ref result.typeId_);

+                  break;

+                }

+                case 26: {

+                  result.hasMessage = input.ReadBytes(ref result.message_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasTypeId {

+            get { return result.hasTypeId; }

+          }

+          public int TypeId {

+            get { return result.TypeId; }

+            set { SetTypeId(value); }

+          }

+          public Builder SetTypeId(int value) {

+            PrepareBuilder();

+            result.hasTypeId = true;

+            result.typeId_ = value;

+            return this;

+          }

+          public Builder ClearTypeId() {

+            PrepareBuilder();

+            result.hasTypeId = false;

+            result.typeId_ = 0;

+            return this;

+          }

+          

+          public bool HasMessage {

+            get { return result.hasMessage; }

+          }

+          public pb::ByteString Message {

+            get { return result.Message; }

+            set { SetMessage(value); }

+          }

+          public Builder SetMessage(pb::ByteString value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasMessage = true;

+            result.message_ = value;

+            return this;

+          }

+          public Builder ClearMessage() {

+            PrepareBuilder();

+            result.hasMessage = false;

+            result.message_ = pb::ByteString.Empty;

+            return this;

+          }

+        }

+        static Item() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int ItemFieldNumber = 1;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item> item_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item> ItemList {

+      get { return item_; }

+    }

+    public int ItemCount {

+      get { return item_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item GetItem(int index) {

+      return item_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _rawMessageSetFieldNames;

+      if (item_.Count > 0) {

+        output.WriteGroupArray(1, field_names[0], item_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      foreach (global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item element in ItemList) {

+        size += pb::CodedOutputStream.ComputeGroupSize(1, element);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static RawMessageSet ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RawMessageSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RawMessageSet ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RawMessageSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RawMessageSet ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RawMessageSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static RawMessageSet ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static RawMessageSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static RawMessageSet ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RawMessageSet ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private RawMessageSet MakeReadOnly() {

+      item_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(RawMessageSet prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<RawMessageSet, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(RawMessageSet cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private RawMessageSet result;

+      

+      private RawMessageSet PrepareBuilder() {

+        if (resultIsReadOnly) {

+          RawMessageSet original = result;

+          result = new RawMessageSet();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override RawMessageSet MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Descriptor; }

+      }

+      

+      public override RawMessageSet DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.RawMessageSet.DefaultInstance; }

+      }

+      

+      public override RawMessageSet BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is RawMessageSet) {

+          return MergeFrom((RawMessageSet) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(RawMessageSet other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.RawMessageSet.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.item_.Count != 0) {

+          result.item_.Add(other.item_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_rawMessageSetFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _rawMessageSetFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 11: {

+              input.ReadGroupArray(tag, field_name, result.item_, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item> ItemList {

+        get { return PrepareBuilder().item_; }

+      }

+      public int ItemCount {

+        get { return result.ItemCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item GetItem(int index) {

+        return result.GetItem(index);

+      }

+      public Builder SetItem(int index, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.item_[index] = value;

+        return this;

+      }

+      public Builder SetItem(int index, global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.item_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddItem(global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.item_.Add(value);

+        return this;

+      }

+      public Builder AddItem(global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.item_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeItem(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.RawMessageSet.Types.Item> values) {

+        PrepareBuilder();

+        result.item_.Add(values);

+        return this;

+      }

+      public Builder ClearItem() {

+        PrepareBuilder();

+        result.item_.Clear();

+        return this;

+      }

+    }

+    static RawMessageSet() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestMessageSetProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestNoGenericServicesProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestNoGenericServicesProtoFile.cs
new file mode 100644
index 0000000..8ff21c3
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestNoGenericServicesProtoFile.cs
@@ -0,0 +1,368 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos.NoGenericService {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestNoGenericServicesProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.NoGenericService.UnitTestNoGenericServicesProtoFile.TestExtension);

+    }

+    #endregion

+    #region Extensions

+    public const int TestExtensionFieldNumber = 1000;

+    public static pb::GeneratedExtensionBase<int> TestExtension;

+    #endregion

+    

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_no_generic_services_test_TestMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.NoGenericService.TestMessage, global::Google.ProtocolBuffers.TestProtos.NoGenericService.TestMessage.Builder> internal__static_google_protobuf_no_generic_services_test_TestMessage__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestNoGenericServicesProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CjJnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfbm9fZ2VuZXJpY19zZXJ2aWNl", 

+            "cy5wcm90bxIoZ29vZ2xlLnByb3RvYnVmLm5vX2dlbmVyaWNfc2VydmljZXNf", 

+            "dGVzdBokZ29vZ2xlL3Byb3RvYnVmL2NzaGFycF9vcHRpb25zLnByb3RvIiMK", 

+            "C1Rlc3RNZXNzYWdlEgkKAWEYASABKAUqCQjoBxCAgICAAioTCghUZXN0RW51", 

+            "bRIHCgNGT08QATKCAQoLVGVzdFNlcnZpY2UScwoDRm9vEjUuZ29vZ2xlLnBy", 

+            "b3RvYnVmLm5vX2dlbmVyaWNfc2VydmljZXNfdGVzdC5UZXN0TWVzc2FnZRo1", 

+            "Lmdvb2dsZS5wcm90b2J1Zi5ub19nZW5lcmljX3NlcnZpY2VzX3Rlc3QuVGVz", 

+            "dE1lc3NhZ2U6TgoOdGVzdF9leHRlbnNpb24SNS5nb29nbGUucHJvdG9idWYu", 

+            "bm9fZ2VuZXJpY19zZXJ2aWNlc190ZXN0LlRlc3RNZXNzYWdlGOgHIAEoBUJb", 

+            "wj5YCjJHb29nbGUuUHJvdG9jb2xCdWZmZXJzLlRlc3RQcm90b3MuTm9HZW5l", 

+            "cmljU2VydmljZRIiVW5pdFRlc3ROb0dlbmVyaWNTZXJ2aWNlc1Byb3RvRmls", 

+          "ZQ=="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_google_protobuf_no_generic_services_test_TestMessage__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_google_protobuf_no_generic_services_test_TestMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.NoGenericService.TestMessage, global::Google.ProtocolBuffers.TestProtos.NoGenericService.TestMessage.Builder>(internal__static_google_protobuf_no_generic_services_test_TestMessage__Descriptor,

+                new string[] { "A", });

+        global::Google.ProtocolBuffers.TestProtos.NoGenericService.UnitTestNoGenericServicesProtoFile.TestExtension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.NoGenericService.UnitTestNoGenericServicesProtoFile.Descriptor.Extensions[0]);

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum TestEnum {

+    FOO = 1,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMessage : pb::ExtendableMessage<TestMessage, TestMessage.Builder> {

+    private TestMessage() { }

+    private static readonly TestMessage defaultInstance = new TestMessage().MakeReadOnly();

+    private static readonly string[] _testMessageFieldNames = new string[] { "a" };

+    private static readonly uint[] _testMessageFieldTags = new uint[] { 8 };

+    public static TestMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.NoGenericService.UnitTestNoGenericServicesProtoFile.internal__static_google_protobuf_no_generic_services_test_TestMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMessage, TestMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.NoGenericService.UnitTestNoGenericServicesProtoFile.internal__static_google_protobuf_no_generic_services_test_TestMessage__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMessageFieldNames;

+      pb::ExtendableMessage<TestMessage, TestMessage.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (hasA) {

+        output.WriteInt32(1, field_names[0], A);

+      }

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMessage result;

+      

+      private TestMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMessage original = result;

+          result = new TestMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.NoGenericService.TestMessage.Descriptor; }

+      }

+      

+      public override TestMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.NoGenericService.TestMessage.DefaultInstance; }

+      }

+      

+      public override TestMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMessage) {

+          return MergeFrom((TestMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.NoGenericService.TestMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+    }

+    static TestMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.NoGenericService.UnitTestNoGenericServicesProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+  #region Services

+  /*

+  * Service generation is now disabled by default, use the following option to enable:

+  * option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;

+  */

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs
new file mode 100644
index 0000000..e5b45c0
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestOptimizeForProtoFile.cs
@@ -0,0 +1,659 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestOptimizeForProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.TestExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.TestExtension2);

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestOptimizedForSize__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Builder> internal__static_protobuf_unittest_TestOptimizedForSize__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRequiredOptimizedForSize__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.Builder> internal__static_protobuf_unittest_TestRequiredOptimizedForSize__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestOptionalOptimizedForSize__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOptionalOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestOptionalOptimizedForSize.Builder> internal__static_protobuf_unittest_TestOptionalOptimizedForSize__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestOptimizeForProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "Citnb29nbGUvcHJvdG9idWYvdW5pdHRlc3Rfb3B0aW1pemVfZm9yLnByb3Rv", 

+            "EhFwcm90b2J1Zl91bml0dGVzdBokZ29vZ2xlL3Byb3RvYnVmL2NzaGFycF9v", 

+            "cHRpb25zLnByb3RvGh5nb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8i", 

+            "kgIKFFRlc3RPcHRpbWl6ZWRGb3JTaXplEgkKAWkYASABKAUSLgoDbXNnGBMg", 

+            "ASgLMiEucHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbk1lc3NhZ2UqCQjoBxCA", 

+            "gICAAjJACg50ZXN0X2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 

+            "c3RPcHRpbWl6ZWRGb3JTaXplGNIJIAEoBTJyCg90ZXN0X2V4dGVuc2lvbjIS", 

+            "Jy5wcm90b2J1Zl91bml0dGVzdC5UZXN0T3B0aW1pemVkRm9yU2l6ZRjTCSAB", 

+            "KAsyLy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UmVxdWlyZWRPcHRpbWl6ZWRG", 

+            "b3JTaXplIikKHFRlc3RSZXF1aXJlZE9wdGltaXplZEZvclNpemUSCQoBeBgB", 

+            "IAIoBSJaChxUZXN0T3B0aW9uYWxPcHRpbWl6ZWRGb3JTaXplEjoKAW8YASAB", 

+            "KAsyLy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UmVxdWlyZWRPcHRpbWl6ZWRG", 

+            "b3JTaXplQkZIAsI+QQohR29vZ2xlLlByb3RvY29sQnVmZmVycy5UZXN0UHJv", 

+          "dG9zEhxVbml0VGVzdE9wdGltaXplRm9yUHJvdG9GaWxl"));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_TestOptimizedForSize__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_TestOptimizedForSize__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Builder>(internal__static_protobuf_unittest_TestOptimizedForSize__Descriptor,

+                new string[] { "I", "Msg", });

+        global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.TestExtension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Descriptor.Extensions[0]);

+        global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.TestExtension2 = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Descriptor.Extensions[1]);

+        internal__static_protobuf_unittest_TestRequiredOptimizedForSize__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_protobuf_unittest_TestRequiredOptimizedForSize__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.Builder>(internal__static_protobuf_unittest_TestRequiredOptimizedForSize__Descriptor,

+                new string[] { "X", });

+        internal__static_protobuf_unittest_TestOptionalOptimizedForSize__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_protobuf_unittest_TestOptionalOptimizedForSize__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestOptionalOptimizedForSize, global::Google.ProtocolBuffers.TestProtos.TestOptionalOptimizedForSize.Builder>(internal__static_protobuf_unittest_TestOptionalOptimizedForSize__Descriptor,

+                new string[] { "O", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestOptimizedForSize : pb::ExtendableMessage<TestOptimizedForSize, TestOptimizedForSize.Builder> {

+    private TestOptimizedForSize() { }

+    private static readonly TestOptimizedForSize defaultInstance = new TestOptimizedForSize().MakeReadOnly();

+    public static TestOptimizedForSize DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestOptimizedForSize DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestOptimizedForSize ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestOptimizeForProtoFile.internal__static_protobuf_unittest_TestOptimizedForSize__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestOptimizedForSize, TestOptimizedForSize.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestOptimizeForProtoFile.internal__static_protobuf_unittest_TestOptimizedForSize__FieldAccessorTable; }

+    }

+    

+    public const int TestExtensionFieldNumber = 1234;

+    public static pb::GeneratedExtensionBase<int> TestExtension;

+    public const int TestExtension2FieldNumber = 1235;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize> TestExtension2;

+    public const int IFieldNumber = 1;

+    private bool hasI;

+    private int i_;

+    public bool HasI {

+      get { return hasI; }

+    }

+    public int I {

+      get { return i_; }

+    }

+    

+    public const int MsgFieldNumber = 19;

+    private bool hasMsg;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage msg_;

+    public bool HasMsg {

+      get { return hasMsg; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage Msg {

+      get { return msg_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }

+    }

+    

+    public static TestOptimizedForSize ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestOptimizedForSize ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestOptimizedForSize ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestOptimizedForSize ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestOptimizedForSize ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestOptimizedForSize ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestOptimizedForSize ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestOptimizedForSize ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestOptimizedForSize MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestOptimizedForSize prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestOptimizedForSize, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestOptimizedForSize cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestOptimizedForSize result;

+      

+      private TestOptimizedForSize PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestOptimizedForSize original = result;

+          result = new TestOptimizedForSize();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestOptimizedForSize MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.Descriptor; }

+      }

+      

+      public override TestOptimizedForSize DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestOptimizedForSize.DefaultInstance; }

+      }

+      

+      public override TestOptimizedForSize BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasI {

+        get { return result.hasI; }

+      }

+      public int I {

+        get { return result.I; }

+        set { SetI(value); }

+      }

+      public Builder SetI(int value) {

+        PrepareBuilder();

+        result.hasI = true;

+        result.i_ = value;

+        return this;

+      }

+      public Builder ClearI() {

+        PrepareBuilder();

+        result.hasI = false;

+        result.i_ = 0;

+        return this;

+      }

+      

+      public bool HasMsg {

+       get { return result.hasMsg; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage Msg {

+        get { return result.Msg; }

+        set { SetMsg(value); }

+      }

+      public Builder SetMsg(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMsg = true;

+        result.msg_ = value;

+        return this;

+      }

+      public Builder SetMsg(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasMsg = true;

+        result.msg_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeMsg(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasMsg &&

+            result.msg_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {

+            result.msg_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.msg_).MergeFrom(value).BuildPartial();

+        } else {

+          result.msg_ = value;

+        }

+        result.hasMsg = true;

+        return this;

+      }

+      public Builder ClearMsg() {

+        PrepareBuilder();

+        result.hasMsg = false;

+        result.msg_ = null;

+        return this;

+      }

+    }

+    static TestOptimizedForSize() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestOptimizeForProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRequiredOptimizedForSize : pb::GeneratedMessage<TestRequiredOptimizedForSize, TestRequiredOptimizedForSize.Builder> {

+    private TestRequiredOptimizedForSize() { }

+    private static readonly TestRequiredOptimizedForSize defaultInstance = new TestRequiredOptimizedForSize().MakeReadOnly();

+    public static TestRequiredOptimizedForSize DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRequiredOptimizedForSize DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRequiredOptimizedForSize ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestOptimizeForProtoFile.internal__static_protobuf_unittest_TestRequiredOptimizedForSize__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestRequiredOptimizedForSize, TestRequiredOptimizedForSize.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestOptimizeForProtoFile.internal__static_protobuf_unittest_TestRequiredOptimizedForSize__FieldAccessorTable; }

+    }

+    

+    public const int XFieldNumber = 1;

+    private bool hasX;

+    private int x_;

+    public bool HasX {

+      get { return hasX; }

+    }

+    public int X {

+      get { return x_; }

+    }

+    

+    public static TestRequiredOptimizedForSize ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequiredOptimizedForSize ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredOptimizedForSize ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequiredOptimizedForSize ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredOptimizedForSize ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequiredOptimizedForSize ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRequiredOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRequiredOptimizedForSize ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequiredOptimizedForSize ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRequiredOptimizedForSize MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRequiredOptimizedForSize prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestRequiredOptimizedForSize, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRequiredOptimizedForSize cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRequiredOptimizedForSize result;

+      

+      private TestRequiredOptimizedForSize PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRequiredOptimizedForSize original = result;

+          result = new TestRequiredOptimizedForSize();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRequiredOptimizedForSize MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.Descriptor; }

+      }

+      

+      public override TestRequiredOptimizedForSize DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.DefaultInstance; }

+      }

+      

+      public override TestRequiredOptimizedForSize BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasX {

+        get { return result.hasX; }

+      }

+      public int X {

+        get { return result.X; }

+        set { SetX(value); }

+      }

+      public Builder SetX(int value) {

+        PrepareBuilder();

+        result.hasX = true;

+        result.x_ = value;

+        return this;

+      }

+      public Builder ClearX() {

+        PrepareBuilder();

+        result.hasX = false;

+        result.x_ = 0;

+        return this;

+      }

+    }

+    static TestRequiredOptimizedForSize() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestOptimizeForProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestOptionalOptimizedForSize : pb::GeneratedMessage<TestOptionalOptimizedForSize, TestOptionalOptimizedForSize.Builder> {

+    private TestOptionalOptimizedForSize() { }

+    private static readonly TestOptionalOptimizedForSize defaultInstance = new TestOptionalOptimizedForSize().MakeReadOnly();

+    public static TestOptionalOptimizedForSize DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestOptionalOptimizedForSize DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestOptionalOptimizedForSize ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestOptimizeForProtoFile.internal__static_protobuf_unittest_TestOptionalOptimizedForSize__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestOptionalOptimizedForSize, TestOptionalOptimizedForSize.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestOptimizeForProtoFile.internal__static_protobuf_unittest_TestOptionalOptimizedForSize__FieldAccessorTable; }

+    }

+    

+    public const int OFieldNumber = 1;

+    private bool hasO;

+    private global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize o_;

+    public bool HasO {

+      get { return hasO; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize O {

+      get { return o_ ?? global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.DefaultInstance; }

+    }

+    

+    public static TestOptionalOptimizedForSize ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestOptionalOptimizedForSize ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestOptionalOptimizedForSize ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestOptionalOptimizedForSize ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestOptionalOptimizedForSize ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestOptionalOptimizedForSize ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestOptionalOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestOptionalOptimizedForSize ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestOptionalOptimizedForSize ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestOptionalOptimizedForSize ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestOptionalOptimizedForSize MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestOptionalOptimizedForSize prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestOptionalOptimizedForSize, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestOptionalOptimizedForSize cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestOptionalOptimizedForSize result;

+      

+      private TestOptionalOptimizedForSize PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestOptionalOptimizedForSize original = result;

+          result = new TestOptionalOptimizedForSize();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestOptionalOptimizedForSize MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestOptionalOptimizedForSize.Descriptor; }

+      }

+      

+      public override TestOptionalOptimizedForSize DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestOptionalOptimizedForSize.DefaultInstance; }

+      }

+      

+      public override TestOptionalOptimizedForSize BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasO {

+       get { return result.hasO; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize O {

+        get { return result.O; }

+        set { SetO(value); }

+      }

+      public Builder SetO(global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasO = true;

+        result.o_ = value;

+        return this;

+      }

+      public Builder SetO(global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasO = true;

+        result.o_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeO(global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasO &&

+            result.o_ != global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.DefaultInstance) {

+            result.o_ = global::Google.ProtocolBuffers.TestProtos.TestRequiredOptimizedForSize.CreateBuilder(result.o_).MergeFrom(value).BuildPartial();

+        } else {

+          result.o_ = value;

+        }

+        result.hasO = true;

+        return this;

+      }

+      public Builder ClearO() {

+        PrepareBuilder();

+        result.hasO = false;

+        result.o_ = null;

+        return this;

+      }

+    }

+    static TestOptionalOptimizedForSize() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestOptimizeForProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs
new file mode 100644
index 0000000..dd31c67
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestProtoFile.cs
@@ -0,0 +1,21602 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalInt32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalInt64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalUint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalUint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSfixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSfixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFloatExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalDoubleExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalBoolExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalStringExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalBytesExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalGroupExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalNestedMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalForeignMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalImportMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalNestedEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalForeignEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalImportEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalStringPieceExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalCordExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedInt32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedInt64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedUint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedUint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSfixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSfixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFloatExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedDoubleExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedBoolExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedStringExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedBytesExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedGroupExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedNestedMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedForeignMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedImportMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedNestedEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedForeignEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedImportEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedStringPieceExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedCordExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultInt32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultInt64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultUint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultUint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSfixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSfixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFloatExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultDoubleExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultBoolExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultStringExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultBytesExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultNestedEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultForeignEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultImportEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultStringPieceExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultCordExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.MyExtensionString);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.MyExtensionInt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedInt32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedInt64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedUint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedUint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSfixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSfixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFloatExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedDoubleExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedBoolExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Test);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestRequired.Single);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestRequired.Multi);

+    }

+    #endregion

+    #region Extensions

+    public const int OptionalInt32ExtensionFieldNumber = 1;

+    public static pb::GeneratedExtensionBase<int> OptionalInt32Extension;

+    public const int OptionalInt64ExtensionFieldNumber = 2;

+    public static pb::GeneratedExtensionBase<long> OptionalInt64Extension;

+    public const int OptionalUint32ExtensionFieldNumber = 3;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> OptionalUint32Extension;

+    public const int OptionalUint64ExtensionFieldNumber = 4;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> OptionalUint64Extension;

+    public const int OptionalSint32ExtensionFieldNumber = 5;

+    public static pb::GeneratedExtensionBase<int> OptionalSint32Extension;

+    public const int OptionalSint64ExtensionFieldNumber = 6;

+    public static pb::GeneratedExtensionBase<long> OptionalSint64Extension;

+    public const int OptionalFixed32ExtensionFieldNumber = 7;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> OptionalFixed32Extension;

+    public const int OptionalFixed64ExtensionFieldNumber = 8;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> OptionalFixed64Extension;

+    public const int OptionalSfixed32ExtensionFieldNumber = 9;

+    public static pb::GeneratedExtensionBase<int> OptionalSfixed32Extension;

+    public const int OptionalSfixed64ExtensionFieldNumber = 10;

+    public static pb::GeneratedExtensionBase<long> OptionalSfixed64Extension;

+    public const int OptionalFloatExtensionFieldNumber = 11;

+    public static pb::GeneratedExtensionBase<float> OptionalFloatExtension;

+    public const int OptionalDoubleExtensionFieldNumber = 12;

+    public static pb::GeneratedExtensionBase<double> OptionalDoubleExtension;

+    public const int OptionalBoolExtensionFieldNumber = 13;

+    public static pb::GeneratedExtensionBase<bool> OptionalBoolExtension;

+    public const int OptionalStringExtensionFieldNumber = 14;

+    public static pb::GeneratedExtensionBase<string> OptionalStringExtension;

+    public const int OptionalBytesExtensionFieldNumber = 15;

+    public static pb::GeneratedExtensionBase<pb::ByteString> OptionalBytesExtension;

+    public const int OptionalGroupExtensionFieldNumber = 16;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension> OptionalGroupExtension;

+    public const int OptionalNestedMessageExtensionFieldNumber = 18;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> OptionalNestedMessageExtension;

+    public const int OptionalForeignMessageExtensionFieldNumber = 19;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> OptionalForeignMessageExtension;

+    public const int OptionalImportMessageExtensionFieldNumber = 20;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportMessage> OptionalImportMessageExtension;

+    public const int OptionalNestedEnumExtensionFieldNumber = 21;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> OptionalNestedEnumExtension;

+    public const int OptionalForeignEnumExtensionFieldNumber = 22;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> OptionalForeignEnumExtension;

+    public const int OptionalImportEnumExtensionFieldNumber = 23;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportEnum> OptionalImportEnumExtension;

+    public const int OptionalStringPieceExtensionFieldNumber = 24;

+    public static pb::GeneratedExtensionBase<string> OptionalStringPieceExtension;

+    public const int OptionalCordExtensionFieldNumber = 25;

+    public static pb::GeneratedExtensionBase<string> OptionalCordExtension;

+    public const int RepeatedInt32ExtensionFieldNumber = 31;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedInt32Extension;

+    public const int RepeatedInt64ExtensionFieldNumber = 32;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedInt64Extension;

+    public const int RepeatedUint32ExtensionFieldNumber = 33;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> RepeatedUint32Extension;

+    public const int RepeatedUint64ExtensionFieldNumber = 34;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> RepeatedUint64Extension;

+    public const int RepeatedSint32ExtensionFieldNumber = 35;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedSint32Extension;

+    public const int RepeatedSint64ExtensionFieldNumber = 36;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedSint64Extension;

+    public const int RepeatedFixed32ExtensionFieldNumber = 37;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> RepeatedFixed32Extension;

+    public const int RepeatedFixed64ExtensionFieldNumber = 38;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> RepeatedFixed64Extension;

+    public const int RepeatedSfixed32ExtensionFieldNumber = 39;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedSfixed32Extension;

+    public const int RepeatedSfixed64ExtensionFieldNumber = 40;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedSfixed64Extension;

+    public const int RepeatedFloatExtensionFieldNumber = 41;

+    public static pb::GeneratedExtensionBase<scg::IList<float>> RepeatedFloatExtension;

+    public const int RepeatedDoubleExtensionFieldNumber = 42;

+    public static pb::GeneratedExtensionBase<scg::IList<double>> RepeatedDoubleExtension;

+    public const int RepeatedBoolExtensionFieldNumber = 43;

+    public static pb::GeneratedExtensionBase<scg::IList<bool>> RepeatedBoolExtension;

+    public const int RepeatedStringExtensionFieldNumber = 44;

+    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedStringExtension;

+    public const int RepeatedBytesExtensionFieldNumber = 45;

+    public static pb::GeneratedExtensionBase<scg::IList<pb::ByteString>> RepeatedBytesExtension;

+    public const int RepeatedGroupExtensionFieldNumber = 46;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension>> RepeatedGroupExtension;

+    public const int RepeatedNestedMessageExtensionFieldNumber = 48;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>> RepeatedNestedMessageExtension;

+    public const int RepeatedForeignMessageExtensionFieldNumber = 49;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>> RepeatedForeignMessageExtension;

+    public const int RepeatedImportMessageExtensionFieldNumber = 50;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportMessage>> RepeatedImportMessageExtension;

+    public const int RepeatedNestedEnumExtensionFieldNumber = 51;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>> RepeatedNestedEnumExtension;

+    public const int RepeatedForeignEnumExtensionFieldNumber = 52;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>> RepeatedForeignEnumExtension;

+    public const int RepeatedImportEnumExtensionFieldNumber = 53;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportEnum>> RepeatedImportEnumExtension;

+    public const int RepeatedStringPieceExtensionFieldNumber = 54;

+    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedStringPieceExtension;

+    public const int RepeatedCordExtensionFieldNumber = 55;

+    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedCordExtension;

+    public const int DefaultInt32ExtensionFieldNumber = 61;

+    public static pb::GeneratedExtensionBase<int> DefaultInt32Extension;

+    public const int DefaultInt64ExtensionFieldNumber = 62;

+    public static pb::GeneratedExtensionBase<long> DefaultInt64Extension;

+    public const int DefaultUint32ExtensionFieldNumber = 63;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> DefaultUint32Extension;

+    public const int DefaultUint64ExtensionFieldNumber = 64;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> DefaultUint64Extension;

+    public const int DefaultSint32ExtensionFieldNumber = 65;

+    public static pb::GeneratedExtensionBase<int> DefaultSint32Extension;

+    public const int DefaultSint64ExtensionFieldNumber = 66;

+    public static pb::GeneratedExtensionBase<long> DefaultSint64Extension;

+    public const int DefaultFixed32ExtensionFieldNumber = 67;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> DefaultFixed32Extension;

+    public const int DefaultFixed64ExtensionFieldNumber = 68;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> DefaultFixed64Extension;

+    public const int DefaultSfixed32ExtensionFieldNumber = 69;

+    public static pb::GeneratedExtensionBase<int> DefaultSfixed32Extension;

+    public const int DefaultSfixed64ExtensionFieldNumber = 70;

+    public static pb::GeneratedExtensionBase<long> DefaultSfixed64Extension;

+    public const int DefaultFloatExtensionFieldNumber = 71;

+    public static pb::GeneratedExtensionBase<float> DefaultFloatExtension;

+    public const int DefaultDoubleExtensionFieldNumber = 72;

+    public static pb::GeneratedExtensionBase<double> DefaultDoubleExtension;

+    public const int DefaultBoolExtensionFieldNumber = 73;

+    public static pb::GeneratedExtensionBase<bool> DefaultBoolExtension;

+    public const int DefaultStringExtensionFieldNumber = 74;

+    public static pb::GeneratedExtensionBase<string> DefaultStringExtension;

+    public const int DefaultBytesExtensionFieldNumber = 75;

+    public static pb::GeneratedExtensionBase<pb::ByteString> DefaultBytesExtension;

+    public const int DefaultNestedEnumExtensionFieldNumber = 81;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> DefaultNestedEnumExtension;

+    public const int DefaultForeignEnumExtensionFieldNumber = 82;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> DefaultForeignEnumExtension;

+    public const int DefaultImportEnumExtensionFieldNumber = 83;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportEnum> DefaultImportEnumExtension;

+    public const int DefaultStringPieceExtensionFieldNumber = 84;

+    public static pb::GeneratedExtensionBase<string> DefaultStringPieceExtension;

+    public const int DefaultCordExtensionFieldNumber = 85;

+    public static pb::GeneratedExtensionBase<string> DefaultCordExtension;

+    public const int MyExtensionStringFieldNumber = 50;

+    public static pb::GeneratedExtensionBase<string> MyExtensionString;

+    public const int MyExtensionIntFieldNumber = 5;

+    public static pb::GeneratedExtensionBase<int> MyExtensionInt;

+    public const int PackedInt32ExtensionFieldNumber = 90;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedInt32Extension;

+    public const int PackedInt64ExtensionFieldNumber = 91;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedInt64Extension;

+    public const int PackedUint32ExtensionFieldNumber = 92;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> PackedUint32Extension;

+    public const int PackedUint64ExtensionFieldNumber = 93;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> PackedUint64Extension;

+    public const int PackedSint32ExtensionFieldNumber = 94;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedSint32Extension;

+    public const int PackedSint64ExtensionFieldNumber = 95;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedSint64Extension;

+    public const int PackedFixed32ExtensionFieldNumber = 96;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> PackedFixed32Extension;

+    public const int PackedFixed64ExtensionFieldNumber = 97;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> PackedFixed64Extension;

+    public const int PackedSfixed32ExtensionFieldNumber = 98;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedSfixed32Extension;

+    public const int PackedSfixed64ExtensionFieldNumber = 99;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedSfixed64Extension;

+    public const int PackedFloatExtensionFieldNumber = 100;

+    public static pb::GeneratedExtensionBase<scg::IList<float>> PackedFloatExtension;

+    public const int PackedDoubleExtensionFieldNumber = 101;

+    public static pb::GeneratedExtensionBase<scg::IList<double>> PackedDoubleExtension;

+    public const int PackedBoolExtensionFieldNumber = 102;

+    public static pb::GeneratedExtensionBase<scg::IList<bool>> PackedBoolExtension;

+    public const int PackedEnumExtensionFieldNumber = 103;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>> PackedEnumExtension;

+    #endregion

+    

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder> internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder> internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder> internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder> internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields, global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.Builder> internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ForeignMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder> internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllExtensions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllExtensions, global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.Builder> internal__static_protobuf_unittest_TestAllExtensions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.Builder> internal__static_protobuf_unittest_OptionalGroup_extension__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.Builder> internal__static_protobuf_unittest_RepeatedGroup_extension__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestNestedExtension__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedExtension, global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Builder> internal__static_protobuf_unittest_TestNestedExtension__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRequired__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequired, global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder> internal__static_protobuf_unittest_TestRequired__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRequiredForeign__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign, global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.Builder> internal__static_protobuf_unittest_TestRequiredForeign__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestForeignNested__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestForeignNested, global::Google.ProtocolBuffers.TestProtos.TestForeignNested.Builder> internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestEmptyMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.Builder> internal__static_protobuf_unittest_TestEmptyMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.Builder> internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges, global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.Builder> internal__static_protobuf_unittest_TestMultipleExtensionRanges__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber, global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.Builder> internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage, global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder> internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder> internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder> internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Builder> internal__static_protobuf_unittest_TestDupFieldNumber__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder> internal__static_protobuf_unittest_TestDupFieldNumber_Foo__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder> internal__static_protobuf_unittest_TestDupFieldNumber_Bar__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Builder> internal__static_protobuf_unittest_TestNestedMessageHasBits__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder> internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames, global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.Builder> internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestFieldOrderings__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings, global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Builder> internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues, global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Builder> internal__static_protobuf_unittest_TestExtremeDefaultValues__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_SparseEnumMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage, global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.Builder> internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OneString__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneString, global::Google.ProtocolBuffers.TestProtos.OneString.Builder> internal__static_protobuf_unittest_OneString__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OneBytes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneBytes, global::Google.ProtocolBuffers.TestProtos.OneBytes.Builder> internal__static_protobuf_unittest_OneBytes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestPackedTypes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedTypes, global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.Builder> internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes, global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.Builder> internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestPackedExtensions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions, global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.Builder> internal__static_protobuf_unittest_TestPackedExtensions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Builder> internal__static_protobuf_unittest_TestDynamicExtensions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder> internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes, global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.Builder> internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooRequest__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooRequest, global::Google.ProtocolBuffers.TestProtos.FooRequest.Builder> internal__static_protobuf_unittest_FooRequest__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooResponse__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooResponse, global::Google.ProtocolBuffers.TestProtos.FooResponse.Builder> internal__static_protobuf_unittest_FooResponse__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BarRequest__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarRequest, global::Google.ProtocolBuffers.TestProtos.BarRequest.Builder> internal__static_protobuf_unittest_BarRequest__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BarResponse__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarResponse, global::Google.ProtocolBuffers.TestProtos.BarResponse.Builder> internal__static_protobuf_unittest_BarResponse__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "Ch5nb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8SEXByb3RvYnVmX3Vu", 

+            "aXR0ZXN0GiRnb29nbGUvcHJvdG9idWYvY3NoYXJwX29wdGlvbnMucHJvdG8a", 

+            "JWdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnQucHJvdG8iuxUKDFRl", 

+            "c3RBbGxUeXBlcxIWCg5vcHRpb25hbF9pbnQzMhgBIAEoBRIWCg5vcHRpb25h", 

+            "bF9pbnQ2NBgCIAEoAxIXCg9vcHRpb25hbF91aW50MzIYAyABKA0SFwoPb3B0", 

+            "aW9uYWxfdWludDY0GAQgASgEEhcKD29wdGlvbmFsX3NpbnQzMhgFIAEoERIX", 

+            "Cg9vcHRpb25hbF9zaW50NjQYBiABKBISGAoQb3B0aW9uYWxfZml4ZWQzMhgH", 

+            "IAEoBxIYChBvcHRpb25hbF9maXhlZDY0GAggASgGEhkKEW9wdGlvbmFsX3Nm", 

+            "aXhlZDMyGAkgASgPEhkKEW9wdGlvbmFsX3NmaXhlZDY0GAogASgQEhYKDm9w", 

+            "dGlvbmFsX2Zsb2F0GAsgASgCEhcKD29wdGlvbmFsX2RvdWJsZRgMIAEoARIV", 

+            "Cg1vcHRpb25hbF9ib29sGA0gASgIEhcKD29wdGlvbmFsX3N0cmluZxgOIAEo", 

+            "CRIWCg5vcHRpb25hbF9ieXRlcxgPIAEoDBJECg1vcHRpb25hbGdyb3VwGBAg", 

+            "ASgKMi0ucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk9wdGlvbmFs", 

+            "R3JvdXASTgoXb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UYEiABKAsyLS5wcm90", 

+            "b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZRJDChhv", 

+            "cHRpb25hbF9mb3JlaWduX21lc3NhZ2UYEyABKAsyIS5wcm90b2J1Zl91bml0", 

+            "dGVzdC5Gb3JlaWduTWVzc2FnZRJIChdvcHRpb25hbF9pbXBvcnRfbWVzc2Fn", 

+            "ZRgUIAEoCzInLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRNZXNz", 

+            "YWdlEkgKFG9wdGlvbmFsX25lc3RlZF9lbnVtGBUgASgOMioucHJvdG9idWZf", 

+            "dW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0SPQoVb3B0aW9uYWxf", 

+            "Zm9yZWlnbl9lbnVtGBYgASgOMh4ucHJvdG9idWZfdW5pdHRlc3QuRm9yZWln", 

+            "bkVudW0SQgoUb3B0aW9uYWxfaW1wb3J0X2VudW0YFyABKA4yJC5wcm90b2J1", 

+            "Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0RW51bRIhChVvcHRpb25hbF9zdHJp", 

+            "bmdfcGllY2UYGCABKAlCAggCEhkKDW9wdGlvbmFsX2NvcmQYGSABKAlCAggB", 

+            "EhYKDnJlcGVhdGVkX2ludDMyGB8gAygFEhYKDnJlcGVhdGVkX2ludDY0GCAg", 

+            "AygDEhcKD3JlcGVhdGVkX3VpbnQzMhghIAMoDRIXCg9yZXBlYXRlZF91aW50", 

+            "NjQYIiADKAQSFwoPcmVwZWF0ZWRfc2ludDMyGCMgAygREhcKD3JlcGVhdGVk", 

+            "X3NpbnQ2NBgkIAMoEhIYChByZXBlYXRlZF9maXhlZDMyGCUgAygHEhgKEHJl", 

+            "cGVhdGVkX2ZpeGVkNjQYJiADKAYSGQoRcmVwZWF0ZWRfc2ZpeGVkMzIYJyAD", 

+            "KA8SGQoRcmVwZWF0ZWRfc2ZpeGVkNjQYKCADKBASFgoOcmVwZWF0ZWRfZmxv", 

+            "YXQYKSADKAISFwoPcmVwZWF0ZWRfZG91YmxlGCogAygBEhUKDXJlcGVhdGVk", 

+            "X2Jvb2wYKyADKAgSFwoPcmVwZWF0ZWRfc3RyaW5nGCwgAygJEhYKDnJlcGVh", 

+            "dGVkX2J5dGVzGC0gAygMEkQKDXJlcGVhdGVkZ3JvdXAYLiADKAoyLS5wcm90", 

+            "b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuUmVwZWF0ZWRHcm91cBJOChdy", 

+            "ZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZRgwIAMoCzItLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlEkMKGHJlcGVhdGVkX2Zv", 

+            "cmVpZ25fbWVzc2FnZRgxIAMoCzIhLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVp", 

+            "Z25NZXNzYWdlEkgKF3JlcGVhdGVkX2ltcG9ydF9tZXNzYWdlGDIgAygLMicu", 

+            "cHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1lc3NhZ2USSAoUcmVw", 

+            "ZWF0ZWRfbmVzdGVkX2VudW0YMyADKA4yKi5wcm90b2J1Zl91bml0dGVzdC5U", 

+            "ZXN0QWxsVHlwZXMuTmVzdGVkRW51bRI9ChVyZXBlYXRlZF9mb3JlaWduX2Vu", 

+            "dW0YNCADKA4yHi5wcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51bRJCChRy", 

+            "ZXBlYXRlZF9pbXBvcnRfZW51bRg1IAMoDjIkLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "X2ltcG9ydC5JbXBvcnRFbnVtEiEKFXJlcGVhdGVkX3N0cmluZ19waWVjZRg2", 

+            "IAMoCUICCAISGQoNcmVwZWF0ZWRfY29yZBg3IAMoCUICCAESGQoNZGVmYXVs", 

+            "dF9pbnQzMhg9IAEoBToCNDESGQoNZGVmYXVsdF9pbnQ2NBg+IAEoAzoCNDIS", 

+            "GgoOZGVmYXVsdF91aW50MzIYPyABKA06AjQzEhoKDmRlZmF1bHRfdWludDY0", 

+            "GEAgASgEOgI0NBIbCg5kZWZhdWx0X3NpbnQzMhhBIAEoEToDLTQ1EhoKDmRl", 

+            "ZmF1bHRfc2ludDY0GEIgASgSOgI0NhIbCg9kZWZhdWx0X2ZpeGVkMzIYQyAB", 

+            "KAc6AjQ3EhsKD2RlZmF1bHRfZml4ZWQ2NBhEIAEoBjoCNDgSHAoQZGVmYXVs", 

+            "dF9zZml4ZWQzMhhFIAEoDzoCNDkSHQoQZGVmYXVsdF9zZml4ZWQ2NBhGIAEo", 

+            "EDoDLTUwEhsKDWRlZmF1bHRfZmxvYXQYRyABKAI6BDUxLjUSHQoOZGVmYXVs", 

+            "dF9kb3VibGUYSCABKAE6BTUyMDAwEhoKDGRlZmF1bHRfYm9vbBhJIAEoCDoE", 

+            "dHJ1ZRIdCg5kZWZhdWx0X3N0cmluZxhKIAEoCToFaGVsbG8SHAoNZGVmYXVs", 

+            "dF9ieXRlcxhLIAEoDDoFd29ybGQSTAoTZGVmYXVsdF9uZXN0ZWRfZW51bRhR", 

+            "IAEoDjIqLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRF", 

+            "bnVtOgNCQVISSQoUZGVmYXVsdF9mb3JlaWduX2VudW0YUiABKA4yHi5wcm90", 

+            "b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51bToLRk9SRUlHTl9CQVISTQoTZGVm", 

+            "YXVsdF9pbXBvcnRfZW51bRhTIAEoDjIkLnByb3RvYnVmX3VuaXR0ZXN0X2lt", 

+            "cG9ydC5JbXBvcnRFbnVtOgpJTVBPUlRfQkFSEiUKFGRlZmF1bHRfc3RyaW5n", 

+            "X3BpZWNlGFQgASgJOgNhYmNCAggCEh0KDGRlZmF1bHRfY29yZBhVIAEoCToD", 

+            "MTIzQgIIARobCg1OZXN0ZWRNZXNzYWdlEgoKAmJiGAEgASgFGhoKDU9wdGlv", 

+            "bmFsR3JvdXASCQoBYRgRIAEoBRoaCg1SZXBlYXRlZEdyb3VwEgkKAWEYLyAB", 

+            "KAUiJwoKTmVzdGVkRW51bRIHCgNGT08QARIHCgNCQVIQAhIHCgNCQVoQAyI0", 

+            "ChRUZXN0RGVwcmVjYXRlZEZpZWxkcxIcChBkZXByZWNhdGVkX2ludDMyGAEg", 

+            "ASgFQgIYASIbCg5Gb3JlaWduTWVzc2FnZRIJCgFjGAEgASgFIh0KEVRlc3RB", 

+            "bGxFeHRlbnNpb25zKggIARCAgICAAiIkChdPcHRpb25hbEdyb3VwX2V4dGVu", 

+            "c2lvbhIJCgFhGBEgASgFIiQKF1JlcGVhdGVkR3JvdXBfZXh0ZW5zaW9uEgkK", 

+            "AWEYLyABKAUiUAoTVGVzdE5lc3RlZEV4dGVuc2lvbjI5CgR0ZXN0EiQucHJv", 

+            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMY6gcgASgJOgR0ZXN0", 

+            "ItUFCgxUZXN0UmVxdWlyZWQSCQoBYRgBIAIoBRIOCgZkdW1teTIYAiABKAUS", 

+            "CQoBYhgDIAIoBRIOCgZkdW1teTQYBCABKAUSDgoGZHVtbXk1GAUgASgFEg4K", 

+            "BmR1bW15NhgGIAEoBRIOCgZkdW1teTcYByABKAUSDgoGZHVtbXk4GAggASgF", 

+            "Eg4KBmR1bW15ORgJIAEoBRIPCgdkdW1teTEwGAogASgFEg8KB2R1bW15MTEY", 

+            "CyABKAUSDwoHZHVtbXkxMhgMIAEoBRIPCgdkdW1teTEzGA0gASgFEg8KB2R1", 

+            "bW15MTQYDiABKAUSDwoHZHVtbXkxNRgPIAEoBRIPCgdkdW1teTE2GBAgASgF", 

+            "Eg8KB2R1bW15MTcYESABKAUSDwoHZHVtbXkxOBgSIAEoBRIPCgdkdW1teTE5", 

+            "GBMgASgFEg8KB2R1bW15MjAYFCABKAUSDwoHZHVtbXkyMRgVIAEoBRIPCgdk", 

+            "dW1teTIyGBYgASgFEg8KB2R1bW15MjMYFyABKAUSDwoHZHVtbXkyNBgYIAEo", 

+            "BRIPCgdkdW1teTI1GBkgASgFEg8KB2R1bW15MjYYGiABKAUSDwoHZHVtbXky", 

+            "NxgbIAEoBRIPCgdkdW1teTI4GBwgASgFEg8KB2R1bW15MjkYHSABKAUSDwoH", 

+            "ZHVtbXkzMBgeIAEoBRIPCgdkdW1teTMxGB8gASgFEg8KB2R1bW15MzIYICAB", 

+            "KAUSCQoBYxghIAIoBTJWCgZzaW5nbGUSJC5wcm90b2J1Zl91bml0dGVzdC5U", 

+            "ZXN0QWxsRXh0ZW5zaW9ucxjoByABKAsyHy5wcm90b2J1Zl91bml0dGVzdC5U", 

+            "ZXN0UmVxdWlyZWQyVQoFbXVsdGkSJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxjpByADKAsyHy5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "UmVxdWlyZWQimgEKE1Rlc3RSZXF1aXJlZEZvcmVpZ24SOQoQb3B0aW9uYWxf", 

+            "bWVzc2FnZRgBIAEoCzIfLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RSZXF1aXJl", 

+            "ZBI5ChByZXBlYXRlZF9tZXNzYWdlGAIgAygLMh8ucHJvdG9idWZfdW5pdHRl", 

+            "c3QuVGVzdFJlcXVpcmVkEg0KBWR1bW15GAMgASgFIloKEVRlc3RGb3JlaWdu", 

+            "TmVzdGVkEkUKDmZvcmVpZ25fbmVzdGVkGAEgASgLMi0ucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UiEgoQVGVzdEVtcHR5", 

+            "TWVzc2FnZSIqCh5UZXN0RW1wdHlNZXNzYWdlV2l0aEV4dGVuc2lvbnMqCAgB", 

+            "EICAgIACIjcKG1Rlc3RNdWx0aXBsZUV4dGVuc2lvblJhbmdlcyoECCoQKyoG", 

+            "CK8gEJQhKgoIgIAEEICAgIACIjQKGFRlc3RSZWFsbHlMYXJnZVRhZ051bWJl", 

+            "chIJCgFhGAEgASgFEg0KAmJiGP///38gASgFIlUKFFRlc3RSZWN1cnNpdmVN", 

+            "ZXNzYWdlEjIKAWEYASABKAsyJy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UmVj", 

+            "dXJzaXZlTWVzc2FnZRIJCgFpGAIgASgFIksKFFRlc3RNdXR1YWxSZWN1cnNp", 

+            "b25BEjMKAmJiGAEgASgLMicucHJvdG9idWZfdW5pdHRlc3QuVGVzdE11dHVh", 

+            "bFJlY3Vyc2lvbkIiYgoUVGVzdE11dHVhbFJlY3Vyc2lvbkISMgoBYRgBIAEo", 

+            "CzInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNdXR1YWxSZWN1cnNpb25BEhYK", 

+            "Dm9wdGlvbmFsX2ludDMyGAIgASgFIrMBChJUZXN0RHVwRmllbGROdW1iZXIS", 

+            "CQoBYRgBIAEoBRI2CgNmb28YAiABKAoyKS5wcm90b2J1Zl91bml0dGVzdC5U", 

+            "ZXN0RHVwRmllbGROdW1iZXIuRm9vEjYKA2JhchgDIAEoCjIpLnByb3RvYnVm", 

+            "X3VuaXR0ZXN0LlRlc3REdXBGaWVsZE51bWJlci5CYXIaEAoDRm9vEgkKAWEY", 

+            "ASABKAUaEAoDQmFyEgkKAWEYASABKAUigAIKGFRlc3ROZXN0ZWRNZXNzYWdl", 

+            "SGFzQml0cxJaChdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZRgBIAEoCzI5LnBy", 

+            "b3RvYnVmX3VuaXR0ZXN0LlRlc3ROZXN0ZWRNZXNzYWdlSGFzQml0cy5OZXN0", 

+            "ZWRNZXNzYWdlGocBCg1OZXN0ZWRNZXNzYWdlEiQKHG5lc3RlZG1lc3NhZ2Vf", 

+            "cmVwZWF0ZWRfaW50MzIYASADKAUSUAolbmVzdGVkbWVzc2FnZV9yZXBlYXRl", 

+            "ZF9mb3JlaWdubWVzc2FnZRgCIAMoCzIhLnByb3RvYnVmX3VuaXR0ZXN0LkZv", 

+            "cmVpZ25NZXNzYWdlIuUDChdUZXN0Q2FtZWxDYXNlRmllbGROYW1lcxIWCg5Q", 

+            "cmltaXRpdmVGaWVsZBgBIAEoBRITCgtTdHJpbmdGaWVsZBgCIAEoCRIxCglF", 

+            "bnVtRmllbGQYAyABKA4yHi5wcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51", 

+            "bRI3CgxNZXNzYWdlRmllbGQYBCABKAsyIS5wcm90b2J1Zl91bml0dGVzdC5G", 

+            "b3JlaWduTWVzc2FnZRIcChBTdHJpbmdQaWVjZUZpZWxkGAUgASgJQgIIAhIV", 

+            "CglDb3JkRmllbGQYBiABKAlCAggBEh4KFlJlcGVhdGVkUHJpbWl0aXZlRmll", 

+            "bGQYByADKAUSGwoTUmVwZWF0ZWRTdHJpbmdGaWVsZBgIIAMoCRI5ChFSZXBl", 

+            "YXRlZEVudW1GaWVsZBgJIAMoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVp", 

+            "Z25FbnVtEj8KFFJlcGVhdGVkTWVzc2FnZUZpZWxkGAogAygLMiEucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuRm9yZWlnbk1lc3NhZ2USJAoYUmVwZWF0ZWRTdHJpbmdQ", 

+            "aWVjZUZpZWxkGAsgAygJQgIIAhIdChFSZXBlYXRlZENvcmRGaWVsZBgMIAMo", 

+            "CUICCAEiVQoSVGVzdEZpZWxkT3JkZXJpbmdzEhEKCW15X3N0cmluZxgLIAEo", 

+            "CRIOCgZteV9pbnQYASABKAMSEAoIbXlfZmxvYXQYZSABKAIqBAgCEAsqBAgM", 

+            "EGUiowUKGFRlc3RFeHRyZW1lRGVmYXVsdFZhbHVlcxI/Cg1lc2NhcGVkX2J5", 

+            "dGVzGAEgASgMOihcMDAwXDAwMVwwMDdcMDEwXDAxNFxuXHJcdFwwMTNcXFwn", 

+            "XCJcMzc2EiAKDGxhcmdlX3VpbnQzMhgCIAEoDToKNDI5NDk2NzI5NRIqCgxs", 

+            "YXJnZV91aW50NjQYAyABKAQ6FDE4NDQ2NzQ0MDczNzA5NTUxNjE1EiAKC3Nt", 

+            "YWxsX2ludDMyGAQgASgFOgstMjE0NzQ4MzY0NxIpCgtzbWFsbF9pbnQ2NBgF", 

+            "IAEoAzoULTkyMjMzNzIwMzY4NTQ3NzU4MDcSGAoLdXRmOF9zdHJpbmcYBiAB", 

+            "KAk6A+GItBIVCgp6ZXJvX2Zsb2F0GAcgASgCOgEwEhQKCW9uZV9mbG9hdBgI", 

+            "IAEoAjoBMRIYCgtzbWFsbF9mbG9hdBgJIAEoAjoDMS41Eh4KEm5lZ2F0aXZl", 

+            "X29uZV9mbG9hdBgKIAEoAjoCLTESHAoObmVnYXRpdmVfZmxvYXQYCyABKAI6", 

+            "BC0xLjUSGwoLbGFyZ2VfZmxvYXQYDCABKAI6BjJlKzAwOBIlChRzbWFsbF9u", 

+            "ZWdhdGl2ZV9mbG9hdBgNIAEoAjoHLThlLTAyOBIXCgppbmZfZG91YmxlGA4g", 

+            "ASgBOgNpbmYSHAoObmVnX2luZl9kb3VibGUYDyABKAE6BC1pbmYSFwoKbmFu", 

+            "X2RvdWJsZRgQIAEoAToDbmFuEhYKCWluZl9mbG9hdBgRIAEoAjoDaW5mEhsK", 

+            "DW5lZ19pbmZfZmxvYXQYEiABKAI6BC1pbmYSFgoJbmFuX2Zsb2F0GBMgASgC", 

+            "OgNuYW4SKwoMY3BwX3RyaWdyYXBoGBQgASgJOhU/ID8gPz8gPz8gPz8/ID8/", 

+            "LyA/Py0iSwoRU3BhcnNlRW51bU1lc3NhZ2USNgoLc3BhcnNlX2VudW0YASAB", 

+            "KA4yIS5wcm90b2J1Zl91bml0dGVzdC5UZXN0U3BhcnNlRW51bSIZCglPbmVT", 

+            "dHJpbmcSDAoEZGF0YRgBIAEoCSIYCghPbmVCeXRlcxIMCgRkYXRhGAEgASgM", 

+            "IqoDCg9UZXN0UGFja2VkVHlwZXMSGAoMcGFja2VkX2ludDMyGFogAygFQgIQ", 

+            "ARIYCgxwYWNrZWRfaW50NjQYWyADKANCAhABEhkKDXBhY2tlZF91aW50MzIY", 

+            "XCADKA1CAhABEhkKDXBhY2tlZF91aW50NjQYXSADKARCAhABEhkKDXBhY2tl", 

+            "ZF9zaW50MzIYXiADKBFCAhABEhkKDXBhY2tlZF9zaW50NjQYXyADKBJCAhAB", 

+            "EhoKDnBhY2tlZF9maXhlZDMyGGAgAygHQgIQARIaCg5wYWNrZWRfZml4ZWQ2", 

+            "NBhhIAMoBkICEAESGwoPcGFja2VkX3NmaXhlZDMyGGIgAygPQgIQARIbCg9w", 

+            "YWNrZWRfc2ZpeGVkNjQYYyADKBBCAhABEhgKDHBhY2tlZF9mbG9hdBhkIAMo", 

+            "AkICEAESGQoNcGFja2VkX2RvdWJsZRhlIAMoAUICEAESFwoLcGFja2VkX2Jv", 

+            "b2wYZiADKAhCAhABEjcKC3BhY2tlZF9lbnVtGGcgAygOMh4ucHJvdG9idWZf", 

+            "dW5pdHRlc3QuRm9yZWlnbkVudW1CAhABIsgDChFUZXN0VW5wYWNrZWRUeXBl", 

+            "cxIaCg51bnBhY2tlZF9pbnQzMhhaIAMoBUICEAASGgoOdW5wYWNrZWRfaW50", 

+            "NjQYWyADKANCAhAAEhsKD3VucGFja2VkX3VpbnQzMhhcIAMoDUICEAASGwoP", 

+            "dW5wYWNrZWRfdWludDY0GF0gAygEQgIQABIbCg91bnBhY2tlZF9zaW50MzIY", 

+            "XiADKBFCAhAAEhsKD3VucGFja2VkX3NpbnQ2NBhfIAMoEkICEAASHAoQdW5w", 

+            "YWNrZWRfZml4ZWQzMhhgIAMoB0ICEAASHAoQdW5wYWNrZWRfZml4ZWQ2NBhh", 

+            "IAMoBkICEAASHQoRdW5wYWNrZWRfc2ZpeGVkMzIYYiADKA9CAhAAEh0KEXVu", 

+            "cGFja2VkX3NmaXhlZDY0GGMgAygQQgIQABIaCg51bnBhY2tlZF9mbG9hdBhk", 

+            "IAMoAkICEAASGwoPdW5wYWNrZWRfZG91YmxlGGUgAygBQgIQABIZCg11bnBh", 

+            "Y2tlZF9ib29sGGYgAygIQgIQABI5Cg11bnBhY2tlZF9lbnVtGGcgAygOMh4u", 

+            "cHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbkVudW1CAhAAIiAKFFRlc3RQYWNr", 

+            "ZWRFeHRlbnNpb25zKggIARCAgICAAiKZBAoVVGVzdER5bmFtaWNFeHRlbnNp", 

+            "b25zEhkKEHNjYWxhcl9leHRlbnNpb24Y0A8gASgHEjcKDmVudW1fZXh0ZW5z", 

+            "aW9uGNEPIAEoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVtElkK", 

+            "FmR5bmFtaWNfZW51bV9leHRlbnNpb24Y0g8gASgOMjgucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdER5bmFtaWNFeHRlbnNpb25zLkR5bmFtaWNFbnVtVHlwZRI9", 

+            "ChFtZXNzYWdlX2V4dGVuc2lvbhjTDyABKAsyIS5wcm90b2J1Zl91bml0dGVz", 

+            "dC5Gb3JlaWduTWVzc2FnZRJfChlkeW5hbWljX21lc3NhZ2VfZXh0ZW5zaW9u", 

+            "GNQPIAEoCzI7LnByb3RvYnVmX3VuaXR0ZXN0LlRlc3REeW5hbWljRXh0ZW5z", 

+            "aW9ucy5EeW5hbWljTWVzc2FnZVR5cGUSGwoScmVwZWF0ZWRfZXh0ZW5zaW9u", 

+            "GNUPIAMoCRIdChBwYWNrZWRfZXh0ZW5zaW9uGNYPIAMoEUICEAEaLAoSRHlu", 

+            "YW1pY01lc3NhZ2VUeXBlEhYKDWR5bmFtaWNfZmllbGQYtBAgASgFIkcKD0R5", 

+            "bmFtaWNFbnVtVHlwZRIQCgtEWU5BTUlDX0ZPTxCYERIQCgtEWU5BTUlDX0JB", 

+            "UhCZERIQCgtEWU5BTUlDX0JBWhCaESLAAQojVGVzdFJlcGVhdGVkU2NhbGFy", 

+            "RGlmZmVyZW50VGFnU2l6ZXMSGAoQcmVwZWF0ZWRfZml4ZWQzMhgMIAMoBxIW", 

+            "Cg5yZXBlYXRlZF9pbnQzMhgNIAMoBRIZChByZXBlYXRlZF9maXhlZDY0GP4P", 

+            "IAMoBhIXCg5yZXBlYXRlZF9pbnQ2NBj/DyADKAMSGAoOcmVwZWF0ZWRfZmxv", 

+            "YXQY/v8PIAMoAhIZCg9yZXBlYXRlZF91aW50NjQY//8PIAMoBCIMCgpGb29S", 

+            "ZXF1ZXN0Ig0KC0Zvb1Jlc3BvbnNlIgwKCkJhclJlcXVlc3QiDQoLQmFyUmVz", 

+            "cG9uc2UqQAoLRm9yZWlnbkVudW0SDwoLRk9SRUlHTl9GT08QBBIPCgtGT1JF", 

+            "SUdOX0JBUhAFEg8KC0ZPUkVJR05fQkFaEAYqRwoUVGVzdEVudW1XaXRoRHVw", 

+            "VmFsdWUSCAoERk9PMRABEggKBEJBUjEQAhIHCgNCQVoQAxIICgRGT08yEAES", 

+            "CAoEQkFSMhACKokBCg5UZXN0U3BhcnNlRW51bRIMCghTUEFSU0VfQRB7Eg4K", 

+            "CFNQQVJTRV9CEKbnAxIPCghTUEFSU0VfQxCysYAGEhUKCFNQQVJTRV9EEPH/", 

+            "/////////wESFQoIU1BBUlNFX0UQtN78////////ARIMCghTUEFSU0VfRhAA", 

+            "EgwKCFNQQVJTRV9HEAIymQEKC1Rlc3RTZXJ2aWNlEkQKA0ZvbxIdLnByb3Rv", 

+            "YnVmX3VuaXR0ZXN0LkZvb1JlcXVlc3QaHi5wcm90b2J1Zl91bml0dGVzdC5G", 

+            "b29SZXNwb25zZRJECgNCYXISHS5wcm90b2J1Zl91bml0dGVzdC5CYXJSZXF1", 

+            "ZXN0Gh4ucHJvdG9idWZfdW5pdHRlc3QuQmFyUmVzcG9uc2U6RgoYb3B0aW9u", 

+            "YWxfaW50MzJfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFs", 

+            "bEV4dGVuc2lvbnMYASABKAU6RgoYb3B0aW9uYWxfaW50NjRfZXh0ZW5zaW9u", 

+            "EiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYAiABKAM6", 

+            "RwoZb3B0aW9uYWxfdWludDMyX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RBbGxFeHRlbnNpb25zGAMgASgNOkcKGW9wdGlvbmFsX3VpbnQ2", 

+            "NF9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5z", 

+            "aW9ucxgEIAEoBDpHChlvcHRpb25hbF9zaW50MzJfZXh0ZW5zaW9uEiQucHJv", 

+            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYBSABKBE6RwoZb3B0", 

+            "aW9uYWxfc2ludDY0X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 

+            "c3RBbGxFeHRlbnNpb25zGAYgASgSOkgKGm9wdGlvbmFsX2ZpeGVkMzJfZXh0", 

+            "ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMY", 

+            "ByABKAc6SAoab3B0aW9uYWxfZml4ZWQ2NF9leHRlbnNpb24SJC5wcm90b2J1", 

+            "Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgIIAEoBjpJChtvcHRpb25h", 

+            "bF9zZml4ZWQzMl9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxgJIAEoDzpJChtvcHRpb25hbF9zZml4ZWQ2NF9leHRl", 

+            "bnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgK", 

+            "IAEoEDpGChhvcHRpb25hbF9mbG9hdF9leHRlbnNpb24SJC5wcm90b2J1Zl91", 

+            "bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgLIAEoAjpHChlvcHRpb25hbF9k", 

+            "b3VibGVfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4", 

+            "dGVuc2lvbnMYDCABKAE6RQoXb3B0aW9uYWxfYm9vbF9leHRlbnNpb24SJC5w", 

+            "cm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgNIAEoCDpHChlv", 

+            "cHRpb25hbF9zdHJpbmdfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3Qu", 

+            "VGVzdEFsbEV4dGVuc2lvbnMYDiABKAk6RgoYb3B0aW9uYWxfYnl0ZXNfZXh0", 

+            "ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMY", 

+            "DyABKAw6cQoXb3B0aW9uYWxncm91cF9leHRlbnNpb24SJC5wcm90b2J1Zl91", 

+            "bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgQIAEoCjIqLnByb3RvYnVmX3Vu", 

+            "aXR0ZXN0Lk9wdGlvbmFsR3JvdXBfZXh0ZW5zaW9uOn4KIW9wdGlvbmFsX25l", 

+            "c3RlZF9tZXNzYWdlX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 

+            "c3RBbGxFeHRlbnNpb25zGBIgASgLMi0ucHJvdG9idWZfdW5pdHRlc3QuVGVz", 

+            "dEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2U6cwoib3B0aW9uYWxfZm9yZWlnbl9t", 

+            "ZXNzYWdlX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF", 

+            "eHRlbnNpb25zGBMgASgLMiEucHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbk1l", 

+            "c3NhZ2U6eAohb3B0aW9uYWxfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uEiQu", 

+            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYFCABKAsyJy5w", 

+            "cm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0TWVzc2FnZTp4Ch5vcHRp", 

+            "b25hbF9uZXN0ZWRfZW51bV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVz", 

+            "dC5UZXN0QWxsRXh0ZW5zaW9ucxgVIAEoDjIqLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "LlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtOm0KH29wdGlvbmFsX2ZvcmVpZ25f", 

+            "ZW51bV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0", 

+            "ZW5zaW9ucxgWIAEoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVt", 

+            "OnIKHm9wdGlvbmFsX2ltcG9ydF9lbnVtX2V4dGVuc2lvbhIkLnByb3RvYnVm", 

+            "X3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGBcgASgOMiQucHJvdG9idWZf", 

+            "dW5pdHRlc3RfaW1wb3J0LkltcG9ydEVudW06UQofb3B0aW9uYWxfc3RyaW5n", 

+            "X3BpZWNlX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF", 

+            "eHRlbnNpb25zGBggASgJQgIIAjpJChdvcHRpb25hbF9jb3JkX2V4dGVuc2lv", 

+            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGBkgASgJ", 

+            "QgIIATpGChhyZXBlYXRlZF9pbnQzMl9leHRlbnNpb24SJC5wcm90b2J1Zl91", 

+            "bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgfIAMoBTpGChhyZXBlYXRlZF9p", 

+            "bnQ2NF9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0", 

+            "ZW5zaW9ucxggIAMoAzpHChlyZXBlYXRlZF91aW50MzJfZXh0ZW5zaW9uEiQu", 

+            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYISADKA06RwoZ", 

+            "cmVwZWF0ZWRfdWludDY0X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "LlRlc3RBbGxFeHRlbnNpb25zGCIgAygEOkcKGXJlcGVhdGVkX3NpbnQzMl9l", 

+            "eHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9u", 

+            "cxgjIAMoETpHChlyZXBlYXRlZF9zaW50NjRfZXh0ZW5zaW9uEiQucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYJCADKBI6SAoacmVwZWF0", 

+            "ZWRfZml4ZWQzMl9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxglIAMoBzpIChpyZXBlYXRlZF9maXhlZDY0X2V4dGVu", 

+            "c2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGCYg", 

+            "AygGOkkKG3JlcGVhdGVkX3NmaXhlZDMyX2V4dGVuc2lvbhIkLnByb3RvYnVm", 

+            "X3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGCcgAygPOkkKG3JlcGVhdGVk", 

+            "X3NmaXhlZDY0X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RB", 

+            "bGxFeHRlbnNpb25zGCggAygQOkYKGHJlcGVhdGVkX2Zsb2F0X2V4dGVuc2lv", 

+            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGCkgAygC", 

+            "OkcKGXJlcGVhdGVkX2RvdWJsZV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0", 

+            "dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgqIAMoATpFChdyZXBlYXRlZF9ib29s", 

+            "X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNp", 

+            "b25zGCsgAygIOkcKGXJlcGVhdGVkX3N0cmluZ19leHRlbnNpb24SJC5wcm90", 

+            "b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgsIAMoCTpGChhyZXBl", 

+            "YXRlZF9ieXRlc19leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxgtIAMoDDpxChdyZXBlYXRlZGdyb3VwX2V4dGVuc2lv", 

+            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGC4gAygK", 

+            "MioucHJvdG9idWZfdW5pdHRlc3QuUmVwZWF0ZWRHcm91cF9leHRlbnNpb246", 

+            "fgohcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uEiQucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYMCADKAsyLS5wcm90b2J1", 

+            "Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZTpzCiJyZXBl", 

+            "YXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYMSADKAsyIS5wcm90b2J1Zl91bml0", 

+            "dGVzdC5Gb3JlaWduTWVzc2FnZTp4CiFyZXBlYXRlZF9pbXBvcnRfbWVzc2Fn", 

+            "ZV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5z", 

+            "aW9ucxgyIAMoCzInLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRN", 

+            "ZXNzYWdlOngKHnJlcGVhdGVkX25lc3RlZF9lbnVtX2V4dGVuc2lvbhIkLnBy", 

+            "b3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGDMgAygOMioucHJv", 

+            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW06bQofcmVw", 

+            "ZWF0ZWRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RBbGxFeHRlbnNpb25zGDQgAygOMh4ucHJvdG9idWZfdW5pdHRl", 

+            "c3QuRm9yZWlnbkVudW06cgoecmVwZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5z", 

+            "aW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYNSAD", 

+            "KA4yJC5wcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0RW51bTpRCh9y", 

+            "ZXBlYXRlZF9zdHJpbmdfcGllY2VfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYNiADKAlCAggCOkkKF3JlcGVhdGVk", 

+            "X2NvcmRfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4", 

+            "dGVuc2lvbnMYNyADKAlCAggBOkkKF2RlZmF1bHRfaW50MzJfZXh0ZW5zaW9u", 

+            "EiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYPSABKAU6", 

+            "AjQxOkkKF2RlZmF1bHRfaW50NjRfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYPiABKAM6AjQyOkoKGGRlZmF1bHRf", 

+            "dWludDMyX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF", 

+            "eHRlbnNpb25zGD8gASgNOgI0MzpKChhkZWZhdWx0X3VpbnQ2NF9leHRlbnNp", 

+            "b24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxhAIAEo", 

+            "BDoCNDQ6SwoYZGVmYXVsdF9zaW50MzJfZXh0ZW5zaW9uEiQucHJvdG9idWZf", 

+            "dW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYQSABKBE6Ay00NTpKChhkZWZh", 

+            "dWx0X3NpbnQ2NF9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxhCIAEoEjoCNDY6SwoZZGVmYXVsdF9maXhlZDMyX2V4", 

+            "dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25z", 

+            "GEMgASgHOgI0NzpLChlkZWZhdWx0X2ZpeGVkNjRfZXh0ZW5zaW9uEiQucHJv", 

+            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYRCABKAY6AjQ4OkwK", 

+            "GmRlZmF1bHRfc2ZpeGVkMzJfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRl", 

+            "c3QuVGVzdEFsbEV4dGVuc2lvbnMYRSABKA86AjQ5Ok0KGmRlZmF1bHRfc2Zp", 

+            "eGVkNjRfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4", 

+            "dGVuc2lvbnMYRiABKBA6Ay01MDpLChdkZWZhdWx0X2Zsb2F0X2V4dGVuc2lv", 

+            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGEcgASgC", 

+            "OgQ1MS41Ok0KGGRlZmF1bHRfZG91YmxlX2V4dGVuc2lvbhIkLnByb3RvYnVm", 

+            "X3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGEggASgBOgU1MjAwMDpKChZk", 

+            "ZWZhdWx0X2Jvb2xfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVz", 

+            "dEFsbEV4dGVuc2lvbnMYSSABKAg6BHRydWU6TQoYZGVmYXVsdF9zdHJpbmdf", 

+            "ZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lv", 

+            "bnMYSiABKAk6BWhlbGxvOkwKF2RlZmF1bHRfYnl0ZXNfZXh0ZW5zaW9uEiQu", 

+            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYSyABKAw6BXdv", 

+            "cmxkOnwKHWRlZmF1bHRfbmVzdGVkX2VudW1fZXh0ZW5zaW9uEiQucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYUSABKA4yKi5wcm90b2J1", 

+            "Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkRW51bToDQkFSOnkKHmRl", 

+            "ZmF1bHRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RBbGxFeHRlbnNpb25zGFIgASgOMh4ucHJvdG9idWZfdW5pdHRl", 

+            "c3QuRm9yZWlnbkVudW06C0ZPUkVJR05fQkFSOn0KHWRlZmF1bHRfaW1wb3J0", 

+            "X2VudW1fZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4", 

+            "dGVuc2lvbnMYUyABKA4yJC5wcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1w", 

+            "b3J0RW51bToKSU1QT1JUX0JBUjpVCh5kZWZhdWx0X3N0cmluZ19waWVjZV9l", 

+            "eHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9u", 

+            "cxhUIAEoCToDYWJjQgIIAjpNChZkZWZhdWx0X2NvcmRfZXh0ZW5zaW9uEiQu", 

+            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYVSABKAk6AzEy", 

+            "M0ICCAE6QgoTbXlfZXh0ZW5zaW9uX3N0cmluZxIlLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RGaWVsZE9yZGVyaW5ncxgyIAEoCTo/ChBteV9leHRlbnNpb25f", 

+            "aW50EiUucHJvdG9idWZfdW5pdHRlc3QuVGVzdEZpZWxkT3JkZXJpbmdzGAUg", 

+            "ASgFOksKFnBhY2tlZF9pbnQzMl9leHRlbnNpb24SJy5wcm90b2J1Zl91bml0", 

+            "dGVzdC5UZXN0UGFja2VkRXh0ZW5zaW9ucxhaIAMoBUICEAE6SwoWcGFja2Vk", 

+            "X2ludDY0X2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNr", 

+            "ZWRFeHRlbnNpb25zGFsgAygDQgIQATpMChdwYWNrZWRfdWludDMyX2V4dGVu", 

+            "c2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNrZWRFeHRlbnNpb25z", 

+            "GFwgAygNQgIQATpMChdwYWNrZWRfdWludDY0X2V4dGVuc2lvbhInLnByb3Rv", 

+            "YnVmX3VuaXR0ZXN0LlRlc3RQYWNrZWRFeHRlbnNpb25zGF0gAygEQgIQATpM", 

+            "ChdwYWNrZWRfc2ludDMyX2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "LlRlc3RQYWNrZWRFeHRlbnNpb25zGF4gAygRQgIQATpMChdwYWNrZWRfc2lu", 

+            "dDY0X2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNrZWRF", 

+            "eHRlbnNpb25zGF8gAygSQgIQATpNChhwYWNrZWRfZml4ZWQzMl9leHRlbnNp", 

+            "b24SJy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UGFja2VkRXh0ZW5zaW9ucxhg", 

+            "IAMoB0ICEAE6TQoYcGFja2VkX2ZpeGVkNjRfZXh0ZW5zaW9uEicucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMYYSADKAZCAhABOk4K", 

+            "GXBhY2tlZF9zZml4ZWQzMl9leHRlbnNpb24SJy5wcm90b2J1Zl91bml0dGVz", 

+            "dC5UZXN0UGFja2VkRXh0ZW5zaW9ucxhiIAMoD0ICEAE6TgoZcGFja2VkX3Nm", 

+            "aXhlZDY0X2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNr", 

+            "ZWRFeHRlbnNpb25zGGMgAygQQgIQATpLChZwYWNrZWRfZmxvYXRfZXh0ZW5z", 

+            "aW9uEicucHJvdG9idWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMY", 

+            "ZCADKAJCAhABOkwKF3BhY2tlZF9kb3VibGVfZXh0ZW5zaW9uEicucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMYZSADKAFCAhABOkoK", 

+            "FXBhY2tlZF9ib29sX2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 

+            "c3RQYWNrZWRFeHRlbnNpb25zGGYgAygIQgIQATpqChVwYWNrZWRfZW51bV9l", 

+            "eHRlbnNpb24SJy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UGFja2VkRXh0ZW5z", 

+            "aW9ucxhnIAMoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVtQgIQ", 

+            "AUJTQg1Vbml0dGVzdFByb3RvSAGAAQGIAQGQAQHCPjYKIUdvb2dsZS5Qcm90", 

+          "b2NvbEJ1ZmZlcnMuVGVzdFByb3RvcxIRVW5pdFRlc3RQcm90b0ZpbGU="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_TestAllTypes__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder>(internal__static_protobuf_unittest_TestAllTypes__Descriptor,

+                new string[] { "OptionalInt32", "OptionalInt64", "OptionalUint32", "OptionalUint64", "OptionalSint32", "OptionalSint64", "OptionalFixed32", "OptionalFixed64", "OptionalSfixed32", "OptionalSfixed64", "OptionalFloat", "OptionalDouble", "OptionalBool", "OptionalString", "OptionalBytes", "OptionalGroup", "OptionalNestedMessage", "OptionalForeignMessage", "OptionalImportMessage", "OptionalNestedEnum", "OptionalForeignEnum", "OptionalImportEnum", "OptionalStringPiece", "OptionalCord", "RepeatedInt32", "RepeatedInt64", "RepeatedUint32", "RepeatedUint64", "RepeatedSint32", "RepeatedSint64", "RepeatedFixed32", "RepeatedFixed64", "RepeatedSfixed32", "RepeatedSfixed64", "RepeatedFloat", "RepeatedDouble", "RepeatedBool", "RepeatedString", "RepeatedBytes", "RepeatedGroup", "RepeatedNestedMessage", "RepeatedForeignMessage", "RepeatedImportMessage", "RepeatedNestedEnum", "RepeatedForeignEnum", "RepeatedImportEnum", "RepeatedStringPiece", "RepeatedCord", "DefaultInt32", "DefaultInt64", "DefaultUint32", "DefaultUint64", "DefaultSint32", "DefaultSint64", "DefaultFixed32", "DefaultFixed64", "DefaultSfixed32", "DefaultSfixed64", "DefaultFloat", "DefaultDouble", "DefaultBool", "DefaultString", "DefaultBytes", "DefaultNestedEnum", "DefaultForeignEnum", "DefaultImportEnum", "DefaultStringPiece", "DefaultCord", });

+        internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder>(internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor,

+                new string[] { "Bb", });

+        internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[1];

+        internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder>(internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[2];

+        internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder>(internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields, global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.Builder>(internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor,

+                new string[] { "DeprecatedInt32", });

+        internal__static_protobuf_unittest_ForeignMessage__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder>(internal__static_protobuf_unittest_ForeignMessage__Descriptor,

+                new string[] { "C", });

+        internal__static_protobuf_unittest_TestAllExtensions__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_protobuf_unittest_TestAllExtensions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllExtensions, global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.Builder>(internal__static_protobuf_unittest_TestAllExtensions__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor = Descriptor.MessageTypes[4];

+        internal__static_protobuf_unittest_OptionalGroup_extension__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.Builder>(internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor = Descriptor.MessageTypes[5];

+        internal__static_protobuf_unittest_RepeatedGroup_extension__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.Builder>(internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestNestedExtension__Descriptor = Descriptor.MessageTypes[6];

+        internal__static_protobuf_unittest_TestNestedExtension__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedExtension, global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Builder>(internal__static_protobuf_unittest_TestNestedExtension__Descriptor,

+                new string[] { });

+        global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Test = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Descriptor.Extensions[0]);

+        internal__static_protobuf_unittest_TestRequired__Descriptor = Descriptor.MessageTypes[7];

+        internal__static_protobuf_unittest_TestRequired__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequired, global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder>(internal__static_protobuf_unittest_TestRequired__Descriptor,

+                new string[] { "A", "Dummy2", "B", "Dummy4", "Dummy5", "Dummy6", "Dummy7", "Dummy8", "Dummy9", "Dummy10", "Dummy11", "Dummy12", "Dummy13", "Dummy14", "Dummy15", "Dummy16", "Dummy17", "Dummy18", "Dummy19", "Dummy20", "Dummy21", "Dummy22", "Dummy23", "Dummy24", "Dummy25", "Dummy26", "Dummy27", "Dummy28", "Dummy29", "Dummy30", "Dummy31", "Dummy32", "C", });

+        global::Google.ProtocolBuffers.TestProtos.TestRequired.Single = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestRequired>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestRequired.Descriptor.Extensions[0]);

+        global::Google.ProtocolBuffers.TestProtos.TestRequired.Multi = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestRequired>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestRequired.Descriptor.Extensions[1]);

+        internal__static_protobuf_unittest_TestRequiredForeign__Descriptor = Descriptor.MessageTypes[8];

+        internal__static_protobuf_unittest_TestRequiredForeign__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign, global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.Builder>(internal__static_protobuf_unittest_TestRequiredForeign__Descriptor,

+                new string[] { "OptionalMessage", "RepeatedMessage", "Dummy", });

+        internal__static_protobuf_unittest_TestForeignNested__Descriptor = Descriptor.MessageTypes[9];

+        internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestForeignNested, global::Google.ProtocolBuffers.TestProtos.TestForeignNested.Builder>(internal__static_protobuf_unittest_TestForeignNested__Descriptor,

+                new string[] { "ForeignNested", });

+        internal__static_protobuf_unittest_TestEmptyMessage__Descriptor = Descriptor.MessageTypes[10];

+        internal__static_protobuf_unittest_TestEmptyMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.Builder>(internal__static_protobuf_unittest_TestEmptyMessage__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor = Descriptor.MessageTypes[11];

+        internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.Builder>(internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor = Descriptor.MessageTypes[12];

+        internal__static_protobuf_unittest_TestMultipleExtensionRanges__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges, global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.Builder>(internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor = Descriptor.MessageTypes[13];

+        internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber, global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.Builder>(internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor,

+                new string[] { "A", "Bb", });

+        internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor = Descriptor.MessageTypes[14];

+        internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage, global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder>(internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor,

+                new string[] { "A", "I", });

+        internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor = Descriptor.MessageTypes[15];

+        internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder>(internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor,

+                new string[] { "Bb", });

+        internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor = Descriptor.MessageTypes[16];

+        internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder>(internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor,

+                new string[] { "A", "OptionalInt32", });

+        internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor = Descriptor.MessageTypes[17];

+        internal__static_protobuf_unittest_TestDupFieldNumber__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Builder>(internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor,

+                new string[] { "A", "Foo", "Bar", });

+        internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor = internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_TestDupFieldNumber_Foo__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder>(internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor = internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor.NestedTypes[1];

+        internal__static_protobuf_unittest_TestDupFieldNumber_Bar__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder>(internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor = Descriptor.MessageTypes[18];

+        internal__static_protobuf_unittest_TestNestedMessageHasBits__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Builder>(internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor,

+                new string[] { "OptionalNestedMessage", });

+        internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder>(internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor,

+                new string[] { "NestedmessageRepeatedInt32", "NestedmessageRepeatedForeignmessage", });

+        internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor = Descriptor.MessageTypes[19];

+        internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames, global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.Builder>(internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor,

+                new string[] { "PrimitiveField", "StringField", "EnumField", "MessageField", "StringPieceField", "CordField", "RepeatedPrimitiveField", "RepeatedStringField", "RepeatedEnumField", "RepeatedMessageField", "RepeatedStringPieceField", "RepeatedCordField", });

+        internal__static_protobuf_unittest_TestFieldOrderings__Descriptor = Descriptor.MessageTypes[20];

+        internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings, global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Builder>(internal__static_protobuf_unittest_TestFieldOrderings__Descriptor,

+                new string[] { "MyString", "MyInt", "MyFloat", });

+        internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor = Descriptor.MessageTypes[21];

+        internal__static_protobuf_unittest_TestExtremeDefaultValues__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues, global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Builder>(internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor,

+                new string[] { "EscapedBytes", "LargeUint32", "LargeUint64", "SmallInt32", "SmallInt64", "Utf8String", "ZeroFloat", "OneFloat", "SmallFloat", "NegativeOneFloat", "NegativeFloat", "LargeFloat", "SmallNegativeFloat", "InfDouble", "NegInfDouble", "NanDouble", "InfFloat", "NegInfFloat", "NanFloat", "CppTrigraph", });

+        internal__static_protobuf_unittest_SparseEnumMessage__Descriptor = Descriptor.MessageTypes[22];

+        internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage, global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.Builder>(internal__static_protobuf_unittest_SparseEnumMessage__Descriptor,

+                new string[] { "SparseEnum", });

+        internal__static_protobuf_unittest_OneString__Descriptor = Descriptor.MessageTypes[23];

+        internal__static_protobuf_unittest_OneString__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneString, global::Google.ProtocolBuffers.TestProtos.OneString.Builder>(internal__static_protobuf_unittest_OneString__Descriptor,

+                new string[] { "Data", });

+        internal__static_protobuf_unittest_OneBytes__Descriptor = Descriptor.MessageTypes[24];

+        internal__static_protobuf_unittest_OneBytes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneBytes, global::Google.ProtocolBuffers.TestProtos.OneBytes.Builder>(internal__static_protobuf_unittest_OneBytes__Descriptor,

+                new string[] { "Data", });

+        internal__static_protobuf_unittest_TestPackedTypes__Descriptor = Descriptor.MessageTypes[25];

+        internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedTypes, global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.Builder>(internal__static_protobuf_unittest_TestPackedTypes__Descriptor,

+                new string[] { "PackedInt32", "PackedInt64", "PackedUint32", "PackedUint64", "PackedSint32", "PackedSint64", "PackedFixed32", "PackedFixed64", "PackedSfixed32", "PackedSfixed64", "PackedFloat", "PackedDouble", "PackedBool", "PackedEnum", });

+        internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor = Descriptor.MessageTypes[26];

+        internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes, global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.Builder>(internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor,

+                new string[] { "UnpackedInt32", "UnpackedInt64", "UnpackedUint32", "UnpackedUint64", "UnpackedSint32", "UnpackedSint64", "UnpackedFixed32", "UnpackedFixed64", "UnpackedSfixed32", "UnpackedSfixed64", "UnpackedFloat", "UnpackedDouble", "UnpackedBool", "UnpackedEnum", });

+        internal__static_protobuf_unittest_TestPackedExtensions__Descriptor = Descriptor.MessageTypes[27];

+        internal__static_protobuf_unittest_TestPackedExtensions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions, global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.Builder>(internal__static_protobuf_unittest_TestPackedExtensions__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor = Descriptor.MessageTypes[28];

+        internal__static_protobuf_unittest_TestDynamicExtensions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Builder>(internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor,

+                new string[] { "ScalarExtension", "EnumExtension", "DynamicEnumExtension", "MessageExtension", "DynamicMessageExtension", "RepeatedExtension", "PackedExtension", });

+        internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor = internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder>(internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor,

+                new string[] { "DynamicField", });

+        internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor = Descriptor.MessageTypes[29];

+        internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes, global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.Builder>(internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor,

+                new string[] { "RepeatedFixed32", "RepeatedInt32", "RepeatedFixed64", "RepeatedInt64", "RepeatedFloat", "RepeatedUint64", });

+        internal__static_protobuf_unittest_FooRequest__Descriptor = Descriptor.MessageTypes[30];

+        internal__static_protobuf_unittest_FooRequest__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooRequest, global::Google.ProtocolBuffers.TestProtos.FooRequest.Builder>(internal__static_protobuf_unittest_FooRequest__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_FooResponse__Descriptor = Descriptor.MessageTypes[31];

+        internal__static_protobuf_unittest_FooResponse__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooResponse, global::Google.ProtocolBuffers.TestProtos.FooResponse.Builder>(internal__static_protobuf_unittest_FooResponse__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_BarRequest__Descriptor = Descriptor.MessageTypes[32];

+        internal__static_protobuf_unittest_BarRequest__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarRequest, global::Google.ProtocolBuffers.TestProtos.BarRequest.Builder>(internal__static_protobuf_unittest_BarRequest__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_BarResponse__Descriptor = Descriptor.MessageTypes[33];

+        internal__static_protobuf_unittest_BarResponse__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarResponse, global::Google.ProtocolBuffers.TestProtos.BarResponse.Builder>(internal__static_protobuf_unittest_BarResponse__Descriptor,

+                new string[] { });

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalInt32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[0]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalInt64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[1]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalUint32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[2]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalUint64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[3]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSint32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[4]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSint64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[5]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFixed32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[6]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFixed64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[7]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSfixed32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[8]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSfixed64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[9]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFloatExtension = pb::GeneratedSingleExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[10]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalDoubleExtension = pb::GeneratedSingleExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[11]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalBoolExtension = pb::GeneratedSingleExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[12]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalStringExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[13]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalBytesExtension = pb::GeneratedSingleExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[14]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalGroupExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[15]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalNestedMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[16]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalForeignMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[17]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalImportMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[18]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalNestedEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[19]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalForeignEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[20]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalImportEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[21]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalStringPieceExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[22]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalCordExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[23]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedInt32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[24]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedInt64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[25]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedUint32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[26]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedUint64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[27]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSint32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[28]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSint64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[29]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFixed32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[30]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFixed64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[31]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSfixed32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[32]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSfixed64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[33]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFloatExtension = pb::GeneratedRepeatExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[34]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedDoubleExtension = pb::GeneratedRepeatExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[35]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedBoolExtension = pb::GeneratedRepeatExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[36]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedStringExtension = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[37]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedBytesExtension = pb::GeneratedRepeatExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[38]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedGroupExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[39]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedNestedMessageExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[40]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedForeignMessageExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[41]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedImportMessageExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ImportMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[42]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedNestedEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[43]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedForeignEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[44]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedImportEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[45]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedStringPieceExtension = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[46]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedCordExtension = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[47]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultInt32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[48]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultInt64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[49]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultUint32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[50]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultUint64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[51]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSint32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[52]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSint64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[53]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFixed32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[54]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFixed64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[55]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSfixed32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[56]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSfixed64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[57]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFloatExtension = pb::GeneratedSingleExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[58]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultDoubleExtension = pb::GeneratedSingleExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[59]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultBoolExtension = pb::GeneratedSingleExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[60]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultStringExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[61]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultBytesExtension = pb::GeneratedSingleExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[62]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultNestedEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[63]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultForeignEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[64]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultImportEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[65]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultStringPieceExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[66]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultCordExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[67]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.MyExtensionString = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[68]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.MyExtensionInt = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[69]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedInt32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[70]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedInt64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[71]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedUint32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[72]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedUint64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[73]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSint32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[74]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSint64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[75]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFixed32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[76]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFixed64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[77]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSfixed32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[78]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSfixed64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[79]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFloatExtension = pb::GeneratedRepeatExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[80]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedDoubleExtension = pb::GeneratedRepeatExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[81]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedBoolExtension = pb::GeneratedRepeatExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[82]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[83]);

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum ForeignEnum {

+    FOREIGN_FOO = 4,

+    FOREIGN_BAR = 5,

+    FOREIGN_BAZ = 6,

+  }

+  

+  public enum TestEnumWithDupValue {

+    FOO1 = 1,

+    BAR1 = 2,

+    BAZ = 3,

+    FOO2 = 1,

+    BAR2 = 2,

+  }

+  

+  public enum TestSparseEnum {

+    SPARSE_A = 123,

+    SPARSE_B = 62374,

+    SPARSE_C = 12589234,

+    SPARSE_D = -15,

+    SPARSE_E = -53452,

+    SPARSE_F = 0,

+    SPARSE_G = 2,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestAllTypes : pb::GeneratedMessage<TestAllTypes, TestAllTypes.Builder> {

+    private TestAllTypes() { }

+    private static readonly TestAllTypes defaultInstance = new TestAllTypes().MakeReadOnly();

+    private static readonly string[] _testAllTypesFieldNames = new string[] { "default_bool", "default_bytes", "default_cord", "default_double", "default_fixed32", "default_fixed64", "default_float", "default_foreign_enum", "default_import_enum", "default_int32", "default_int64", "default_nested_enum", "default_sfixed32", "default_sfixed64", "default_sint32", "default_sint64", "default_string", "default_string_piece", "default_uint32", "default_uint64", "optional_bool", "optional_bytes", "optional_cord", "optional_double", "optional_fixed32", "optional_fixed64", "optional_float", "optional_foreign_enum", "optional_foreign_message", "optional_import_enum", "optional_import_message", "optional_int32", "optional_int64", "optional_nested_enum", "optional_nested_message", "optional_sfixed32", "optional_sfixed64", "optional_sint32", "optional_sint64", "optional_string", "optional_string_piece", "optional_uint32", "optional_uint64", "optionalgroup", "repeated_bool", "repeated_bytes", "repeated_cord", "repeated_double", "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_foreign_enum", "repeated_foreign_message", "repeated_import_enum", "repeated_import_message", "repeated_int32", "repeated_int64", "repeated_nested_enum", "repeated_nested_message", "repeated_sfixed32", "repeated_sfixed64", "repeated_sint32", "repeated_sint64", "repeated_string", "repeated_string_piece", "repeated_uint32", "repeated_uint64", "repeatedgroup" };

+    private static readonly uint[] _testAllTypesFieldTags = new uint[] { 584, 602, 682, 577, 541, 545, 573, 656, 664, 488, 496, 648, 557, 561, 520, 528, 594, 674, 504, 512, 104, 122, 202, 97, 61, 65, 93, 176, 154, 184, 162, 8, 16, 168, 146, 77, 81, 40, 48, 114, 194, 24, 32, 131, 344, 362, 442, 337, 301, 305, 333, 416, 394, 424, 402, 248, 256, 408, 386, 317, 321, 280, 288, 354, 434, 264, 272, 371 };

+    public static TestAllTypes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestAllTypes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestAllTypes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestAllTypes, TestAllTypes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum NestedEnum {

+        FOO = 1,

+        BAR = 2,

+        BAZ = 3,

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {

+        private NestedMessage() { }

+        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();

+        private static readonly string[] _nestedMessageFieldNames = new string[] { "bb" };

+        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 8 };

+        public static NestedMessage DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override NestedMessage DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override NestedMessage ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable; }

+        }

+        

+        public const int BbFieldNumber = 1;

+        private bool hasBb;

+        private int bb_;

+        public bool HasBb {

+          get { return hasBb; }

+        }

+        public int Bb {

+          get { return bb_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _nestedMessageFieldNames;

+          if (hasBb) {

+            output.WriteInt32(1, field_names[0], Bb);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasBb) {

+            size += pb::CodedOutputStream.ComputeInt32Size(1, Bb);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static NestedMessage ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private NestedMessage MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(NestedMessage prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(NestedMessage cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private NestedMessage result;

+          

+          private NestedMessage PrepareBuilder() {

+            if (resultIsReadOnly) {

+              NestedMessage original = result;

+              result = new NestedMessage();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override NestedMessage MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Descriptor; }

+          }

+          

+          public override NestedMessage DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }

+          }

+          

+          public override NestedMessage BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is NestedMessage) {

+              return MergeFrom((NestedMessage) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(NestedMessage other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasBb) {

+              Bb = other.Bb;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _nestedMessageFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 8: {

+                  result.hasBb = input.ReadInt32(ref result.bb_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasBb {

+            get { return result.hasBb; }

+          }

+          public int Bb {

+            get { return result.Bb; }

+            set { SetBb(value); }

+          }

+          public Builder SetBb(int value) {

+            PrepareBuilder();

+            result.hasBb = true;

+            result.bb_ = value;

+            return this;

+          }

+          public Builder ClearBb() {

+            PrepareBuilder();

+            result.hasBb = false;

+            result.bb_ = 0;

+            return this;

+          }

+        }

+        static NestedMessage() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class OptionalGroup : pb::GeneratedMessage<OptionalGroup, OptionalGroup.Builder> {

+        private OptionalGroup() { }

+        private static readonly OptionalGroup defaultInstance = new OptionalGroup().MakeReadOnly();

+        private static readonly string[] _optionalGroupFieldNames = new string[] { "a" };

+        private static readonly uint[] _optionalGroupFieldTags = new uint[] { 136 };

+        public static OptionalGroup DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override OptionalGroup DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override OptionalGroup ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<OptionalGroup, OptionalGroup.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__FieldAccessorTable; }

+        }

+        

+        public const int AFieldNumber = 17;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _optionalGroupFieldNames;

+          if (hasA) {

+            output.WriteInt32(17, field_names[0], A);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(17, A);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static OptionalGroup ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private OptionalGroup MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(OptionalGroup prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<OptionalGroup, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(OptionalGroup cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private OptionalGroup result;

+          

+          private OptionalGroup PrepareBuilder() {

+            if (resultIsReadOnly) {

+              OptionalGroup original = result;

+              result = new OptionalGroup();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override OptionalGroup MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Descriptor; }

+          }

+          

+          public override OptionalGroup DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance; }

+          }

+          

+          public override OptionalGroup BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is OptionalGroup) {

+              return MergeFrom((OptionalGroup) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(OptionalGroup other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_optionalGroupFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _optionalGroupFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 136: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static OptionalGroup() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class RepeatedGroup : pb::GeneratedMessage<RepeatedGroup, RepeatedGroup.Builder> {

+        private RepeatedGroup() { }

+        private static readonly RepeatedGroup defaultInstance = new RepeatedGroup().MakeReadOnly();

+        private static readonly string[] _repeatedGroupFieldNames = new string[] { "a" };

+        private static readonly uint[] _repeatedGroupFieldTags = new uint[] { 376 };

+        public static RepeatedGroup DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override RepeatedGroup DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override RepeatedGroup ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<RepeatedGroup, RepeatedGroup.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__FieldAccessorTable; }

+        }

+        

+        public const int AFieldNumber = 47;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _repeatedGroupFieldNames;

+          if (hasA) {

+            output.WriteInt32(47, field_names[0], A);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(47, A);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static RepeatedGroup ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private RepeatedGroup MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(RepeatedGroup prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<RepeatedGroup, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(RepeatedGroup cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private RepeatedGroup result;

+          

+          private RepeatedGroup PrepareBuilder() {

+            if (resultIsReadOnly) {

+              RepeatedGroup original = result;

+              result = new RepeatedGroup();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override RepeatedGroup MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Descriptor; }

+          }

+          

+          public override RepeatedGroup DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.DefaultInstance; }

+          }

+          

+          public override RepeatedGroup BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is RepeatedGroup) {

+              return MergeFrom((RepeatedGroup) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(RepeatedGroup other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _repeatedGroupFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 376: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static RepeatedGroup() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int OptionalInt32FieldNumber = 1;

+    private bool hasOptionalInt32;

+    private int optionalInt32_;

+    public bool HasOptionalInt32 {

+      get { return hasOptionalInt32; }

+    }

+    public int OptionalInt32 {

+      get { return optionalInt32_; }

+    }

+    

+    public const int OptionalInt64FieldNumber = 2;

+    private bool hasOptionalInt64;

+    private long optionalInt64_;

+    public bool HasOptionalInt64 {

+      get { return hasOptionalInt64; }

+    }

+    public long OptionalInt64 {

+      get { return optionalInt64_; }

+    }

+    

+    public const int OptionalUint32FieldNumber = 3;

+    private bool hasOptionalUint32;

+    private uint optionalUint32_;

+    public bool HasOptionalUint32 {

+      get { return hasOptionalUint32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint OptionalUint32 {

+      get { return optionalUint32_; }

+    }

+    

+    public const int OptionalUint64FieldNumber = 4;

+    private bool hasOptionalUint64;

+    private ulong optionalUint64_;

+    public bool HasOptionalUint64 {

+      get { return hasOptionalUint64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong OptionalUint64 {

+      get { return optionalUint64_; }

+    }

+    

+    public const int OptionalSint32FieldNumber = 5;

+    private bool hasOptionalSint32;

+    private int optionalSint32_;

+    public bool HasOptionalSint32 {

+      get { return hasOptionalSint32; }

+    }

+    public int OptionalSint32 {

+      get { return optionalSint32_; }

+    }

+    

+    public const int OptionalSint64FieldNumber = 6;

+    private bool hasOptionalSint64;

+    private long optionalSint64_;

+    public bool HasOptionalSint64 {

+      get { return hasOptionalSint64; }

+    }

+    public long OptionalSint64 {

+      get { return optionalSint64_; }

+    }

+    

+    public const int OptionalFixed32FieldNumber = 7;

+    private bool hasOptionalFixed32;

+    private uint optionalFixed32_;

+    public bool HasOptionalFixed32 {

+      get { return hasOptionalFixed32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint OptionalFixed32 {

+      get { return optionalFixed32_; }

+    }

+    

+    public const int OptionalFixed64FieldNumber = 8;

+    private bool hasOptionalFixed64;

+    private ulong optionalFixed64_;

+    public bool HasOptionalFixed64 {

+      get { return hasOptionalFixed64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong OptionalFixed64 {

+      get { return optionalFixed64_; }

+    }

+    

+    public const int OptionalSfixed32FieldNumber = 9;

+    private bool hasOptionalSfixed32;

+    private int optionalSfixed32_;

+    public bool HasOptionalSfixed32 {

+      get { return hasOptionalSfixed32; }

+    }

+    public int OptionalSfixed32 {

+      get { return optionalSfixed32_; }

+    }

+    

+    public const int OptionalSfixed64FieldNumber = 10;

+    private bool hasOptionalSfixed64;

+    private long optionalSfixed64_;

+    public bool HasOptionalSfixed64 {

+      get { return hasOptionalSfixed64; }

+    }

+    public long OptionalSfixed64 {

+      get { return optionalSfixed64_; }

+    }

+    

+    public const int OptionalFloatFieldNumber = 11;

+    private bool hasOptionalFloat;

+    private float optionalFloat_;

+    public bool HasOptionalFloat {

+      get { return hasOptionalFloat; }

+    }

+    public float OptionalFloat {

+      get { return optionalFloat_; }

+    }

+    

+    public const int OptionalDoubleFieldNumber = 12;

+    private bool hasOptionalDouble;

+    private double optionalDouble_;

+    public bool HasOptionalDouble {

+      get { return hasOptionalDouble; }

+    }

+    public double OptionalDouble {

+      get { return optionalDouble_; }

+    }

+    

+    public const int OptionalBoolFieldNumber = 13;

+    private bool hasOptionalBool;

+    private bool optionalBool_;

+    public bool HasOptionalBool {

+      get { return hasOptionalBool; }

+    }

+    public bool OptionalBool {

+      get { return optionalBool_; }

+    }

+    

+    public const int OptionalStringFieldNumber = 14;

+    private bool hasOptionalString;

+    private string optionalString_ = "";

+    public bool HasOptionalString {

+      get { return hasOptionalString; }

+    }

+    public string OptionalString {

+      get { return optionalString_; }

+    }

+    

+    public const int OptionalBytesFieldNumber = 15;

+    private bool hasOptionalBytes;

+    private pb::ByteString optionalBytes_ = pb::ByteString.Empty;

+    public bool HasOptionalBytes {

+      get { return hasOptionalBytes; }

+    }

+    public pb::ByteString OptionalBytes {

+      get { return optionalBytes_; }

+    }

+    

+    public const int OptionalGroupFieldNumber = 16;

+    private bool hasOptionalGroup;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup optionalGroup_;

+    public bool HasOptionalGroup {

+      get { return hasOptionalGroup; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup OptionalGroup {

+      get { return optionalGroup_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance; }

+    }

+    

+    public const int OptionalNestedMessageFieldNumber = 18;

+    private bool hasOptionalNestedMessage;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage optionalNestedMessage_;

+    public bool HasOptionalNestedMessage {

+      get { return hasOptionalNestedMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage OptionalNestedMessage {

+      get { return optionalNestedMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }

+    }

+    

+    public const int OptionalForeignMessageFieldNumber = 19;

+    private bool hasOptionalForeignMessage;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage optionalForeignMessage_;

+    public bool HasOptionalForeignMessage {

+      get { return hasOptionalForeignMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage OptionalForeignMessage {

+      get { return optionalForeignMessage_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }

+    }

+    

+    public const int OptionalImportMessageFieldNumber = 20;

+    private bool hasOptionalImportMessage;

+    private global::Google.ProtocolBuffers.TestProtos.ImportMessage optionalImportMessage_;

+    public bool HasOptionalImportMessage {

+      get { return hasOptionalImportMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportMessage OptionalImportMessage {

+      get { return optionalImportMessage_ ?? global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance; }

+    }

+    

+    public const int OptionalNestedEnumFieldNumber = 21;

+    private bool hasOptionalNestedEnum;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.FOO;

+    public bool HasOptionalNestedEnum {

+      get { return hasOptionalNestedEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum OptionalNestedEnum {

+      get { return optionalNestedEnum_; }

+    }

+    

+    public const int OptionalForeignEnumFieldNumber = 22;

+    private bool hasOptionalForeignEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+    public bool HasOptionalForeignEnum {

+      get { return hasOptionalForeignEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum OptionalForeignEnum {

+      get { return optionalForeignEnum_; }

+    }

+    

+    public const int OptionalImportEnumFieldNumber = 23;

+    private bool hasOptionalImportEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ImportEnum optionalImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_FOO;

+    public bool HasOptionalImportEnum {

+      get { return hasOptionalImportEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportEnum OptionalImportEnum {

+      get { return optionalImportEnum_; }

+    }

+    

+    public const int OptionalStringPieceFieldNumber = 24;

+    private bool hasOptionalStringPiece;

+    private string optionalStringPiece_ = "";

+    public bool HasOptionalStringPiece {

+      get { return hasOptionalStringPiece; }

+    }

+    public string OptionalStringPiece {

+      get { return optionalStringPiece_; }

+    }

+    

+    public const int OptionalCordFieldNumber = 25;

+    private bool hasOptionalCord;

+    private string optionalCord_ = "";

+    public bool HasOptionalCord {

+      get { return hasOptionalCord; }

+    }

+    public string OptionalCord {

+      get { return optionalCord_; }

+    }

+    

+    public const int RepeatedInt32FieldNumber = 31;

+    private pbc::PopsicleList<int> repeatedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedInt32List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt32_); }

+    }

+    public int RepeatedInt32Count {

+      get { return repeatedInt32_.Count; }

+    }

+    public int GetRepeatedInt32(int index) {

+      return repeatedInt32_[index];

+    }

+    

+    public const int RepeatedInt64FieldNumber = 32;

+    private pbc::PopsicleList<long> repeatedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedInt64List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt64_); }

+    }

+    public int RepeatedInt64Count {

+      get { return repeatedInt64_.Count; }

+    }

+    public long GetRepeatedInt64(int index) {

+      return repeatedInt64_[index];

+    }

+    

+    public const int RepeatedUint32FieldNumber = 33;

+    private pbc::PopsicleList<uint> repeatedUint32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> RepeatedUint32List {

+      get { return pbc::Lists.AsReadOnly(repeatedUint32_); }

+    }

+    public int RepeatedUint32Count {

+      get { return repeatedUint32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetRepeatedUint32(int index) {

+      return repeatedUint32_[index];

+    }

+    

+    public const int RepeatedUint64FieldNumber = 34;

+    private pbc::PopsicleList<ulong> repeatedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedUint64List {

+      get { return pbc::Lists.AsReadOnly(repeatedUint64_); }

+    }

+    public int RepeatedUint64Count {

+      get { return repeatedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedUint64(int index) {

+      return repeatedUint64_[index];

+    }

+    

+    public const int RepeatedSint32FieldNumber = 35;

+    private pbc::PopsicleList<int> repeatedSint32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedSint32List {

+      get { return pbc::Lists.AsReadOnly(repeatedSint32_); }

+    }

+    public int RepeatedSint32Count {

+      get { return repeatedSint32_.Count; }

+    }

+    public int GetRepeatedSint32(int index) {

+      return repeatedSint32_[index];

+    }

+    

+    public const int RepeatedSint64FieldNumber = 36;

+    private pbc::PopsicleList<long> repeatedSint64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedSint64List {

+      get { return pbc::Lists.AsReadOnly(repeatedSint64_); }

+    }

+    public int RepeatedSint64Count {

+      get { return repeatedSint64_.Count; }

+    }

+    public long GetRepeatedSint64(int index) {

+      return repeatedSint64_[index];

+    }

+    

+    public const int RepeatedFixed32FieldNumber = 37;

+    private pbc::PopsicleList<uint> repeatedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> RepeatedFixed32List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed32_); }

+    }

+    public int RepeatedFixed32Count {

+      get { return repeatedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetRepeatedFixed32(int index) {

+      return repeatedFixed32_[index];

+    }

+    

+    public const int RepeatedFixed64FieldNumber = 38;

+    private pbc::PopsicleList<ulong> repeatedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedFixed64List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed64_); }

+    }

+    public int RepeatedFixed64Count {

+      get { return repeatedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedFixed64(int index) {

+      return repeatedFixed64_[index];

+    }

+    

+    public const int RepeatedSfixed32FieldNumber = 39;

+    private pbc::PopsicleList<int> repeatedSfixed32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedSfixed32List {

+      get { return pbc::Lists.AsReadOnly(repeatedSfixed32_); }

+    }

+    public int RepeatedSfixed32Count {

+      get { return repeatedSfixed32_.Count; }

+    }

+    public int GetRepeatedSfixed32(int index) {

+      return repeatedSfixed32_[index];

+    }

+    

+    public const int RepeatedSfixed64FieldNumber = 40;

+    private pbc::PopsicleList<long> repeatedSfixed64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedSfixed64List {

+      get { return pbc::Lists.AsReadOnly(repeatedSfixed64_); }

+    }

+    public int RepeatedSfixed64Count {

+      get { return repeatedSfixed64_.Count; }

+    }

+    public long GetRepeatedSfixed64(int index) {

+      return repeatedSfixed64_[index];

+    }

+    

+    public const int RepeatedFloatFieldNumber = 41;

+    private pbc::PopsicleList<float> repeatedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> RepeatedFloatList {

+      get { return pbc::Lists.AsReadOnly(repeatedFloat_); }

+    }

+    public int RepeatedFloatCount {

+      get { return repeatedFloat_.Count; }

+    }

+    public float GetRepeatedFloat(int index) {

+      return repeatedFloat_[index];

+    }

+    

+    public const int RepeatedDoubleFieldNumber = 42;

+    private pbc::PopsicleList<double> repeatedDouble_ = new pbc::PopsicleList<double>();

+    public scg::IList<double> RepeatedDoubleList {

+      get { return pbc::Lists.AsReadOnly(repeatedDouble_); }

+    }

+    public int RepeatedDoubleCount {

+      get { return repeatedDouble_.Count; }

+    }

+    public double GetRepeatedDouble(int index) {

+      return repeatedDouble_[index];

+    }

+    

+    public const int RepeatedBoolFieldNumber = 43;

+    private pbc::PopsicleList<bool> repeatedBool_ = new pbc::PopsicleList<bool>();

+    public scg::IList<bool> RepeatedBoolList {

+      get { return pbc::Lists.AsReadOnly(repeatedBool_); }

+    }

+    public int RepeatedBoolCount {

+      get { return repeatedBool_.Count; }

+    }

+    public bool GetRepeatedBool(int index) {

+      return repeatedBool_[index];

+    }

+    

+    public const int RepeatedStringFieldNumber = 44;

+    private pbc::PopsicleList<string> repeatedString_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringList {

+      get { return pbc::Lists.AsReadOnly(repeatedString_); }

+    }

+    public int RepeatedStringCount {

+      get { return repeatedString_.Count; }

+    }

+    public string GetRepeatedString(int index) {

+      return repeatedString_[index];

+    }

+    

+    public const int RepeatedBytesFieldNumber = 45;

+    private pbc::PopsicleList<pb::ByteString> repeatedBytes_ = new pbc::PopsicleList<pb::ByteString>();

+    public scg::IList<pb::ByteString> RepeatedBytesList {

+      get { return pbc::Lists.AsReadOnly(repeatedBytes_); }

+    }

+    public int RepeatedBytesCount {

+      get { return repeatedBytes_.Count; }

+    }

+    public pb::ByteString GetRepeatedBytes(int index) {

+      return repeatedBytes_[index];

+    }

+    

+    public const int RepeatedGroupFieldNumber = 46;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> repeatedGroup_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> RepeatedGroupList {

+      get { return repeatedGroup_; }

+    }

+    public int RepeatedGroupCount {

+      get { return repeatedGroup_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup GetRepeatedGroup(int index) {

+      return repeatedGroup_[index];

+    }

+    

+    public const int RepeatedNestedMessageFieldNumber = 48;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> repeatedNestedMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> RepeatedNestedMessageList {

+      get { return repeatedNestedMessage_; }

+    }

+    public int RepeatedNestedMessageCount {

+      get { return repeatedNestedMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage GetRepeatedNestedMessage(int index) {

+      return repeatedNestedMessage_[index];

+    }

+    

+    public const int RepeatedForeignMessageFieldNumber = 49;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> repeatedForeignMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedForeignMessageList {

+      get { return repeatedForeignMessage_; }

+    }

+    public int RepeatedForeignMessageCount {

+      get { return repeatedForeignMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedForeignMessage(int index) {

+      return repeatedForeignMessage_[index];

+    }

+    

+    public const int RepeatedImportMessageFieldNumber = 50;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessage> repeatedImportMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessage>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportMessage> RepeatedImportMessageList {

+      get { return repeatedImportMessage_; }

+    }

+    public int RepeatedImportMessageCount {

+      get { return repeatedImportMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportMessage GetRepeatedImportMessage(int index) {

+      return repeatedImportMessage_[index];

+    }

+    

+    public const int RepeatedNestedEnumFieldNumber = 51;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> repeatedNestedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> RepeatedNestedEnumList {

+      get { return pbc::Lists.AsReadOnly(repeatedNestedEnum_); }

+    }

+    public int RepeatedNestedEnumCount {

+      get { return repeatedNestedEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum GetRepeatedNestedEnum(int index) {

+      return repeatedNestedEnum_[index];

+    }

+    

+    public const int RepeatedForeignEnumFieldNumber = 52;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> repeatedForeignEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedForeignEnumList {

+      get { return pbc::Lists.AsReadOnly(repeatedForeignEnum_); }

+    }

+    public int RepeatedForeignEnumCount {

+      get { return repeatedForeignEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedForeignEnum(int index) {

+      return repeatedForeignEnum_[index];

+    }

+    

+    public const int RepeatedImportEnumFieldNumber = 53;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnum> repeatedImportEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportEnum> RepeatedImportEnumList {

+      get { return pbc::Lists.AsReadOnly(repeatedImportEnum_); }

+    }

+    public int RepeatedImportEnumCount {

+      get { return repeatedImportEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportEnum GetRepeatedImportEnum(int index) {

+      return repeatedImportEnum_[index];

+    }

+    

+    public const int RepeatedStringPieceFieldNumber = 54;

+    private pbc::PopsicleList<string> repeatedStringPiece_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringPieceList {

+      get { return pbc::Lists.AsReadOnly(repeatedStringPiece_); }

+    }

+    public int RepeatedStringPieceCount {

+      get { return repeatedStringPiece_.Count; }

+    }

+    public string GetRepeatedStringPiece(int index) {

+      return repeatedStringPiece_[index];

+    }

+    

+    public const int RepeatedCordFieldNumber = 55;

+    private pbc::PopsicleList<string> repeatedCord_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedCordList {

+      get { return pbc::Lists.AsReadOnly(repeatedCord_); }

+    }

+    public int RepeatedCordCount {

+      get { return repeatedCord_.Count; }

+    }

+    public string GetRepeatedCord(int index) {

+      return repeatedCord_[index];

+    }

+    

+    public const int DefaultInt32FieldNumber = 61;

+    private bool hasDefaultInt32;

+    private int defaultInt32_ = 41;

+    public bool HasDefaultInt32 {

+      get { return hasDefaultInt32; }

+    }

+    public int DefaultInt32 {

+      get { return defaultInt32_; }

+    }

+    

+    public const int DefaultInt64FieldNumber = 62;

+    private bool hasDefaultInt64;

+    private long defaultInt64_ = 42L;

+    public bool HasDefaultInt64 {

+      get { return hasDefaultInt64; }

+    }

+    public long DefaultInt64 {

+      get { return defaultInt64_; }

+    }

+    

+    public const int DefaultUint32FieldNumber = 63;

+    private bool hasDefaultUint32;

+    private uint defaultUint32_ = 43;

+    public bool HasDefaultUint32 {

+      get { return hasDefaultUint32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint DefaultUint32 {

+      get { return defaultUint32_; }

+    }

+    

+    public const int DefaultUint64FieldNumber = 64;

+    private bool hasDefaultUint64;

+    private ulong defaultUint64_ = 44UL;

+    public bool HasDefaultUint64 {

+      get { return hasDefaultUint64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong DefaultUint64 {

+      get { return defaultUint64_; }

+    }

+    

+    public const int DefaultSint32FieldNumber = 65;

+    private bool hasDefaultSint32;

+    private int defaultSint32_ = -45;

+    public bool HasDefaultSint32 {

+      get { return hasDefaultSint32; }

+    }

+    public int DefaultSint32 {

+      get { return defaultSint32_; }

+    }

+    

+    public const int DefaultSint64FieldNumber = 66;

+    private bool hasDefaultSint64;

+    private long defaultSint64_ = 46;

+    public bool HasDefaultSint64 {

+      get { return hasDefaultSint64; }

+    }

+    public long DefaultSint64 {

+      get { return defaultSint64_; }

+    }

+    

+    public const int DefaultFixed32FieldNumber = 67;

+    private bool hasDefaultFixed32;

+    private uint defaultFixed32_ = 47;

+    public bool HasDefaultFixed32 {

+      get { return hasDefaultFixed32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint DefaultFixed32 {

+      get { return defaultFixed32_; }

+    }

+    

+    public const int DefaultFixed64FieldNumber = 68;

+    private bool hasDefaultFixed64;

+    private ulong defaultFixed64_ = 48;

+    public bool HasDefaultFixed64 {

+      get { return hasDefaultFixed64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong DefaultFixed64 {

+      get { return defaultFixed64_; }

+    }

+    

+    public const int DefaultSfixed32FieldNumber = 69;

+    private bool hasDefaultSfixed32;

+    private int defaultSfixed32_ = 49;

+    public bool HasDefaultSfixed32 {

+      get { return hasDefaultSfixed32; }

+    }

+    public int DefaultSfixed32 {

+      get { return defaultSfixed32_; }

+    }

+    

+    public const int DefaultSfixed64FieldNumber = 70;

+    private bool hasDefaultSfixed64;

+    private long defaultSfixed64_ = -50;

+    public bool HasDefaultSfixed64 {

+      get { return hasDefaultSfixed64; }

+    }

+    public long DefaultSfixed64 {

+      get { return defaultSfixed64_; }

+    }

+    

+    public const int DefaultFloatFieldNumber = 71;

+    private bool hasDefaultFloat;

+    private float defaultFloat_ = 51.5F;

+    public bool HasDefaultFloat {

+      get { return hasDefaultFloat; }

+    }

+    public float DefaultFloat {

+      get { return defaultFloat_; }

+    }

+    

+    public const int DefaultDoubleFieldNumber = 72;

+    private bool hasDefaultDouble;

+    private double defaultDouble_ = 52000D;

+    public bool HasDefaultDouble {

+      get { return hasDefaultDouble; }

+    }

+    public double DefaultDouble {

+      get { return defaultDouble_; }

+    }

+    

+    public const int DefaultBoolFieldNumber = 73;

+    private bool hasDefaultBool;

+    private bool defaultBool_ = true;

+    public bool HasDefaultBool {

+      get { return hasDefaultBool; }

+    }

+    public bool DefaultBool {

+      get { return defaultBool_; }

+    }

+    

+    public const int DefaultStringFieldNumber = 74;

+    private bool hasDefaultString;

+    private string defaultString_ = "hello";

+    public bool HasDefaultString {

+      get { return hasDefaultString; }

+    }

+    public string DefaultString {

+      get { return defaultString_; }

+    }

+    

+    public const int DefaultBytesFieldNumber = 75;

+    private bool hasDefaultBytes;

+    private pb::ByteString defaultBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Descriptor.Fields[62].DefaultValue;

+    public bool HasDefaultBytes {

+      get { return hasDefaultBytes; }

+    }

+    public pb::ByteString DefaultBytes {

+      get { return defaultBytes_; }

+    }

+    

+    public const int DefaultNestedEnumFieldNumber = 81;

+    private bool hasDefaultNestedEnum;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum defaultNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.BAR;

+    public bool HasDefaultNestedEnum {

+      get { return hasDefaultNestedEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum DefaultNestedEnum {

+      get { return defaultNestedEnum_; }

+    }

+    

+    public const int DefaultForeignEnumFieldNumber = 82;

+    private bool hasDefaultForeignEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum defaultForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_BAR;

+    public bool HasDefaultForeignEnum {

+      get { return hasDefaultForeignEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum DefaultForeignEnum {

+      get { return defaultForeignEnum_; }

+    }

+    

+    public const int DefaultImportEnumFieldNumber = 83;

+    private bool hasDefaultImportEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ImportEnum defaultImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_BAR;

+    public bool HasDefaultImportEnum {

+      get { return hasDefaultImportEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportEnum DefaultImportEnum {

+      get { return defaultImportEnum_; }

+    }

+    

+    public const int DefaultStringPieceFieldNumber = 84;

+    private bool hasDefaultStringPiece;

+    private string defaultStringPiece_ = "abc";

+    public bool HasDefaultStringPiece {

+      get { return hasDefaultStringPiece; }

+    }

+    public string DefaultStringPiece {

+      get { return defaultStringPiece_; }

+    }

+    

+    public const int DefaultCordFieldNumber = 85;

+    private bool hasDefaultCord;

+    private string defaultCord_ = "123";

+    public bool HasDefaultCord {

+      get { return hasDefaultCord; }

+    }

+    public string DefaultCord {

+      get { return defaultCord_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testAllTypesFieldNames;

+      if (hasOptionalInt32) {

+        output.WriteInt32(1, field_names[31], OptionalInt32);

+      }

+      if (hasOptionalInt64) {

+        output.WriteInt64(2, field_names[32], OptionalInt64);

+      }

+      if (hasOptionalUint32) {

+        output.WriteUInt32(3, field_names[41], OptionalUint32);

+      }

+      if (hasOptionalUint64) {

+        output.WriteUInt64(4, field_names[42], OptionalUint64);

+      }

+      if (hasOptionalSint32) {

+        output.WriteSInt32(5, field_names[37], OptionalSint32);

+      }

+      if (hasOptionalSint64) {

+        output.WriteSInt64(6, field_names[38], OptionalSint64);

+      }

+      if (hasOptionalFixed32) {

+        output.WriteFixed32(7, field_names[24], OptionalFixed32);

+      }

+      if (hasOptionalFixed64) {

+        output.WriteFixed64(8, field_names[25], OptionalFixed64);

+      }

+      if (hasOptionalSfixed32) {

+        output.WriteSFixed32(9, field_names[35], OptionalSfixed32);

+      }

+      if (hasOptionalSfixed64) {

+        output.WriteSFixed64(10, field_names[36], OptionalSfixed64);

+      }

+      if (hasOptionalFloat) {

+        output.WriteFloat(11, field_names[26], OptionalFloat);

+      }

+      if (hasOptionalDouble) {

+        output.WriteDouble(12, field_names[23], OptionalDouble);

+      }

+      if (hasOptionalBool) {

+        output.WriteBool(13, field_names[20], OptionalBool);

+      }

+      if (hasOptionalString) {

+        output.WriteString(14, field_names[39], OptionalString);

+      }

+      if (hasOptionalBytes) {

+        output.WriteBytes(15, field_names[21], OptionalBytes);

+      }

+      if (hasOptionalGroup) {

+        output.WriteGroup(16, field_names[43], OptionalGroup);

+      }

+      if (hasOptionalNestedMessage) {

+        output.WriteMessage(18, field_names[34], OptionalNestedMessage);

+      }

+      if (hasOptionalForeignMessage) {

+        output.WriteMessage(19, field_names[28], OptionalForeignMessage);

+      }

+      if (hasOptionalImportMessage) {

+        output.WriteMessage(20, field_names[30], OptionalImportMessage);

+      }

+      if (hasOptionalNestedEnum) {

+        output.WriteEnum(21, field_names[33], (int) OptionalNestedEnum, OptionalNestedEnum);

+      }

+      if (hasOptionalForeignEnum) {

+        output.WriteEnum(22, field_names[27], (int) OptionalForeignEnum, OptionalForeignEnum);

+      }

+      if (hasOptionalImportEnum) {

+        output.WriteEnum(23, field_names[29], (int) OptionalImportEnum, OptionalImportEnum);

+      }

+      if (hasOptionalStringPiece) {

+        output.WriteString(24, field_names[40], OptionalStringPiece);

+      }

+      if (hasOptionalCord) {

+        output.WriteString(25, field_names[22], OptionalCord);

+      }

+      if (repeatedInt32_.Count > 0) {

+        output.WriteInt32Array(31, field_names[55], repeatedInt32_);

+      }

+      if (repeatedInt64_.Count > 0) {

+        output.WriteInt64Array(32, field_names[56], repeatedInt64_);

+      }

+      if (repeatedUint32_.Count > 0) {

+        output.WriteUInt32Array(33, field_names[65], repeatedUint32_);

+      }

+      if (repeatedUint64_.Count > 0) {

+        output.WriteUInt64Array(34, field_names[66], repeatedUint64_);

+      }

+      if (repeatedSint32_.Count > 0) {

+        output.WriteSInt32Array(35, field_names[61], repeatedSint32_);

+      }

+      if (repeatedSint64_.Count > 0) {

+        output.WriteSInt64Array(36, field_names[62], repeatedSint64_);

+      }

+      if (repeatedFixed32_.Count > 0) {

+        output.WriteFixed32Array(37, field_names[48], repeatedFixed32_);

+      }

+      if (repeatedFixed64_.Count > 0) {

+        output.WriteFixed64Array(38, field_names[49], repeatedFixed64_);

+      }

+      if (repeatedSfixed32_.Count > 0) {

+        output.WriteSFixed32Array(39, field_names[59], repeatedSfixed32_);

+      }

+      if (repeatedSfixed64_.Count > 0) {

+        output.WriteSFixed64Array(40, field_names[60], repeatedSfixed64_);

+      }

+      if (repeatedFloat_.Count > 0) {

+        output.WriteFloatArray(41, field_names[50], repeatedFloat_);

+      }

+      if (repeatedDouble_.Count > 0) {

+        output.WriteDoubleArray(42, field_names[47], repeatedDouble_);

+      }

+      if (repeatedBool_.Count > 0) {

+        output.WriteBoolArray(43, field_names[44], repeatedBool_);

+      }

+      if (repeatedString_.Count > 0) {

+        output.WriteStringArray(44, field_names[63], repeatedString_);

+      }

+      if (repeatedBytes_.Count > 0) {

+        output.WriteBytesArray(45, field_names[45], repeatedBytes_);

+      }

+      if (repeatedGroup_.Count > 0) {

+        output.WriteGroupArray(46, field_names[67], repeatedGroup_);

+      }

+      if (repeatedNestedMessage_.Count > 0) {

+        output.WriteMessageArray(48, field_names[58], repeatedNestedMessage_);

+      }

+      if (repeatedForeignMessage_.Count > 0) {

+        output.WriteMessageArray(49, field_names[52], repeatedForeignMessage_);

+      }

+      if (repeatedImportMessage_.Count > 0) {

+        output.WriteMessageArray(50, field_names[54], repeatedImportMessage_);

+      }

+      if (repeatedNestedEnum_.Count > 0) {

+        output.WriteEnumArray(51, field_names[57], repeatedNestedEnum_);

+      }

+      if (repeatedForeignEnum_.Count > 0) {

+        output.WriteEnumArray(52, field_names[51], repeatedForeignEnum_);

+      }

+      if (repeatedImportEnum_.Count > 0) {

+        output.WriteEnumArray(53, field_names[53], repeatedImportEnum_);

+      }

+      if (repeatedStringPiece_.Count > 0) {

+        output.WriteStringArray(54, field_names[64], repeatedStringPiece_);

+      }

+      if (repeatedCord_.Count > 0) {

+        output.WriteStringArray(55, field_names[46], repeatedCord_);

+      }

+      if (hasDefaultInt32) {

+        output.WriteInt32(61, field_names[9], DefaultInt32);

+      }

+      if (hasDefaultInt64) {

+        output.WriteInt64(62, field_names[10], DefaultInt64);

+      }

+      if (hasDefaultUint32) {

+        output.WriteUInt32(63, field_names[18], DefaultUint32);

+      }

+      if (hasDefaultUint64) {

+        output.WriteUInt64(64, field_names[19], DefaultUint64);

+      }

+      if (hasDefaultSint32) {

+        output.WriteSInt32(65, field_names[14], DefaultSint32);

+      }

+      if (hasDefaultSint64) {

+        output.WriteSInt64(66, field_names[15], DefaultSint64);

+      }

+      if (hasDefaultFixed32) {

+        output.WriteFixed32(67, field_names[4], DefaultFixed32);

+      }

+      if (hasDefaultFixed64) {

+        output.WriteFixed64(68, field_names[5], DefaultFixed64);

+      }

+      if (hasDefaultSfixed32) {

+        output.WriteSFixed32(69, field_names[12], DefaultSfixed32);

+      }

+      if (hasDefaultSfixed64) {

+        output.WriteSFixed64(70, field_names[13], DefaultSfixed64);

+      }

+      if (hasDefaultFloat) {

+        output.WriteFloat(71, field_names[6], DefaultFloat);

+      }

+      if (hasDefaultDouble) {

+        output.WriteDouble(72, field_names[3], DefaultDouble);

+      }

+      if (hasDefaultBool) {

+        output.WriteBool(73, field_names[0], DefaultBool);

+      }

+      if (hasDefaultString) {

+        output.WriteString(74, field_names[16], DefaultString);

+      }

+      if (hasDefaultBytes) {

+        output.WriteBytes(75, field_names[1], DefaultBytes);

+      }

+      if (hasDefaultNestedEnum) {

+        output.WriteEnum(81, field_names[11], (int) DefaultNestedEnum, DefaultNestedEnum);

+      }

+      if (hasDefaultForeignEnum) {

+        output.WriteEnum(82, field_names[7], (int) DefaultForeignEnum, DefaultForeignEnum);

+      }

+      if (hasDefaultImportEnum) {

+        output.WriteEnum(83, field_names[8], (int) DefaultImportEnum, DefaultImportEnum);

+      }

+      if (hasDefaultStringPiece) {

+        output.WriteString(84, field_names[17], DefaultStringPiece);

+      }

+      if (hasDefaultCord) {

+        output.WriteString(85, field_names[2], DefaultCord);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasOptionalInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, OptionalInt32);

+      }

+      if (hasOptionalInt64) {

+        size += pb::CodedOutputStream.ComputeInt64Size(2, OptionalInt64);

+      }

+      if (hasOptionalUint32) {

+        size += pb::CodedOutputStream.ComputeUInt32Size(3, OptionalUint32);

+      }

+      if (hasOptionalUint64) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(4, OptionalUint64);

+      }

+      if (hasOptionalSint32) {

+        size += pb::CodedOutputStream.ComputeSInt32Size(5, OptionalSint32);

+      }

+      if (hasOptionalSint64) {

+        size += pb::CodedOutputStream.ComputeSInt64Size(6, OptionalSint64);

+      }

+      if (hasOptionalFixed32) {

+        size += pb::CodedOutputStream.ComputeFixed32Size(7, OptionalFixed32);

+      }

+      if (hasOptionalFixed64) {

+        size += pb::CodedOutputStream.ComputeFixed64Size(8, OptionalFixed64);

+      }

+      if (hasOptionalSfixed32) {

+        size += pb::CodedOutputStream.ComputeSFixed32Size(9, OptionalSfixed32);

+      }

+      if (hasOptionalSfixed64) {

+        size += pb::CodedOutputStream.ComputeSFixed64Size(10, OptionalSfixed64);

+      }

+      if (hasOptionalFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(11, OptionalFloat);

+      }

+      if (hasOptionalDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(12, OptionalDouble);

+      }

+      if (hasOptionalBool) {

+        size += pb::CodedOutputStream.ComputeBoolSize(13, OptionalBool);

+      }

+      if (hasOptionalString) {

+        size += pb::CodedOutputStream.ComputeStringSize(14, OptionalString);

+      }

+      if (hasOptionalBytes) {

+        size += pb::CodedOutputStream.ComputeBytesSize(15, OptionalBytes);

+      }

+      if (hasOptionalGroup) {

+        size += pb::CodedOutputStream.ComputeGroupSize(16, OptionalGroup);

+      }

+      if (hasOptionalNestedMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(18, OptionalNestedMessage);

+      }

+      if (hasOptionalForeignMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(19, OptionalForeignMessage);

+      }

+      if (hasOptionalImportMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(20, OptionalImportMessage);

+      }

+      if (hasOptionalNestedEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(21, (int) OptionalNestedEnum);

+      }

+      if (hasOptionalForeignEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(22, (int) OptionalForeignEnum);

+      }

+      if (hasOptionalImportEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(23, (int) OptionalImportEnum);

+      }

+      if (hasOptionalStringPiece) {

+        size += pb::CodedOutputStream.ComputeStringSize(24, OptionalStringPiece);

+      }

+      if (hasOptionalCord) {

+        size += pb::CodedOutputStream.ComputeStringSize(25, OptionalCord);

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedInt32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in RepeatedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedInt64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (uint element in RepeatedUint32List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedUint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in RepeatedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedUint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedSint32List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedSint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in RepeatedSint64List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedSint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFixed32_.Count;

+        size += dataSize;

+        size += 2 * repeatedFixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedFixed64_.Count;

+        size += dataSize;

+        size += 2 * repeatedFixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedSfixed32_.Count;

+        size += dataSize;

+        size += 2 * repeatedSfixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedSfixed64_.Count;

+        size += dataSize;

+        size += 2 * repeatedSfixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFloat_.Count;

+        size += dataSize;

+        size += 2 * repeatedFloat_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedDouble_.Count;

+        size += dataSize;

+        size += 2 * repeatedDouble_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 1 * repeatedBool_.Count;

+        size += dataSize;

+        size += 2 * repeatedBool_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedString_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (pb::ByteString element in RepeatedBytesList) {

+          dataSize += pb::CodedOutputStream.ComputeBytesSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedBytes_.Count;

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup element in RepeatedGroupList) {

+        size += pb::CodedOutputStream.ComputeGroupSize(46, element);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage element in RepeatedNestedMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(48, element);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessage element in RepeatedForeignMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(49, element);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.ImportMessage element in RepeatedImportMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(50, element);

+      }

+      {

+        int dataSize = 0;

+        if (repeatedNestedEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum element in repeatedNestedEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * repeatedNestedEnum_.Count;

+        }

+      }

+      {

+        int dataSize = 0;

+        if (repeatedForeignEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in repeatedForeignEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * repeatedForeignEnum_.Count;

+        }

+      }

+      {

+        int dataSize = 0;

+        if (repeatedImportEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ImportEnum element in repeatedImportEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * repeatedImportEnum_.Count;

+        }

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringPieceList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedStringPiece_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedCordList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedCord_.Count;

+      }

+      if (hasDefaultInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(61, DefaultInt32);

+      }

+      if (hasDefaultInt64) {

+        size += pb::CodedOutputStream.ComputeInt64Size(62, DefaultInt64);

+      }

+      if (hasDefaultUint32) {

+        size += pb::CodedOutputStream.ComputeUInt32Size(63, DefaultUint32);

+      }

+      if (hasDefaultUint64) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(64, DefaultUint64);

+      }

+      if (hasDefaultSint32) {

+        size += pb::CodedOutputStream.ComputeSInt32Size(65, DefaultSint32);

+      }

+      if (hasDefaultSint64) {

+        size += pb::CodedOutputStream.ComputeSInt64Size(66, DefaultSint64);

+      }

+      if (hasDefaultFixed32) {

+        size += pb::CodedOutputStream.ComputeFixed32Size(67, DefaultFixed32);

+      }

+      if (hasDefaultFixed64) {

+        size += pb::CodedOutputStream.ComputeFixed64Size(68, DefaultFixed64);

+      }

+      if (hasDefaultSfixed32) {

+        size += pb::CodedOutputStream.ComputeSFixed32Size(69, DefaultSfixed32);

+      }

+      if (hasDefaultSfixed64) {

+        size += pb::CodedOutputStream.ComputeSFixed64Size(70, DefaultSfixed64);

+      }

+      if (hasDefaultFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(71, DefaultFloat);

+      }

+      if (hasDefaultDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(72, DefaultDouble);

+      }

+      if (hasDefaultBool) {

+        size += pb::CodedOutputStream.ComputeBoolSize(73, DefaultBool);

+      }

+      if (hasDefaultString) {

+        size += pb::CodedOutputStream.ComputeStringSize(74, DefaultString);

+      }

+      if (hasDefaultBytes) {

+        size += pb::CodedOutputStream.ComputeBytesSize(75, DefaultBytes);

+      }

+      if (hasDefaultNestedEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(81, (int) DefaultNestedEnum);

+      }

+      if (hasDefaultForeignEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(82, (int) DefaultForeignEnum);

+      }

+      if (hasDefaultImportEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(83, (int) DefaultImportEnum);

+      }

+      if (hasDefaultStringPiece) {

+        size += pb::CodedOutputStream.ComputeStringSize(84, DefaultStringPiece);

+      }

+      if (hasDefaultCord) {

+        size += pb::CodedOutputStream.ComputeStringSize(85, DefaultCord);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestAllTypes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllTypes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestAllTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestAllTypes MakeReadOnly() {

+      repeatedInt32_.MakeReadOnly();

+      repeatedInt64_.MakeReadOnly();

+      repeatedUint32_.MakeReadOnly();

+      repeatedUint64_.MakeReadOnly();

+      repeatedSint32_.MakeReadOnly();

+      repeatedSint64_.MakeReadOnly();

+      repeatedFixed32_.MakeReadOnly();

+      repeatedFixed64_.MakeReadOnly();

+      repeatedSfixed32_.MakeReadOnly();

+      repeatedSfixed64_.MakeReadOnly();

+      repeatedFloat_.MakeReadOnly();

+      repeatedDouble_.MakeReadOnly();

+      repeatedBool_.MakeReadOnly();

+      repeatedString_.MakeReadOnly();

+      repeatedBytes_.MakeReadOnly();

+      repeatedGroup_.MakeReadOnly();

+      repeatedNestedMessage_.MakeReadOnly();

+      repeatedForeignMessage_.MakeReadOnly();

+      repeatedImportMessage_.MakeReadOnly();

+      repeatedNestedEnum_.MakeReadOnly();

+      repeatedForeignEnum_.MakeReadOnly();

+      repeatedImportEnum_.MakeReadOnly();

+      repeatedStringPiece_.MakeReadOnly();

+      repeatedCord_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestAllTypes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestAllTypes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestAllTypes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestAllTypes result;

+      

+      private TestAllTypes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestAllTypes original = result;

+          result = new TestAllTypes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestAllTypes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Descriptor; }

+      }

+      

+      public override TestAllTypes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }

+      }

+      

+      public override TestAllTypes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestAllTypes) {

+          return MergeFrom((TestAllTypes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestAllTypes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasOptionalInt32) {

+          OptionalInt32 = other.OptionalInt32;

+        }

+        if (other.HasOptionalInt64) {

+          OptionalInt64 = other.OptionalInt64;

+        }

+        if (other.HasOptionalUint32) {

+          OptionalUint32 = other.OptionalUint32;

+        }

+        if (other.HasOptionalUint64) {

+          OptionalUint64 = other.OptionalUint64;

+        }

+        if (other.HasOptionalSint32) {

+          OptionalSint32 = other.OptionalSint32;

+        }

+        if (other.HasOptionalSint64) {

+          OptionalSint64 = other.OptionalSint64;

+        }

+        if (other.HasOptionalFixed32) {

+          OptionalFixed32 = other.OptionalFixed32;

+        }

+        if (other.HasOptionalFixed64) {

+          OptionalFixed64 = other.OptionalFixed64;

+        }

+        if (other.HasOptionalSfixed32) {

+          OptionalSfixed32 = other.OptionalSfixed32;

+        }

+        if (other.HasOptionalSfixed64) {

+          OptionalSfixed64 = other.OptionalSfixed64;

+        }

+        if (other.HasOptionalFloat) {

+          OptionalFloat = other.OptionalFloat;

+        }

+        if (other.HasOptionalDouble) {

+          OptionalDouble = other.OptionalDouble;

+        }

+        if (other.HasOptionalBool) {

+          OptionalBool = other.OptionalBool;

+        }

+        if (other.HasOptionalString) {

+          OptionalString = other.OptionalString;

+        }

+        if (other.HasOptionalBytes) {

+          OptionalBytes = other.OptionalBytes;

+        }

+        if (other.HasOptionalGroup) {

+          MergeOptionalGroup(other.OptionalGroup);

+        }

+        if (other.HasOptionalNestedMessage) {

+          MergeOptionalNestedMessage(other.OptionalNestedMessage);

+        }

+        if (other.HasOptionalForeignMessage) {

+          MergeOptionalForeignMessage(other.OptionalForeignMessage);

+        }

+        if (other.HasOptionalImportMessage) {

+          MergeOptionalImportMessage(other.OptionalImportMessage);

+        }

+        if (other.HasOptionalNestedEnum) {

+          OptionalNestedEnum = other.OptionalNestedEnum;

+        }

+        if (other.HasOptionalForeignEnum) {

+          OptionalForeignEnum = other.OptionalForeignEnum;

+        }

+        if (other.HasOptionalImportEnum) {

+          OptionalImportEnum = other.OptionalImportEnum;

+        }

+        if (other.HasOptionalStringPiece) {

+          OptionalStringPiece = other.OptionalStringPiece;

+        }

+        if (other.HasOptionalCord) {

+          OptionalCord = other.OptionalCord;

+        }

+        if (other.repeatedInt32_.Count != 0) {

+          result.repeatedInt32_.Add(other.repeatedInt32_);

+        }

+        if (other.repeatedInt64_.Count != 0) {

+          result.repeatedInt64_.Add(other.repeatedInt64_);

+        }

+        if (other.repeatedUint32_.Count != 0) {

+          result.repeatedUint32_.Add(other.repeatedUint32_);

+        }

+        if (other.repeatedUint64_.Count != 0) {

+          result.repeatedUint64_.Add(other.repeatedUint64_);

+        }

+        if (other.repeatedSint32_.Count != 0) {

+          result.repeatedSint32_.Add(other.repeatedSint32_);

+        }

+        if (other.repeatedSint64_.Count != 0) {

+          result.repeatedSint64_.Add(other.repeatedSint64_);

+        }

+        if (other.repeatedFixed32_.Count != 0) {

+          result.repeatedFixed32_.Add(other.repeatedFixed32_);

+        }

+        if (other.repeatedFixed64_.Count != 0) {

+          result.repeatedFixed64_.Add(other.repeatedFixed64_);

+        }

+        if (other.repeatedSfixed32_.Count != 0) {

+          result.repeatedSfixed32_.Add(other.repeatedSfixed32_);

+        }

+        if (other.repeatedSfixed64_.Count != 0) {

+          result.repeatedSfixed64_.Add(other.repeatedSfixed64_);

+        }

+        if (other.repeatedFloat_.Count != 0) {

+          result.repeatedFloat_.Add(other.repeatedFloat_);

+        }

+        if (other.repeatedDouble_.Count != 0) {

+          result.repeatedDouble_.Add(other.repeatedDouble_);

+        }

+        if (other.repeatedBool_.Count != 0) {

+          result.repeatedBool_.Add(other.repeatedBool_);

+        }

+        if (other.repeatedString_.Count != 0) {

+          result.repeatedString_.Add(other.repeatedString_);

+        }

+        if (other.repeatedBytes_.Count != 0) {

+          result.repeatedBytes_.Add(other.repeatedBytes_);

+        }

+        if (other.repeatedGroup_.Count != 0) {

+          result.repeatedGroup_.Add(other.repeatedGroup_);

+        }

+        if (other.repeatedNestedMessage_.Count != 0) {

+          result.repeatedNestedMessage_.Add(other.repeatedNestedMessage_);

+        }

+        if (other.repeatedForeignMessage_.Count != 0) {

+          result.repeatedForeignMessage_.Add(other.repeatedForeignMessage_);

+        }

+        if (other.repeatedImportMessage_.Count != 0) {

+          result.repeatedImportMessage_.Add(other.repeatedImportMessage_);

+        }

+        if (other.repeatedNestedEnum_.Count != 0) {

+          result.repeatedNestedEnum_.Add(other.repeatedNestedEnum_);

+        }

+        if (other.repeatedForeignEnum_.Count != 0) {

+          result.repeatedForeignEnum_.Add(other.repeatedForeignEnum_);

+        }

+        if (other.repeatedImportEnum_.Count != 0) {

+          result.repeatedImportEnum_.Add(other.repeatedImportEnum_);

+        }

+        if (other.repeatedStringPiece_.Count != 0) {

+          result.repeatedStringPiece_.Add(other.repeatedStringPiece_);

+        }

+        if (other.repeatedCord_.Count != 0) {

+          result.repeatedCord_.Add(other.repeatedCord_);

+        }

+        if (other.HasDefaultInt32) {

+          DefaultInt32 = other.DefaultInt32;

+        }

+        if (other.HasDefaultInt64) {

+          DefaultInt64 = other.DefaultInt64;

+        }

+        if (other.HasDefaultUint32) {

+          DefaultUint32 = other.DefaultUint32;

+        }

+        if (other.HasDefaultUint64) {

+          DefaultUint64 = other.DefaultUint64;

+        }

+        if (other.HasDefaultSint32) {

+          DefaultSint32 = other.DefaultSint32;

+        }

+        if (other.HasDefaultSint64) {

+          DefaultSint64 = other.DefaultSint64;

+        }

+        if (other.HasDefaultFixed32) {

+          DefaultFixed32 = other.DefaultFixed32;

+        }

+        if (other.HasDefaultFixed64) {

+          DefaultFixed64 = other.DefaultFixed64;

+        }

+        if (other.HasDefaultSfixed32) {

+          DefaultSfixed32 = other.DefaultSfixed32;

+        }

+        if (other.HasDefaultSfixed64) {

+          DefaultSfixed64 = other.DefaultSfixed64;

+        }

+        if (other.HasDefaultFloat) {

+          DefaultFloat = other.DefaultFloat;

+        }

+        if (other.HasDefaultDouble) {

+          DefaultDouble = other.DefaultDouble;

+        }

+        if (other.HasDefaultBool) {

+          DefaultBool = other.DefaultBool;

+        }

+        if (other.HasDefaultString) {

+          DefaultString = other.DefaultString;

+        }

+        if (other.HasDefaultBytes) {

+          DefaultBytes = other.DefaultBytes;

+        }

+        if (other.HasDefaultNestedEnum) {

+          DefaultNestedEnum = other.DefaultNestedEnum;

+        }

+        if (other.HasDefaultForeignEnum) {

+          DefaultForeignEnum = other.DefaultForeignEnum;

+        }

+        if (other.HasDefaultImportEnum) {

+          DefaultImportEnum = other.DefaultImportEnum;

+        }

+        if (other.HasDefaultStringPiece) {

+          DefaultStringPiece = other.DefaultStringPiece;

+        }

+        if (other.HasDefaultCord) {

+          DefaultCord = other.DefaultCord;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testAllTypesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testAllTypesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasOptionalInt32 = input.ReadInt32(ref result.optionalInt32_);

+              break;

+            }

+            case 16: {

+              result.hasOptionalInt64 = input.ReadInt64(ref result.optionalInt64_);

+              break;

+            }

+            case 24: {

+              result.hasOptionalUint32 = input.ReadUInt32(ref result.optionalUint32_);

+              break;

+            }

+            case 32: {

+              result.hasOptionalUint64 = input.ReadUInt64(ref result.optionalUint64_);

+              break;

+            }

+            case 40: {

+              result.hasOptionalSint32 = input.ReadSInt32(ref result.optionalSint32_);

+              break;

+            }

+            case 48: {

+              result.hasOptionalSint64 = input.ReadSInt64(ref result.optionalSint64_);

+              break;

+            }

+            case 61: {

+              result.hasOptionalFixed32 = input.ReadFixed32(ref result.optionalFixed32_);

+              break;

+            }

+            case 65: {

+              result.hasOptionalFixed64 = input.ReadFixed64(ref result.optionalFixed64_);

+              break;

+            }

+            case 77: {

+              result.hasOptionalSfixed32 = input.ReadSFixed32(ref result.optionalSfixed32_);

+              break;

+            }

+            case 81: {

+              result.hasOptionalSfixed64 = input.ReadSFixed64(ref result.optionalSfixed64_);

+              break;

+            }

+            case 93: {

+              result.hasOptionalFloat = input.ReadFloat(ref result.optionalFloat_);

+              break;

+            }

+            case 97: {

+              result.hasOptionalDouble = input.ReadDouble(ref result.optionalDouble_);

+              break;

+            }

+            case 104: {

+              result.hasOptionalBool = input.ReadBool(ref result.optionalBool_);

+              break;

+            }

+            case 114: {

+              result.hasOptionalString = input.ReadString(ref result.optionalString_);

+              break;

+            }

+            case 122: {

+              result.hasOptionalBytes = input.ReadBytes(ref result.optionalBytes_);

+              break;

+            }

+            case 131: {

+              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.CreateBuilder();

+              if (result.hasOptionalGroup) {

+                subBuilder.MergeFrom(OptionalGroup);

+              }

+              input.ReadGroup(16, subBuilder, extensionRegistry);

+              OptionalGroup = subBuilder.BuildPartial();

+              break;

+            }

+            case 146: {

+              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder();

+              if (result.hasOptionalNestedMessage) {

+                subBuilder.MergeFrom(OptionalNestedMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalNestedMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 154: {

+              global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder();

+              if (result.hasOptionalForeignMessage) {

+                subBuilder.MergeFrom(OptionalForeignMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalForeignMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 162: {

+              global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ImportMessage.CreateBuilder();

+              if (result.hasOptionalImportMessage) {

+                subBuilder.MergeFrom(OptionalImportMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalImportMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 168: {

+              object unknown;

+              if(input.ReadEnum(ref result.optionalNestedEnum_, out unknown)) {

+                result.hasOptionalNestedEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(21, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 176: {

+              object unknown;

+              if(input.ReadEnum(ref result.optionalForeignEnum_, out unknown)) {

+                result.hasOptionalForeignEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(22, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 184: {

+              object unknown;

+              if(input.ReadEnum(ref result.optionalImportEnum_, out unknown)) {

+                result.hasOptionalImportEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(23, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 194: {

+              result.hasOptionalStringPiece = input.ReadString(ref result.optionalStringPiece_);

+              break;

+            }

+            case 202: {

+              result.hasOptionalCord = input.ReadString(ref result.optionalCord_);

+              break;

+            }

+            case 250:

+            case 248: {

+              input.ReadInt32Array(tag, field_name, result.repeatedInt32_);

+              break;

+            }

+            case 258:

+            case 256: {

+              input.ReadInt64Array(tag, field_name, result.repeatedInt64_);

+              break;

+            }

+            case 266:

+            case 264: {

+              input.ReadUInt32Array(tag, field_name, result.repeatedUint32_);

+              break;

+            }

+            case 274:

+            case 272: {

+              input.ReadUInt64Array(tag, field_name, result.repeatedUint64_);

+              break;

+            }

+            case 282:

+            case 280: {

+              input.ReadSInt32Array(tag, field_name, result.repeatedSint32_);

+              break;

+            }

+            case 290:

+            case 288: {

+              input.ReadSInt64Array(tag, field_name, result.repeatedSint64_);

+              break;

+            }

+            case 298:

+            case 301: {

+              input.ReadFixed32Array(tag, field_name, result.repeatedFixed32_);

+              break;

+            }

+            case 306:

+            case 305: {

+              input.ReadFixed64Array(tag, field_name, result.repeatedFixed64_);

+              break;

+            }

+            case 314:

+            case 317: {

+              input.ReadSFixed32Array(tag, field_name, result.repeatedSfixed32_);

+              break;

+            }

+            case 322:

+            case 321: {

+              input.ReadSFixed64Array(tag, field_name, result.repeatedSfixed64_);

+              break;

+            }

+            case 330:

+            case 333: {

+              input.ReadFloatArray(tag, field_name, result.repeatedFloat_);

+              break;

+            }

+            case 338:

+            case 337: {

+              input.ReadDoubleArray(tag, field_name, result.repeatedDouble_);

+              break;

+            }

+            case 346:

+            case 344: {

+              input.ReadBoolArray(tag, field_name, result.repeatedBool_);

+              break;

+            }

+            case 354: {

+              input.ReadStringArray(tag, field_name, result.repeatedString_);

+              break;

+            }

+            case 362: {

+              input.ReadBytesArray(tag, field_name, result.repeatedBytes_);

+              break;

+            }

+            case 371: {

+              input.ReadGroupArray(tag, field_name, result.repeatedGroup_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 386: {

+              input.ReadMessageArray(tag, field_name, result.repeatedNestedMessage_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 394: {

+              input.ReadMessageArray(tag, field_name, result.repeatedForeignMessage_, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 402: {

+              input.ReadMessageArray(tag, field_name, result.repeatedImportMessage_, global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 410:

+            case 408: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>(tag, field_name, result.repeatedNestedEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(51, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 418:

+            case 416: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.repeatedForeignEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(52, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 426:

+            case 424: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ImportEnum>(tag, field_name, result.repeatedImportEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(53, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 434: {

+              input.ReadStringArray(tag, field_name, result.repeatedStringPiece_);

+              break;

+            }

+            case 442: {

+              input.ReadStringArray(tag, field_name, result.repeatedCord_);

+              break;

+            }

+            case 488: {

+              result.hasDefaultInt32 = input.ReadInt32(ref result.defaultInt32_);

+              break;

+            }

+            case 496: {

+              result.hasDefaultInt64 = input.ReadInt64(ref result.defaultInt64_);

+              break;

+            }

+            case 504: {

+              result.hasDefaultUint32 = input.ReadUInt32(ref result.defaultUint32_);

+              break;

+            }

+            case 512: {

+              result.hasDefaultUint64 = input.ReadUInt64(ref result.defaultUint64_);

+              break;

+            }

+            case 520: {

+              result.hasDefaultSint32 = input.ReadSInt32(ref result.defaultSint32_);

+              break;

+            }

+            case 528: {

+              result.hasDefaultSint64 = input.ReadSInt64(ref result.defaultSint64_);

+              break;

+            }

+            case 541: {

+              result.hasDefaultFixed32 = input.ReadFixed32(ref result.defaultFixed32_);

+              break;

+            }

+            case 545: {

+              result.hasDefaultFixed64 = input.ReadFixed64(ref result.defaultFixed64_);

+              break;

+            }

+            case 557: {

+              result.hasDefaultSfixed32 = input.ReadSFixed32(ref result.defaultSfixed32_);

+              break;

+            }

+            case 561: {

+              result.hasDefaultSfixed64 = input.ReadSFixed64(ref result.defaultSfixed64_);

+              break;

+            }

+            case 573: {

+              result.hasDefaultFloat = input.ReadFloat(ref result.defaultFloat_);

+              break;

+            }

+            case 577: {

+              result.hasDefaultDouble = input.ReadDouble(ref result.defaultDouble_);

+              break;

+            }

+            case 584: {

+              result.hasDefaultBool = input.ReadBool(ref result.defaultBool_);

+              break;

+            }

+            case 594: {

+              result.hasDefaultString = input.ReadString(ref result.defaultString_);

+              break;

+            }

+            case 602: {

+              result.hasDefaultBytes = input.ReadBytes(ref result.defaultBytes_);

+              break;

+            }

+            case 648: {

+              object unknown;

+              if(input.ReadEnum(ref result.defaultNestedEnum_, out unknown)) {

+                result.hasDefaultNestedEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(81, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 656: {

+              object unknown;

+              if(input.ReadEnum(ref result.defaultForeignEnum_, out unknown)) {

+                result.hasDefaultForeignEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(82, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 664: {

+              object unknown;

+              if(input.ReadEnum(ref result.defaultImportEnum_, out unknown)) {

+                result.hasDefaultImportEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(83, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 674: {

+              result.hasDefaultStringPiece = input.ReadString(ref result.defaultStringPiece_);

+              break;

+            }

+            case 682: {

+              result.hasDefaultCord = input.ReadString(ref result.defaultCord_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasOptionalInt32 {

+        get { return result.hasOptionalInt32; }

+      }

+      public int OptionalInt32 {

+        get { return result.OptionalInt32; }

+        set { SetOptionalInt32(value); }

+      }

+      public Builder SetOptionalInt32(int value) {

+        PrepareBuilder();

+        result.hasOptionalInt32 = true;

+        result.optionalInt32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalInt32() {

+        PrepareBuilder();

+        result.hasOptionalInt32 = false;

+        result.optionalInt32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalInt64 {

+        get { return result.hasOptionalInt64; }

+      }

+      public long OptionalInt64 {

+        get { return result.OptionalInt64; }

+        set { SetOptionalInt64(value); }

+      }

+      public Builder SetOptionalInt64(long value) {

+        PrepareBuilder();

+        result.hasOptionalInt64 = true;

+        result.optionalInt64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalInt64() {

+        PrepareBuilder();

+        result.hasOptionalInt64 = false;

+        result.optionalInt64_ = 0L;

+        return this;

+      }

+      

+      public bool HasOptionalUint32 {

+        get { return result.hasOptionalUint32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint OptionalUint32 {

+        get { return result.OptionalUint32; }

+        set { SetOptionalUint32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalUint32(uint value) {

+        PrepareBuilder();

+        result.hasOptionalUint32 = true;

+        result.optionalUint32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalUint32() {

+        PrepareBuilder();

+        result.hasOptionalUint32 = false;

+        result.optionalUint32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalUint64 {

+        get { return result.hasOptionalUint64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong OptionalUint64 {

+        get { return result.OptionalUint64; }

+        set { SetOptionalUint64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalUint64(ulong value) {

+        PrepareBuilder();

+        result.hasOptionalUint64 = true;

+        result.optionalUint64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalUint64() {

+        PrepareBuilder();

+        result.hasOptionalUint64 = false;

+        result.optionalUint64_ = 0UL;

+        return this;

+      }

+      

+      public bool HasOptionalSint32 {

+        get { return result.hasOptionalSint32; }

+      }

+      public int OptionalSint32 {

+        get { return result.OptionalSint32; }

+        set { SetOptionalSint32(value); }

+      }

+      public Builder SetOptionalSint32(int value) {

+        PrepareBuilder();

+        result.hasOptionalSint32 = true;

+        result.optionalSint32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSint32() {

+        PrepareBuilder();

+        result.hasOptionalSint32 = false;

+        result.optionalSint32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalSint64 {

+        get { return result.hasOptionalSint64; }

+      }

+      public long OptionalSint64 {

+        get { return result.OptionalSint64; }

+        set { SetOptionalSint64(value); }

+      }

+      public Builder SetOptionalSint64(long value) {

+        PrepareBuilder();

+        result.hasOptionalSint64 = true;

+        result.optionalSint64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSint64() {

+        PrepareBuilder();

+        result.hasOptionalSint64 = false;

+        result.optionalSint64_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalFixed32 {

+        get { return result.hasOptionalFixed32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint OptionalFixed32 {

+        get { return result.OptionalFixed32; }

+        set { SetOptionalFixed32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalFixed32(uint value) {

+        PrepareBuilder();

+        result.hasOptionalFixed32 = true;

+        result.optionalFixed32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalFixed32() {

+        PrepareBuilder();

+        result.hasOptionalFixed32 = false;

+        result.optionalFixed32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalFixed64 {

+        get { return result.hasOptionalFixed64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong OptionalFixed64 {

+        get { return result.OptionalFixed64; }

+        set { SetOptionalFixed64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalFixed64(ulong value) {

+        PrepareBuilder();

+        result.hasOptionalFixed64 = true;

+        result.optionalFixed64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalFixed64() {

+        PrepareBuilder();

+        result.hasOptionalFixed64 = false;

+        result.optionalFixed64_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalSfixed32 {

+        get { return result.hasOptionalSfixed32; }

+      }

+      public int OptionalSfixed32 {

+        get { return result.OptionalSfixed32; }

+        set { SetOptionalSfixed32(value); }

+      }

+      public Builder SetOptionalSfixed32(int value) {

+        PrepareBuilder();

+        result.hasOptionalSfixed32 = true;

+        result.optionalSfixed32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSfixed32() {

+        PrepareBuilder();

+        result.hasOptionalSfixed32 = false;

+        result.optionalSfixed32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalSfixed64 {

+        get { return result.hasOptionalSfixed64; }

+      }

+      public long OptionalSfixed64 {

+        get { return result.OptionalSfixed64; }

+        set { SetOptionalSfixed64(value); }

+      }

+      public Builder SetOptionalSfixed64(long value) {

+        PrepareBuilder();

+        result.hasOptionalSfixed64 = true;

+        result.optionalSfixed64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSfixed64() {

+        PrepareBuilder();

+        result.hasOptionalSfixed64 = false;

+        result.optionalSfixed64_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalFloat {

+        get { return result.hasOptionalFloat; }

+      }

+      public float OptionalFloat {

+        get { return result.OptionalFloat; }

+        set { SetOptionalFloat(value); }

+      }

+      public Builder SetOptionalFloat(float value) {

+        PrepareBuilder();

+        result.hasOptionalFloat = true;

+        result.optionalFloat_ = value;

+        return this;

+      }

+      public Builder ClearOptionalFloat() {

+        PrepareBuilder();

+        result.hasOptionalFloat = false;

+        result.optionalFloat_ = 0F;

+        return this;

+      }

+      

+      public bool HasOptionalDouble {

+        get { return result.hasOptionalDouble; }

+      }

+      public double OptionalDouble {

+        get { return result.OptionalDouble; }

+        set { SetOptionalDouble(value); }

+      }

+      public Builder SetOptionalDouble(double value) {

+        PrepareBuilder();

+        result.hasOptionalDouble = true;

+        result.optionalDouble_ = value;

+        return this;

+      }

+      public Builder ClearOptionalDouble() {

+        PrepareBuilder();

+        result.hasOptionalDouble = false;

+        result.optionalDouble_ = 0D;

+        return this;

+      }

+      

+      public bool HasOptionalBool {

+        get { return result.hasOptionalBool; }

+      }

+      public bool OptionalBool {

+        get { return result.OptionalBool; }

+        set { SetOptionalBool(value); }

+      }

+      public Builder SetOptionalBool(bool value) {

+        PrepareBuilder();

+        result.hasOptionalBool = true;

+        result.optionalBool_ = value;

+        return this;

+      }

+      public Builder ClearOptionalBool() {

+        PrepareBuilder();

+        result.hasOptionalBool = false;

+        result.optionalBool_ = false;

+        return this;

+      }

+      

+      public bool HasOptionalString {

+        get { return result.hasOptionalString; }

+      }

+      public string OptionalString {

+        get { return result.OptionalString; }

+        set { SetOptionalString(value); }

+      }

+      public Builder SetOptionalString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalString = true;

+        result.optionalString_ = value;

+        return this;

+      }

+      public Builder ClearOptionalString() {

+        PrepareBuilder();

+        result.hasOptionalString = false;

+        result.optionalString_ = "";

+        return this;

+      }

+      

+      public bool HasOptionalBytes {

+        get { return result.hasOptionalBytes; }

+      }

+      public pb::ByteString OptionalBytes {

+        get { return result.OptionalBytes; }

+        set { SetOptionalBytes(value); }

+      }

+      public Builder SetOptionalBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalBytes = true;

+        result.optionalBytes_ = value;

+        return this;

+      }

+      public Builder ClearOptionalBytes() {

+        PrepareBuilder();

+        result.hasOptionalBytes = false;

+        result.optionalBytes_ = pb::ByteString.Empty;

+        return this;

+      }

+      

+      public bool HasOptionalGroup {

+       get { return result.hasOptionalGroup; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup OptionalGroup {

+        get { return result.OptionalGroup; }

+        set { SetOptionalGroup(value); }

+      }

+      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalGroup = true;

+        result.optionalGroup_ = value;

+        return this;

+      }

+      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalGroup = true;

+        result.optionalGroup_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalGroup &&

+            result.optionalGroup_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance) {

+            result.optionalGroup_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.CreateBuilder(result.optionalGroup_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalGroup_ = value;

+        }

+        result.hasOptionalGroup = true;

+        return this;

+      }

+      public Builder ClearOptionalGroup() {

+        PrepareBuilder();

+        result.hasOptionalGroup = false;

+        result.optionalGroup_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalNestedMessage {

+       get { return result.hasOptionalNestedMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage OptionalNestedMessage {

+        get { return result.OptionalNestedMessage; }

+        set { SetOptionalNestedMessage(value); }

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalNestedMessage &&

+            result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) {

+            result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalNestedMessage_ = value;

+        }

+        result.hasOptionalNestedMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalNestedMessage() {

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = false;

+        result.optionalNestedMessage_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalForeignMessage {

+       get { return result.hasOptionalForeignMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage OptionalForeignMessage {

+        get { return result.OptionalForeignMessage; }

+        set { SetOptionalForeignMessage(value); }

+      }

+      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalForeignMessage = true;

+        result.optionalForeignMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalForeignMessage = true;

+        result.optionalForeignMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalForeignMessage &&

+            result.optionalForeignMessage_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {

+            result.optionalForeignMessage_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.optionalForeignMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalForeignMessage_ = value;

+        }

+        result.hasOptionalForeignMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalForeignMessage() {

+        PrepareBuilder();

+        result.hasOptionalForeignMessage = false;

+        result.optionalForeignMessage_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalImportMessage {

+       get { return result.hasOptionalImportMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportMessage OptionalImportMessage {

+        get { return result.OptionalImportMessage; }

+        set { SetOptionalImportMessage(value); }

+      }

+      public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalImportMessage = true;

+        result.optionalImportMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalImportMessage = true;

+        result.optionalImportMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalImportMessage &&

+            result.optionalImportMessage_ != global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance) {

+            result.optionalImportMessage_ = global::Google.ProtocolBuffers.TestProtos.ImportMessage.CreateBuilder(result.optionalImportMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalImportMessage_ = value;

+        }

+        result.hasOptionalImportMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalImportMessage() {

+        PrepareBuilder();

+        result.hasOptionalImportMessage = false;

+        result.optionalImportMessage_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalNestedEnum {

+       get { return result.hasOptionalNestedEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum OptionalNestedEnum {

+        get { return result.OptionalNestedEnum; }

+        set { SetOptionalNestedEnum(value); }

+      }

+      public Builder SetOptionalNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.hasOptionalNestedEnum = true;

+        result.optionalNestedEnum_ = value;

+        return this;

+      }

+      public Builder ClearOptionalNestedEnum() {

+        PrepareBuilder();

+        result.hasOptionalNestedEnum = false;

+        result.optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.FOO;

+        return this;

+      }

+      

+      public bool HasOptionalForeignEnum {

+       get { return result.hasOptionalForeignEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum OptionalForeignEnum {

+        get { return result.OptionalForeignEnum; }

+        set { SetOptionalForeignEnum(value); }

+      }

+      public Builder SetOptionalForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.hasOptionalForeignEnum = true;

+        result.optionalForeignEnum_ = value;

+        return this;

+      }

+      public Builder ClearOptionalForeignEnum() {

+        PrepareBuilder();

+        result.hasOptionalForeignEnum = false;

+        result.optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+        return this;

+      }

+      

+      public bool HasOptionalImportEnum {

+       get { return result.hasOptionalImportEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportEnum OptionalImportEnum {

+        get { return result.OptionalImportEnum; }

+        set { SetOptionalImportEnum(value); }

+      }

+      public Builder SetOptionalImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {

+        PrepareBuilder();

+        result.hasOptionalImportEnum = true;

+        result.optionalImportEnum_ = value;

+        return this;

+      }

+      public Builder ClearOptionalImportEnum() {

+        PrepareBuilder();

+        result.hasOptionalImportEnum = false;

+        result.optionalImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_FOO;

+        return this;

+      }

+      

+      public bool HasOptionalStringPiece {

+        get { return result.hasOptionalStringPiece; }

+      }

+      public string OptionalStringPiece {

+        get { return result.OptionalStringPiece; }

+        set { SetOptionalStringPiece(value); }

+      }

+      public Builder SetOptionalStringPiece(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalStringPiece = true;

+        result.optionalStringPiece_ = value;

+        return this;

+      }

+      public Builder ClearOptionalStringPiece() {

+        PrepareBuilder();

+        result.hasOptionalStringPiece = false;

+        result.optionalStringPiece_ = "";

+        return this;

+      }

+      

+      public bool HasOptionalCord {

+        get { return result.hasOptionalCord; }

+      }

+      public string OptionalCord {

+        get { return result.OptionalCord; }

+        set { SetOptionalCord(value); }

+      }

+      public Builder SetOptionalCord(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalCord = true;

+        result.optionalCord_ = value;

+        return this;

+      }

+      public Builder ClearOptionalCord() {

+        PrepareBuilder();

+        result.hasOptionalCord = false;

+        result.optionalCord_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedInt32List {

+        get { return PrepareBuilder().repeatedInt32_; }

+      }

+      public int RepeatedInt32Count {

+        get { return result.RepeatedInt32Count; }

+      }

+      public int GetRepeatedInt32(int index) {

+        return result.GetRepeatedInt32(index);

+      }

+      public Builder SetRepeatedInt32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt32(int value) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt32() {

+        PrepareBuilder();

+        result.repeatedInt32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedInt64List {

+        get { return PrepareBuilder().repeatedInt64_; }

+      }

+      public int RepeatedInt64Count {

+        get { return result.RepeatedInt64Count; }

+      }

+      public long GetRepeatedInt64(int index) {

+        return result.GetRepeatedInt64(index);

+      }

+      public Builder SetRepeatedInt64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt64(long value) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt64() {

+        PrepareBuilder();

+        result.repeatedInt64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> RepeatedUint32List {

+        get { return PrepareBuilder().repeatedUint32_; }

+      }

+      public int RepeatedUint32Count {

+        get { return result.RepeatedUint32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetRepeatedUint32(int index) {

+        return result.GetRepeatedUint32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedUint32(int index, uint value) {

+        PrepareBuilder();

+        result.repeatedUint32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedUint32(uint value) {

+        PrepareBuilder();

+        result.repeatedUint32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedUint32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.repeatedUint32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedUint32() {

+        PrepareBuilder();

+        result.repeatedUint32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedUint64List {

+        get { return PrepareBuilder().repeatedUint64_; }

+      }

+      public int RepeatedUint64Count {

+        get { return result.RepeatedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedUint64(int index) {

+        return result.GetRepeatedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedUint64(ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedUint64() {

+        PrepareBuilder();

+        result.repeatedUint64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedSint32List {

+        get { return PrepareBuilder().repeatedSint32_; }

+      }

+      public int RepeatedSint32Count {

+        get { return result.RepeatedSint32Count; }

+      }

+      public int GetRepeatedSint32(int index) {

+        return result.GetRepeatedSint32(index);

+      }

+      public Builder SetRepeatedSint32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedSint32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSint32(int value) {

+        PrepareBuilder();

+        result.repeatedSint32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSint32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedSint32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSint32() {

+        PrepareBuilder();

+        result.repeatedSint32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedSint64List {

+        get { return PrepareBuilder().repeatedSint64_; }

+      }

+      public int RepeatedSint64Count {

+        get { return result.RepeatedSint64Count; }

+      }

+      public long GetRepeatedSint64(int index) {

+        return result.GetRepeatedSint64(index);

+      }

+      public Builder SetRepeatedSint64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedSint64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSint64(long value) {

+        PrepareBuilder();

+        result.repeatedSint64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSint64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedSint64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSint64() {

+        PrepareBuilder();

+        result.repeatedSint64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> RepeatedFixed32List {

+        get { return PrepareBuilder().repeatedFixed32_; }

+      }

+      public int RepeatedFixed32Count {

+        get { return result.RepeatedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetRepeatedFixed32(int index) {

+        return result.GetRepeatedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed32(uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed32() {

+        PrepareBuilder();

+        result.repeatedFixed32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedFixed64List {

+        get { return PrepareBuilder().repeatedFixed64_; }

+      }

+      public int RepeatedFixed64Count {

+        get { return result.RepeatedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedFixed64(int index) {

+        return result.GetRepeatedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed64(ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed64() {

+        PrepareBuilder();

+        result.repeatedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedSfixed32List {

+        get { return PrepareBuilder().repeatedSfixed32_; }

+      }

+      public int RepeatedSfixed32Count {

+        get { return result.RepeatedSfixed32Count; }

+      }

+      public int GetRepeatedSfixed32(int index) {

+        return result.GetRepeatedSfixed32(index);

+      }

+      public Builder SetRepeatedSfixed32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedSfixed32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSfixed32(int value) {

+        PrepareBuilder();

+        result.repeatedSfixed32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSfixed32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedSfixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSfixed32() {

+        PrepareBuilder();

+        result.repeatedSfixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedSfixed64List {

+        get { return PrepareBuilder().repeatedSfixed64_; }

+      }

+      public int RepeatedSfixed64Count {

+        get { return result.RepeatedSfixed64Count; }

+      }

+      public long GetRepeatedSfixed64(int index) {

+        return result.GetRepeatedSfixed64(index);

+      }

+      public Builder SetRepeatedSfixed64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedSfixed64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSfixed64(long value) {

+        PrepareBuilder();

+        result.repeatedSfixed64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSfixed64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedSfixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSfixed64() {

+        PrepareBuilder();

+        result.repeatedSfixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> RepeatedFloatList {

+        get { return PrepareBuilder().repeatedFloat_; }

+      }

+      public int RepeatedFloatCount {

+        get { return result.RepeatedFloatCount; }

+      }

+      public float GetRepeatedFloat(int index) {

+        return result.GetRepeatedFloat(index);

+      }

+      public Builder SetRepeatedFloat(int index, float value) {

+        PrepareBuilder();

+        result.repeatedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedFloat(float value) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFloat() {

+        PrepareBuilder();

+        result.repeatedFloat_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<double> RepeatedDoubleList {

+        get { return PrepareBuilder().repeatedDouble_; }

+      }

+      public int RepeatedDoubleCount {

+        get { return result.RepeatedDoubleCount; }

+      }

+      public double GetRepeatedDouble(int index) {

+        return result.GetRepeatedDouble(index);

+      }

+      public Builder SetRepeatedDouble(int index, double value) {

+        PrepareBuilder();

+        result.repeatedDouble_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedDouble(double value) {

+        PrepareBuilder();

+        result.repeatedDouble_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedDouble(scg::IEnumerable<double> values) {

+        PrepareBuilder();

+        result.repeatedDouble_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedDouble() {

+        PrepareBuilder();

+        result.repeatedDouble_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<bool> RepeatedBoolList {

+        get { return PrepareBuilder().repeatedBool_; }

+      }

+      public int RepeatedBoolCount {

+        get { return result.RepeatedBoolCount; }

+      }

+      public bool GetRepeatedBool(int index) {

+        return result.GetRepeatedBool(index);

+      }

+      public Builder SetRepeatedBool(int index, bool value) {

+        PrepareBuilder();

+        result.repeatedBool_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedBool(bool value) {

+        PrepareBuilder();

+        result.repeatedBool_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedBool(scg::IEnumerable<bool> values) {

+        PrepareBuilder();

+        result.repeatedBool_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedBool() {

+        PrepareBuilder();

+        result.repeatedBool_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringList {

+        get { return PrepareBuilder().repeatedString_; }

+      }

+      public int RepeatedStringCount {

+        get { return result.RepeatedStringCount; }

+      }

+      public string GetRepeatedString(int index) {

+        return result.GetRepeatedString(index);

+      }

+      public Builder SetRepeatedString(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedString_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedString_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedString(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedString_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedString() {

+        PrepareBuilder();

+        result.repeatedString_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<pb::ByteString> RepeatedBytesList {

+        get { return PrepareBuilder().repeatedBytes_; }

+      }

+      public int RepeatedBytesCount {

+        get { return result.RepeatedBytesCount; }

+      }

+      public pb::ByteString GetRepeatedBytes(int index) {

+        return result.GetRepeatedBytes(index);

+      }

+      public Builder SetRepeatedBytes(int index, pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedBytes_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedBytes_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedBytes(scg::IEnumerable<pb::ByteString> values) {

+        PrepareBuilder();

+        result.repeatedBytes_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedBytes() {

+        PrepareBuilder();

+        result.repeatedBytes_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> RepeatedGroupList {

+        get { return PrepareBuilder().repeatedGroup_; }

+      }

+      public int RepeatedGroupCount {

+        get { return result.RepeatedGroupCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup GetRepeatedGroup(int index) {

+        return result.GetRepeatedGroup(index);

+      }

+      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedGroup_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedGroup_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedGroup_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedGroup_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedGroup(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> values) {

+        PrepareBuilder();

+        result.repeatedGroup_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedGroup() {

+        PrepareBuilder();

+        result.repeatedGroup_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> RepeatedNestedMessageList {

+        get { return PrepareBuilder().repeatedNestedMessage_; }

+      }

+      public int RepeatedNestedMessageCount {

+        get { return result.RepeatedNestedMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage GetRepeatedNestedMessage(int index) {

+        return result.GetRepeatedNestedMessage(index);

+      }

+      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedNestedMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedNestedMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedNestedMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> values) {

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedNestedMessage() {

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedForeignMessageList {

+        get { return PrepareBuilder().repeatedForeignMessage_; }

+      }

+      public int RepeatedForeignMessageCount {

+        get { return result.RepeatedForeignMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedForeignMessage(int index) {

+        return result.GetRepeatedForeignMessage(index);

+      }

+      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedForeignMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedForeignMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedForeignMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> values) {

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedForeignMessage() {

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessage> RepeatedImportMessageList {

+        get { return PrepareBuilder().repeatedImportMessage_; }

+      }

+      public int RepeatedImportMessageCount {

+        get { return result.RepeatedImportMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportMessage GetRepeatedImportMessage(int index) {

+        return result.GetRepeatedImportMessage(index);

+      }

+      public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedImportMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedImportMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedImportMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedImportMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedImportMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ImportMessage> values) {

+        PrepareBuilder();

+        result.repeatedImportMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedImportMessage() {

+        PrepareBuilder();

+        result.repeatedImportMessage_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> RepeatedNestedEnumList {

+        get { return PrepareBuilder().repeatedNestedEnum_; }

+      }

+      public int RepeatedNestedEnumCount {

+        get { return result.RepeatedNestedEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum GetRepeatedNestedEnum(int index) {

+        return result.GetRepeatedNestedEnum(index);

+      }

+      public Builder SetRepeatedNestedEnum(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.repeatedNestedEnum_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.repeatedNestedEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedNestedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> values) {

+        PrepareBuilder();

+        result.repeatedNestedEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedNestedEnum() {

+        PrepareBuilder();

+        result.repeatedNestedEnum_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedForeignEnumList {

+        get { return PrepareBuilder().repeatedForeignEnum_; }

+      }

+      public int RepeatedForeignEnumCount {

+        get { return result.RepeatedForeignEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedForeignEnum(int index) {

+        return result.GetRepeatedForeignEnum(index);

+      }

+      public Builder SetRepeatedForeignEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.repeatedForeignEnum_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.repeatedForeignEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedForeignEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {

+        PrepareBuilder();

+        result.repeatedForeignEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedForeignEnum() {

+        PrepareBuilder();

+        result.repeatedForeignEnum_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnum> RepeatedImportEnumList {

+        get { return PrepareBuilder().repeatedImportEnum_; }

+      }

+      public int RepeatedImportEnumCount {

+        get { return result.RepeatedImportEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportEnum GetRepeatedImportEnum(int index) {

+        return result.GetRepeatedImportEnum(index);

+      }

+      public Builder SetRepeatedImportEnum(int index, global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {

+        PrepareBuilder();

+        result.repeatedImportEnum_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {

+        PrepareBuilder();

+        result.repeatedImportEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedImportEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ImportEnum> values) {

+        PrepareBuilder();

+        result.repeatedImportEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedImportEnum() {

+        PrepareBuilder();

+        result.repeatedImportEnum_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringPieceList {

+        get { return PrepareBuilder().repeatedStringPiece_; }

+      }

+      public int RepeatedStringPieceCount {

+        get { return result.RepeatedStringPieceCount; }

+      }

+      public string GetRepeatedStringPiece(int index) {

+        return result.GetRepeatedStringPiece(index);

+      }

+      public Builder SetRepeatedStringPiece(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPiece_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedStringPiece(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPiece_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedStringPiece(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedStringPiece_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedStringPiece() {

+        PrepareBuilder();

+        result.repeatedStringPiece_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedCordList {

+        get { return PrepareBuilder().repeatedCord_; }

+      }

+      public int RepeatedCordCount {

+        get { return result.RepeatedCordCount; }

+      }

+      public string GetRepeatedCord(int index) {

+        return result.GetRepeatedCord(index);

+      }

+      public Builder SetRepeatedCord(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCord_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedCord(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCord_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedCord(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedCord_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedCord() {

+        PrepareBuilder();

+        result.repeatedCord_.Clear();

+        return this;

+      }

+      

+      public bool HasDefaultInt32 {

+        get { return result.hasDefaultInt32; }

+      }

+      public int DefaultInt32 {

+        get { return result.DefaultInt32; }

+        set { SetDefaultInt32(value); }

+      }

+      public Builder SetDefaultInt32(int value) {

+        PrepareBuilder();

+        result.hasDefaultInt32 = true;

+        result.defaultInt32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultInt32() {

+        PrepareBuilder();

+        result.hasDefaultInt32 = false;

+        result.defaultInt32_ = 41;

+        return this;

+      }

+      

+      public bool HasDefaultInt64 {

+        get { return result.hasDefaultInt64; }

+      }

+      public long DefaultInt64 {

+        get { return result.DefaultInt64; }

+        set { SetDefaultInt64(value); }

+      }

+      public Builder SetDefaultInt64(long value) {

+        PrepareBuilder();

+        result.hasDefaultInt64 = true;

+        result.defaultInt64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultInt64() {

+        PrepareBuilder();

+        result.hasDefaultInt64 = false;

+        result.defaultInt64_ = 42L;

+        return this;

+      }

+      

+      public bool HasDefaultUint32 {

+        get { return result.hasDefaultUint32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint DefaultUint32 {

+        get { return result.DefaultUint32; }

+        set { SetDefaultUint32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultUint32(uint value) {

+        PrepareBuilder();

+        result.hasDefaultUint32 = true;

+        result.defaultUint32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultUint32() {

+        PrepareBuilder();

+        result.hasDefaultUint32 = false;

+        result.defaultUint32_ = 43;

+        return this;

+      }

+      

+      public bool HasDefaultUint64 {

+        get { return result.hasDefaultUint64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong DefaultUint64 {

+        get { return result.DefaultUint64; }

+        set { SetDefaultUint64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultUint64(ulong value) {

+        PrepareBuilder();

+        result.hasDefaultUint64 = true;

+        result.defaultUint64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultUint64() {

+        PrepareBuilder();

+        result.hasDefaultUint64 = false;

+        result.defaultUint64_ = 44UL;

+        return this;

+      }

+      

+      public bool HasDefaultSint32 {

+        get { return result.hasDefaultSint32; }

+      }

+      public int DefaultSint32 {

+        get { return result.DefaultSint32; }

+        set { SetDefaultSint32(value); }

+      }

+      public Builder SetDefaultSint32(int value) {

+        PrepareBuilder();

+        result.hasDefaultSint32 = true;

+        result.defaultSint32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSint32() {

+        PrepareBuilder();

+        result.hasDefaultSint32 = false;

+        result.defaultSint32_ = -45;

+        return this;

+      }

+      

+      public bool HasDefaultSint64 {

+        get { return result.hasDefaultSint64; }

+      }

+      public long DefaultSint64 {

+        get { return result.DefaultSint64; }

+        set { SetDefaultSint64(value); }

+      }

+      public Builder SetDefaultSint64(long value) {

+        PrepareBuilder();

+        result.hasDefaultSint64 = true;

+        result.defaultSint64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSint64() {

+        PrepareBuilder();

+        result.hasDefaultSint64 = false;

+        result.defaultSint64_ = 46;

+        return this;

+      }

+      

+      public bool HasDefaultFixed32 {

+        get { return result.hasDefaultFixed32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint DefaultFixed32 {

+        get { return result.DefaultFixed32; }

+        set { SetDefaultFixed32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultFixed32(uint value) {

+        PrepareBuilder();

+        result.hasDefaultFixed32 = true;

+        result.defaultFixed32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultFixed32() {

+        PrepareBuilder();

+        result.hasDefaultFixed32 = false;

+        result.defaultFixed32_ = 47;

+        return this;

+      }

+      

+      public bool HasDefaultFixed64 {

+        get { return result.hasDefaultFixed64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong DefaultFixed64 {

+        get { return result.DefaultFixed64; }

+        set { SetDefaultFixed64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultFixed64(ulong value) {

+        PrepareBuilder();

+        result.hasDefaultFixed64 = true;

+        result.defaultFixed64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultFixed64() {

+        PrepareBuilder();

+        result.hasDefaultFixed64 = false;

+        result.defaultFixed64_ = 48;

+        return this;

+      }

+      

+      public bool HasDefaultSfixed32 {

+        get { return result.hasDefaultSfixed32; }

+      }

+      public int DefaultSfixed32 {

+        get { return result.DefaultSfixed32; }

+        set { SetDefaultSfixed32(value); }

+      }

+      public Builder SetDefaultSfixed32(int value) {

+        PrepareBuilder();

+        result.hasDefaultSfixed32 = true;

+        result.defaultSfixed32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSfixed32() {

+        PrepareBuilder();

+        result.hasDefaultSfixed32 = false;

+        result.defaultSfixed32_ = 49;

+        return this;

+      }

+      

+      public bool HasDefaultSfixed64 {

+        get { return result.hasDefaultSfixed64; }

+      }

+      public long DefaultSfixed64 {

+        get { return result.DefaultSfixed64; }

+        set { SetDefaultSfixed64(value); }

+      }

+      public Builder SetDefaultSfixed64(long value) {

+        PrepareBuilder();

+        result.hasDefaultSfixed64 = true;

+        result.defaultSfixed64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSfixed64() {

+        PrepareBuilder();

+        result.hasDefaultSfixed64 = false;

+        result.defaultSfixed64_ = -50;

+        return this;

+      }

+      

+      public bool HasDefaultFloat {

+        get { return result.hasDefaultFloat; }

+      }

+      public float DefaultFloat {

+        get { return result.DefaultFloat; }

+        set { SetDefaultFloat(value); }

+      }

+      public Builder SetDefaultFloat(float value) {

+        PrepareBuilder();

+        result.hasDefaultFloat = true;

+        result.defaultFloat_ = value;

+        return this;

+      }

+      public Builder ClearDefaultFloat() {

+        PrepareBuilder();

+        result.hasDefaultFloat = false;

+        result.defaultFloat_ = 51.5F;

+        return this;

+      }

+      

+      public bool HasDefaultDouble {

+        get { return result.hasDefaultDouble; }

+      }

+      public double DefaultDouble {

+        get { return result.DefaultDouble; }

+        set { SetDefaultDouble(value); }

+      }

+      public Builder SetDefaultDouble(double value) {

+        PrepareBuilder();

+        result.hasDefaultDouble = true;

+        result.defaultDouble_ = value;

+        return this;

+      }

+      public Builder ClearDefaultDouble() {

+        PrepareBuilder();

+        result.hasDefaultDouble = false;

+        result.defaultDouble_ = 52000D;

+        return this;

+      }

+      

+      public bool HasDefaultBool {

+        get { return result.hasDefaultBool; }

+      }

+      public bool DefaultBool {

+        get { return result.DefaultBool; }

+        set { SetDefaultBool(value); }

+      }

+      public Builder SetDefaultBool(bool value) {

+        PrepareBuilder();

+        result.hasDefaultBool = true;

+        result.defaultBool_ = value;

+        return this;

+      }

+      public Builder ClearDefaultBool() {

+        PrepareBuilder();

+        result.hasDefaultBool = false;

+        result.defaultBool_ = true;

+        return this;

+      }

+      

+      public bool HasDefaultString {

+        get { return result.hasDefaultString; }

+      }

+      public string DefaultString {

+        get { return result.DefaultString; }

+        set { SetDefaultString(value); }

+      }

+      public Builder SetDefaultString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultString = true;

+        result.defaultString_ = value;

+        return this;

+      }

+      public Builder ClearDefaultString() {

+        PrepareBuilder();

+        result.hasDefaultString = false;

+        result.defaultString_ = "hello";

+        return this;

+      }

+      

+      public bool HasDefaultBytes {

+        get { return result.hasDefaultBytes; }

+      }

+      public pb::ByteString DefaultBytes {

+        get { return result.DefaultBytes; }

+        set { SetDefaultBytes(value); }

+      }

+      public Builder SetDefaultBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultBytes = true;

+        result.defaultBytes_ = value;

+        return this;

+      }

+      public Builder ClearDefaultBytes() {

+        PrepareBuilder();

+        result.hasDefaultBytes = false;

+        result.defaultBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Descriptor.Fields[62].DefaultValue;

+        return this;

+      }

+      

+      public bool HasDefaultNestedEnum {

+       get { return result.hasDefaultNestedEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum DefaultNestedEnum {

+        get { return result.DefaultNestedEnum; }

+        set { SetDefaultNestedEnum(value); }

+      }

+      public Builder SetDefaultNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.hasDefaultNestedEnum = true;

+        result.defaultNestedEnum_ = value;

+        return this;

+      }

+      public Builder ClearDefaultNestedEnum() {

+        PrepareBuilder();

+        result.hasDefaultNestedEnum = false;

+        result.defaultNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.BAR;

+        return this;

+      }

+      

+      public bool HasDefaultForeignEnum {

+       get { return result.hasDefaultForeignEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum DefaultForeignEnum {

+        get { return result.DefaultForeignEnum; }

+        set { SetDefaultForeignEnum(value); }

+      }

+      public Builder SetDefaultForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.hasDefaultForeignEnum = true;

+        result.defaultForeignEnum_ = value;

+        return this;

+      }

+      public Builder ClearDefaultForeignEnum() {

+        PrepareBuilder();

+        result.hasDefaultForeignEnum = false;

+        result.defaultForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_BAR;

+        return this;

+      }

+      

+      public bool HasDefaultImportEnum {

+       get { return result.hasDefaultImportEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportEnum DefaultImportEnum {

+        get { return result.DefaultImportEnum; }

+        set { SetDefaultImportEnum(value); }

+      }

+      public Builder SetDefaultImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {

+        PrepareBuilder();

+        result.hasDefaultImportEnum = true;

+        result.defaultImportEnum_ = value;

+        return this;

+      }

+      public Builder ClearDefaultImportEnum() {

+        PrepareBuilder();

+        result.hasDefaultImportEnum = false;

+        result.defaultImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_BAR;

+        return this;

+      }

+      

+      public bool HasDefaultStringPiece {

+        get { return result.hasDefaultStringPiece; }

+      }

+      public string DefaultStringPiece {

+        get { return result.DefaultStringPiece; }

+        set { SetDefaultStringPiece(value); }

+      }

+      public Builder SetDefaultStringPiece(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultStringPiece = true;

+        result.defaultStringPiece_ = value;

+        return this;

+      }

+      public Builder ClearDefaultStringPiece() {

+        PrepareBuilder();

+        result.hasDefaultStringPiece = false;

+        result.defaultStringPiece_ = "abc";

+        return this;

+      }

+      

+      public bool HasDefaultCord {

+        get { return result.hasDefaultCord; }

+      }

+      public string DefaultCord {

+        get { return result.DefaultCord; }

+        set { SetDefaultCord(value); }

+      }

+      public Builder SetDefaultCord(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultCord = true;

+        result.defaultCord_ = value;

+        return this;

+      }

+      public Builder ClearDefaultCord() {

+        PrepareBuilder();

+        result.hasDefaultCord = false;

+        result.defaultCord_ = "123";

+        return this;

+      }

+    }

+    static TestAllTypes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestDeprecatedFields : pb::GeneratedMessage<TestDeprecatedFields, TestDeprecatedFields.Builder> {

+    private TestDeprecatedFields() { }

+    private static readonly TestDeprecatedFields defaultInstance = new TestDeprecatedFields().MakeReadOnly();

+    private static readonly string[] _testDeprecatedFieldsFieldNames = new string[] { "deprecated_int32" };

+    private static readonly uint[] _testDeprecatedFieldsFieldTags = new uint[] { 8 };

+    public static TestDeprecatedFields DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestDeprecatedFields DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestDeprecatedFields ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestDeprecatedFields, TestDeprecatedFields.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable; }

+    }

+    

+    public const int DeprecatedInt32FieldNumber = 1;

+    private bool hasDeprecatedInt32;

+    private int deprecatedInt32_;

+    [global::System.ObsoleteAttribute()]

+    public bool HasDeprecatedInt32 {

+      get { return hasDeprecatedInt32; }

+    }

+    [global::System.ObsoleteAttribute()]

+    public int DeprecatedInt32 {

+      get { return deprecatedInt32_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testDeprecatedFieldsFieldNames;

+      if (hasDeprecatedInt32) {

+        output.WriteInt32(1, field_names[0], DeprecatedInt32);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasDeprecatedInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, DeprecatedInt32);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestDeprecatedFields ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestDeprecatedFields MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestDeprecatedFields prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestDeprecatedFields, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestDeprecatedFields cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestDeprecatedFields result;

+      

+      private TestDeprecatedFields PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestDeprecatedFields original = result;

+          result = new TestDeprecatedFields();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestDeprecatedFields MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.Descriptor; }

+      }

+      

+      public override TestDeprecatedFields DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.DefaultInstance; }

+      }

+      

+      public override TestDeprecatedFields BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestDeprecatedFields) {

+          return MergeFrom((TestDeprecatedFields) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestDeprecatedFields other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasDeprecatedInt32) {

+          DeprecatedInt32 = other.DeprecatedInt32;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testDeprecatedFieldsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testDeprecatedFieldsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasDeprecatedInt32 = input.ReadInt32(ref result.deprecatedInt32_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      [global::System.ObsoleteAttribute()]

+      public bool HasDeprecatedInt32 {

+        get { return result.hasDeprecatedInt32; }

+      }

+      [global::System.ObsoleteAttribute()]

+      public int DeprecatedInt32 {

+        get { return result.DeprecatedInt32; }

+        set { SetDeprecatedInt32(value); }

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder SetDeprecatedInt32(int value) {

+        PrepareBuilder();

+        result.hasDeprecatedInt32 = true;

+        result.deprecatedInt32_ = value;

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder ClearDeprecatedInt32() {

+        PrepareBuilder();

+        result.hasDeprecatedInt32 = false;

+        result.deprecatedInt32_ = 0;

+        return this;

+      }

+    }

+    static TestDeprecatedFields() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ForeignMessage : pb::GeneratedMessage<ForeignMessage, ForeignMessage.Builder> {

+    private ForeignMessage() { }

+    private static readonly ForeignMessage defaultInstance = new ForeignMessage().MakeReadOnly();

+    private static readonly string[] _foreignMessageFieldNames = new string[] { "c" };

+    private static readonly uint[] _foreignMessageFieldTags = new uint[] { 8 };

+    public static ForeignMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ForeignMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ForeignMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_ForeignMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<ForeignMessage, ForeignMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable; }

+    }

+    

+    public const int CFieldNumber = 1;

+    private bool hasC;

+    private int c_;

+    public bool HasC {

+      get { return hasC; }

+    }

+    public int C {

+      get { return c_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _foreignMessageFieldNames;

+      if (hasC) {

+        output.WriteInt32(1, field_names[0], C);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasC) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, C);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static ForeignMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ForeignMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ForeignMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ForeignMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ForeignMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<ForeignMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ForeignMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ForeignMessage result;

+      

+      private ForeignMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ForeignMessage original = result;

+          result = new ForeignMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ForeignMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Descriptor; }

+      }

+      

+      public override ForeignMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }

+      }

+      

+      public override ForeignMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is ForeignMessage) {

+          return MergeFrom((ForeignMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ForeignMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasC) {

+          C = other.C;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_foreignMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _foreignMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasC = input.ReadInt32(ref result.c_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasC {

+        get { return result.hasC; }

+      }

+      public int C {

+        get { return result.C; }

+        set { SetC(value); }

+      }

+      public Builder SetC(int value) {

+        PrepareBuilder();

+        result.hasC = true;

+        result.c_ = value;

+        return this;

+      }

+      public Builder ClearC() {

+        PrepareBuilder();

+        result.hasC = false;

+        result.c_ = 0;

+        return this;

+      }

+    }

+    static ForeignMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestAllExtensions : pb::ExtendableMessage<TestAllExtensions, TestAllExtensions.Builder> {

+    private TestAllExtensions() { }

+    private static readonly TestAllExtensions defaultInstance = new TestAllExtensions().MakeReadOnly();

+    private static readonly string[] _testAllExtensionsFieldNames = new string[] {  };

+    private static readonly uint[] _testAllExtensionsFieldTags = new uint[] {  };

+    public static TestAllExtensions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestAllExtensions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestAllExtensions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllExtensions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestAllExtensions, TestAllExtensions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllExtensions__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testAllExtensionsFieldNames;

+      pb::ExtendableMessage<TestAllExtensions, TestAllExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestAllExtensions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllExtensions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestAllExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestAllExtensions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestAllExtensions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestAllExtensions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestAllExtensions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestAllExtensions result;

+      

+      private TestAllExtensions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestAllExtensions original = result;

+          result = new TestAllExtensions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestAllExtensions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.Descriptor; }

+      }

+      

+      public override TestAllExtensions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.DefaultInstance; }

+      }

+      

+      public override TestAllExtensions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestAllExtensions) {

+          return MergeFrom((TestAllExtensions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestAllExtensions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testAllExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testAllExtensionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestAllExtensions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class OptionalGroup_extension : pb::GeneratedMessage<OptionalGroup_extension, OptionalGroup_extension.Builder> {

+    private OptionalGroup_extension() { }

+    private static readonly OptionalGroup_extension defaultInstance = new OptionalGroup_extension().MakeReadOnly();

+    private static readonly string[] _optionalGroupExtensionFieldNames = new string[] { "a" };

+    private static readonly uint[] _optionalGroupExtensionFieldTags = new uint[] { 136 };

+    public static OptionalGroup_extension DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override OptionalGroup_extension DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override OptionalGroup_extension ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<OptionalGroup_extension, OptionalGroup_extension.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OptionalGroup_extension__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 17;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _optionalGroupExtensionFieldNames;

+      if (hasA) {

+        output.WriteInt32(17, field_names[0], A);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(17, A);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static OptionalGroup_extension ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private OptionalGroup_extension MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(OptionalGroup_extension prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<OptionalGroup_extension, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(OptionalGroup_extension cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private OptionalGroup_extension result;

+      

+      private OptionalGroup_extension PrepareBuilder() {

+        if (resultIsReadOnly) {

+          OptionalGroup_extension original = result;

+          result = new OptionalGroup_extension();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override OptionalGroup_extension MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.Descriptor; }

+      }

+      

+      public override OptionalGroup_extension DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.DefaultInstance; }

+      }

+      

+      public override OptionalGroup_extension BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is OptionalGroup_extension) {

+          return MergeFrom((OptionalGroup_extension) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(OptionalGroup_extension other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_optionalGroupExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _optionalGroupExtensionFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 136: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+    }

+    static OptionalGroup_extension() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class RepeatedGroup_extension : pb::GeneratedMessage<RepeatedGroup_extension, RepeatedGroup_extension.Builder> {

+    private RepeatedGroup_extension() { }

+    private static readonly RepeatedGroup_extension defaultInstance = new RepeatedGroup_extension().MakeReadOnly();

+    private static readonly string[] _repeatedGroupExtensionFieldNames = new string[] { "a" };

+    private static readonly uint[] _repeatedGroupExtensionFieldTags = new uint[] { 376 };

+    public static RepeatedGroup_extension DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override RepeatedGroup_extension DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override RepeatedGroup_extension ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<RepeatedGroup_extension, RepeatedGroup_extension.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_RepeatedGroup_extension__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 47;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _repeatedGroupExtensionFieldNames;

+      if (hasA) {

+        output.WriteInt32(47, field_names[0], A);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(47, A);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static RepeatedGroup_extension ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private RepeatedGroup_extension MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(RepeatedGroup_extension prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<RepeatedGroup_extension, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(RepeatedGroup_extension cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private RepeatedGroup_extension result;

+      

+      private RepeatedGroup_extension PrepareBuilder() {

+        if (resultIsReadOnly) {

+          RepeatedGroup_extension original = result;

+          result = new RepeatedGroup_extension();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override RepeatedGroup_extension MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.Descriptor; }

+      }

+      

+      public override RepeatedGroup_extension DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.DefaultInstance; }

+      }

+      

+      public override RepeatedGroup_extension BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is RepeatedGroup_extension) {

+          return MergeFrom((RepeatedGroup_extension) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(RepeatedGroup_extension other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _repeatedGroupExtensionFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 376: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+    }

+    static RepeatedGroup_extension() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestNestedExtension : pb::GeneratedMessage<TestNestedExtension, TestNestedExtension.Builder> {

+    private TestNestedExtension() { }

+    private static readonly TestNestedExtension defaultInstance = new TestNestedExtension().MakeReadOnly();

+    private static readonly string[] _testNestedExtensionFieldNames = new string[] {  };

+    private static readonly uint[] _testNestedExtensionFieldTags = new uint[] {  };

+    public static TestNestedExtension DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestNestedExtension DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestNestedExtension ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedExtension__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestNestedExtension, TestNestedExtension.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedExtension__FieldAccessorTable; }

+    }

+    

+    public const int TestFieldNumber = 1002;

+    public static pb::GeneratedExtensionBase<string> Test;

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testNestedExtensionFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestNestedExtension ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedExtension ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestNestedExtension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestNestedExtension MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestNestedExtension prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestNestedExtension, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestNestedExtension cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestNestedExtension result;

+      

+      private TestNestedExtension PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestNestedExtension original = result;

+          result = new TestNestedExtension();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestNestedExtension MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Descriptor; }

+      }

+      

+      public override TestNestedExtension DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.DefaultInstance; }

+      }

+      

+      public override TestNestedExtension BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestNestedExtension) {

+          return MergeFrom((TestNestedExtension) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestNestedExtension other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testNestedExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testNestedExtensionFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestNestedExtension() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRequired : pb::GeneratedMessage<TestRequired, TestRequired.Builder> {

+    private TestRequired() { }

+    private static readonly TestRequired defaultInstance = new TestRequired().MakeReadOnly();

+    private static readonly string[] _testRequiredFieldNames = new string[] { "a", "b", "c", "dummy10", "dummy11", "dummy12", "dummy13", "dummy14", "dummy15", "dummy16", "dummy17", "dummy18", "dummy19", "dummy2", "dummy20", "dummy21", "dummy22", "dummy23", "dummy24", "dummy25", "dummy26", "dummy27", "dummy28", "dummy29", "dummy30", "dummy31", "dummy32", "dummy4", "dummy5", "dummy6", "dummy7", "dummy8", "dummy9" };

+    private static readonly uint[] _testRequiredFieldTags = new uint[] { 8, 24, 264, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 16, 160, 168, 176, 184, 192, 200, 208, 216, 224, 232, 240, 248, 256, 32, 40, 48, 56, 64, 72 };

+    public static TestRequired DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRequired DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRequired ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRequired__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestRequired, TestRequired.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRequired__FieldAccessorTable; }

+    }

+    

+    public const int SingleFieldNumber = 1000;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestRequired> Single;

+    public const int MultiFieldNumber = 1001;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestRequired>> Multi;

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public const int Dummy2FieldNumber = 2;

+    private bool hasDummy2;

+    private int dummy2_;

+    public bool HasDummy2 {

+      get { return hasDummy2; }

+    }

+    public int Dummy2 {

+      get { return dummy2_; }

+    }

+    

+    public const int BFieldNumber = 3;

+    private bool hasB;

+    private int b_;

+    public bool HasB {

+      get { return hasB; }

+    }

+    public int B {

+      get { return b_; }

+    }

+    

+    public const int Dummy4FieldNumber = 4;

+    private bool hasDummy4;

+    private int dummy4_;

+    public bool HasDummy4 {

+      get { return hasDummy4; }

+    }

+    public int Dummy4 {

+      get { return dummy4_; }

+    }

+    

+    public const int Dummy5FieldNumber = 5;

+    private bool hasDummy5;

+    private int dummy5_;

+    public bool HasDummy5 {

+      get { return hasDummy5; }

+    }

+    public int Dummy5 {

+      get { return dummy5_; }

+    }

+    

+    public const int Dummy6FieldNumber = 6;

+    private bool hasDummy6;

+    private int dummy6_;

+    public bool HasDummy6 {

+      get { return hasDummy6; }

+    }

+    public int Dummy6 {

+      get { return dummy6_; }

+    }

+    

+    public const int Dummy7FieldNumber = 7;

+    private bool hasDummy7;

+    private int dummy7_;

+    public bool HasDummy7 {

+      get { return hasDummy7; }

+    }

+    public int Dummy7 {

+      get { return dummy7_; }

+    }

+    

+    public const int Dummy8FieldNumber = 8;

+    private bool hasDummy8;

+    private int dummy8_;

+    public bool HasDummy8 {

+      get { return hasDummy8; }

+    }

+    public int Dummy8 {

+      get { return dummy8_; }

+    }

+    

+    public const int Dummy9FieldNumber = 9;

+    private bool hasDummy9;

+    private int dummy9_;

+    public bool HasDummy9 {

+      get { return hasDummy9; }

+    }

+    public int Dummy9 {

+      get { return dummy9_; }

+    }

+    

+    public const int Dummy10FieldNumber = 10;

+    private bool hasDummy10;

+    private int dummy10_;

+    public bool HasDummy10 {

+      get { return hasDummy10; }

+    }

+    public int Dummy10 {

+      get { return dummy10_; }

+    }

+    

+    public const int Dummy11FieldNumber = 11;

+    private bool hasDummy11;

+    private int dummy11_;

+    public bool HasDummy11 {

+      get { return hasDummy11; }

+    }

+    public int Dummy11 {

+      get { return dummy11_; }

+    }

+    

+    public const int Dummy12FieldNumber = 12;

+    private bool hasDummy12;

+    private int dummy12_;

+    public bool HasDummy12 {

+      get { return hasDummy12; }

+    }

+    public int Dummy12 {

+      get { return dummy12_; }

+    }

+    

+    public const int Dummy13FieldNumber = 13;

+    private bool hasDummy13;

+    private int dummy13_;

+    public bool HasDummy13 {

+      get { return hasDummy13; }

+    }

+    public int Dummy13 {

+      get { return dummy13_; }

+    }

+    

+    public const int Dummy14FieldNumber = 14;

+    private bool hasDummy14;

+    private int dummy14_;

+    public bool HasDummy14 {

+      get { return hasDummy14; }

+    }

+    public int Dummy14 {

+      get { return dummy14_; }

+    }

+    

+    public const int Dummy15FieldNumber = 15;

+    private bool hasDummy15;

+    private int dummy15_;

+    public bool HasDummy15 {

+      get { return hasDummy15; }

+    }

+    public int Dummy15 {

+      get { return dummy15_; }

+    }

+    

+    public const int Dummy16FieldNumber = 16;

+    private bool hasDummy16;

+    private int dummy16_;

+    public bool HasDummy16 {

+      get { return hasDummy16; }

+    }

+    public int Dummy16 {

+      get { return dummy16_; }

+    }

+    

+    public const int Dummy17FieldNumber = 17;

+    private bool hasDummy17;

+    private int dummy17_;

+    public bool HasDummy17 {

+      get { return hasDummy17; }

+    }

+    public int Dummy17 {

+      get { return dummy17_; }

+    }

+    

+    public const int Dummy18FieldNumber = 18;

+    private bool hasDummy18;

+    private int dummy18_;

+    public bool HasDummy18 {

+      get { return hasDummy18; }

+    }

+    public int Dummy18 {

+      get { return dummy18_; }

+    }

+    

+    public const int Dummy19FieldNumber = 19;

+    private bool hasDummy19;

+    private int dummy19_;

+    public bool HasDummy19 {

+      get { return hasDummy19; }

+    }

+    public int Dummy19 {

+      get { return dummy19_; }

+    }

+    

+    public const int Dummy20FieldNumber = 20;

+    private bool hasDummy20;

+    private int dummy20_;

+    public bool HasDummy20 {

+      get { return hasDummy20; }

+    }

+    public int Dummy20 {

+      get { return dummy20_; }

+    }

+    

+    public const int Dummy21FieldNumber = 21;

+    private bool hasDummy21;

+    private int dummy21_;

+    public bool HasDummy21 {

+      get { return hasDummy21; }

+    }

+    public int Dummy21 {

+      get { return dummy21_; }

+    }

+    

+    public const int Dummy22FieldNumber = 22;

+    private bool hasDummy22;

+    private int dummy22_;

+    public bool HasDummy22 {

+      get { return hasDummy22; }

+    }

+    public int Dummy22 {

+      get { return dummy22_; }

+    }

+    

+    public const int Dummy23FieldNumber = 23;

+    private bool hasDummy23;

+    private int dummy23_;

+    public bool HasDummy23 {

+      get { return hasDummy23; }

+    }

+    public int Dummy23 {

+      get { return dummy23_; }

+    }

+    

+    public const int Dummy24FieldNumber = 24;

+    private bool hasDummy24;

+    private int dummy24_;

+    public bool HasDummy24 {

+      get { return hasDummy24; }

+    }

+    public int Dummy24 {

+      get { return dummy24_; }

+    }

+    

+    public const int Dummy25FieldNumber = 25;

+    private bool hasDummy25;

+    private int dummy25_;

+    public bool HasDummy25 {

+      get { return hasDummy25; }

+    }

+    public int Dummy25 {

+      get { return dummy25_; }

+    }

+    

+    public const int Dummy26FieldNumber = 26;

+    private bool hasDummy26;

+    private int dummy26_;

+    public bool HasDummy26 {

+      get { return hasDummy26; }

+    }

+    public int Dummy26 {

+      get { return dummy26_; }

+    }

+    

+    public const int Dummy27FieldNumber = 27;

+    private bool hasDummy27;

+    private int dummy27_;

+    public bool HasDummy27 {

+      get { return hasDummy27; }

+    }

+    public int Dummy27 {

+      get { return dummy27_; }

+    }

+    

+    public const int Dummy28FieldNumber = 28;

+    private bool hasDummy28;

+    private int dummy28_;

+    public bool HasDummy28 {

+      get { return hasDummy28; }

+    }

+    public int Dummy28 {

+      get { return dummy28_; }

+    }

+    

+    public const int Dummy29FieldNumber = 29;

+    private bool hasDummy29;

+    private int dummy29_;

+    public bool HasDummy29 {

+      get { return hasDummy29; }

+    }

+    public int Dummy29 {

+      get { return dummy29_; }

+    }

+    

+    public const int Dummy30FieldNumber = 30;

+    private bool hasDummy30;

+    private int dummy30_;

+    public bool HasDummy30 {

+      get { return hasDummy30; }

+    }

+    public int Dummy30 {

+      get { return dummy30_; }

+    }

+    

+    public const int Dummy31FieldNumber = 31;

+    private bool hasDummy31;

+    private int dummy31_;

+    public bool HasDummy31 {

+      get { return hasDummy31; }

+    }

+    public int Dummy31 {

+      get { return dummy31_; }

+    }

+    

+    public const int Dummy32FieldNumber = 32;

+    private bool hasDummy32;

+    private int dummy32_;

+    public bool HasDummy32 {

+      get { return hasDummy32; }

+    }

+    public int Dummy32 {

+      get { return dummy32_; }

+    }

+    

+    public const int CFieldNumber = 33;

+    private bool hasC;

+    private int c_;

+    public bool HasC {

+      get { return hasC; }

+    }

+    public int C {

+      get { return c_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasA) return false;

+        if (!hasB) return false;

+        if (!hasC) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testRequiredFieldNames;

+      if (hasA) {

+        output.WriteInt32(1, field_names[0], A);

+      }

+      if (hasDummy2) {

+        output.WriteInt32(2, field_names[13], Dummy2);

+      }

+      if (hasB) {

+        output.WriteInt32(3, field_names[1], B);

+      }

+      if (hasDummy4) {

+        output.WriteInt32(4, field_names[27], Dummy4);

+      }

+      if (hasDummy5) {

+        output.WriteInt32(5, field_names[28], Dummy5);

+      }

+      if (hasDummy6) {

+        output.WriteInt32(6, field_names[29], Dummy6);

+      }

+      if (hasDummy7) {

+        output.WriteInt32(7, field_names[30], Dummy7);

+      }

+      if (hasDummy8) {

+        output.WriteInt32(8, field_names[31], Dummy8);

+      }

+      if (hasDummy9) {

+        output.WriteInt32(9, field_names[32], Dummy9);

+      }

+      if (hasDummy10) {

+        output.WriteInt32(10, field_names[3], Dummy10);

+      }

+      if (hasDummy11) {

+        output.WriteInt32(11, field_names[4], Dummy11);

+      }

+      if (hasDummy12) {

+        output.WriteInt32(12, field_names[5], Dummy12);

+      }

+      if (hasDummy13) {

+        output.WriteInt32(13, field_names[6], Dummy13);

+      }

+      if (hasDummy14) {

+        output.WriteInt32(14, field_names[7], Dummy14);

+      }

+      if (hasDummy15) {

+        output.WriteInt32(15, field_names[8], Dummy15);

+      }

+      if (hasDummy16) {

+        output.WriteInt32(16, field_names[9], Dummy16);

+      }

+      if (hasDummy17) {

+        output.WriteInt32(17, field_names[10], Dummy17);

+      }

+      if (hasDummy18) {

+        output.WriteInt32(18, field_names[11], Dummy18);

+      }

+      if (hasDummy19) {

+        output.WriteInt32(19, field_names[12], Dummy19);

+      }

+      if (hasDummy20) {

+        output.WriteInt32(20, field_names[14], Dummy20);

+      }

+      if (hasDummy21) {

+        output.WriteInt32(21, field_names[15], Dummy21);

+      }

+      if (hasDummy22) {

+        output.WriteInt32(22, field_names[16], Dummy22);

+      }

+      if (hasDummy23) {

+        output.WriteInt32(23, field_names[17], Dummy23);

+      }

+      if (hasDummy24) {

+        output.WriteInt32(24, field_names[18], Dummy24);

+      }

+      if (hasDummy25) {

+        output.WriteInt32(25, field_names[19], Dummy25);

+      }

+      if (hasDummy26) {

+        output.WriteInt32(26, field_names[20], Dummy26);

+      }

+      if (hasDummy27) {

+        output.WriteInt32(27, field_names[21], Dummy27);

+      }

+      if (hasDummy28) {

+        output.WriteInt32(28, field_names[22], Dummy28);

+      }

+      if (hasDummy29) {

+        output.WriteInt32(29, field_names[23], Dummy29);

+      }

+      if (hasDummy30) {

+        output.WriteInt32(30, field_names[24], Dummy30);

+      }

+      if (hasDummy31) {

+        output.WriteInt32(31, field_names[25], Dummy31);

+      }

+      if (hasDummy32) {

+        output.WriteInt32(32, field_names[26], Dummy32);

+      }

+      if (hasC) {

+        output.WriteInt32(33, field_names[2], C);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+      }

+      if (hasDummy2) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, Dummy2);

+      }

+      if (hasB) {

+        size += pb::CodedOutputStream.ComputeInt32Size(3, B);

+      }

+      if (hasDummy4) {

+        size += pb::CodedOutputStream.ComputeInt32Size(4, Dummy4);

+      }

+      if (hasDummy5) {

+        size += pb::CodedOutputStream.ComputeInt32Size(5, Dummy5);

+      }

+      if (hasDummy6) {

+        size += pb::CodedOutputStream.ComputeInt32Size(6, Dummy6);

+      }

+      if (hasDummy7) {

+        size += pb::CodedOutputStream.ComputeInt32Size(7, Dummy7);

+      }

+      if (hasDummy8) {

+        size += pb::CodedOutputStream.ComputeInt32Size(8, Dummy8);

+      }

+      if (hasDummy9) {

+        size += pb::CodedOutputStream.ComputeInt32Size(9, Dummy9);

+      }

+      if (hasDummy10) {

+        size += pb::CodedOutputStream.ComputeInt32Size(10, Dummy10);

+      }

+      if (hasDummy11) {

+        size += pb::CodedOutputStream.ComputeInt32Size(11, Dummy11);

+      }

+      if (hasDummy12) {

+        size += pb::CodedOutputStream.ComputeInt32Size(12, Dummy12);

+      }

+      if (hasDummy13) {

+        size += pb::CodedOutputStream.ComputeInt32Size(13, Dummy13);

+      }

+      if (hasDummy14) {

+        size += pb::CodedOutputStream.ComputeInt32Size(14, Dummy14);

+      }

+      if (hasDummy15) {

+        size += pb::CodedOutputStream.ComputeInt32Size(15, Dummy15);

+      }

+      if (hasDummy16) {

+        size += pb::CodedOutputStream.ComputeInt32Size(16, Dummy16);

+      }

+      if (hasDummy17) {

+        size += pb::CodedOutputStream.ComputeInt32Size(17, Dummy17);

+      }

+      if (hasDummy18) {

+        size += pb::CodedOutputStream.ComputeInt32Size(18, Dummy18);

+      }

+      if (hasDummy19) {

+        size += pb::CodedOutputStream.ComputeInt32Size(19, Dummy19);

+      }

+      if (hasDummy20) {

+        size += pb::CodedOutputStream.ComputeInt32Size(20, Dummy20);

+      }

+      if (hasDummy21) {

+        size += pb::CodedOutputStream.ComputeInt32Size(21, Dummy21);

+      }

+      if (hasDummy22) {

+        size += pb::CodedOutputStream.ComputeInt32Size(22, Dummy22);

+      }

+      if (hasDummy23) {

+        size += pb::CodedOutputStream.ComputeInt32Size(23, Dummy23);

+      }

+      if (hasDummy24) {

+        size += pb::CodedOutputStream.ComputeInt32Size(24, Dummy24);

+      }

+      if (hasDummy25) {

+        size += pb::CodedOutputStream.ComputeInt32Size(25, Dummy25);

+      }

+      if (hasDummy26) {

+        size += pb::CodedOutputStream.ComputeInt32Size(26, Dummy26);

+      }

+      if (hasDummy27) {

+        size += pb::CodedOutputStream.ComputeInt32Size(27, Dummy27);

+      }

+      if (hasDummy28) {

+        size += pb::CodedOutputStream.ComputeInt32Size(28, Dummy28);

+      }

+      if (hasDummy29) {

+        size += pb::CodedOutputStream.ComputeInt32Size(29, Dummy29);

+      }

+      if (hasDummy30) {

+        size += pb::CodedOutputStream.ComputeInt32Size(30, Dummy30);

+      }

+      if (hasDummy31) {

+        size += pb::CodedOutputStream.ComputeInt32Size(31, Dummy31);

+      }

+      if (hasDummy32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(32, Dummy32);

+      }

+      if (hasC) {

+        size += pb::CodedOutputStream.ComputeInt32Size(33, C);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestRequired ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequired ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRequired ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRequired ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRequired MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRequired prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestRequired, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRequired cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRequired result;

+      

+      private TestRequired PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRequired original = result;

+          result = new TestRequired();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRequired MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequired.Descriptor; }

+      }

+      

+      public override TestRequired DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance; }

+      }

+      

+      public override TestRequired BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestRequired) {

+          return MergeFrom((TestRequired) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestRequired other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        if (other.HasDummy2) {

+          Dummy2 = other.Dummy2;

+        }

+        if (other.HasB) {

+          B = other.B;

+        }

+        if (other.HasDummy4) {

+          Dummy4 = other.Dummy4;

+        }

+        if (other.HasDummy5) {

+          Dummy5 = other.Dummy5;

+        }

+        if (other.HasDummy6) {

+          Dummy6 = other.Dummy6;

+        }

+        if (other.HasDummy7) {

+          Dummy7 = other.Dummy7;

+        }

+        if (other.HasDummy8) {

+          Dummy8 = other.Dummy8;

+        }

+        if (other.HasDummy9) {

+          Dummy9 = other.Dummy9;

+        }

+        if (other.HasDummy10) {

+          Dummy10 = other.Dummy10;

+        }

+        if (other.HasDummy11) {

+          Dummy11 = other.Dummy11;

+        }

+        if (other.HasDummy12) {

+          Dummy12 = other.Dummy12;

+        }

+        if (other.HasDummy13) {

+          Dummy13 = other.Dummy13;

+        }

+        if (other.HasDummy14) {

+          Dummy14 = other.Dummy14;

+        }

+        if (other.HasDummy15) {

+          Dummy15 = other.Dummy15;

+        }

+        if (other.HasDummy16) {

+          Dummy16 = other.Dummy16;

+        }

+        if (other.HasDummy17) {

+          Dummy17 = other.Dummy17;

+        }

+        if (other.HasDummy18) {

+          Dummy18 = other.Dummy18;

+        }

+        if (other.HasDummy19) {

+          Dummy19 = other.Dummy19;

+        }

+        if (other.HasDummy20) {

+          Dummy20 = other.Dummy20;

+        }

+        if (other.HasDummy21) {

+          Dummy21 = other.Dummy21;

+        }

+        if (other.HasDummy22) {

+          Dummy22 = other.Dummy22;

+        }

+        if (other.HasDummy23) {

+          Dummy23 = other.Dummy23;

+        }

+        if (other.HasDummy24) {

+          Dummy24 = other.Dummy24;

+        }

+        if (other.HasDummy25) {

+          Dummy25 = other.Dummy25;

+        }

+        if (other.HasDummy26) {

+          Dummy26 = other.Dummy26;

+        }

+        if (other.HasDummy27) {

+          Dummy27 = other.Dummy27;

+        }

+        if (other.HasDummy28) {

+          Dummy28 = other.Dummy28;

+        }

+        if (other.HasDummy29) {

+          Dummy29 = other.Dummy29;

+        }

+        if (other.HasDummy30) {

+          Dummy30 = other.Dummy30;

+        }

+        if (other.HasDummy31) {

+          Dummy31 = other.Dummy31;

+        }

+        if (other.HasDummy32) {

+          Dummy32 = other.Dummy32;

+        }

+        if (other.HasC) {

+          C = other.C;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testRequiredFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testRequiredFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+            case 16: {

+              result.hasDummy2 = input.ReadInt32(ref result.dummy2_);

+              break;

+            }

+            case 24: {

+              result.hasB = input.ReadInt32(ref result.b_);

+              break;

+            }

+            case 32: {

+              result.hasDummy4 = input.ReadInt32(ref result.dummy4_);

+              break;

+            }

+            case 40: {

+              result.hasDummy5 = input.ReadInt32(ref result.dummy5_);

+              break;

+            }

+            case 48: {

+              result.hasDummy6 = input.ReadInt32(ref result.dummy6_);

+              break;

+            }

+            case 56: {

+              result.hasDummy7 = input.ReadInt32(ref result.dummy7_);

+              break;

+            }

+            case 64: {

+              result.hasDummy8 = input.ReadInt32(ref result.dummy8_);

+              break;

+            }

+            case 72: {

+              result.hasDummy9 = input.ReadInt32(ref result.dummy9_);

+              break;

+            }

+            case 80: {

+              result.hasDummy10 = input.ReadInt32(ref result.dummy10_);

+              break;

+            }

+            case 88: {

+              result.hasDummy11 = input.ReadInt32(ref result.dummy11_);

+              break;

+            }

+            case 96: {

+              result.hasDummy12 = input.ReadInt32(ref result.dummy12_);

+              break;

+            }

+            case 104: {

+              result.hasDummy13 = input.ReadInt32(ref result.dummy13_);

+              break;

+            }

+            case 112: {

+              result.hasDummy14 = input.ReadInt32(ref result.dummy14_);

+              break;

+            }

+            case 120: {

+              result.hasDummy15 = input.ReadInt32(ref result.dummy15_);

+              break;

+            }

+            case 128: {

+              result.hasDummy16 = input.ReadInt32(ref result.dummy16_);

+              break;

+            }

+            case 136: {

+              result.hasDummy17 = input.ReadInt32(ref result.dummy17_);

+              break;

+            }

+            case 144: {

+              result.hasDummy18 = input.ReadInt32(ref result.dummy18_);

+              break;

+            }

+            case 152: {

+              result.hasDummy19 = input.ReadInt32(ref result.dummy19_);

+              break;

+            }

+            case 160: {

+              result.hasDummy20 = input.ReadInt32(ref result.dummy20_);

+              break;

+            }

+            case 168: {

+              result.hasDummy21 = input.ReadInt32(ref result.dummy21_);

+              break;

+            }

+            case 176: {

+              result.hasDummy22 = input.ReadInt32(ref result.dummy22_);

+              break;

+            }

+            case 184: {

+              result.hasDummy23 = input.ReadInt32(ref result.dummy23_);

+              break;

+            }

+            case 192: {

+              result.hasDummy24 = input.ReadInt32(ref result.dummy24_);

+              break;

+            }

+            case 200: {

+              result.hasDummy25 = input.ReadInt32(ref result.dummy25_);

+              break;

+            }

+            case 208: {

+              result.hasDummy26 = input.ReadInt32(ref result.dummy26_);

+              break;

+            }

+            case 216: {

+              result.hasDummy27 = input.ReadInt32(ref result.dummy27_);

+              break;

+            }

+            case 224: {

+              result.hasDummy28 = input.ReadInt32(ref result.dummy28_);

+              break;

+            }

+            case 232: {

+              result.hasDummy29 = input.ReadInt32(ref result.dummy29_);

+              break;

+            }

+            case 240: {

+              result.hasDummy30 = input.ReadInt32(ref result.dummy30_);

+              break;

+            }

+            case 248: {

+              result.hasDummy31 = input.ReadInt32(ref result.dummy31_);

+              break;

+            }

+            case 256: {

+              result.hasDummy32 = input.ReadInt32(ref result.dummy32_);

+              break;

+            }

+            case 264: {

+              result.hasC = input.ReadInt32(ref result.c_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy2 {

+        get { return result.hasDummy2; }

+      }

+      public int Dummy2 {

+        get { return result.Dummy2; }

+        set { SetDummy2(value); }

+      }

+      public Builder SetDummy2(int value) {

+        PrepareBuilder();

+        result.hasDummy2 = true;

+        result.dummy2_ = value;

+        return this;

+      }

+      public Builder ClearDummy2() {

+        PrepareBuilder();

+        result.hasDummy2 = false;

+        result.dummy2_ = 0;

+        return this;

+      }

+      

+      public bool HasB {

+        get { return result.hasB; }

+      }

+      public int B {

+        get { return result.B; }

+        set { SetB(value); }

+      }

+      public Builder SetB(int value) {

+        PrepareBuilder();

+        result.hasB = true;

+        result.b_ = value;

+        return this;

+      }

+      public Builder ClearB() {

+        PrepareBuilder();

+        result.hasB = false;

+        result.b_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy4 {

+        get { return result.hasDummy4; }

+      }

+      public int Dummy4 {

+        get { return result.Dummy4; }

+        set { SetDummy4(value); }

+      }

+      public Builder SetDummy4(int value) {

+        PrepareBuilder();

+        result.hasDummy4 = true;

+        result.dummy4_ = value;

+        return this;

+      }

+      public Builder ClearDummy4() {

+        PrepareBuilder();

+        result.hasDummy4 = false;

+        result.dummy4_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy5 {

+        get { return result.hasDummy5; }

+      }

+      public int Dummy5 {

+        get { return result.Dummy5; }

+        set { SetDummy5(value); }

+      }

+      public Builder SetDummy5(int value) {

+        PrepareBuilder();

+        result.hasDummy5 = true;

+        result.dummy5_ = value;

+        return this;

+      }

+      public Builder ClearDummy5() {

+        PrepareBuilder();

+        result.hasDummy5 = false;

+        result.dummy5_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy6 {

+        get { return result.hasDummy6; }

+      }

+      public int Dummy6 {

+        get { return result.Dummy6; }

+        set { SetDummy6(value); }

+      }

+      public Builder SetDummy6(int value) {

+        PrepareBuilder();

+        result.hasDummy6 = true;

+        result.dummy6_ = value;

+        return this;

+      }

+      public Builder ClearDummy6() {

+        PrepareBuilder();

+        result.hasDummy6 = false;

+        result.dummy6_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy7 {

+        get { return result.hasDummy7; }

+      }

+      public int Dummy7 {

+        get { return result.Dummy7; }

+        set { SetDummy7(value); }

+      }

+      public Builder SetDummy7(int value) {

+        PrepareBuilder();

+        result.hasDummy7 = true;

+        result.dummy7_ = value;

+        return this;

+      }

+      public Builder ClearDummy7() {

+        PrepareBuilder();

+        result.hasDummy7 = false;

+        result.dummy7_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy8 {

+        get { return result.hasDummy8; }

+      }

+      public int Dummy8 {

+        get { return result.Dummy8; }

+        set { SetDummy8(value); }

+      }

+      public Builder SetDummy8(int value) {

+        PrepareBuilder();

+        result.hasDummy8 = true;

+        result.dummy8_ = value;

+        return this;

+      }

+      public Builder ClearDummy8() {

+        PrepareBuilder();

+        result.hasDummy8 = false;

+        result.dummy8_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy9 {

+        get { return result.hasDummy9; }

+      }

+      public int Dummy9 {

+        get { return result.Dummy9; }

+        set { SetDummy9(value); }

+      }

+      public Builder SetDummy9(int value) {

+        PrepareBuilder();

+        result.hasDummy9 = true;

+        result.dummy9_ = value;

+        return this;

+      }

+      public Builder ClearDummy9() {

+        PrepareBuilder();

+        result.hasDummy9 = false;

+        result.dummy9_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy10 {

+        get { return result.hasDummy10; }

+      }

+      public int Dummy10 {

+        get { return result.Dummy10; }

+        set { SetDummy10(value); }

+      }

+      public Builder SetDummy10(int value) {

+        PrepareBuilder();

+        result.hasDummy10 = true;

+        result.dummy10_ = value;

+        return this;

+      }

+      public Builder ClearDummy10() {

+        PrepareBuilder();

+        result.hasDummy10 = false;

+        result.dummy10_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy11 {

+        get { return result.hasDummy11; }

+      }

+      public int Dummy11 {

+        get { return result.Dummy11; }

+        set { SetDummy11(value); }

+      }

+      public Builder SetDummy11(int value) {

+        PrepareBuilder();

+        result.hasDummy11 = true;

+        result.dummy11_ = value;

+        return this;

+      }

+      public Builder ClearDummy11() {

+        PrepareBuilder();

+        result.hasDummy11 = false;

+        result.dummy11_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy12 {

+        get { return result.hasDummy12; }

+      }

+      public int Dummy12 {

+        get { return result.Dummy12; }

+        set { SetDummy12(value); }

+      }

+      public Builder SetDummy12(int value) {

+        PrepareBuilder();

+        result.hasDummy12 = true;

+        result.dummy12_ = value;

+        return this;

+      }

+      public Builder ClearDummy12() {

+        PrepareBuilder();

+        result.hasDummy12 = false;

+        result.dummy12_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy13 {

+        get { return result.hasDummy13; }

+      }

+      public int Dummy13 {

+        get { return result.Dummy13; }

+        set { SetDummy13(value); }

+      }

+      public Builder SetDummy13(int value) {

+        PrepareBuilder();

+        result.hasDummy13 = true;

+        result.dummy13_ = value;

+        return this;

+      }

+      public Builder ClearDummy13() {

+        PrepareBuilder();

+        result.hasDummy13 = false;

+        result.dummy13_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy14 {

+        get { return result.hasDummy14; }

+      }

+      public int Dummy14 {

+        get { return result.Dummy14; }

+        set { SetDummy14(value); }

+      }

+      public Builder SetDummy14(int value) {

+        PrepareBuilder();

+        result.hasDummy14 = true;

+        result.dummy14_ = value;

+        return this;

+      }

+      public Builder ClearDummy14() {

+        PrepareBuilder();

+        result.hasDummy14 = false;

+        result.dummy14_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy15 {

+        get { return result.hasDummy15; }

+      }

+      public int Dummy15 {

+        get { return result.Dummy15; }

+        set { SetDummy15(value); }

+      }

+      public Builder SetDummy15(int value) {

+        PrepareBuilder();

+        result.hasDummy15 = true;

+        result.dummy15_ = value;

+        return this;

+      }

+      public Builder ClearDummy15() {

+        PrepareBuilder();

+        result.hasDummy15 = false;

+        result.dummy15_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy16 {

+        get { return result.hasDummy16; }

+      }

+      public int Dummy16 {

+        get { return result.Dummy16; }

+        set { SetDummy16(value); }

+      }

+      public Builder SetDummy16(int value) {

+        PrepareBuilder();

+        result.hasDummy16 = true;

+        result.dummy16_ = value;

+        return this;

+      }

+      public Builder ClearDummy16() {

+        PrepareBuilder();

+        result.hasDummy16 = false;

+        result.dummy16_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy17 {

+        get { return result.hasDummy17; }

+      }

+      public int Dummy17 {

+        get { return result.Dummy17; }

+        set { SetDummy17(value); }

+      }

+      public Builder SetDummy17(int value) {

+        PrepareBuilder();

+        result.hasDummy17 = true;

+        result.dummy17_ = value;

+        return this;

+      }

+      public Builder ClearDummy17() {

+        PrepareBuilder();

+        result.hasDummy17 = false;

+        result.dummy17_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy18 {

+        get { return result.hasDummy18; }

+      }

+      public int Dummy18 {

+        get { return result.Dummy18; }

+        set { SetDummy18(value); }

+      }

+      public Builder SetDummy18(int value) {

+        PrepareBuilder();

+        result.hasDummy18 = true;

+        result.dummy18_ = value;

+        return this;

+      }

+      public Builder ClearDummy18() {

+        PrepareBuilder();

+        result.hasDummy18 = false;

+        result.dummy18_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy19 {

+        get { return result.hasDummy19; }

+      }

+      public int Dummy19 {

+        get { return result.Dummy19; }

+        set { SetDummy19(value); }

+      }

+      public Builder SetDummy19(int value) {

+        PrepareBuilder();

+        result.hasDummy19 = true;

+        result.dummy19_ = value;

+        return this;

+      }

+      public Builder ClearDummy19() {

+        PrepareBuilder();

+        result.hasDummy19 = false;

+        result.dummy19_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy20 {

+        get { return result.hasDummy20; }

+      }

+      public int Dummy20 {

+        get { return result.Dummy20; }

+        set { SetDummy20(value); }

+      }

+      public Builder SetDummy20(int value) {

+        PrepareBuilder();

+        result.hasDummy20 = true;

+        result.dummy20_ = value;

+        return this;

+      }

+      public Builder ClearDummy20() {

+        PrepareBuilder();

+        result.hasDummy20 = false;

+        result.dummy20_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy21 {

+        get { return result.hasDummy21; }

+      }

+      public int Dummy21 {

+        get { return result.Dummy21; }

+        set { SetDummy21(value); }

+      }

+      public Builder SetDummy21(int value) {

+        PrepareBuilder();

+        result.hasDummy21 = true;

+        result.dummy21_ = value;

+        return this;

+      }

+      public Builder ClearDummy21() {

+        PrepareBuilder();

+        result.hasDummy21 = false;

+        result.dummy21_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy22 {

+        get { return result.hasDummy22; }

+      }

+      public int Dummy22 {

+        get { return result.Dummy22; }

+        set { SetDummy22(value); }

+      }

+      public Builder SetDummy22(int value) {

+        PrepareBuilder();

+        result.hasDummy22 = true;

+        result.dummy22_ = value;

+        return this;

+      }

+      public Builder ClearDummy22() {

+        PrepareBuilder();

+        result.hasDummy22 = false;

+        result.dummy22_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy23 {

+        get { return result.hasDummy23; }

+      }

+      public int Dummy23 {

+        get { return result.Dummy23; }

+        set { SetDummy23(value); }

+      }

+      public Builder SetDummy23(int value) {

+        PrepareBuilder();

+        result.hasDummy23 = true;

+        result.dummy23_ = value;

+        return this;

+      }

+      public Builder ClearDummy23() {

+        PrepareBuilder();

+        result.hasDummy23 = false;

+        result.dummy23_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy24 {

+        get { return result.hasDummy24; }

+      }

+      public int Dummy24 {

+        get { return result.Dummy24; }

+        set { SetDummy24(value); }

+      }

+      public Builder SetDummy24(int value) {

+        PrepareBuilder();

+        result.hasDummy24 = true;

+        result.dummy24_ = value;

+        return this;

+      }

+      public Builder ClearDummy24() {

+        PrepareBuilder();

+        result.hasDummy24 = false;

+        result.dummy24_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy25 {

+        get { return result.hasDummy25; }

+      }

+      public int Dummy25 {

+        get { return result.Dummy25; }

+        set { SetDummy25(value); }

+      }

+      public Builder SetDummy25(int value) {

+        PrepareBuilder();

+        result.hasDummy25 = true;

+        result.dummy25_ = value;

+        return this;

+      }

+      public Builder ClearDummy25() {

+        PrepareBuilder();

+        result.hasDummy25 = false;

+        result.dummy25_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy26 {

+        get { return result.hasDummy26; }

+      }

+      public int Dummy26 {

+        get { return result.Dummy26; }

+        set { SetDummy26(value); }

+      }

+      public Builder SetDummy26(int value) {

+        PrepareBuilder();

+        result.hasDummy26 = true;

+        result.dummy26_ = value;

+        return this;

+      }

+      public Builder ClearDummy26() {

+        PrepareBuilder();

+        result.hasDummy26 = false;

+        result.dummy26_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy27 {

+        get { return result.hasDummy27; }

+      }

+      public int Dummy27 {

+        get { return result.Dummy27; }

+        set { SetDummy27(value); }

+      }

+      public Builder SetDummy27(int value) {

+        PrepareBuilder();

+        result.hasDummy27 = true;

+        result.dummy27_ = value;

+        return this;

+      }

+      public Builder ClearDummy27() {

+        PrepareBuilder();

+        result.hasDummy27 = false;

+        result.dummy27_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy28 {

+        get { return result.hasDummy28; }

+      }

+      public int Dummy28 {

+        get { return result.Dummy28; }

+        set { SetDummy28(value); }

+      }

+      public Builder SetDummy28(int value) {

+        PrepareBuilder();

+        result.hasDummy28 = true;

+        result.dummy28_ = value;

+        return this;

+      }

+      public Builder ClearDummy28() {

+        PrepareBuilder();

+        result.hasDummy28 = false;

+        result.dummy28_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy29 {

+        get { return result.hasDummy29; }

+      }

+      public int Dummy29 {

+        get { return result.Dummy29; }

+        set { SetDummy29(value); }

+      }

+      public Builder SetDummy29(int value) {

+        PrepareBuilder();

+        result.hasDummy29 = true;

+        result.dummy29_ = value;

+        return this;

+      }

+      public Builder ClearDummy29() {

+        PrepareBuilder();

+        result.hasDummy29 = false;

+        result.dummy29_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy30 {

+        get { return result.hasDummy30; }

+      }

+      public int Dummy30 {

+        get { return result.Dummy30; }

+        set { SetDummy30(value); }

+      }

+      public Builder SetDummy30(int value) {

+        PrepareBuilder();

+        result.hasDummy30 = true;

+        result.dummy30_ = value;

+        return this;

+      }

+      public Builder ClearDummy30() {

+        PrepareBuilder();

+        result.hasDummy30 = false;

+        result.dummy30_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy31 {

+        get { return result.hasDummy31; }

+      }

+      public int Dummy31 {

+        get { return result.Dummy31; }

+        set { SetDummy31(value); }

+      }

+      public Builder SetDummy31(int value) {

+        PrepareBuilder();

+        result.hasDummy31 = true;

+        result.dummy31_ = value;

+        return this;

+      }

+      public Builder ClearDummy31() {

+        PrepareBuilder();

+        result.hasDummy31 = false;

+        result.dummy31_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy32 {

+        get { return result.hasDummy32; }

+      }

+      public int Dummy32 {

+        get { return result.Dummy32; }

+        set { SetDummy32(value); }

+      }

+      public Builder SetDummy32(int value) {

+        PrepareBuilder();

+        result.hasDummy32 = true;

+        result.dummy32_ = value;

+        return this;

+      }

+      public Builder ClearDummy32() {

+        PrepareBuilder();

+        result.hasDummy32 = false;

+        result.dummy32_ = 0;

+        return this;

+      }

+      

+      public bool HasC {

+        get { return result.hasC; }

+      }

+      public int C {

+        get { return result.C; }

+        set { SetC(value); }

+      }

+      public Builder SetC(int value) {

+        PrepareBuilder();

+        result.hasC = true;

+        result.c_ = value;

+        return this;

+      }

+      public Builder ClearC() {

+        PrepareBuilder();

+        result.hasC = false;

+        result.c_ = 0;

+        return this;

+      }

+    }

+    static TestRequired() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRequiredForeign : pb::GeneratedMessage<TestRequiredForeign, TestRequiredForeign.Builder> {

+    private TestRequiredForeign() { }

+    private static readonly TestRequiredForeign defaultInstance = new TestRequiredForeign().MakeReadOnly();

+    private static readonly string[] _testRequiredForeignFieldNames = new string[] { "dummy", "optional_message", "repeated_message" };

+    private static readonly uint[] _testRequiredForeignFieldTags = new uint[] { 24, 10, 18 };

+    public static TestRequiredForeign DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRequiredForeign DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRequiredForeign ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRequiredForeign__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestRequiredForeign, TestRequiredForeign.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRequiredForeign__FieldAccessorTable; }

+    }

+    

+    public const int OptionalMessageFieldNumber = 1;

+    private bool hasOptionalMessage;

+    private global::Google.ProtocolBuffers.TestProtos.TestRequired optionalMessage_;

+    public bool HasOptionalMessage {

+      get { return hasOptionalMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestRequired OptionalMessage {

+      get { return optionalMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance; }

+    }

+    

+    public const int RepeatedMessageFieldNumber = 2;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestRequired> repeatedMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestRequired>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestRequired> RepeatedMessageList {

+      get { return repeatedMessage_; }

+    }

+    public int RepeatedMessageCount {

+      get { return repeatedMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestRequired GetRepeatedMessage(int index) {

+      return repeatedMessage_[index];

+    }

+    

+    public const int DummyFieldNumber = 3;

+    private bool hasDummy;

+    private int dummy_;

+    public bool HasDummy {

+      get { return hasDummy; }

+    }

+    public int Dummy {

+      get { return dummy_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (HasOptionalMessage) {

+          if (!OptionalMessage.IsInitialized) return false;

+        }

+        foreach (global::Google.ProtocolBuffers.TestProtos.TestRequired element in RepeatedMessageList) {

+          if (!element.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testRequiredForeignFieldNames;

+      if (hasOptionalMessage) {

+        output.WriteMessage(1, field_names[1], OptionalMessage);

+      }

+      if (repeatedMessage_.Count > 0) {

+        output.WriteMessageArray(2, field_names[2], repeatedMessage_);

+      }

+      if (hasDummy) {

+        output.WriteInt32(3, field_names[0], Dummy);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasOptionalMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, OptionalMessage);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestRequired element in RepeatedMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2, element);

+      }

+      if (hasDummy) {

+        size += pb::CodedOutputStream.ComputeInt32Size(3, Dummy);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestRequiredForeign ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRequiredForeign ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRequiredForeign MakeReadOnly() {

+      repeatedMessage_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRequiredForeign prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestRequiredForeign, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRequiredForeign cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRequiredForeign result;

+      

+      private TestRequiredForeign PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRequiredForeign original = result;

+          result = new TestRequiredForeign();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRequiredForeign MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.Descriptor; }

+      }

+      

+      public override TestRequiredForeign DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.DefaultInstance; }

+      }

+      

+      public override TestRequiredForeign BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestRequiredForeign) {

+          return MergeFrom((TestRequiredForeign) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestRequiredForeign other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasOptionalMessage) {

+          MergeOptionalMessage(other.OptionalMessage);

+        }

+        if (other.repeatedMessage_.Count != 0) {

+          result.repeatedMessage_.Add(other.repeatedMessage_);

+        }

+        if (other.HasDummy) {

+          Dummy = other.Dummy;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testRequiredForeignFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testRequiredForeignFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestRequired.CreateBuilder();

+              if (result.hasOptionalMessage) {

+                subBuilder.MergeFrom(OptionalMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 18: {

+              input.ReadMessageArray(tag, field_name, result.repeatedMessage_, global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 24: {

+              result.hasDummy = input.ReadInt32(ref result.dummy_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasOptionalMessage {

+       get { return result.hasOptionalMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestRequired OptionalMessage {

+        get { return result.OptionalMessage; }

+        set { SetOptionalMessage(value); }

+      }

+      public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalMessage = true;

+        result.optionalMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalMessage = true;

+        result.optionalMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalMessage &&

+            result.optionalMessage_ != global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance) {

+            result.optionalMessage_ = global::Google.ProtocolBuffers.TestProtos.TestRequired.CreateBuilder(result.optionalMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalMessage_ = value;

+        }

+        result.hasOptionalMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalMessage() {

+        PrepareBuilder();

+        result.hasOptionalMessage = false;

+        result.optionalMessage_ = null;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestRequired> RepeatedMessageList {

+        get { return PrepareBuilder().repeatedMessage_; }

+      }

+      public int RepeatedMessageCount {

+        get { return result.RepeatedMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestRequired GetRepeatedMessage(int index) {

+        return result.GetRepeatedMessage(index);

+      }

+      public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestRequired value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestRequired> values) {

+        PrepareBuilder();

+        result.repeatedMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedMessage() {

+        PrepareBuilder();

+        result.repeatedMessage_.Clear();

+        return this;

+      }

+      

+      public bool HasDummy {

+        get { return result.hasDummy; }

+      }

+      public int Dummy {

+        get { return result.Dummy; }

+        set { SetDummy(value); }

+      }

+      public Builder SetDummy(int value) {

+        PrepareBuilder();

+        result.hasDummy = true;

+        result.dummy_ = value;

+        return this;

+      }

+      public Builder ClearDummy() {

+        PrepareBuilder();

+        result.hasDummy = false;

+        result.dummy_ = 0;

+        return this;

+      }

+    }

+    static TestRequiredForeign() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestForeignNested : pb::GeneratedMessage<TestForeignNested, TestForeignNested.Builder> {

+    private TestForeignNested() { }

+    private static readonly TestForeignNested defaultInstance = new TestForeignNested().MakeReadOnly();

+    private static readonly string[] _testForeignNestedFieldNames = new string[] { "foreign_nested" };

+    private static readonly uint[] _testForeignNestedFieldTags = new uint[] { 10 };

+    public static TestForeignNested DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestForeignNested DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestForeignNested ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestForeignNested__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestForeignNested, TestForeignNested.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable; }

+    }

+    

+    public const int ForeignNestedFieldNumber = 1;

+    private bool hasForeignNested;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage foreignNested_;

+    public bool HasForeignNested {

+      get { return hasForeignNested; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage ForeignNested {

+      get { return foreignNested_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testForeignNestedFieldNames;

+      if (hasForeignNested) {

+        output.WriteMessage(1, field_names[0], ForeignNested);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasForeignNested) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, ForeignNested);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestForeignNested ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestForeignNested ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestForeignNested ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestForeignNested MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestForeignNested prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestForeignNested, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestForeignNested cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestForeignNested result;

+      

+      private TestForeignNested PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestForeignNested original = result;

+          result = new TestForeignNested();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestForeignNested MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestForeignNested.Descriptor; }

+      }

+      

+      public override TestForeignNested DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestForeignNested.DefaultInstance; }

+      }

+      

+      public override TestForeignNested BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestForeignNested) {

+          return MergeFrom((TestForeignNested) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestForeignNested other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestForeignNested.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasForeignNested) {

+          MergeForeignNested(other.ForeignNested);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testForeignNestedFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testForeignNestedFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder();

+              if (result.hasForeignNested) {

+                subBuilder.MergeFrom(ForeignNested);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              ForeignNested = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasForeignNested {

+       get { return result.hasForeignNested; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage ForeignNested {

+        get { return result.ForeignNested; }

+        set { SetForeignNested(value); }

+      }

+      public Builder SetForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasForeignNested = true;

+        result.foreignNested_ = value;

+        return this;

+      }

+      public Builder SetForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasForeignNested = true;

+        result.foreignNested_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasForeignNested &&

+            result.foreignNested_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) {

+            result.foreignNested_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder(result.foreignNested_).MergeFrom(value).BuildPartial();

+        } else {

+          result.foreignNested_ = value;

+        }

+        result.hasForeignNested = true;

+        return this;

+      }

+      public Builder ClearForeignNested() {

+        PrepareBuilder();

+        result.hasForeignNested = false;

+        result.foreignNested_ = null;

+        return this;

+      }

+    }

+    static TestForeignNested() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestEmptyMessage : pb::GeneratedMessage<TestEmptyMessage, TestEmptyMessage.Builder> {

+    private TestEmptyMessage() { }

+    private static readonly TestEmptyMessage defaultInstance = new TestEmptyMessage().MakeReadOnly();

+    private static readonly string[] _testEmptyMessageFieldNames = new string[] {  };

+    private static readonly uint[] _testEmptyMessageFieldTags = new uint[] {  };

+    public static TestEmptyMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestEmptyMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestEmptyMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestEmptyMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestEmptyMessage, TestEmptyMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestEmptyMessage__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testEmptyMessageFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestEmptyMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestEmptyMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestEmptyMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestEmptyMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestEmptyMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestEmptyMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestEmptyMessage result;

+      

+      private TestEmptyMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestEmptyMessage original = result;

+          result = new TestEmptyMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestEmptyMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.Descriptor; }

+      }

+      

+      public override TestEmptyMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.DefaultInstance; }

+      }

+      

+      public override TestEmptyMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestEmptyMessage) {

+          return MergeFrom((TestEmptyMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestEmptyMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testEmptyMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testEmptyMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestEmptyMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestEmptyMessageWithExtensions : pb::ExtendableMessage<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder> {

+    private TestEmptyMessageWithExtensions() { }

+    private static readonly TestEmptyMessageWithExtensions defaultInstance = new TestEmptyMessageWithExtensions().MakeReadOnly();

+    private static readonly string[] _testEmptyMessageWithExtensionsFieldNames = new string[] {  };

+    private static readonly uint[] _testEmptyMessageWithExtensionsFieldTags = new uint[] {  };

+    public static TestEmptyMessageWithExtensions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestEmptyMessageWithExtensions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestEmptyMessageWithExtensions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testEmptyMessageWithExtensionsFieldNames;

+      pb::ExtendableMessage<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestEmptyMessageWithExtensions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestEmptyMessageWithExtensions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestEmptyMessageWithExtensions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestEmptyMessageWithExtensions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestEmptyMessageWithExtensions result;

+      

+      private TestEmptyMessageWithExtensions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestEmptyMessageWithExtensions original = result;

+          result = new TestEmptyMessageWithExtensions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestEmptyMessageWithExtensions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.Descriptor; }

+      }

+      

+      public override TestEmptyMessageWithExtensions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.DefaultInstance; }

+      }

+      

+      public override TestEmptyMessageWithExtensions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestEmptyMessageWithExtensions) {

+          return MergeFrom((TestEmptyMessageWithExtensions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestEmptyMessageWithExtensions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testEmptyMessageWithExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testEmptyMessageWithExtensionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestEmptyMessageWithExtensions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMultipleExtensionRanges : pb::ExtendableMessage<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder> {

+    private TestMultipleExtensionRanges() { }

+    private static readonly TestMultipleExtensionRanges defaultInstance = new TestMultipleExtensionRanges().MakeReadOnly();

+    private static readonly string[] _testMultipleExtensionRangesFieldNames = new string[] {  };

+    private static readonly uint[] _testMultipleExtensionRangesFieldTags = new uint[] {  };

+    public static TestMultipleExtensionRanges DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMultipleExtensionRanges DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMultipleExtensionRanges ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMultipleExtensionRanges__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMultipleExtensionRangesFieldNames;

+      pb::ExtendableMessage<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(43, output);

+      extensionWriter.WriteUntil(4244, output);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMultipleExtensionRanges ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMultipleExtensionRanges MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMultipleExtensionRanges prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestMultipleExtensionRanges, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMultipleExtensionRanges cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMultipleExtensionRanges result;

+      

+      private TestMultipleExtensionRanges PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMultipleExtensionRanges original = result;

+          result = new TestMultipleExtensionRanges();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMultipleExtensionRanges MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.Descriptor; }

+      }

+      

+      public override TestMultipleExtensionRanges DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.DefaultInstance; }

+      }

+      

+      public override TestMultipleExtensionRanges BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMultipleExtensionRanges) {

+          return MergeFrom((TestMultipleExtensionRanges) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMultipleExtensionRanges other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMultipleExtensionRangesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMultipleExtensionRangesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestMultipleExtensionRanges() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestReallyLargeTagNumber : pb::GeneratedMessage<TestReallyLargeTagNumber, TestReallyLargeTagNumber.Builder> {

+    private TestReallyLargeTagNumber() { }

+    private static readonly TestReallyLargeTagNumber defaultInstance = new TestReallyLargeTagNumber().MakeReadOnly();

+    private static readonly string[] _testReallyLargeTagNumberFieldNames = new string[] { "a", "bb" };

+    private static readonly uint[] _testReallyLargeTagNumberFieldTags = new uint[] { 8, 2147483640 };

+    public static TestReallyLargeTagNumber DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestReallyLargeTagNumber DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestReallyLargeTagNumber ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestReallyLargeTagNumber, TestReallyLargeTagNumber.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public const int BbFieldNumber = 268435455;

+    private bool hasBb;

+    private int bb_;

+    public bool HasBb {

+      get { return hasBb; }

+    }

+    public int Bb {

+      get { return bb_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testReallyLargeTagNumberFieldNames;

+      if (hasA) {

+        output.WriteInt32(1, field_names[0], A);

+      }

+      if (hasBb) {

+        output.WriteInt32(268435455, field_names[1], Bb);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+      }

+      if (hasBb) {

+        size += pb::CodedOutputStream.ComputeInt32Size(268435455, Bb);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestReallyLargeTagNumber ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestReallyLargeTagNumber MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestReallyLargeTagNumber prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestReallyLargeTagNumber, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestReallyLargeTagNumber cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestReallyLargeTagNumber result;

+      

+      private TestReallyLargeTagNumber PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestReallyLargeTagNumber original = result;

+          result = new TestReallyLargeTagNumber();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestReallyLargeTagNumber MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.Descriptor; }

+      }

+      

+      public override TestReallyLargeTagNumber DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.DefaultInstance; }

+      }

+      

+      public override TestReallyLargeTagNumber BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestReallyLargeTagNumber) {

+          return MergeFrom((TestReallyLargeTagNumber) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestReallyLargeTagNumber other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        if (other.HasBb) {

+          Bb = other.Bb;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testReallyLargeTagNumberFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testReallyLargeTagNumberFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+            case 2147483640: {

+              result.hasBb = input.ReadInt32(ref result.bb_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+      

+      public bool HasBb {

+        get { return result.hasBb; }

+      }

+      public int Bb {

+        get { return result.Bb; }

+        set { SetBb(value); }

+      }

+      public Builder SetBb(int value) {

+        PrepareBuilder();

+        result.hasBb = true;

+        result.bb_ = value;

+        return this;

+      }

+      public Builder ClearBb() {

+        PrepareBuilder();

+        result.hasBb = false;

+        result.bb_ = 0;

+        return this;

+      }

+    }

+    static TestReallyLargeTagNumber() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRecursiveMessage : pb::GeneratedMessage<TestRecursiveMessage, TestRecursiveMessage.Builder> {

+    private TestRecursiveMessage() { }

+    private static readonly TestRecursiveMessage defaultInstance = new TestRecursiveMessage().MakeReadOnly();

+    private static readonly string[] _testRecursiveMessageFieldNames = new string[] { "a", "i" };

+    private static readonly uint[] _testRecursiveMessageFieldTags = new uint[] { 10, 16 };

+    public static TestRecursiveMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRecursiveMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRecursiveMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestRecursiveMessage, TestRecursiveMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage A {

+      get { return a_ ?? global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance; }

+    }

+    

+    public const int IFieldNumber = 2;

+    private bool hasI;

+    private int i_;

+    public bool HasI {

+      get { return hasI; }

+    }

+    public int I {

+      get { return i_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testRecursiveMessageFieldNames;

+      if (hasA) {

+        output.WriteMessage(1, field_names[0], A);

+      }

+      if (hasI) {

+        output.WriteInt32(2, field_names[1], I);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, A);

+      }

+      if (hasI) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, I);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestRecursiveMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRecursiveMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRecursiveMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestRecursiveMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRecursiveMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRecursiveMessage result;

+      

+      private TestRecursiveMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRecursiveMessage original = result;

+          result = new TestRecursiveMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRecursiveMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Descriptor; }

+      }

+      

+      public override TestRecursiveMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance; }

+      }

+      

+      public override TestRecursiveMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestRecursiveMessage) {

+          return MergeFrom((TestRecursiveMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestRecursiveMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          MergeA(other.A);

+        }

+        if (other.HasI) {

+          I = other.I;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testRecursiveMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testRecursiveMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.CreateBuilder();

+              if (result.hasA) {

+                subBuilder.MergeFrom(A);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              A = subBuilder.BuildPartial();

+              break;

+            }

+            case 16: {

+              result.hasI = input.ReadInt32(ref result.i_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+       get { return result.hasA; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasA &&

+            result.a_ != global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance) {

+            result.a_ = global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.CreateBuilder(result.a_).MergeFrom(value).BuildPartial();

+        } else {

+          result.a_ = value;

+        }

+        result.hasA = true;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = null;

+        return this;

+      }

+      

+      public bool HasI {

+        get { return result.hasI; }

+      }

+      public int I {

+        get { return result.I; }

+        set { SetI(value); }

+      }

+      public Builder SetI(int value) {

+        PrepareBuilder();

+        result.hasI = true;

+        result.i_ = value;

+        return this;

+      }

+      public Builder ClearI() {

+        PrepareBuilder();

+        result.hasI = false;

+        result.i_ = 0;

+        return this;

+      }

+    }

+    static TestRecursiveMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMutualRecursionA : pb::GeneratedMessage<TestMutualRecursionA, TestMutualRecursionA.Builder> {

+    private TestMutualRecursionA() { }

+    private static readonly TestMutualRecursionA defaultInstance = new TestMutualRecursionA().MakeReadOnly();

+    private static readonly string[] _testMutualRecursionAFieldNames = new string[] { "bb" };

+    private static readonly uint[] _testMutualRecursionAFieldTags = new uint[] { 10 };

+    public static TestMutualRecursionA DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMutualRecursionA DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMutualRecursionA ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMutualRecursionA, TestMutualRecursionA.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable; }

+    }

+    

+    public const int BbFieldNumber = 1;

+    private bool hasBb;

+    private global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB bb_;

+    public bool HasBb {

+      get { return hasBb; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB Bb {

+      get { return bb_ ?? global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMutualRecursionAFieldNames;

+      if (hasBb) {

+        output.WriteMessage(1, field_names[0], Bb);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasBb) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, Bb);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMutualRecursionA ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMutualRecursionA MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMutualRecursionA prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestMutualRecursionA, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMutualRecursionA cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMutualRecursionA result;

+      

+      private TestMutualRecursionA PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMutualRecursionA original = result;

+          result = new TestMutualRecursionA();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMutualRecursionA MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Descriptor; }

+      }

+      

+      public override TestMutualRecursionA DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance; }

+      }

+      

+      public override TestMutualRecursionA BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMutualRecursionA) {

+          return MergeFrom((TestMutualRecursionA) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMutualRecursionA other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasBb) {

+          MergeBb(other.Bb);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMutualRecursionAFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMutualRecursionAFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.CreateBuilder();

+              if (result.hasBb) {

+                subBuilder.MergeFrom(Bb);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Bb = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasBb {

+       get { return result.hasBb; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB Bb {

+        get { return result.Bb; }

+        set { SetBb(value); }

+      }

+      public Builder SetBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasBb = true;

+        result.bb_ = value;

+        return this;

+      }

+      public Builder SetBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasBb = true;

+        result.bb_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasBb &&

+            result.bb_ != global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance) {

+            result.bb_ = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.CreateBuilder(result.bb_).MergeFrom(value).BuildPartial();

+        } else {

+          result.bb_ = value;

+        }

+        result.hasBb = true;

+        return this;

+      }

+      public Builder ClearBb() {

+        PrepareBuilder();

+        result.hasBb = false;

+        result.bb_ = null;

+        return this;

+      }

+    }

+    static TestMutualRecursionA() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMutualRecursionB : pb::GeneratedMessage<TestMutualRecursionB, TestMutualRecursionB.Builder> {

+    private TestMutualRecursionB() { }

+    private static readonly TestMutualRecursionB defaultInstance = new TestMutualRecursionB().MakeReadOnly();

+    private static readonly string[] _testMutualRecursionBFieldNames = new string[] { "a", "optional_int32" };

+    private static readonly uint[] _testMutualRecursionBFieldTags = new uint[] { 10, 16 };

+    public static TestMutualRecursionB DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMutualRecursionB DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMutualRecursionB ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMutualRecursionB, TestMutualRecursionB.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA A {

+      get { return a_ ?? global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance; }

+    }

+    

+    public const int OptionalInt32FieldNumber = 2;

+    private bool hasOptionalInt32;

+    private int optionalInt32_;

+    public bool HasOptionalInt32 {

+      get { return hasOptionalInt32; }

+    }

+    public int OptionalInt32 {

+      get { return optionalInt32_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMutualRecursionBFieldNames;

+      if (hasA) {

+        output.WriteMessage(1, field_names[0], A);

+      }

+      if (hasOptionalInt32) {

+        output.WriteInt32(2, field_names[1], OptionalInt32);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, A);

+      }

+      if (hasOptionalInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, OptionalInt32);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMutualRecursionB ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMutualRecursionB MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMutualRecursionB prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestMutualRecursionB, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMutualRecursionB cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMutualRecursionB result;

+      

+      private TestMutualRecursionB PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMutualRecursionB original = result;

+          result = new TestMutualRecursionB();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMutualRecursionB MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Descriptor; }

+      }

+      

+      public override TestMutualRecursionB DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance; }

+      }

+      

+      public override TestMutualRecursionB BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMutualRecursionB) {

+          return MergeFrom((TestMutualRecursionB) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMutualRecursionB other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          MergeA(other.A);

+        }

+        if (other.HasOptionalInt32) {

+          OptionalInt32 = other.OptionalInt32;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMutualRecursionBFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMutualRecursionBFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.CreateBuilder();

+              if (result.hasA) {

+                subBuilder.MergeFrom(A);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              A = subBuilder.BuildPartial();

+              break;

+            }

+            case 16: {

+              result.hasOptionalInt32 = input.ReadInt32(ref result.optionalInt32_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+       get { return result.hasA; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasA &&

+            result.a_ != global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance) {

+            result.a_ = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.CreateBuilder(result.a_).MergeFrom(value).BuildPartial();

+        } else {

+          result.a_ = value;

+        }

+        result.hasA = true;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalInt32 {

+        get { return result.hasOptionalInt32; }

+      }

+      public int OptionalInt32 {

+        get { return result.OptionalInt32; }

+        set { SetOptionalInt32(value); }

+      }

+      public Builder SetOptionalInt32(int value) {

+        PrepareBuilder();

+        result.hasOptionalInt32 = true;

+        result.optionalInt32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalInt32() {

+        PrepareBuilder();

+        result.hasOptionalInt32 = false;

+        result.optionalInt32_ = 0;

+        return this;

+      }

+    }

+    static TestMutualRecursionB() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestDupFieldNumber : pb::GeneratedMessage<TestDupFieldNumber, TestDupFieldNumber.Builder> {

+    private TestDupFieldNumber() { }

+    private static readonly TestDupFieldNumber defaultInstance = new TestDupFieldNumber().MakeReadOnly();

+    private static readonly string[] _testDupFieldNumberFieldNames = new string[] { "a", "bar", "foo" };

+    private static readonly uint[] _testDupFieldNumberFieldTags = new uint[] { 8, 27, 19 };

+    public static TestDupFieldNumber DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestDupFieldNumber DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestDupFieldNumber ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestDupFieldNumber, TestDupFieldNumber.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Foo : pb::GeneratedMessage<Foo, Foo.Builder> {

+        private Foo() { }

+        private static readonly Foo defaultInstance = new Foo().MakeReadOnly();

+        private static readonly string[] _fooFieldNames = new string[] { "a" };

+        private static readonly uint[] _fooFieldTags = new uint[] { 8 };

+        public static Foo DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Foo DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Foo ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Foo, Foo.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber_Foo__FieldAccessorTable; }

+        }

+        

+        public const int AFieldNumber = 1;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _fooFieldNames;

+          if (hasA) {

+            output.WriteInt32(1, field_names[0], A);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static Foo ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Foo ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Foo ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Foo ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Foo ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Foo ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Foo ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Foo ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Foo ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Foo ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Foo MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Foo prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Foo, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Foo cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Foo result;

+          

+          private Foo PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Foo original = result;

+              result = new Foo();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Foo MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Descriptor; }

+          }

+          

+          public override Foo DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance; }

+          }

+          

+          public override Foo BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is Foo) {

+              return MergeFrom((Foo) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(Foo other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_fooFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _fooFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 8: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static Foo() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Bar : pb::GeneratedMessage<Bar, Bar.Builder> {

+        private Bar() { }

+        private static readonly Bar defaultInstance = new Bar().MakeReadOnly();

+        private static readonly string[] _barFieldNames = new string[] { "a" };

+        private static readonly uint[] _barFieldTags = new uint[] { 8 };

+        public static Bar DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Bar DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Bar ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Bar, Bar.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber_Bar__FieldAccessorTable; }

+        }

+        

+        public const int AFieldNumber = 1;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _barFieldNames;

+          if (hasA) {

+            output.WriteInt32(1, field_names[0], A);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static Bar ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Bar ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Bar ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Bar ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Bar ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Bar ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Bar ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Bar ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Bar ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Bar ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Bar MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Bar prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Bar, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Bar cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Bar result;

+          

+          private Bar PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Bar original = result;

+              result = new Bar();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Bar MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Descriptor; }

+          }

+          

+          public override Bar DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance; }

+          }

+          

+          public override Bar BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is Bar) {

+              return MergeFrom((Bar) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(Bar other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_barFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _barFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 8: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static Bar() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public const int FooFieldNumber = 2;

+    private bool hasFoo;

+    private global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo foo_;

+    public bool HasFoo {

+      get { return hasFoo; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo Foo {

+      get { return foo_ ?? global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance; }

+    }

+    

+    public const int BarFieldNumber = 3;

+    private bool hasBar;

+    private global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar bar_;

+    public bool HasBar {

+      get { return hasBar; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar Bar {

+      get { return bar_ ?? global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testDupFieldNumberFieldNames;

+      if (hasA) {

+        output.WriteInt32(1, field_names[0], A);

+      }

+      if (hasFoo) {

+        output.WriteGroup(2, field_names[2], Foo);

+      }

+      if (hasBar) {

+        output.WriteGroup(3, field_names[1], Bar);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+      }

+      if (hasFoo) {

+        size += pb::CodedOutputStream.ComputeGroupSize(2, Foo);

+      }

+      if (hasBar) {

+        size += pb::CodedOutputStream.ComputeGroupSize(3, Bar);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestDupFieldNumber ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestDupFieldNumber MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestDupFieldNumber prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestDupFieldNumber, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestDupFieldNumber cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestDupFieldNumber result;

+      

+      private TestDupFieldNumber PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestDupFieldNumber original = result;

+          result = new TestDupFieldNumber();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestDupFieldNumber MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Descriptor; }

+      }

+      

+      public override TestDupFieldNumber DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.DefaultInstance; }

+      }

+      

+      public override TestDupFieldNumber BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestDupFieldNumber) {

+          return MergeFrom((TestDupFieldNumber) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestDupFieldNumber other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        if (other.HasFoo) {

+          MergeFoo(other.Foo);

+        }

+        if (other.HasBar) {

+          MergeBar(other.Bar);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testDupFieldNumberFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testDupFieldNumberFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+            case 19: {

+              global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.CreateBuilder();

+              if (result.hasFoo) {

+                subBuilder.MergeFrom(Foo);

+              }

+              input.ReadGroup(2, subBuilder, extensionRegistry);

+              Foo = subBuilder.BuildPartial();

+              break;

+            }

+            case 27: {

+              global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.CreateBuilder();

+              if (result.hasBar) {

+                subBuilder.MergeFrom(Bar);

+              }

+              input.ReadGroup(3, subBuilder, extensionRegistry);

+              Bar = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+      

+      public bool HasFoo {

+       get { return result.hasFoo; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo Foo {

+        get { return result.Foo; }

+        set { SetFoo(value); }

+      }

+      public Builder SetFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasFoo = true;

+        result.foo_ = value;

+        return this;

+      }

+      public Builder SetFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasFoo = true;

+        result.foo_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasFoo &&

+            result.foo_ != global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance) {

+            result.foo_ = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.CreateBuilder(result.foo_).MergeFrom(value).BuildPartial();

+        } else {

+          result.foo_ = value;

+        }

+        result.hasFoo = true;

+        return this;

+      }

+      public Builder ClearFoo() {

+        PrepareBuilder();

+        result.hasFoo = false;

+        result.foo_ = null;

+        return this;

+      }

+      

+      public bool HasBar {

+       get { return result.hasBar; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar Bar {

+        get { return result.Bar; }

+        set { SetBar(value); }

+      }

+      public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasBar = true;

+        result.bar_ = value;

+        return this;

+      }

+      public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasBar = true;

+        result.bar_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasBar &&

+            result.bar_ != global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance) {

+            result.bar_ = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.CreateBuilder(result.bar_).MergeFrom(value).BuildPartial();

+        } else {

+          result.bar_ = value;

+        }

+        result.hasBar = true;

+        return this;

+      }

+      public Builder ClearBar() {

+        PrepareBuilder();

+        result.hasBar = false;

+        result.bar_ = null;

+        return this;

+      }

+    }

+    static TestDupFieldNumber() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestNestedMessageHasBits : pb::GeneratedMessage<TestNestedMessageHasBits, TestNestedMessageHasBits.Builder> {

+    private TestNestedMessageHasBits() { }

+    private static readonly TestNestedMessageHasBits defaultInstance = new TestNestedMessageHasBits().MakeReadOnly();

+    private static readonly string[] _testNestedMessageHasBitsFieldNames = new string[] { "optional_nested_message" };

+    private static readonly uint[] _testNestedMessageHasBitsFieldTags = new uint[] { 10 };

+    public static TestNestedMessageHasBits DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestNestedMessageHasBits DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestNestedMessageHasBits ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestNestedMessageHasBits, TestNestedMessageHasBits.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedMessageHasBits__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {

+        private NestedMessage() { }

+        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();

+        private static readonly string[] _nestedMessageFieldNames = new string[] { "nestedmessage_repeated_foreignmessage", "nestedmessage_repeated_int32" };

+        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 18, 8 };

+        public static NestedMessage DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override NestedMessage DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override NestedMessage ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__FieldAccessorTable; }

+        }

+        

+        public const int NestedmessageRepeatedInt32FieldNumber = 1;

+        private pbc::PopsicleList<int> nestedmessageRepeatedInt32_ = new pbc::PopsicleList<int>();

+        public scg::IList<int> NestedmessageRepeatedInt32List {

+          get { return pbc::Lists.AsReadOnly(nestedmessageRepeatedInt32_); }

+        }

+        public int NestedmessageRepeatedInt32Count {

+          get { return nestedmessageRepeatedInt32_.Count; }

+        }

+        public int GetNestedmessageRepeatedInt32(int index) {

+          return nestedmessageRepeatedInt32_[index];

+        }

+        

+        public const int NestedmessageRepeatedForeignmessageFieldNumber = 2;

+        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> nestedmessageRepeatedForeignmessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>();

+        public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> NestedmessageRepeatedForeignmessageList {

+          get { return nestedmessageRepeatedForeignmessage_; }

+        }

+        public int NestedmessageRepeatedForeignmessageCount {

+          get { return nestedmessageRepeatedForeignmessage_.Count; }

+        }

+        public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetNestedmessageRepeatedForeignmessage(int index) {

+          return nestedmessageRepeatedForeignmessage_[index];

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _nestedMessageFieldNames;

+          if (nestedmessageRepeatedInt32_.Count > 0) {

+            output.WriteInt32Array(1, field_names[1], nestedmessageRepeatedInt32_);

+          }

+          if (nestedmessageRepeatedForeignmessage_.Count > 0) {

+            output.WriteMessageArray(2, field_names[0], nestedmessageRepeatedForeignmessage_);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          {

+            int dataSize = 0;

+            foreach (int element in NestedmessageRepeatedInt32List) {

+              dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+            }

+            size += dataSize;

+            size += 1 * nestedmessageRepeatedInt32_.Count;

+          }

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessage element in NestedmessageRepeatedForeignmessageList) {

+            size += pb::CodedOutputStream.ComputeMessageSize(2, element);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static NestedMessage ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private NestedMessage MakeReadOnly() {

+          nestedmessageRepeatedInt32_.MakeReadOnly();

+          nestedmessageRepeatedForeignmessage_.MakeReadOnly();

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(NestedMessage prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(NestedMessage cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private NestedMessage result;

+          

+          private NestedMessage PrepareBuilder() {

+            if (resultIsReadOnly) {

+              NestedMessage original = result;

+              result = new NestedMessage();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override NestedMessage MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Descriptor; }

+          }

+          

+          public override NestedMessage DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance; }

+          }

+          

+          public override NestedMessage BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is NestedMessage) {

+              return MergeFrom((NestedMessage) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(NestedMessage other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.nestedmessageRepeatedInt32_.Count != 0) {

+              result.nestedmessageRepeatedInt32_.Add(other.nestedmessageRepeatedInt32_);

+            }

+            if (other.nestedmessageRepeatedForeignmessage_.Count != 0) {

+              result.nestedmessageRepeatedForeignmessage_.Add(other.nestedmessageRepeatedForeignmessage_);

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _nestedMessageFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 10:

+                case 8: {

+                  input.ReadInt32Array(tag, field_name, result.nestedmessageRepeatedInt32_);

+                  break;

+                }

+                case 18: {

+                  input.ReadMessageArray(tag, field_name, result.nestedmessageRepeatedForeignmessage_, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance, extensionRegistry);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public pbc::IPopsicleList<int> NestedmessageRepeatedInt32List {

+            get { return PrepareBuilder().nestedmessageRepeatedInt32_; }

+          }

+          public int NestedmessageRepeatedInt32Count {

+            get { return result.NestedmessageRepeatedInt32Count; }

+          }

+          public int GetNestedmessageRepeatedInt32(int index) {

+            return result.GetNestedmessageRepeatedInt32(index);

+          }

+          public Builder SetNestedmessageRepeatedInt32(int index, int value) {

+            PrepareBuilder();

+            result.nestedmessageRepeatedInt32_[index] = value;

+            return this;

+          }

+          public Builder AddNestedmessageRepeatedInt32(int value) {

+            PrepareBuilder();

+            result.nestedmessageRepeatedInt32_.Add(value);

+            return this;

+          }

+          public Builder AddRangeNestedmessageRepeatedInt32(scg::IEnumerable<int> values) {

+            PrepareBuilder();

+            result.nestedmessageRepeatedInt32_.Add(values);

+            return this;

+          }

+          public Builder ClearNestedmessageRepeatedInt32() {

+            PrepareBuilder();

+            result.nestedmessageRepeatedInt32_.Clear();

+            return this;

+          }

+          

+          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> NestedmessageRepeatedForeignmessageList {

+            get { return PrepareBuilder().nestedmessageRepeatedForeignmessage_; }

+          }

+          public int NestedmessageRepeatedForeignmessageCount {

+            get { return result.NestedmessageRepeatedForeignmessageCount; }

+          }

+          public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetNestedmessageRepeatedForeignmessage(int index) {

+            return result.GetNestedmessageRepeatedForeignmessage(index);

+          }

+          public Builder SetNestedmessageRepeatedForeignmessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_[index] = value;

+            return this;

+          }

+          public Builder SetNestedmessageRepeatedForeignmessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_[index] = builderForValue.Build();

+            return this;

+          }

+          public Builder AddNestedmessageRepeatedForeignmessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_.Add(value);

+            return this;

+          }

+          public Builder AddNestedmessageRepeatedForeignmessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_.Add(builderForValue.Build());

+            return this;

+          }

+          public Builder AddRangeNestedmessageRepeatedForeignmessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> values) {

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_.Add(values);

+            return this;

+          }

+          public Builder ClearNestedmessageRepeatedForeignmessage() {

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_.Clear();

+            return this;

+          }

+        }

+        static NestedMessage() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int OptionalNestedMessageFieldNumber = 1;

+    private bool hasOptionalNestedMessage;

+    private global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage optionalNestedMessage_;

+    public bool HasOptionalNestedMessage {

+      get { return hasOptionalNestedMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage OptionalNestedMessage {

+      get { return optionalNestedMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testNestedMessageHasBitsFieldNames;

+      if (hasOptionalNestedMessage) {

+        output.WriteMessage(1, field_names[0], OptionalNestedMessage);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasOptionalNestedMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, OptionalNestedMessage);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestNestedMessageHasBits ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestNestedMessageHasBits MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestNestedMessageHasBits prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestNestedMessageHasBits, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestNestedMessageHasBits cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestNestedMessageHasBits result;

+      

+      private TestNestedMessageHasBits PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestNestedMessageHasBits original = result;

+          result = new TestNestedMessageHasBits();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestNestedMessageHasBits MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Descriptor; }

+      }

+      

+      public override TestNestedMessageHasBits DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.DefaultInstance; }

+      }

+      

+      public override TestNestedMessageHasBits BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestNestedMessageHasBits) {

+          return MergeFrom((TestNestedMessageHasBits) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestNestedMessageHasBits other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasOptionalNestedMessage) {

+          MergeOptionalNestedMessage(other.OptionalNestedMessage);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testNestedMessageHasBitsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testNestedMessageHasBitsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.CreateBuilder();

+              if (result.hasOptionalNestedMessage) {

+                subBuilder.MergeFrom(OptionalNestedMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalNestedMessage = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasOptionalNestedMessage {

+       get { return result.hasOptionalNestedMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage OptionalNestedMessage {

+        get { return result.OptionalNestedMessage; }

+        set { SetOptionalNestedMessage(value); }

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalNestedMessage &&

+            result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance) {

+            result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalNestedMessage_ = value;

+        }

+        result.hasOptionalNestedMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalNestedMessage() {

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = false;

+        result.optionalNestedMessage_ = null;

+        return this;

+      }

+    }

+    static TestNestedMessageHasBits() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestCamelCaseFieldNames : pb::GeneratedMessage<TestCamelCaseFieldNames, TestCamelCaseFieldNames.Builder> {

+    private TestCamelCaseFieldNames() { }

+    private static readonly TestCamelCaseFieldNames defaultInstance = new TestCamelCaseFieldNames().MakeReadOnly();

+    private static readonly string[] _testCamelCaseFieldNamesFieldNames = new string[] { "CordField", "EnumField", "MessageField", "PrimitiveField", "RepeatedCordField", "RepeatedEnumField", "RepeatedMessageField", "RepeatedPrimitiveField", "RepeatedStringField", "RepeatedStringPieceField", "StringField", "StringPieceField" };

+    private static readonly uint[] _testCamelCaseFieldNamesFieldTags = new uint[] { 50, 24, 34, 8, 98, 72, 82, 56, 66, 90, 18, 42 };

+    public static TestCamelCaseFieldNames DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestCamelCaseFieldNames DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestCamelCaseFieldNames ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestCamelCaseFieldNames, TestCamelCaseFieldNames.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable; }

+    }

+    

+    public const int PrimitiveFieldFieldNumber = 1;

+    private bool hasPrimitiveField;

+    private int primitiveField_;

+    public bool HasPrimitiveField {

+      get { return hasPrimitiveField; }

+    }

+    public int PrimitiveField {

+      get { return primitiveField_; }

+    }

+    

+    public const int StringFieldFieldNumber = 2;

+    private bool hasStringField;

+    private string stringField_ = "";

+    public bool HasStringField {

+      get { return hasStringField; }

+    }

+    public string StringField {

+      get { return stringField_; }

+    }

+    

+    public const int EnumFieldFieldNumber = 3;

+    private bool hasEnumField;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum enumField_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+    public bool HasEnumField {

+      get { return hasEnumField; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumField {

+      get { return enumField_; }

+    }

+    

+    public const int MessageFieldFieldNumber = 4;

+    private bool hasMessageField;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage messageField_;

+    public bool HasMessageField {

+      get { return hasMessageField; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageField {

+      get { return messageField_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }

+    }

+    

+    public const int StringPieceFieldFieldNumber = 5;

+    private bool hasStringPieceField;

+    private string stringPieceField_ = "";

+    public bool HasStringPieceField {

+      get { return hasStringPieceField; }

+    }

+    public string StringPieceField {

+      get { return stringPieceField_; }

+    }

+    

+    public const int CordFieldFieldNumber = 6;

+    private bool hasCordField;

+    private string cordField_ = "";

+    public bool HasCordField {

+      get { return hasCordField; }

+    }

+    public string CordField {

+      get { return cordField_; }

+    }

+    

+    public const int RepeatedPrimitiveFieldFieldNumber = 7;

+    private pbc::PopsicleList<int> repeatedPrimitiveField_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedPrimitiveFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedPrimitiveField_); }

+    }

+    public int RepeatedPrimitiveFieldCount {

+      get { return repeatedPrimitiveField_.Count; }

+    }

+    public int GetRepeatedPrimitiveField(int index) {

+      return repeatedPrimitiveField_[index];

+    }

+    

+    public const int RepeatedStringFieldFieldNumber = 8;

+    private pbc::PopsicleList<string> repeatedStringField_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedStringField_); }

+    }

+    public int RepeatedStringFieldCount {

+      get { return repeatedStringField_.Count; }

+    }

+    public string GetRepeatedStringField(int index) {

+      return repeatedStringField_[index];

+    }

+    

+    public const int RepeatedEnumFieldFieldNumber = 9;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> repeatedEnumField_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedEnumFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedEnumField_); }

+    }

+    public int RepeatedEnumFieldCount {

+      get { return repeatedEnumField_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedEnumField(int index) {

+      return repeatedEnumField_[index];

+    }

+    

+    public const int RepeatedMessageFieldFieldNumber = 10;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> repeatedMessageField_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedMessageFieldList {

+      get { return repeatedMessageField_; }

+    }

+    public int RepeatedMessageFieldCount {

+      get { return repeatedMessageField_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedMessageField(int index) {

+      return repeatedMessageField_[index];

+    }

+    

+    public const int RepeatedStringPieceFieldFieldNumber = 11;

+    private pbc::PopsicleList<string> repeatedStringPieceField_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringPieceFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedStringPieceField_); }

+    }

+    public int RepeatedStringPieceFieldCount {

+      get { return repeatedStringPieceField_.Count; }

+    }

+    public string GetRepeatedStringPieceField(int index) {

+      return repeatedStringPieceField_[index];

+    }

+    

+    public const int RepeatedCordFieldFieldNumber = 12;

+    private pbc::PopsicleList<string> repeatedCordField_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedCordFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedCordField_); }

+    }

+    public int RepeatedCordFieldCount {

+      get { return repeatedCordField_.Count; }

+    }

+    public string GetRepeatedCordField(int index) {

+      return repeatedCordField_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testCamelCaseFieldNamesFieldNames;

+      if (hasPrimitiveField) {

+        output.WriteInt32(1, field_names[3], PrimitiveField);

+      }

+      if (hasStringField) {

+        output.WriteString(2, field_names[10], StringField);

+      }

+      if (hasEnumField) {

+        output.WriteEnum(3, field_names[1], (int) EnumField, EnumField);

+      }

+      if (hasMessageField) {

+        output.WriteMessage(4, field_names[2], MessageField);

+      }

+      if (hasStringPieceField) {

+        output.WriteString(5, field_names[11], StringPieceField);

+      }

+      if (hasCordField) {

+        output.WriteString(6, field_names[0], CordField);

+      }

+      if (repeatedPrimitiveField_.Count > 0) {

+        output.WriteInt32Array(7, field_names[7], repeatedPrimitiveField_);

+      }

+      if (repeatedStringField_.Count > 0) {

+        output.WriteStringArray(8, field_names[8], repeatedStringField_);

+      }

+      if (repeatedEnumField_.Count > 0) {

+        output.WriteEnumArray(9, field_names[5], repeatedEnumField_);

+      }

+      if (repeatedMessageField_.Count > 0) {

+        output.WriteMessageArray(10, field_names[6], repeatedMessageField_);

+      }

+      if (repeatedStringPieceField_.Count > 0) {

+        output.WriteStringArray(11, field_names[9], repeatedStringPieceField_);

+      }

+      if (repeatedCordField_.Count > 0) {

+        output.WriteStringArray(12, field_names[4], repeatedCordField_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasPrimitiveField) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, PrimitiveField);

+      }

+      if (hasStringField) {

+        size += pb::CodedOutputStream.ComputeStringSize(2, StringField);

+      }

+      if (hasEnumField) {

+        size += pb::CodedOutputStream.ComputeEnumSize(3, (int) EnumField);

+      }

+      if (hasMessageField) {

+        size += pb::CodedOutputStream.ComputeMessageSize(4, MessageField);

+      }

+      if (hasStringPieceField) {

+        size += pb::CodedOutputStream.ComputeStringSize(5, StringPieceField);

+      }

+      if (hasCordField) {

+        size += pb::CodedOutputStream.ComputeStringSize(6, CordField);

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedPrimitiveFieldList) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedPrimitiveField_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringFieldList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedStringField_.Count;

+      }

+      {

+        int dataSize = 0;

+        if (repeatedEnumField_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in repeatedEnumField_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 1 * repeatedEnumField_.Count;

+        }

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessage element in RepeatedMessageFieldList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(10, element);

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringPieceFieldList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedStringPieceField_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedCordFieldList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedCordField_.Count;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestCamelCaseFieldNames ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestCamelCaseFieldNames MakeReadOnly() {

+      repeatedPrimitiveField_.MakeReadOnly();

+      repeatedStringField_.MakeReadOnly();

+      repeatedEnumField_.MakeReadOnly();

+      repeatedMessageField_.MakeReadOnly();

+      repeatedStringPieceField_.MakeReadOnly();

+      repeatedCordField_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestCamelCaseFieldNames prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestCamelCaseFieldNames, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestCamelCaseFieldNames cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestCamelCaseFieldNames result;

+      

+      private TestCamelCaseFieldNames PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestCamelCaseFieldNames original = result;

+          result = new TestCamelCaseFieldNames();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestCamelCaseFieldNames MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.Descriptor; }

+      }

+      

+      public override TestCamelCaseFieldNames DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.DefaultInstance; }

+      }

+      

+      public override TestCamelCaseFieldNames BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestCamelCaseFieldNames) {

+          return MergeFrom((TestCamelCaseFieldNames) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestCamelCaseFieldNames other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasPrimitiveField) {

+          PrimitiveField = other.PrimitiveField;

+        }

+        if (other.HasStringField) {

+          StringField = other.StringField;

+        }

+        if (other.HasEnumField) {

+          EnumField = other.EnumField;

+        }

+        if (other.HasMessageField) {

+          MergeMessageField(other.MessageField);

+        }

+        if (other.HasStringPieceField) {

+          StringPieceField = other.StringPieceField;

+        }

+        if (other.HasCordField) {

+          CordField = other.CordField;

+        }

+        if (other.repeatedPrimitiveField_.Count != 0) {

+          result.repeatedPrimitiveField_.Add(other.repeatedPrimitiveField_);

+        }

+        if (other.repeatedStringField_.Count != 0) {

+          result.repeatedStringField_.Add(other.repeatedStringField_);

+        }

+        if (other.repeatedEnumField_.Count != 0) {

+          result.repeatedEnumField_.Add(other.repeatedEnumField_);

+        }

+        if (other.repeatedMessageField_.Count != 0) {

+          result.repeatedMessageField_.Add(other.repeatedMessageField_);

+        }

+        if (other.repeatedStringPieceField_.Count != 0) {

+          result.repeatedStringPieceField_.Add(other.repeatedStringPieceField_);

+        }

+        if (other.repeatedCordField_.Count != 0) {

+          result.repeatedCordField_.Add(other.repeatedCordField_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testCamelCaseFieldNamesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testCamelCaseFieldNamesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasPrimitiveField = input.ReadInt32(ref result.primitiveField_);

+              break;

+            }

+            case 18: {

+              result.hasStringField = input.ReadString(ref result.stringField_);

+              break;

+            }

+            case 24: {

+              object unknown;

+              if(input.ReadEnum(ref result.enumField_, out unknown)) {

+                result.hasEnumField = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(3, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 34: {

+              global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder();

+              if (result.hasMessageField) {

+                subBuilder.MergeFrom(MessageField);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              MessageField = subBuilder.BuildPartial();

+              break;

+            }

+            case 42: {

+              result.hasStringPieceField = input.ReadString(ref result.stringPieceField_);

+              break;

+            }

+            case 50: {

+              result.hasCordField = input.ReadString(ref result.cordField_);

+              break;

+            }

+            case 58:

+            case 56: {

+              input.ReadInt32Array(tag, field_name, result.repeatedPrimitiveField_);

+              break;

+            }

+            case 66: {

+              input.ReadStringArray(tag, field_name, result.repeatedStringField_);

+              break;

+            }

+            case 74:

+            case 72: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.repeatedEnumField_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(9, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 82: {

+              input.ReadMessageArray(tag, field_name, result.repeatedMessageField_, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 90: {

+              input.ReadStringArray(tag, field_name, result.repeatedStringPieceField_);

+              break;

+            }

+            case 98: {

+              input.ReadStringArray(tag, field_name, result.repeatedCordField_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasPrimitiveField {

+        get { return result.hasPrimitiveField; }

+      }

+      public int PrimitiveField {

+        get { return result.PrimitiveField; }

+        set { SetPrimitiveField(value); }

+      }

+      public Builder SetPrimitiveField(int value) {

+        PrepareBuilder();

+        result.hasPrimitiveField = true;

+        result.primitiveField_ = value;

+        return this;

+      }

+      public Builder ClearPrimitiveField() {

+        PrepareBuilder();

+        result.hasPrimitiveField = false;

+        result.primitiveField_ = 0;

+        return this;

+      }

+      

+      public bool HasStringField {

+        get { return result.hasStringField; }

+      }

+      public string StringField {

+        get { return result.StringField; }

+        set { SetStringField(value); }

+      }

+      public Builder SetStringField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasStringField = true;

+        result.stringField_ = value;

+        return this;

+      }

+      public Builder ClearStringField() {

+        PrepareBuilder();

+        result.hasStringField = false;

+        result.stringField_ = "";

+        return this;

+      }

+      

+      public bool HasEnumField {

+       get { return result.hasEnumField; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumField {

+        get { return result.EnumField; }

+        set { SetEnumField(value); }

+      }

+      public Builder SetEnumField(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.hasEnumField = true;

+        result.enumField_ = value;

+        return this;

+      }

+      public Builder ClearEnumField() {

+        PrepareBuilder();

+        result.hasEnumField = false;

+        result.enumField_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+        return this;

+      }

+      

+      public bool HasMessageField {

+       get { return result.hasMessageField; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageField {

+        get { return result.MessageField; }

+        set { SetMessageField(value); }

+      }

+      public Builder SetMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMessageField = true;

+        result.messageField_ = value;

+        return this;

+      }

+      public Builder SetMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasMessageField = true;

+        result.messageField_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasMessageField &&

+            result.messageField_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {

+            result.messageField_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.messageField_).MergeFrom(value).BuildPartial();

+        } else {

+          result.messageField_ = value;

+        }

+        result.hasMessageField = true;

+        return this;

+      }

+      public Builder ClearMessageField() {

+        PrepareBuilder();

+        result.hasMessageField = false;

+        result.messageField_ = null;

+        return this;

+      }

+      

+      public bool HasStringPieceField {

+        get { return result.hasStringPieceField; }

+      }

+      public string StringPieceField {

+        get { return result.StringPieceField; }

+        set { SetStringPieceField(value); }

+      }

+      public Builder SetStringPieceField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasStringPieceField = true;

+        result.stringPieceField_ = value;

+        return this;

+      }

+      public Builder ClearStringPieceField() {

+        PrepareBuilder();

+        result.hasStringPieceField = false;

+        result.stringPieceField_ = "";

+        return this;

+      }

+      

+      public bool HasCordField {

+        get { return result.hasCordField; }

+      }

+      public string CordField {

+        get { return result.CordField; }

+        set { SetCordField(value); }

+      }

+      public Builder SetCordField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasCordField = true;

+        result.cordField_ = value;

+        return this;

+      }

+      public Builder ClearCordField() {

+        PrepareBuilder();

+        result.hasCordField = false;

+        result.cordField_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedPrimitiveFieldList {

+        get { return PrepareBuilder().repeatedPrimitiveField_; }

+      }

+      public int RepeatedPrimitiveFieldCount {

+        get { return result.RepeatedPrimitiveFieldCount; }

+      }

+      public int GetRepeatedPrimitiveField(int index) {

+        return result.GetRepeatedPrimitiveField(index);

+      }

+      public Builder SetRepeatedPrimitiveField(int index, int value) {

+        PrepareBuilder();

+        result.repeatedPrimitiveField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedPrimitiveField(int value) {

+        PrepareBuilder();

+        result.repeatedPrimitiveField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedPrimitiveField(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedPrimitiveField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedPrimitiveField() {

+        PrepareBuilder();

+        result.repeatedPrimitiveField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringFieldList {

+        get { return PrepareBuilder().repeatedStringField_; }

+      }

+      public int RepeatedStringFieldCount {

+        get { return result.RepeatedStringFieldCount; }

+      }

+      public string GetRepeatedStringField(int index) {

+        return result.GetRepeatedStringField(index);

+      }

+      public Builder SetRepeatedStringField(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedStringField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedStringField(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedStringField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedStringField() {

+        PrepareBuilder();

+        result.repeatedStringField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedEnumFieldList {

+        get { return PrepareBuilder().repeatedEnumField_; }

+      }

+      public int RepeatedEnumFieldCount {

+        get { return result.RepeatedEnumFieldCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedEnumField(int index) {

+        return result.GetRepeatedEnumField(index);

+      }

+      public Builder SetRepeatedEnumField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.repeatedEnumField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedEnumField(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.repeatedEnumField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedEnumField(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {

+        PrepareBuilder();

+        result.repeatedEnumField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedEnumField() {

+        PrepareBuilder();

+        result.repeatedEnumField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedMessageFieldList {

+        get { return PrepareBuilder().repeatedMessageField_; }

+      }

+      public int RepeatedMessageFieldCount {

+        get { return result.RepeatedMessageFieldCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedMessageField(int index) {

+        return result.GetRepeatedMessageField(index);

+      }

+      public Builder SetRepeatedMessageField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessageField_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedMessageField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessageField_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessageField_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessageField_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedMessageField(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> values) {

+        PrepareBuilder();

+        result.repeatedMessageField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedMessageField() {

+        PrepareBuilder();

+        result.repeatedMessageField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringPieceFieldList {

+        get { return PrepareBuilder().repeatedStringPieceField_; }

+      }

+      public int RepeatedStringPieceFieldCount {

+        get { return result.RepeatedStringPieceFieldCount; }

+      }

+      public string GetRepeatedStringPieceField(int index) {

+        return result.GetRepeatedStringPieceField(index);

+      }

+      public Builder SetRepeatedStringPieceField(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPieceField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedStringPieceField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPieceField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedStringPieceField(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedStringPieceField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedStringPieceField() {

+        PrepareBuilder();

+        result.repeatedStringPieceField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedCordFieldList {

+        get { return PrepareBuilder().repeatedCordField_; }

+      }

+      public int RepeatedCordFieldCount {

+        get { return result.RepeatedCordFieldCount; }

+      }

+      public string GetRepeatedCordField(int index) {

+        return result.GetRepeatedCordField(index);

+      }

+      public Builder SetRepeatedCordField(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCordField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedCordField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCordField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedCordField(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedCordField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedCordField() {

+        PrepareBuilder();

+        result.repeatedCordField_.Clear();

+        return this;

+      }

+    }

+    static TestCamelCaseFieldNames() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestFieldOrderings : pb::ExtendableMessage<TestFieldOrderings, TestFieldOrderings.Builder> {

+    private TestFieldOrderings() { }

+    private static readonly TestFieldOrderings defaultInstance = new TestFieldOrderings().MakeReadOnly();

+    private static readonly string[] _testFieldOrderingsFieldNames = new string[] { "my_float", "my_int", "my_string" };

+    private static readonly uint[] _testFieldOrderingsFieldTags = new uint[] { 813, 8, 90 };

+    public static TestFieldOrderings DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestFieldOrderings DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestFieldOrderings ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestFieldOrderings__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestFieldOrderings, TestFieldOrderings.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable; }

+    }

+    

+    public const int MyStringFieldNumber = 11;

+    private bool hasMyString;

+    private string myString_ = "";

+    public bool HasMyString {

+      get { return hasMyString; }

+    }

+    public string MyString {

+      get { return myString_; }

+    }

+    

+    public const int MyIntFieldNumber = 1;

+    private bool hasMyInt;

+    private long myInt_;

+    public bool HasMyInt {

+      get { return hasMyInt; }

+    }

+    public long MyInt {

+      get { return myInt_; }

+    }

+    

+    public const int MyFloatFieldNumber = 101;

+    private bool hasMyFloat;

+    private float myFloat_;

+    public bool HasMyFloat {

+      get { return hasMyFloat; }

+    }

+    public float MyFloat {

+      get { return myFloat_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testFieldOrderingsFieldNames;

+      pb::ExtendableMessage<TestFieldOrderings, TestFieldOrderings.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (hasMyInt) {

+        output.WriteInt64(1, field_names[1], MyInt);

+      }

+      extensionWriter.WriteUntil(11, output);

+      if (hasMyString) {

+        output.WriteString(11, field_names[2], MyString);

+      }

+      extensionWriter.WriteUntil(101, output);

+      if (hasMyFloat) {

+        output.WriteFloat(101, field_names[0], MyFloat);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasMyString) {

+        size += pb::CodedOutputStream.ComputeStringSize(11, MyString);

+      }

+      if (hasMyInt) {

+        size += pb::CodedOutputStream.ComputeInt64Size(1, MyInt);

+      }

+      if (hasMyFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(101, MyFloat);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestFieldOrderings ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestFieldOrderings ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestFieldOrderings MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestFieldOrderings prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestFieldOrderings, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestFieldOrderings cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestFieldOrderings result;

+      

+      private TestFieldOrderings PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestFieldOrderings original = result;

+          result = new TestFieldOrderings();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestFieldOrderings MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Descriptor; }

+      }

+      

+      public override TestFieldOrderings DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.DefaultInstance; }

+      }

+      

+      public override TestFieldOrderings BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestFieldOrderings) {

+          return MergeFrom((TestFieldOrderings) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestFieldOrderings other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasMyString) {

+          MyString = other.MyString;

+        }

+        if (other.HasMyInt) {

+          MyInt = other.MyInt;

+        }

+        if (other.HasMyFloat) {

+          MyFloat = other.MyFloat;

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testFieldOrderingsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testFieldOrderingsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasMyInt = input.ReadInt64(ref result.myInt_);

+              break;

+            }

+            case 90: {

+              result.hasMyString = input.ReadString(ref result.myString_);

+              break;

+            }

+            case 813: {

+              result.hasMyFloat = input.ReadFloat(ref result.myFloat_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasMyString {

+        get { return result.hasMyString; }

+      }

+      public string MyString {

+        get { return result.MyString; }

+        set { SetMyString(value); }

+      }

+      public Builder SetMyString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMyString = true;

+        result.myString_ = value;

+        return this;

+      }

+      public Builder ClearMyString() {

+        PrepareBuilder();

+        result.hasMyString = false;

+        result.myString_ = "";

+        return this;

+      }

+      

+      public bool HasMyInt {

+        get { return result.hasMyInt; }

+      }

+      public long MyInt {

+        get { return result.MyInt; }

+        set { SetMyInt(value); }

+      }

+      public Builder SetMyInt(long value) {

+        PrepareBuilder();

+        result.hasMyInt = true;

+        result.myInt_ = value;

+        return this;

+      }

+      public Builder ClearMyInt() {

+        PrepareBuilder();

+        result.hasMyInt = false;

+        result.myInt_ = 0L;

+        return this;

+      }

+      

+      public bool HasMyFloat {

+        get { return result.hasMyFloat; }

+      }

+      public float MyFloat {

+        get { return result.MyFloat; }

+        set { SetMyFloat(value); }

+      }

+      public Builder SetMyFloat(float value) {

+        PrepareBuilder();

+        result.hasMyFloat = true;

+        result.myFloat_ = value;

+        return this;

+      }

+      public Builder ClearMyFloat() {

+        PrepareBuilder();

+        result.hasMyFloat = false;

+        result.myFloat_ = 0F;

+        return this;

+      }

+    }

+    static TestFieldOrderings() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestExtremeDefaultValues : pb::GeneratedMessage<TestExtremeDefaultValues, TestExtremeDefaultValues.Builder> {

+    private TestExtremeDefaultValues() { }

+    private static readonly TestExtremeDefaultValues defaultInstance = new TestExtremeDefaultValues().MakeReadOnly();

+    private static readonly string[] _testExtremeDefaultValuesFieldNames = new string[] { "cpp_trigraph", "escaped_bytes", "inf_double", "inf_float", "large_float", "large_uint32", "large_uint64", "nan_double", "nan_float", "neg_inf_double", "neg_inf_float", "negative_float", "negative_one_float", "one_float", "small_float", "small_int32", "small_int64", "small_negative_float", "utf8_string", "zero_float" };

+    private static readonly uint[] _testExtremeDefaultValuesFieldTags = new uint[] { 162, 10, 113, 141, 101, 16, 24, 129, 157, 121, 149, 93, 85, 69, 77, 32, 40, 109, 50, 61 };

+    public static TestExtremeDefaultValues DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestExtremeDefaultValues DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestExtremeDefaultValues ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestExtremeDefaultValues, TestExtremeDefaultValues.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestExtremeDefaultValues__FieldAccessorTable; }

+    }

+    

+    public const int EscapedBytesFieldNumber = 1;

+    private bool hasEscapedBytes;

+    private pb::ByteString escapedBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[0].DefaultValue;

+    public bool HasEscapedBytes {

+      get { return hasEscapedBytes; }

+    }

+    public pb::ByteString EscapedBytes {

+      get { return escapedBytes_; }

+    }

+    

+    public const int LargeUint32FieldNumber = 2;

+    private bool hasLargeUint32;

+    private uint largeUint32_ = 4294967295;

+    public bool HasLargeUint32 {

+      get { return hasLargeUint32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint LargeUint32 {

+      get { return largeUint32_; }

+    }

+    

+    public const int LargeUint64FieldNumber = 3;

+    private bool hasLargeUint64;

+    private ulong largeUint64_ = 18446744073709551615UL;

+    public bool HasLargeUint64 {

+      get { return hasLargeUint64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong LargeUint64 {

+      get { return largeUint64_; }

+    }

+    

+    public const int SmallInt32FieldNumber = 4;

+    private bool hasSmallInt32;

+    private int smallInt32_ = -2147483647;

+    public bool HasSmallInt32 {

+      get { return hasSmallInt32; }

+    }

+    public int SmallInt32 {

+      get { return smallInt32_; }

+    }

+    

+    public const int SmallInt64FieldNumber = 5;

+    private bool hasSmallInt64;

+    private long smallInt64_ = -9223372036854775807L;

+    public bool HasSmallInt64 {

+      get { return hasSmallInt64; }

+    }

+    public long SmallInt64 {

+      get { return smallInt64_; }

+    }

+    

+    public const int Utf8StringFieldNumber = 6;

+    private bool hasUtf8String;

+    private string utf8String_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[5].DefaultValue;

+    public bool HasUtf8String {

+      get { return hasUtf8String; }

+    }

+    public string Utf8String {

+      get { return utf8String_; }

+    }

+    

+    public const int ZeroFloatFieldNumber = 7;

+    private bool hasZeroFloat;

+    private float zeroFloat_;

+    public bool HasZeroFloat {

+      get { return hasZeroFloat; }

+    }

+    public float ZeroFloat {

+      get { return zeroFloat_; }

+    }

+    

+    public const int OneFloatFieldNumber = 8;

+    private bool hasOneFloat;

+    private float oneFloat_ = 1F;

+    public bool HasOneFloat {

+      get { return hasOneFloat; }

+    }

+    public float OneFloat {

+      get { return oneFloat_; }

+    }

+    

+    public const int SmallFloatFieldNumber = 9;

+    private bool hasSmallFloat;

+    private float smallFloat_ = 1.5F;

+    public bool HasSmallFloat {

+      get { return hasSmallFloat; }

+    }

+    public float SmallFloat {

+      get { return smallFloat_; }

+    }

+    

+    public const int NegativeOneFloatFieldNumber = 10;

+    private bool hasNegativeOneFloat;

+    private float negativeOneFloat_ = -1F;

+    public bool HasNegativeOneFloat {

+      get { return hasNegativeOneFloat; }

+    }

+    public float NegativeOneFloat {

+      get { return negativeOneFloat_; }

+    }

+    

+    public const int NegativeFloatFieldNumber = 11;

+    private bool hasNegativeFloat;

+    private float negativeFloat_ = -1.5F;

+    public bool HasNegativeFloat {

+      get { return hasNegativeFloat; }

+    }

+    public float NegativeFloat {

+      get { return negativeFloat_; }

+    }

+    

+    public const int LargeFloatFieldNumber = 12;

+    private bool hasLargeFloat;

+    private float largeFloat_ = 2E+08F;

+    public bool HasLargeFloat {

+      get { return hasLargeFloat; }

+    }

+    public float LargeFloat {

+      get { return largeFloat_; }

+    }

+    

+    public const int SmallNegativeFloatFieldNumber = 13;

+    private bool hasSmallNegativeFloat;

+    private float smallNegativeFloat_ = -8E-28F;

+    public bool HasSmallNegativeFloat {

+      get { return hasSmallNegativeFloat; }

+    }

+    public float SmallNegativeFloat {

+      get { return smallNegativeFloat_; }

+    }

+    

+    public const int InfDoubleFieldNumber = 14;

+    private bool hasInfDouble;

+    private double infDouble_ = double.PositiveInfinity;

+    public bool HasInfDouble {

+      get { return hasInfDouble; }

+    }

+    public double InfDouble {

+      get { return infDouble_; }

+    }

+    

+    public const int NegInfDoubleFieldNumber = 15;

+    private bool hasNegInfDouble;

+    private double negInfDouble_ = double.NegativeInfinity;

+    public bool HasNegInfDouble {

+      get { return hasNegInfDouble; }

+    }

+    public double NegInfDouble {

+      get { return negInfDouble_; }

+    }

+    

+    public const int NanDoubleFieldNumber = 16;

+    private bool hasNanDouble;

+    private double nanDouble_ = double.NaN;

+    public bool HasNanDouble {

+      get { return hasNanDouble; }

+    }

+    public double NanDouble {

+      get { return nanDouble_; }

+    }

+    

+    public const int InfFloatFieldNumber = 17;

+    private bool hasInfFloat;

+    private float infFloat_ = float.PositiveInfinity;

+    public bool HasInfFloat {

+      get { return hasInfFloat; }

+    }

+    public float InfFloat {

+      get { return infFloat_; }

+    }

+    

+    public const int NegInfFloatFieldNumber = 18;

+    private bool hasNegInfFloat;

+    private float negInfFloat_ = float.NegativeInfinity;

+    public bool HasNegInfFloat {

+      get { return hasNegInfFloat; }

+    }

+    public float NegInfFloat {

+      get { return negInfFloat_; }

+    }

+    

+    public const int NanFloatFieldNumber = 19;

+    private bool hasNanFloat;

+    private float nanFloat_ = float.NaN;

+    public bool HasNanFloat {

+      get { return hasNanFloat; }

+    }

+    public float NanFloat {

+      get { return nanFloat_; }

+    }

+    

+    public const int CppTrigraphFieldNumber = 20;

+    private bool hasCppTrigraph;

+    private string cppTrigraph_ = "? ? ?? ?? ??? ??/ ??-";

+    public bool HasCppTrigraph {

+      get { return hasCppTrigraph; }

+    }

+    public string CppTrigraph {

+      get { return cppTrigraph_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testExtremeDefaultValuesFieldNames;

+      if (hasEscapedBytes) {

+        output.WriteBytes(1, field_names[1], EscapedBytes);

+      }

+      if (hasLargeUint32) {

+        output.WriteUInt32(2, field_names[5], LargeUint32);

+      }

+      if (hasLargeUint64) {

+        output.WriteUInt64(3, field_names[6], LargeUint64);

+      }

+      if (hasSmallInt32) {

+        output.WriteInt32(4, field_names[15], SmallInt32);

+      }

+      if (hasSmallInt64) {

+        output.WriteInt64(5, field_names[16], SmallInt64);

+      }

+      if (hasUtf8String) {

+        output.WriteString(6, field_names[18], Utf8String);

+      }

+      if (hasZeroFloat) {

+        output.WriteFloat(7, field_names[19], ZeroFloat);

+      }

+      if (hasOneFloat) {

+        output.WriteFloat(8, field_names[13], OneFloat);

+      }

+      if (hasSmallFloat) {

+        output.WriteFloat(9, field_names[14], SmallFloat);

+      }

+      if (hasNegativeOneFloat) {

+        output.WriteFloat(10, field_names[12], NegativeOneFloat);

+      }

+      if (hasNegativeFloat) {

+        output.WriteFloat(11, field_names[11], NegativeFloat);

+      }

+      if (hasLargeFloat) {

+        output.WriteFloat(12, field_names[4], LargeFloat);

+      }

+      if (hasSmallNegativeFloat) {

+        output.WriteFloat(13, field_names[17], SmallNegativeFloat);

+      }

+      if (hasInfDouble) {

+        output.WriteDouble(14, field_names[2], InfDouble);

+      }

+      if (hasNegInfDouble) {

+        output.WriteDouble(15, field_names[9], NegInfDouble);

+      }

+      if (hasNanDouble) {

+        output.WriteDouble(16, field_names[7], NanDouble);

+      }

+      if (hasInfFloat) {

+        output.WriteFloat(17, field_names[3], InfFloat);

+      }

+      if (hasNegInfFloat) {

+        output.WriteFloat(18, field_names[10], NegInfFloat);

+      }

+      if (hasNanFloat) {

+        output.WriteFloat(19, field_names[8], NanFloat);

+      }

+      if (hasCppTrigraph) {

+        output.WriteString(20, field_names[0], CppTrigraph);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasEscapedBytes) {

+        size += pb::CodedOutputStream.ComputeBytesSize(1, EscapedBytes);

+      }

+      if (hasLargeUint32) {

+        size += pb::CodedOutputStream.ComputeUInt32Size(2, LargeUint32);

+      }

+      if (hasLargeUint64) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(3, LargeUint64);

+      }

+      if (hasSmallInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(4, SmallInt32);

+      }

+      if (hasSmallInt64) {

+        size += pb::CodedOutputStream.ComputeInt64Size(5, SmallInt64);

+      }

+      if (hasUtf8String) {

+        size += pb::CodedOutputStream.ComputeStringSize(6, Utf8String);

+      }

+      if (hasZeroFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(7, ZeroFloat);

+      }

+      if (hasOneFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(8, OneFloat);

+      }

+      if (hasSmallFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(9, SmallFloat);

+      }

+      if (hasNegativeOneFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(10, NegativeOneFloat);

+      }

+      if (hasNegativeFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(11, NegativeFloat);

+      }

+      if (hasLargeFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(12, LargeFloat);

+      }

+      if (hasSmallNegativeFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(13, SmallNegativeFloat);

+      }

+      if (hasInfDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(14, InfDouble);

+      }

+      if (hasNegInfDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(15, NegInfDouble);

+      }

+      if (hasNanDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(16, NanDouble);

+      }

+      if (hasInfFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(17, InfFloat);

+      }

+      if (hasNegInfFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(18, NegInfFloat);

+      }

+      if (hasNanFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(19, NanFloat);

+      }

+      if (hasCppTrigraph) {

+        size += pb::CodedOutputStream.ComputeStringSize(20, CppTrigraph);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestExtremeDefaultValues ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestExtremeDefaultValues MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestExtremeDefaultValues prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestExtremeDefaultValues, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestExtremeDefaultValues cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestExtremeDefaultValues result;

+      

+      private TestExtremeDefaultValues PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestExtremeDefaultValues original = result;

+          result = new TestExtremeDefaultValues();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestExtremeDefaultValues MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor; }

+      }

+      

+      public override TestExtremeDefaultValues DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.DefaultInstance; }

+      }

+      

+      public override TestExtremeDefaultValues BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestExtremeDefaultValues) {

+          return MergeFrom((TestExtremeDefaultValues) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestExtremeDefaultValues other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasEscapedBytes) {

+          EscapedBytes = other.EscapedBytes;

+        }

+        if (other.HasLargeUint32) {

+          LargeUint32 = other.LargeUint32;

+        }

+        if (other.HasLargeUint64) {

+          LargeUint64 = other.LargeUint64;

+        }

+        if (other.HasSmallInt32) {

+          SmallInt32 = other.SmallInt32;

+        }

+        if (other.HasSmallInt64) {

+          SmallInt64 = other.SmallInt64;

+        }

+        if (other.HasUtf8String) {

+          Utf8String = other.Utf8String;

+        }

+        if (other.HasZeroFloat) {

+          ZeroFloat = other.ZeroFloat;

+        }

+        if (other.HasOneFloat) {

+          OneFloat = other.OneFloat;

+        }

+        if (other.HasSmallFloat) {

+          SmallFloat = other.SmallFloat;

+        }

+        if (other.HasNegativeOneFloat) {

+          NegativeOneFloat = other.NegativeOneFloat;

+        }

+        if (other.HasNegativeFloat) {

+          NegativeFloat = other.NegativeFloat;

+        }

+        if (other.HasLargeFloat) {

+          LargeFloat = other.LargeFloat;

+        }

+        if (other.HasSmallNegativeFloat) {

+          SmallNegativeFloat = other.SmallNegativeFloat;

+        }

+        if (other.HasInfDouble) {

+          InfDouble = other.InfDouble;

+        }

+        if (other.HasNegInfDouble) {

+          NegInfDouble = other.NegInfDouble;

+        }

+        if (other.HasNanDouble) {

+          NanDouble = other.NanDouble;

+        }

+        if (other.HasInfFloat) {

+          InfFloat = other.InfFloat;

+        }

+        if (other.HasNegInfFloat) {

+          NegInfFloat = other.NegInfFloat;

+        }

+        if (other.HasNanFloat) {

+          NanFloat = other.NanFloat;

+        }

+        if (other.HasCppTrigraph) {

+          CppTrigraph = other.CppTrigraph;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testExtremeDefaultValuesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testExtremeDefaultValuesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasEscapedBytes = input.ReadBytes(ref result.escapedBytes_);

+              break;

+            }

+            case 16: {

+              result.hasLargeUint32 = input.ReadUInt32(ref result.largeUint32_);

+              break;

+            }

+            case 24: {

+              result.hasLargeUint64 = input.ReadUInt64(ref result.largeUint64_);

+              break;

+            }

+            case 32: {

+              result.hasSmallInt32 = input.ReadInt32(ref result.smallInt32_);

+              break;

+            }

+            case 40: {

+              result.hasSmallInt64 = input.ReadInt64(ref result.smallInt64_);

+              break;

+            }

+            case 50: {

+              result.hasUtf8String = input.ReadString(ref result.utf8String_);

+              break;

+            }

+            case 61: {

+              result.hasZeroFloat = input.ReadFloat(ref result.zeroFloat_);

+              break;

+            }

+            case 69: {

+              result.hasOneFloat = input.ReadFloat(ref result.oneFloat_);

+              break;

+            }

+            case 77: {

+              result.hasSmallFloat = input.ReadFloat(ref result.smallFloat_);

+              break;

+            }

+            case 85: {

+              result.hasNegativeOneFloat = input.ReadFloat(ref result.negativeOneFloat_);

+              break;

+            }

+            case 93: {

+              result.hasNegativeFloat = input.ReadFloat(ref result.negativeFloat_);

+              break;

+            }

+            case 101: {

+              result.hasLargeFloat = input.ReadFloat(ref result.largeFloat_);

+              break;

+            }

+            case 109: {

+              result.hasSmallNegativeFloat = input.ReadFloat(ref result.smallNegativeFloat_);

+              break;

+            }

+            case 113: {

+              result.hasInfDouble = input.ReadDouble(ref result.infDouble_);

+              break;

+            }

+            case 121: {

+              result.hasNegInfDouble = input.ReadDouble(ref result.negInfDouble_);

+              break;

+            }

+            case 129: {

+              result.hasNanDouble = input.ReadDouble(ref result.nanDouble_);

+              break;

+            }

+            case 141: {

+              result.hasInfFloat = input.ReadFloat(ref result.infFloat_);

+              break;

+            }

+            case 149: {

+              result.hasNegInfFloat = input.ReadFloat(ref result.negInfFloat_);

+              break;

+            }

+            case 157: {

+              result.hasNanFloat = input.ReadFloat(ref result.nanFloat_);

+              break;

+            }

+            case 162: {

+              result.hasCppTrigraph = input.ReadString(ref result.cppTrigraph_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasEscapedBytes {

+        get { return result.hasEscapedBytes; }

+      }

+      public pb::ByteString EscapedBytes {

+        get { return result.EscapedBytes; }

+        set { SetEscapedBytes(value); }

+      }

+      public Builder SetEscapedBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasEscapedBytes = true;

+        result.escapedBytes_ = value;

+        return this;

+      }

+      public Builder ClearEscapedBytes() {

+        PrepareBuilder();

+        result.hasEscapedBytes = false;

+        result.escapedBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[0].DefaultValue;

+        return this;

+      }

+      

+      public bool HasLargeUint32 {

+        get { return result.hasLargeUint32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint LargeUint32 {

+        get { return result.LargeUint32; }

+        set { SetLargeUint32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetLargeUint32(uint value) {

+        PrepareBuilder();

+        result.hasLargeUint32 = true;

+        result.largeUint32_ = value;

+        return this;

+      }

+      public Builder ClearLargeUint32() {

+        PrepareBuilder();

+        result.hasLargeUint32 = false;

+        result.largeUint32_ = 4294967295;

+        return this;

+      }

+      

+      public bool HasLargeUint64 {

+        get { return result.hasLargeUint64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong LargeUint64 {

+        get { return result.LargeUint64; }

+        set { SetLargeUint64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetLargeUint64(ulong value) {

+        PrepareBuilder();

+        result.hasLargeUint64 = true;

+        result.largeUint64_ = value;

+        return this;

+      }

+      public Builder ClearLargeUint64() {

+        PrepareBuilder();

+        result.hasLargeUint64 = false;

+        result.largeUint64_ = 18446744073709551615UL;

+        return this;

+      }

+      

+      public bool HasSmallInt32 {

+        get { return result.hasSmallInt32; }

+      }

+      public int SmallInt32 {

+        get { return result.SmallInt32; }

+        set { SetSmallInt32(value); }

+      }

+      public Builder SetSmallInt32(int value) {

+        PrepareBuilder();

+        result.hasSmallInt32 = true;

+        result.smallInt32_ = value;

+        return this;

+      }

+      public Builder ClearSmallInt32() {

+        PrepareBuilder();

+        result.hasSmallInt32 = false;

+        result.smallInt32_ = -2147483647;

+        return this;

+      }

+      

+      public bool HasSmallInt64 {

+        get { return result.hasSmallInt64; }

+      }

+      public long SmallInt64 {

+        get { return result.SmallInt64; }

+        set { SetSmallInt64(value); }

+      }

+      public Builder SetSmallInt64(long value) {

+        PrepareBuilder();

+        result.hasSmallInt64 = true;

+        result.smallInt64_ = value;

+        return this;

+      }

+      public Builder ClearSmallInt64() {

+        PrepareBuilder();

+        result.hasSmallInt64 = false;

+        result.smallInt64_ = -9223372036854775807L;

+        return this;

+      }

+      

+      public bool HasUtf8String {

+        get { return result.hasUtf8String; }

+      }

+      public string Utf8String {

+        get { return result.Utf8String; }

+        set { SetUtf8String(value); }

+      }

+      public Builder SetUtf8String(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasUtf8String = true;

+        result.utf8String_ = value;

+        return this;

+      }

+      public Builder ClearUtf8String() {

+        PrepareBuilder();

+        result.hasUtf8String = false;

+        result.utf8String_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[5].DefaultValue;

+        return this;

+      }

+      

+      public bool HasZeroFloat {

+        get { return result.hasZeroFloat; }

+      }

+      public float ZeroFloat {

+        get { return result.ZeroFloat; }

+        set { SetZeroFloat(value); }

+      }

+      public Builder SetZeroFloat(float value) {

+        PrepareBuilder();

+        result.hasZeroFloat = true;

+        result.zeroFloat_ = value;

+        return this;

+      }

+      public Builder ClearZeroFloat() {

+        PrepareBuilder();

+        result.hasZeroFloat = false;

+        result.zeroFloat_ = 0F;

+        return this;

+      }

+      

+      public bool HasOneFloat {

+        get { return result.hasOneFloat; }

+      }

+      public float OneFloat {

+        get { return result.OneFloat; }

+        set { SetOneFloat(value); }

+      }

+      public Builder SetOneFloat(float value) {

+        PrepareBuilder();

+        result.hasOneFloat = true;

+        result.oneFloat_ = value;

+        return this;

+      }

+      public Builder ClearOneFloat() {

+        PrepareBuilder();

+        result.hasOneFloat = false;

+        result.oneFloat_ = 1F;

+        return this;

+      }

+      

+      public bool HasSmallFloat {

+        get { return result.hasSmallFloat; }

+      }

+      public float SmallFloat {

+        get { return result.SmallFloat; }

+        set { SetSmallFloat(value); }

+      }

+      public Builder SetSmallFloat(float value) {

+        PrepareBuilder();

+        result.hasSmallFloat = true;

+        result.smallFloat_ = value;

+        return this;

+      }

+      public Builder ClearSmallFloat() {

+        PrepareBuilder();

+        result.hasSmallFloat = false;

+        result.smallFloat_ = 1.5F;

+        return this;

+      }

+      

+      public bool HasNegativeOneFloat {

+        get { return result.hasNegativeOneFloat; }

+      }

+      public float NegativeOneFloat {

+        get { return result.NegativeOneFloat; }

+        set { SetNegativeOneFloat(value); }

+      }

+      public Builder SetNegativeOneFloat(float value) {

+        PrepareBuilder();

+        result.hasNegativeOneFloat = true;

+        result.negativeOneFloat_ = value;

+        return this;

+      }

+      public Builder ClearNegativeOneFloat() {

+        PrepareBuilder();

+        result.hasNegativeOneFloat = false;

+        result.negativeOneFloat_ = -1F;

+        return this;

+      }

+      

+      public bool HasNegativeFloat {

+        get { return result.hasNegativeFloat; }

+      }

+      public float NegativeFloat {

+        get { return result.NegativeFloat; }

+        set { SetNegativeFloat(value); }

+      }

+      public Builder SetNegativeFloat(float value) {

+        PrepareBuilder();

+        result.hasNegativeFloat = true;

+        result.negativeFloat_ = value;

+        return this;

+      }

+      public Builder ClearNegativeFloat() {

+        PrepareBuilder();

+        result.hasNegativeFloat = false;

+        result.negativeFloat_ = -1.5F;

+        return this;

+      }

+      

+      public bool HasLargeFloat {

+        get { return result.hasLargeFloat; }

+      }

+      public float LargeFloat {

+        get { return result.LargeFloat; }

+        set { SetLargeFloat(value); }

+      }

+      public Builder SetLargeFloat(float value) {

+        PrepareBuilder();

+        result.hasLargeFloat = true;

+        result.largeFloat_ = value;

+        return this;

+      }

+      public Builder ClearLargeFloat() {

+        PrepareBuilder();

+        result.hasLargeFloat = false;

+        result.largeFloat_ = 2E+08F;

+        return this;

+      }

+      

+      public bool HasSmallNegativeFloat {

+        get { return result.hasSmallNegativeFloat; }

+      }

+      public float SmallNegativeFloat {

+        get { return result.SmallNegativeFloat; }

+        set { SetSmallNegativeFloat(value); }

+      }

+      public Builder SetSmallNegativeFloat(float value) {

+        PrepareBuilder();

+        result.hasSmallNegativeFloat = true;

+        result.smallNegativeFloat_ = value;

+        return this;

+      }

+      public Builder ClearSmallNegativeFloat() {

+        PrepareBuilder();

+        result.hasSmallNegativeFloat = false;

+        result.smallNegativeFloat_ = -8E-28F;

+        return this;

+      }

+      

+      public bool HasInfDouble {

+        get { return result.hasInfDouble; }

+      }

+      public double InfDouble {

+        get { return result.InfDouble; }

+        set { SetInfDouble(value); }

+      }

+      public Builder SetInfDouble(double value) {

+        PrepareBuilder();

+        result.hasInfDouble = true;

+        result.infDouble_ = value;

+        return this;

+      }

+      public Builder ClearInfDouble() {

+        PrepareBuilder();

+        result.hasInfDouble = false;

+        result.infDouble_ = double.PositiveInfinity;

+        return this;

+      }

+      

+      public bool HasNegInfDouble {

+        get { return result.hasNegInfDouble; }

+      }

+      public double NegInfDouble {

+        get { return result.NegInfDouble; }

+        set { SetNegInfDouble(value); }

+      }

+      public Builder SetNegInfDouble(double value) {

+        PrepareBuilder();

+        result.hasNegInfDouble = true;

+        result.negInfDouble_ = value;

+        return this;

+      }

+      public Builder ClearNegInfDouble() {

+        PrepareBuilder();

+        result.hasNegInfDouble = false;

+        result.negInfDouble_ = double.NegativeInfinity;

+        return this;

+      }

+      

+      public bool HasNanDouble {

+        get { return result.hasNanDouble; }

+      }

+      public double NanDouble {

+        get { return result.NanDouble; }

+        set { SetNanDouble(value); }

+      }

+      public Builder SetNanDouble(double value) {

+        PrepareBuilder();

+        result.hasNanDouble = true;

+        result.nanDouble_ = value;

+        return this;

+      }

+      public Builder ClearNanDouble() {

+        PrepareBuilder();

+        result.hasNanDouble = false;

+        result.nanDouble_ = double.NaN;

+        return this;

+      }

+      

+      public bool HasInfFloat {

+        get { return result.hasInfFloat; }

+      }

+      public float InfFloat {

+        get { return result.InfFloat; }

+        set { SetInfFloat(value); }

+      }

+      public Builder SetInfFloat(float value) {

+        PrepareBuilder();

+        result.hasInfFloat = true;

+        result.infFloat_ = value;

+        return this;

+      }

+      public Builder ClearInfFloat() {

+        PrepareBuilder();

+        result.hasInfFloat = false;

+        result.infFloat_ = float.PositiveInfinity;

+        return this;

+      }

+      

+      public bool HasNegInfFloat {

+        get { return result.hasNegInfFloat; }

+      }

+      public float NegInfFloat {

+        get { return result.NegInfFloat; }

+        set { SetNegInfFloat(value); }

+      }

+      public Builder SetNegInfFloat(float value) {

+        PrepareBuilder();

+        result.hasNegInfFloat = true;

+        result.negInfFloat_ = value;

+        return this;

+      }

+      public Builder ClearNegInfFloat() {

+        PrepareBuilder();

+        result.hasNegInfFloat = false;

+        result.negInfFloat_ = float.NegativeInfinity;

+        return this;

+      }

+      

+      public bool HasNanFloat {

+        get { return result.hasNanFloat; }

+      }

+      public float NanFloat {

+        get { return result.NanFloat; }

+        set { SetNanFloat(value); }

+      }

+      public Builder SetNanFloat(float value) {

+        PrepareBuilder();

+        result.hasNanFloat = true;

+        result.nanFloat_ = value;

+        return this;

+      }

+      public Builder ClearNanFloat() {

+        PrepareBuilder();

+        result.hasNanFloat = false;

+        result.nanFloat_ = float.NaN;

+        return this;

+      }

+      

+      public bool HasCppTrigraph {

+        get { return result.hasCppTrigraph; }

+      }

+      public string CppTrigraph {

+        get { return result.CppTrigraph; }

+        set { SetCppTrigraph(value); }

+      }

+      public Builder SetCppTrigraph(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasCppTrigraph = true;

+        result.cppTrigraph_ = value;

+        return this;

+      }

+      public Builder ClearCppTrigraph() {

+        PrepareBuilder();

+        result.hasCppTrigraph = false;

+        result.cppTrigraph_ = "? ? ?? ?? ??? ??/ ??-";

+        return this;

+      }

+    }

+    static TestExtremeDefaultValues() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SparseEnumMessage : pb::GeneratedMessage<SparseEnumMessage, SparseEnumMessage.Builder> {

+    private SparseEnumMessage() { }

+    private static readonly SparseEnumMessage defaultInstance = new SparseEnumMessage().MakeReadOnly();

+    private static readonly string[] _sparseEnumMessageFieldNames = new string[] { "sparse_enum" };

+    private static readonly uint[] _sparseEnumMessageFieldTags = new uint[] { 8 };

+    public static SparseEnumMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SparseEnumMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SparseEnumMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_SparseEnumMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SparseEnumMessage, SparseEnumMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable; }

+    }

+    

+    public const int SparseEnumFieldNumber = 1;

+    private bool hasSparseEnum;

+    private global::Google.ProtocolBuffers.TestProtos.TestSparseEnum sparseEnum_ = global::Google.ProtocolBuffers.TestProtos.TestSparseEnum.SPARSE_A;

+    public bool HasSparseEnum {

+      get { return hasSparseEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestSparseEnum SparseEnum {

+      get { return sparseEnum_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _sparseEnumMessageFieldNames;

+      if (hasSparseEnum) {

+        output.WriteEnum(1, field_names[0], (int) SparseEnum, SparseEnum);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasSparseEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(1, (int) SparseEnum);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SparseEnumMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SparseEnumMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SparseEnumMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SparseEnumMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SparseEnumMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SparseEnumMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SparseEnumMessage result;

+      

+      private SparseEnumMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SparseEnumMessage original = result;

+          result = new SparseEnumMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SparseEnumMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.Descriptor; }

+      }

+      

+      public override SparseEnumMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.DefaultInstance; }

+      }

+      

+      public override SparseEnumMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SparseEnumMessage) {

+          return MergeFrom((SparseEnumMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SparseEnumMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasSparseEnum) {

+          SparseEnum = other.SparseEnum;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_sparseEnumMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _sparseEnumMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              object unknown;

+              if(input.ReadEnum(ref result.sparseEnum_, out unknown)) {

+                result.hasSparseEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(1, (ulong)(int)unknown);

+              }

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasSparseEnum {

+       get { return result.hasSparseEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestSparseEnum SparseEnum {

+        get { return result.SparseEnum; }

+        set { SetSparseEnum(value); }

+      }

+      public Builder SetSparseEnum(global::Google.ProtocolBuffers.TestProtos.TestSparseEnum value) {

+        PrepareBuilder();

+        result.hasSparseEnum = true;

+        result.sparseEnum_ = value;

+        return this;

+      }

+      public Builder ClearSparseEnum() {

+        PrepareBuilder();

+        result.hasSparseEnum = false;

+        result.sparseEnum_ = global::Google.ProtocolBuffers.TestProtos.TestSparseEnum.SPARSE_A;

+        return this;

+      }

+    }

+    static SparseEnumMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class OneString : pb::GeneratedMessage<OneString, OneString.Builder> {

+    private OneString() { }

+    private static readonly OneString defaultInstance = new OneString().MakeReadOnly();

+    private static readonly string[] _oneStringFieldNames = new string[] { "data" };

+    private static readonly uint[] _oneStringFieldTags = new uint[] { 10 };

+    public static OneString DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override OneString DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override OneString ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OneString__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<OneString, OneString.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OneString__FieldAccessorTable; }

+    }

+    

+    public const int DataFieldNumber = 1;

+    private bool hasData;

+    private string data_ = "";

+    public bool HasData {

+      get { return hasData; }

+    }

+    public string Data {

+      get { return data_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _oneStringFieldNames;

+      if (hasData) {

+        output.WriteString(1, field_names[0], Data);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasData) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Data);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static OneString ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OneString ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OneString ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OneString ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OneString ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OneString ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static OneString ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static OneString ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static OneString ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OneString ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private OneString MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(OneString prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<OneString, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(OneString cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private OneString result;

+      

+      private OneString PrepareBuilder() {

+        if (resultIsReadOnly) {

+          OneString original = result;

+          result = new OneString();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override OneString MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OneString.Descriptor; }

+      }

+      

+      public override OneString DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OneString.DefaultInstance; }

+      }

+      

+      public override OneString BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is OneString) {

+          return MergeFrom((OneString) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(OneString other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.OneString.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasData) {

+          Data = other.Data;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_oneStringFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _oneStringFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasData = input.ReadString(ref result.data_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasData {

+        get { return result.hasData; }

+      }

+      public string Data {

+        get { return result.Data; }

+        set { SetData(value); }

+      }

+      public Builder SetData(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasData = true;

+        result.data_ = value;

+        return this;

+      }

+      public Builder ClearData() {

+        PrepareBuilder();

+        result.hasData = false;

+        result.data_ = "";

+        return this;

+      }

+    }

+    static OneString() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class OneBytes : pb::GeneratedMessage<OneBytes, OneBytes.Builder> {

+    private OneBytes() { }

+    private static readonly OneBytes defaultInstance = new OneBytes().MakeReadOnly();

+    private static readonly string[] _oneBytesFieldNames = new string[] { "data" };

+    private static readonly uint[] _oneBytesFieldTags = new uint[] { 10 };

+    public static OneBytes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override OneBytes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override OneBytes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OneBytes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<OneBytes, OneBytes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OneBytes__FieldAccessorTable; }

+    }

+    

+    public const int DataFieldNumber = 1;

+    private bool hasData;

+    private pb::ByteString data_ = pb::ByteString.Empty;

+    public bool HasData {

+      get { return hasData; }

+    }

+    public pb::ByteString Data {

+      get { return data_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _oneBytesFieldNames;

+      if (hasData) {

+        output.WriteBytes(1, field_names[0], Data);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasData) {

+        size += pb::CodedOutputStream.ComputeBytesSize(1, Data);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static OneBytes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static OneBytes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static OneBytes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static OneBytes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private OneBytes MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(OneBytes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<OneBytes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(OneBytes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private OneBytes result;

+      

+      private OneBytes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          OneBytes original = result;

+          result = new OneBytes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override OneBytes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OneBytes.Descriptor; }

+      }

+      

+      public override OneBytes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OneBytes.DefaultInstance; }

+      }

+      

+      public override OneBytes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is OneBytes) {

+          return MergeFrom((OneBytes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(OneBytes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.OneBytes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasData) {

+          Data = other.Data;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_oneBytesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _oneBytesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasData = input.ReadBytes(ref result.data_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasData {

+        get { return result.hasData; }

+      }

+      public pb::ByteString Data {

+        get { return result.Data; }

+        set { SetData(value); }

+      }

+      public Builder SetData(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasData = true;

+        result.data_ = value;

+        return this;

+      }

+      public Builder ClearData() {

+        PrepareBuilder();

+        result.hasData = false;

+        result.data_ = pb::ByteString.Empty;

+        return this;

+      }

+    }

+    static OneBytes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestPackedTypes : pb::GeneratedMessage<TestPackedTypes, TestPackedTypes.Builder> {

+    private TestPackedTypes() { }

+    private static readonly TestPackedTypes defaultInstance = new TestPackedTypes().MakeReadOnly();

+    private static readonly string[] _testPackedTypesFieldNames = new string[] { "packed_bool", "packed_double", "packed_enum", "packed_fixed32", "packed_fixed64", "packed_float", "packed_int32", "packed_int64", "packed_sfixed32", "packed_sfixed64", "packed_sint32", "packed_sint64", "packed_uint32", "packed_uint64" };

+    private static readonly uint[] _testPackedTypesFieldTags = new uint[] { 818, 810, 826, 770, 778, 802, 722, 730, 786, 794, 754, 762, 738, 746 };

+    public static TestPackedTypes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestPackedTypes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestPackedTypes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestPackedTypes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestPackedTypes, TestPackedTypes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable; }

+    }

+    

+    public const int PackedInt32FieldNumber = 90;

+    private int packedInt32MemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedInt32List {

+      get { return pbc::Lists.AsReadOnly(packedInt32_); }

+    }

+    public int PackedInt32Count {

+      get { return packedInt32_.Count; }

+    }

+    public int GetPackedInt32(int index) {

+      return packedInt32_[index];

+    }

+    

+    public const int PackedInt64FieldNumber = 91;

+    private int packedInt64MemoizedSerializedSize;

+    private pbc::PopsicleList<long> packedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> PackedInt64List {

+      get { return pbc::Lists.AsReadOnly(packedInt64_); }

+    }

+    public int PackedInt64Count {

+      get { return packedInt64_.Count; }

+    }

+    public long GetPackedInt64(int index) {

+      return packedInt64_[index];

+    }

+    

+    public const int PackedUint32FieldNumber = 92;

+    private int packedUint32MemoizedSerializedSize;

+    private pbc::PopsicleList<uint> packedUint32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> PackedUint32List {

+      get { return pbc::Lists.AsReadOnly(packedUint32_); }

+    }

+    public int PackedUint32Count {

+      get { return packedUint32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetPackedUint32(int index) {

+      return packedUint32_[index];

+    }

+    

+    public const int PackedUint64FieldNumber = 93;

+    private int packedUint64MemoizedSerializedSize;

+    private pbc::PopsicleList<ulong> packedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> PackedUint64List {

+      get { return pbc::Lists.AsReadOnly(packedUint64_); }

+    }

+    public int PackedUint64Count {

+      get { return packedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetPackedUint64(int index) {

+      return packedUint64_[index];

+    }

+    

+    public const int PackedSint32FieldNumber = 94;

+    private int packedSint32MemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedSint32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedSint32List {

+      get { return pbc::Lists.AsReadOnly(packedSint32_); }

+    }

+    public int PackedSint32Count {

+      get { return packedSint32_.Count; }

+    }

+    public int GetPackedSint32(int index) {

+      return packedSint32_[index];

+    }

+    

+    public const int PackedSint64FieldNumber = 95;

+    private int packedSint64MemoizedSerializedSize;

+    private pbc::PopsicleList<long> packedSint64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> PackedSint64List {

+      get { return pbc::Lists.AsReadOnly(packedSint64_); }

+    }

+    public int PackedSint64Count {

+      get { return packedSint64_.Count; }

+    }

+    public long GetPackedSint64(int index) {

+      return packedSint64_[index];

+    }

+    

+    public const int PackedFixed32FieldNumber = 96;

+    private int packedFixed32MemoizedSerializedSize;

+    private pbc::PopsicleList<uint> packedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> PackedFixed32List {

+      get { return pbc::Lists.AsReadOnly(packedFixed32_); }

+    }

+    public int PackedFixed32Count {

+      get { return packedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetPackedFixed32(int index) {

+      return packedFixed32_[index];

+    }

+    

+    public const int PackedFixed64FieldNumber = 97;

+    private int packedFixed64MemoizedSerializedSize;

+    private pbc::PopsicleList<ulong> packedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> PackedFixed64List {

+      get { return pbc::Lists.AsReadOnly(packedFixed64_); }

+    }

+    public int PackedFixed64Count {

+      get { return packedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetPackedFixed64(int index) {

+      return packedFixed64_[index];

+    }

+    

+    public const int PackedSfixed32FieldNumber = 98;

+    private int packedSfixed32MemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedSfixed32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedSfixed32List {

+      get { return pbc::Lists.AsReadOnly(packedSfixed32_); }

+    }

+    public int PackedSfixed32Count {

+      get { return packedSfixed32_.Count; }

+    }

+    public int GetPackedSfixed32(int index) {

+      return packedSfixed32_[index];

+    }

+    

+    public const int PackedSfixed64FieldNumber = 99;

+    private int packedSfixed64MemoizedSerializedSize;

+    private pbc::PopsicleList<long> packedSfixed64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> PackedSfixed64List {

+      get { return pbc::Lists.AsReadOnly(packedSfixed64_); }

+    }

+    public int PackedSfixed64Count {

+      get { return packedSfixed64_.Count; }

+    }

+    public long GetPackedSfixed64(int index) {

+      return packedSfixed64_[index];

+    }

+    

+    public const int PackedFloatFieldNumber = 100;

+    private int packedFloatMemoizedSerializedSize;

+    private pbc::PopsicleList<float> packedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> PackedFloatList {

+      get { return pbc::Lists.AsReadOnly(packedFloat_); }

+    }

+    public int PackedFloatCount {

+      get { return packedFloat_.Count; }

+    }

+    public float GetPackedFloat(int index) {

+      return packedFloat_[index];

+    }

+    

+    public const int PackedDoubleFieldNumber = 101;

+    private int packedDoubleMemoizedSerializedSize;

+    private pbc::PopsicleList<double> packedDouble_ = new pbc::PopsicleList<double>();

+    public scg::IList<double> PackedDoubleList {

+      get { return pbc::Lists.AsReadOnly(packedDouble_); }

+    }

+    public int PackedDoubleCount {

+      get { return packedDouble_.Count; }

+    }

+    public double GetPackedDouble(int index) {

+      return packedDouble_[index];

+    }

+    

+    public const int PackedBoolFieldNumber = 102;

+    private int packedBoolMemoizedSerializedSize;

+    private pbc::PopsicleList<bool> packedBool_ = new pbc::PopsicleList<bool>();

+    public scg::IList<bool> PackedBoolList {

+      get { return pbc::Lists.AsReadOnly(packedBool_); }

+    }

+    public int PackedBoolCount {

+      get { return packedBool_.Count; }

+    }

+    public bool GetPackedBool(int index) {

+      return packedBool_[index];

+    }

+    

+    public const int PackedEnumFieldNumber = 103;

+    private int packedEnumMemoizedSerializedSize;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> packedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> PackedEnumList {

+      get { return pbc::Lists.AsReadOnly(packedEnum_); }

+    }

+    public int PackedEnumCount {

+      get { return packedEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetPackedEnum(int index) {

+      return packedEnum_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testPackedTypesFieldNames;

+      if (packedInt32_.Count > 0) {

+        output.WritePackedInt32Array(90, field_names[6], packedInt32MemoizedSerializedSize, packedInt32_);

+      }

+      if (packedInt64_.Count > 0) {

+        output.WritePackedInt64Array(91, field_names[7], packedInt64MemoizedSerializedSize, packedInt64_);

+      }

+      if (packedUint32_.Count > 0) {

+        output.WritePackedUInt32Array(92, field_names[12], packedUint32MemoizedSerializedSize, packedUint32_);

+      }

+      if (packedUint64_.Count > 0) {

+        output.WritePackedUInt64Array(93, field_names[13], packedUint64MemoizedSerializedSize, packedUint64_);

+      }

+      if (packedSint32_.Count > 0) {

+        output.WritePackedSInt32Array(94, field_names[10], packedSint32MemoizedSerializedSize, packedSint32_);

+      }

+      if (packedSint64_.Count > 0) {

+        output.WritePackedSInt64Array(95, field_names[11], packedSint64MemoizedSerializedSize, packedSint64_);

+      }

+      if (packedFixed32_.Count > 0) {

+        output.WritePackedFixed32Array(96, field_names[3], packedFixed32MemoizedSerializedSize, packedFixed32_);

+      }

+      if (packedFixed64_.Count > 0) {

+        output.WritePackedFixed64Array(97, field_names[4], packedFixed64MemoizedSerializedSize, packedFixed64_);

+      }

+      if (packedSfixed32_.Count > 0) {

+        output.WritePackedSFixed32Array(98, field_names[8], packedSfixed32MemoizedSerializedSize, packedSfixed32_);

+      }

+      if (packedSfixed64_.Count > 0) {

+        output.WritePackedSFixed64Array(99, field_names[9], packedSfixed64MemoizedSerializedSize, packedSfixed64_);

+      }

+      if (packedFloat_.Count > 0) {

+        output.WritePackedFloatArray(100, field_names[5], packedFloatMemoizedSerializedSize, packedFloat_);

+      }

+      if (packedDouble_.Count > 0) {

+        output.WritePackedDoubleArray(101, field_names[1], packedDoubleMemoizedSerializedSize, packedDouble_);

+      }

+      if (packedBool_.Count > 0) {

+        output.WritePackedBoolArray(102, field_names[0], packedBoolMemoizedSerializedSize, packedBool_);

+      }

+      if (packedEnum_.Count > 0) {

+        output.WritePackedEnumArray(103, field_names[2], packedEnumMemoizedSerializedSize, packedEnum_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        foreach (int element in PackedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedInt32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedInt32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in PackedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedInt64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedInt64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (uint element in PackedUint32List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedUint32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedUint32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in PackedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedUint64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedUint64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in PackedSint32List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedSint32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSint32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in PackedSint64List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedSint64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSint64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * packedFixed32_.Count;

+        size += dataSize;

+        if (packedFixed32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedFixed32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * packedFixed64_.Count;

+        size += dataSize;

+        if (packedFixed64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedFixed64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * packedSfixed32_.Count;

+        size += dataSize;

+        if (packedSfixed32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSfixed32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * packedSfixed64_.Count;

+        size += dataSize;

+        if (packedSfixed64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSfixed64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * packedFloat_.Count;

+        size += dataSize;

+        if (packedFloat_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedFloatMemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * packedDouble_.Count;

+        size += dataSize;

+        if (packedDouble_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedDoubleMemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 1 * packedBool_.Count;

+        size += dataSize;

+        if (packedBool_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedBoolMemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        if (packedEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in packedEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2;

+          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);

+        }

+        packedEnumMemoizedSerializedSize = dataSize;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestPackedTypes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedTypes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestPackedTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestPackedTypes MakeReadOnly() {

+      packedInt32_.MakeReadOnly();

+      packedInt64_.MakeReadOnly();

+      packedUint32_.MakeReadOnly();

+      packedUint64_.MakeReadOnly();

+      packedSint32_.MakeReadOnly();

+      packedSint64_.MakeReadOnly();

+      packedFixed32_.MakeReadOnly();

+      packedFixed64_.MakeReadOnly();

+      packedSfixed32_.MakeReadOnly();

+      packedSfixed64_.MakeReadOnly();

+      packedFloat_.MakeReadOnly();

+      packedDouble_.MakeReadOnly();

+      packedBool_.MakeReadOnly();

+      packedEnum_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestPackedTypes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestPackedTypes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestPackedTypes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestPackedTypes result;

+      

+      private TestPackedTypes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestPackedTypes original = result;

+          result = new TestPackedTypes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestPackedTypes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.Descriptor; }

+      }

+      

+      public override TestPackedTypes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.DefaultInstance; }

+      }

+      

+      public override TestPackedTypes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestPackedTypes) {

+          return MergeFrom((TestPackedTypes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestPackedTypes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.packedInt32_.Count != 0) {

+          result.packedInt32_.Add(other.packedInt32_);

+        }

+        if (other.packedInt64_.Count != 0) {

+          result.packedInt64_.Add(other.packedInt64_);

+        }

+        if (other.packedUint32_.Count != 0) {

+          result.packedUint32_.Add(other.packedUint32_);

+        }

+        if (other.packedUint64_.Count != 0) {

+          result.packedUint64_.Add(other.packedUint64_);

+        }

+        if (other.packedSint32_.Count != 0) {

+          result.packedSint32_.Add(other.packedSint32_);

+        }

+        if (other.packedSint64_.Count != 0) {

+          result.packedSint64_.Add(other.packedSint64_);

+        }

+        if (other.packedFixed32_.Count != 0) {

+          result.packedFixed32_.Add(other.packedFixed32_);

+        }

+        if (other.packedFixed64_.Count != 0) {

+          result.packedFixed64_.Add(other.packedFixed64_);

+        }

+        if (other.packedSfixed32_.Count != 0) {

+          result.packedSfixed32_.Add(other.packedSfixed32_);

+        }

+        if (other.packedSfixed64_.Count != 0) {

+          result.packedSfixed64_.Add(other.packedSfixed64_);

+        }

+        if (other.packedFloat_.Count != 0) {

+          result.packedFloat_.Add(other.packedFloat_);

+        }

+        if (other.packedDouble_.Count != 0) {

+          result.packedDouble_.Add(other.packedDouble_);

+        }

+        if (other.packedBool_.Count != 0) {

+          result.packedBool_.Add(other.packedBool_);

+        }

+        if (other.packedEnum_.Count != 0) {

+          result.packedEnum_.Add(other.packedEnum_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testPackedTypesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testPackedTypesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 722:

+            case 720: {

+              input.ReadInt32Array(tag, field_name, result.packedInt32_);

+              break;

+            }

+            case 730:

+            case 728: {

+              input.ReadInt64Array(tag, field_name, result.packedInt64_);

+              break;

+            }

+            case 738:

+            case 736: {

+              input.ReadUInt32Array(tag, field_name, result.packedUint32_);

+              break;

+            }

+            case 746:

+            case 744: {

+              input.ReadUInt64Array(tag, field_name, result.packedUint64_);

+              break;

+            }

+            case 754:

+            case 752: {

+              input.ReadSInt32Array(tag, field_name, result.packedSint32_);

+              break;

+            }

+            case 762:

+            case 760: {

+              input.ReadSInt64Array(tag, field_name, result.packedSint64_);

+              break;

+            }

+            case 770:

+            case 773: {

+              input.ReadFixed32Array(tag, field_name, result.packedFixed32_);

+              break;

+            }

+            case 778:

+            case 777: {

+              input.ReadFixed64Array(tag, field_name, result.packedFixed64_);

+              break;

+            }

+            case 786:

+            case 789: {

+              input.ReadSFixed32Array(tag, field_name, result.packedSfixed32_);

+              break;

+            }

+            case 794:

+            case 793: {

+              input.ReadSFixed64Array(tag, field_name, result.packedSfixed64_);

+              break;

+            }

+            case 802:

+            case 805: {

+              input.ReadFloatArray(tag, field_name, result.packedFloat_);

+              break;

+            }

+            case 810:

+            case 809: {

+              input.ReadDoubleArray(tag, field_name, result.packedDouble_);

+              break;

+            }

+            case 818:

+            case 816: {

+              input.ReadBoolArray(tag, field_name, result.packedBool_);

+              break;

+            }

+            case 826:

+            case 824: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.packedEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(103, (ulong)(int)rawValue);

+              }

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<int> PackedInt32List {

+        get { return PrepareBuilder().packedInt32_; }

+      }

+      public int PackedInt32Count {

+        get { return result.PackedInt32Count; }

+      }

+      public int GetPackedInt32(int index) {

+        return result.GetPackedInt32(index);

+      }

+      public Builder SetPackedInt32(int index, int value) {

+        PrepareBuilder();

+        result.packedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddPackedInt32(int value) {

+        PrepareBuilder();

+        result.packedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedInt32() {

+        PrepareBuilder();

+        result.packedInt32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> PackedInt64List {

+        get { return PrepareBuilder().packedInt64_; }

+      }

+      public int PackedInt64Count {

+        get { return result.PackedInt64Count; }

+      }

+      public long GetPackedInt64(int index) {

+        return result.GetPackedInt64(index);

+      }

+      public Builder SetPackedInt64(int index, long value) {

+        PrepareBuilder();

+        result.packedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddPackedInt64(long value) {

+        PrepareBuilder();

+        result.packedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.packedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedInt64() {

+        PrepareBuilder();

+        result.packedInt64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> PackedUint32List {

+        get { return PrepareBuilder().packedUint32_; }

+      }

+      public int PackedUint32Count {

+        get { return result.PackedUint32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetPackedUint32(int index) {

+        return result.GetPackedUint32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedUint32(int index, uint value) {

+        PrepareBuilder();

+        result.packedUint32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedUint32(uint value) {

+        PrepareBuilder();

+        result.packedUint32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedUint32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.packedUint32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedUint32() {

+        PrepareBuilder();

+        result.packedUint32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> PackedUint64List {

+        get { return PrepareBuilder().packedUint64_; }

+      }

+      public int PackedUint64Count {

+        get { return result.PackedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetPackedUint64(int index) {

+        return result.GetPackedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.packedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedUint64(ulong value) {

+        PrepareBuilder();

+        result.packedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.packedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedUint64() {

+        PrepareBuilder();

+        result.packedUint64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> PackedSint32List {

+        get { return PrepareBuilder().packedSint32_; }

+      }

+      public int PackedSint32Count {

+        get { return result.PackedSint32Count; }

+      }

+      public int GetPackedSint32(int index) {

+        return result.GetPackedSint32(index);

+      }

+      public Builder SetPackedSint32(int index, int value) {

+        PrepareBuilder();

+        result.packedSint32_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSint32(int value) {

+        PrepareBuilder();

+        result.packedSint32_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSint32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedSint32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSint32() {

+        PrepareBuilder();

+        result.packedSint32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> PackedSint64List {

+        get { return PrepareBuilder().packedSint64_; }

+      }

+      public int PackedSint64Count {

+        get { return result.PackedSint64Count; }

+      }

+      public long GetPackedSint64(int index) {

+        return result.GetPackedSint64(index);

+      }

+      public Builder SetPackedSint64(int index, long value) {

+        PrepareBuilder();

+        result.packedSint64_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSint64(long value) {

+        PrepareBuilder();

+        result.packedSint64_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSint64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.packedSint64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSint64() {

+        PrepareBuilder();

+        result.packedSint64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> PackedFixed32List {

+        get { return PrepareBuilder().packedFixed32_; }

+      }

+      public int PackedFixed32Count {

+        get { return result.PackedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetPackedFixed32(int index) {

+        return result.GetPackedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.packedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedFixed32(uint value) {

+        PrepareBuilder();

+        result.packedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.packedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedFixed32() {

+        PrepareBuilder();

+        result.packedFixed32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> PackedFixed64List {

+        get { return PrepareBuilder().packedFixed64_; }

+      }

+      public int PackedFixed64Count {

+        get { return result.PackedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetPackedFixed64(int index) {

+        return result.GetPackedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.packedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedFixed64(ulong value) {

+        PrepareBuilder();

+        result.packedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.packedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedFixed64() {

+        PrepareBuilder();

+        result.packedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> PackedSfixed32List {

+        get { return PrepareBuilder().packedSfixed32_; }

+      }

+      public int PackedSfixed32Count {

+        get { return result.PackedSfixed32Count; }

+      }

+      public int GetPackedSfixed32(int index) {

+        return result.GetPackedSfixed32(index);

+      }

+      public Builder SetPackedSfixed32(int index, int value) {

+        PrepareBuilder();

+        result.packedSfixed32_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSfixed32(int value) {

+        PrepareBuilder();

+        result.packedSfixed32_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSfixed32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedSfixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSfixed32() {

+        PrepareBuilder();

+        result.packedSfixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> PackedSfixed64List {

+        get { return PrepareBuilder().packedSfixed64_; }

+      }

+      public int PackedSfixed64Count {

+        get { return result.PackedSfixed64Count; }

+      }

+      public long GetPackedSfixed64(int index) {

+        return result.GetPackedSfixed64(index);

+      }

+      public Builder SetPackedSfixed64(int index, long value) {

+        PrepareBuilder();

+        result.packedSfixed64_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSfixed64(long value) {

+        PrepareBuilder();

+        result.packedSfixed64_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSfixed64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.packedSfixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSfixed64() {

+        PrepareBuilder();

+        result.packedSfixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> PackedFloatList {

+        get { return PrepareBuilder().packedFloat_; }

+      }

+      public int PackedFloatCount {

+        get { return result.PackedFloatCount; }

+      }

+      public float GetPackedFloat(int index) {

+        return result.GetPackedFloat(index);

+      }

+      public Builder SetPackedFloat(int index, float value) {

+        PrepareBuilder();

+        result.packedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddPackedFloat(float value) {

+        PrepareBuilder();

+        result.packedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.packedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedFloat() {

+        PrepareBuilder();

+        result.packedFloat_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<double> PackedDoubleList {

+        get { return PrepareBuilder().packedDouble_; }

+      }

+      public int PackedDoubleCount {

+        get { return result.PackedDoubleCount; }

+      }

+      public double GetPackedDouble(int index) {

+        return result.GetPackedDouble(index);

+      }

+      public Builder SetPackedDouble(int index, double value) {

+        PrepareBuilder();

+        result.packedDouble_[index] = value;

+        return this;

+      }

+      public Builder AddPackedDouble(double value) {

+        PrepareBuilder();

+        result.packedDouble_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedDouble(scg::IEnumerable<double> values) {

+        PrepareBuilder();

+        result.packedDouble_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedDouble() {

+        PrepareBuilder();

+        result.packedDouble_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<bool> PackedBoolList {

+        get { return PrepareBuilder().packedBool_; }

+      }

+      public int PackedBoolCount {

+        get { return result.PackedBoolCount; }

+      }

+      public bool GetPackedBool(int index) {

+        return result.GetPackedBool(index);

+      }

+      public Builder SetPackedBool(int index, bool value) {

+        PrepareBuilder();

+        result.packedBool_[index] = value;

+        return this;

+      }

+      public Builder AddPackedBool(bool value) {

+        PrepareBuilder();

+        result.packedBool_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedBool(scg::IEnumerable<bool> values) {

+        PrepareBuilder();

+        result.packedBool_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedBool() {

+        PrepareBuilder();

+        result.packedBool_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> PackedEnumList {

+        get { return PrepareBuilder().packedEnum_; }

+      }

+      public int PackedEnumCount {

+        get { return result.PackedEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetPackedEnum(int index) {

+        return result.GetPackedEnum(index);

+      }

+      public Builder SetPackedEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.packedEnum_[index] = value;

+        return this;

+      }

+      public Builder AddPackedEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.packedEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {

+        PrepareBuilder();

+        result.packedEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedEnum() {

+        PrepareBuilder();

+        result.packedEnum_.Clear();

+        return this;

+      }

+    }

+    static TestPackedTypes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestUnpackedTypes : pb::GeneratedMessage<TestUnpackedTypes, TestUnpackedTypes.Builder> {

+    private TestUnpackedTypes() { }

+    private static readonly TestUnpackedTypes defaultInstance = new TestUnpackedTypes().MakeReadOnly();

+    private static readonly string[] _testUnpackedTypesFieldNames = new string[] { "unpacked_bool", "unpacked_double", "unpacked_enum", "unpacked_fixed32", "unpacked_fixed64", "unpacked_float", "unpacked_int32", "unpacked_int64", "unpacked_sfixed32", "unpacked_sfixed64", "unpacked_sint32", "unpacked_sint64", "unpacked_uint32", "unpacked_uint64" };

+    private static readonly uint[] _testUnpackedTypesFieldTags = new uint[] { 816, 809, 824, 773, 777, 805, 720, 728, 789, 793, 752, 760, 736, 744 };

+    public static TestUnpackedTypes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestUnpackedTypes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestUnpackedTypes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestUnpackedTypes, TestUnpackedTypes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable; }

+    }

+    

+    public const int UnpackedInt32FieldNumber = 90;

+    private pbc::PopsicleList<int> unpackedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> UnpackedInt32List {

+      get { return pbc::Lists.AsReadOnly(unpackedInt32_); }

+    }

+    public int UnpackedInt32Count {

+      get { return unpackedInt32_.Count; }

+    }

+    public int GetUnpackedInt32(int index) {

+      return unpackedInt32_[index];

+    }

+    

+    public const int UnpackedInt64FieldNumber = 91;

+    private pbc::PopsicleList<long> unpackedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> UnpackedInt64List {

+      get { return pbc::Lists.AsReadOnly(unpackedInt64_); }

+    }

+    public int UnpackedInt64Count {

+      get { return unpackedInt64_.Count; }

+    }

+    public long GetUnpackedInt64(int index) {

+      return unpackedInt64_[index];

+    }

+    

+    public const int UnpackedUint32FieldNumber = 92;

+    private pbc::PopsicleList<uint> unpackedUint32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> UnpackedUint32List {

+      get { return pbc::Lists.AsReadOnly(unpackedUint32_); }

+    }

+    public int UnpackedUint32Count {

+      get { return unpackedUint32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetUnpackedUint32(int index) {

+      return unpackedUint32_[index];

+    }

+    

+    public const int UnpackedUint64FieldNumber = 93;

+    private pbc::PopsicleList<ulong> unpackedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> UnpackedUint64List {

+      get { return pbc::Lists.AsReadOnly(unpackedUint64_); }

+    }

+    public int UnpackedUint64Count {

+      get { return unpackedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetUnpackedUint64(int index) {

+      return unpackedUint64_[index];

+    }

+    

+    public const int UnpackedSint32FieldNumber = 94;

+    private pbc::PopsicleList<int> unpackedSint32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> UnpackedSint32List {

+      get { return pbc::Lists.AsReadOnly(unpackedSint32_); }

+    }

+    public int UnpackedSint32Count {

+      get { return unpackedSint32_.Count; }

+    }

+    public int GetUnpackedSint32(int index) {

+      return unpackedSint32_[index];

+    }

+    

+    public const int UnpackedSint64FieldNumber = 95;

+    private pbc::PopsicleList<long> unpackedSint64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> UnpackedSint64List {

+      get { return pbc::Lists.AsReadOnly(unpackedSint64_); }

+    }

+    public int UnpackedSint64Count {

+      get { return unpackedSint64_.Count; }

+    }

+    public long GetUnpackedSint64(int index) {

+      return unpackedSint64_[index];

+    }

+    

+    public const int UnpackedFixed32FieldNumber = 96;

+    private pbc::PopsicleList<uint> unpackedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> UnpackedFixed32List {

+      get { return pbc::Lists.AsReadOnly(unpackedFixed32_); }

+    }

+    public int UnpackedFixed32Count {

+      get { return unpackedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetUnpackedFixed32(int index) {

+      return unpackedFixed32_[index];

+    }

+    

+    public const int UnpackedFixed64FieldNumber = 97;

+    private pbc::PopsicleList<ulong> unpackedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> UnpackedFixed64List {

+      get { return pbc::Lists.AsReadOnly(unpackedFixed64_); }

+    }

+    public int UnpackedFixed64Count {

+      get { return unpackedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetUnpackedFixed64(int index) {

+      return unpackedFixed64_[index];

+    }

+    

+    public const int UnpackedSfixed32FieldNumber = 98;

+    private pbc::PopsicleList<int> unpackedSfixed32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> UnpackedSfixed32List {

+      get { return pbc::Lists.AsReadOnly(unpackedSfixed32_); }

+    }

+    public int UnpackedSfixed32Count {

+      get { return unpackedSfixed32_.Count; }

+    }

+    public int GetUnpackedSfixed32(int index) {

+      return unpackedSfixed32_[index];

+    }

+    

+    public const int UnpackedSfixed64FieldNumber = 99;

+    private pbc::PopsicleList<long> unpackedSfixed64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> UnpackedSfixed64List {

+      get { return pbc::Lists.AsReadOnly(unpackedSfixed64_); }

+    }

+    public int UnpackedSfixed64Count {

+      get { return unpackedSfixed64_.Count; }

+    }

+    public long GetUnpackedSfixed64(int index) {

+      return unpackedSfixed64_[index];

+    }

+    

+    public const int UnpackedFloatFieldNumber = 100;

+    private pbc::PopsicleList<float> unpackedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> UnpackedFloatList {

+      get { return pbc::Lists.AsReadOnly(unpackedFloat_); }

+    }

+    public int UnpackedFloatCount {

+      get { return unpackedFloat_.Count; }

+    }

+    public float GetUnpackedFloat(int index) {

+      return unpackedFloat_[index];

+    }

+    

+    public const int UnpackedDoubleFieldNumber = 101;

+    private pbc::PopsicleList<double> unpackedDouble_ = new pbc::PopsicleList<double>();

+    public scg::IList<double> UnpackedDoubleList {

+      get { return pbc::Lists.AsReadOnly(unpackedDouble_); }

+    }

+    public int UnpackedDoubleCount {

+      get { return unpackedDouble_.Count; }

+    }

+    public double GetUnpackedDouble(int index) {

+      return unpackedDouble_[index];

+    }

+    

+    public const int UnpackedBoolFieldNumber = 102;

+    private pbc::PopsicleList<bool> unpackedBool_ = new pbc::PopsicleList<bool>();

+    public scg::IList<bool> UnpackedBoolList {

+      get { return pbc::Lists.AsReadOnly(unpackedBool_); }

+    }

+    public int UnpackedBoolCount {

+      get { return unpackedBool_.Count; }

+    }

+    public bool GetUnpackedBool(int index) {

+      return unpackedBool_[index];

+    }

+    

+    public const int UnpackedEnumFieldNumber = 103;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> unpackedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> UnpackedEnumList {

+      get { return pbc::Lists.AsReadOnly(unpackedEnum_); }

+    }

+    public int UnpackedEnumCount {

+      get { return unpackedEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetUnpackedEnum(int index) {

+      return unpackedEnum_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testUnpackedTypesFieldNames;

+      if (unpackedInt32_.Count > 0) {

+        output.WriteInt32Array(90, field_names[6], unpackedInt32_);

+      }

+      if (unpackedInt64_.Count > 0) {

+        output.WriteInt64Array(91, field_names[7], unpackedInt64_);

+      }

+      if (unpackedUint32_.Count > 0) {

+        output.WriteUInt32Array(92, field_names[12], unpackedUint32_);

+      }

+      if (unpackedUint64_.Count > 0) {

+        output.WriteUInt64Array(93, field_names[13], unpackedUint64_);

+      }

+      if (unpackedSint32_.Count > 0) {

+        output.WriteSInt32Array(94, field_names[10], unpackedSint32_);

+      }

+      if (unpackedSint64_.Count > 0) {

+        output.WriteSInt64Array(95, field_names[11], unpackedSint64_);

+      }

+      if (unpackedFixed32_.Count > 0) {

+        output.WriteFixed32Array(96, field_names[3], unpackedFixed32_);

+      }

+      if (unpackedFixed64_.Count > 0) {

+        output.WriteFixed64Array(97, field_names[4], unpackedFixed64_);

+      }

+      if (unpackedSfixed32_.Count > 0) {

+        output.WriteSFixed32Array(98, field_names[8], unpackedSfixed32_);

+      }

+      if (unpackedSfixed64_.Count > 0) {

+        output.WriteSFixed64Array(99, field_names[9], unpackedSfixed64_);

+      }

+      if (unpackedFloat_.Count > 0) {

+        output.WriteFloatArray(100, field_names[5], unpackedFloat_);

+      }

+      if (unpackedDouble_.Count > 0) {

+        output.WriteDoubleArray(101, field_names[1], unpackedDouble_);

+      }

+      if (unpackedBool_.Count > 0) {

+        output.WriteBoolArray(102, field_names[0], unpackedBool_);

+      }

+      if (unpackedEnum_.Count > 0) {

+        output.WriteEnumArray(103, field_names[2], unpackedEnum_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        foreach (int element in UnpackedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedInt32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in UnpackedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedInt64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (uint element in UnpackedUint32List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedUint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in UnpackedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedUint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in UnpackedSint32List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedSint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in UnpackedSint64List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedSint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * unpackedFixed32_.Count;

+        size += dataSize;

+        size += 2 * unpackedFixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * unpackedFixed64_.Count;

+        size += dataSize;

+        size += 2 * unpackedFixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * unpackedSfixed32_.Count;

+        size += dataSize;

+        size += 2 * unpackedSfixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * unpackedSfixed64_.Count;

+        size += dataSize;

+        size += 2 * unpackedSfixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * unpackedFloat_.Count;

+        size += dataSize;

+        size += 2 * unpackedFloat_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * unpackedDouble_.Count;

+        size += dataSize;

+        size += 2 * unpackedDouble_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 1 * unpackedBool_.Count;

+        size += dataSize;

+        size += 2 * unpackedBool_.Count;

+      }

+      {

+        int dataSize = 0;

+        if (unpackedEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in unpackedEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * unpackedEnum_.Count;

+        }

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestUnpackedTypes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestUnpackedTypes MakeReadOnly() {

+      unpackedInt32_.MakeReadOnly();

+      unpackedInt64_.MakeReadOnly();

+      unpackedUint32_.MakeReadOnly();

+      unpackedUint64_.MakeReadOnly();

+      unpackedSint32_.MakeReadOnly();

+      unpackedSint64_.MakeReadOnly();

+      unpackedFixed32_.MakeReadOnly();

+      unpackedFixed64_.MakeReadOnly();

+      unpackedSfixed32_.MakeReadOnly();

+      unpackedSfixed64_.MakeReadOnly();

+      unpackedFloat_.MakeReadOnly();

+      unpackedDouble_.MakeReadOnly();

+      unpackedBool_.MakeReadOnly();

+      unpackedEnum_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestUnpackedTypes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestUnpackedTypes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestUnpackedTypes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestUnpackedTypes result;

+      

+      private TestUnpackedTypes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestUnpackedTypes original = result;

+          result = new TestUnpackedTypes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestUnpackedTypes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.Descriptor; }

+      }

+      

+      public override TestUnpackedTypes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.DefaultInstance; }

+      }

+      

+      public override TestUnpackedTypes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestUnpackedTypes) {

+          return MergeFrom((TestUnpackedTypes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestUnpackedTypes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.unpackedInt32_.Count != 0) {

+          result.unpackedInt32_.Add(other.unpackedInt32_);

+        }

+        if (other.unpackedInt64_.Count != 0) {

+          result.unpackedInt64_.Add(other.unpackedInt64_);

+        }

+        if (other.unpackedUint32_.Count != 0) {

+          result.unpackedUint32_.Add(other.unpackedUint32_);

+        }

+        if (other.unpackedUint64_.Count != 0) {

+          result.unpackedUint64_.Add(other.unpackedUint64_);

+        }

+        if (other.unpackedSint32_.Count != 0) {

+          result.unpackedSint32_.Add(other.unpackedSint32_);

+        }

+        if (other.unpackedSint64_.Count != 0) {

+          result.unpackedSint64_.Add(other.unpackedSint64_);

+        }

+        if (other.unpackedFixed32_.Count != 0) {

+          result.unpackedFixed32_.Add(other.unpackedFixed32_);

+        }

+        if (other.unpackedFixed64_.Count != 0) {

+          result.unpackedFixed64_.Add(other.unpackedFixed64_);

+        }

+        if (other.unpackedSfixed32_.Count != 0) {

+          result.unpackedSfixed32_.Add(other.unpackedSfixed32_);

+        }

+        if (other.unpackedSfixed64_.Count != 0) {

+          result.unpackedSfixed64_.Add(other.unpackedSfixed64_);

+        }

+        if (other.unpackedFloat_.Count != 0) {

+          result.unpackedFloat_.Add(other.unpackedFloat_);

+        }

+        if (other.unpackedDouble_.Count != 0) {

+          result.unpackedDouble_.Add(other.unpackedDouble_);

+        }

+        if (other.unpackedBool_.Count != 0) {

+          result.unpackedBool_.Add(other.unpackedBool_);

+        }

+        if (other.unpackedEnum_.Count != 0) {

+          result.unpackedEnum_.Add(other.unpackedEnum_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testUnpackedTypesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testUnpackedTypesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 722:

+            case 720: {

+              input.ReadInt32Array(tag, field_name, result.unpackedInt32_);

+              break;

+            }

+            case 730:

+            case 728: {

+              input.ReadInt64Array(tag, field_name, result.unpackedInt64_);

+              break;

+            }

+            case 738:

+            case 736: {

+              input.ReadUInt32Array(tag, field_name, result.unpackedUint32_);

+              break;

+            }

+            case 746:

+            case 744: {

+              input.ReadUInt64Array(tag, field_name, result.unpackedUint64_);

+              break;

+            }

+            case 754:

+            case 752: {

+              input.ReadSInt32Array(tag, field_name, result.unpackedSint32_);

+              break;

+            }

+            case 762:

+            case 760: {

+              input.ReadSInt64Array(tag, field_name, result.unpackedSint64_);

+              break;

+            }

+            case 770:

+            case 773: {

+              input.ReadFixed32Array(tag, field_name, result.unpackedFixed32_);

+              break;

+            }

+            case 778:

+            case 777: {

+              input.ReadFixed64Array(tag, field_name, result.unpackedFixed64_);

+              break;

+            }

+            case 786:

+            case 789: {

+              input.ReadSFixed32Array(tag, field_name, result.unpackedSfixed32_);

+              break;

+            }

+            case 794:

+            case 793: {

+              input.ReadSFixed64Array(tag, field_name, result.unpackedSfixed64_);

+              break;

+            }

+            case 802:

+            case 805: {

+              input.ReadFloatArray(tag, field_name, result.unpackedFloat_);

+              break;

+            }

+            case 810:

+            case 809: {

+              input.ReadDoubleArray(tag, field_name, result.unpackedDouble_);

+              break;

+            }

+            case 818:

+            case 816: {

+              input.ReadBoolArray(tag, field_name, result.unpackedBool_);

+              break;

+            }

+            case 826:

+            case 824: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.unpackedEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(103, (ulong)(int)rawValue);

+              }

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<int> UnpackedInt32List {

+        get { return PrepareBuilder().unpackedInt32_; }

+      }

+      public int UnpackedInt32Count {

+        get { return result.UnpackedInt32Count; }

+      }

+      public int GetUnpackedInt32(int index) {

+        return result.GetUnpackedInt32(index);

+      }

+      public Builder SetUnpackedInt32(int index, int value) {

+        PrepareBuilder();

+        result.unpackedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedInt32(int value) {

+        PrepareBuilder();

+        result.unpackedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.unpackedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedInt32() {

+        PrepareBuilder();

+        result.unpackedInt32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> UnpackedInt64List {

+        get { return PrepareBuilder().unpackedInt64_; }

+      }

+      public int UnpackedInt64Count {

+        get { return result.UnpackedInt64Count; }

+      }

+      public long GetUnpackedInt64(int index) {

+        return result.GetUnpackedInt64(index);

+      }

+      public Builder SetUnpackedInt64(int index, long value) {

+        PrepareBuilder();

+        result.unpackedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedInt64(long value) {

+        PrepareBuilder();

+        result.unpackedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.unpackedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedInt64() {

+        PrepareBuilder();

+        result.unpackedInt64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> UnpackedUint32List {

+        get { return PrepareBuilder().unpackedUint32_; }

+      }

+      public int UnpackedUint32Count {

+        get { return result.UnpackedUint32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetUnpackedUint32(int index) {

+        return result.GetUnpackedUint32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedUint32(int index, uint value) {

+        PrepareBuilder();

+        result.unpackedUint32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedUint32(uint value) {

+        PrepareBuilder();

+        result.unpackedUint32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedUint32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.unpackedUint32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedUint32() {

+        PrepareBuilder();

+        result.unpackedUint32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> UnpackedUint64List {

+        get { return PrepareBuilder().unpackedUint64_; }

+      }

+      public int UnpackedUint64Count {

+        get { return result.UnpackedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetUnpackedUint64(int index) {

+        return result.GetUnpackedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.unpackedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedUint64(ulong value) {

+        PrepareBuilder();

+        result.unpackedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.unpackedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedUint64() {

+        PrepareBuilder();

+        result.unpackedUint64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> UnpackedSint32List {

+        get { return PrepareBuilder().unpackedSint32_; }

+      }

+      public int UnpackedSint32Count {

+        get { return result.UnpackedSint32Count; }

+      }

+      public int GetUnpackedSint32(int index) {

+        return result.GetUnpackedSint32(index);

+      }

+      public Builder SetUnpackedSint32(int index, int value) {

+        PrepareBuilder();

+        result.unpackedSint32_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSint32(int value) {

+        PrepareBuilder();

+        result.unpackedSint32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSint32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.unpackedSint32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSint32() {

+        PrepareBuilder();

+        result.unpackedSint32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> UnpackedSint64List {

+        get { return PrepareBuilder().unpackedSint64_; }

+      }

+      public int UnpackedSint64Count {

+        get { return result.UnpackedSint64Count; }

+      }

+      public long GetUnpackedSint64(int index) {

+        return result.GetUnpackedSint64(index);

+      }

+      public Builder SetUnpackedSint64(int index, long value) {

+        PrepareBuilder();

+        result.unpackedSint64_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSint64(long value) {

+        PrepareBuilder();

+        result.unpackedSint64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSint64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.unpackedSint64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSint64() {

+        PrepareBuilder();

+        result.unpackedSint64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> UnpackedFixed32List {

+        get { return PrepareBuilder().unpackedFixed32_; }

+      }

+      public int UnpackedFixed32Count {

+        get { return result.UnpackedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetUnpackedFixed32(int index) {

+        return result.GetUnpackedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.unpackedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedFixed32(uint value) {

+        PrepareBuilder();

+        result.unpackedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.unpackedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedFixed32() {

+        PrepareBuilder();

+        result.unpackedFixed32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> UnpackedFixed64List {

+        get { return PrepareBuilder().unpackedFixed64_; }

+      }

+      public int UnpackedFixed64Count {

+        get { return result.UnpackedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetUnpackedFixed64(int index) {

+        return result.GetUnpackedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.unpackedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedFixed64(ulong value) {

+        PrepareBuilder();

+        result.unpackedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.unpackedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedFixed64() {

+        PrepareBuilder();

+        result.unpackedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> UnpackedSfixed32List {

+        get { return PrepareBuilder().unpackedSfixed32_; }

+      }

+      public int UnpackedSfixed32Count {

+        get { return result.UnpackedSfixed32Count; }

+      }

+      public int GetUnpackedSfixed32(int index) {

+        return result.GetUnpackedSfixed32(index);

+      }

+      public Builder SetUnpackedSfixed32(int index, int value) {

+        PrepareBuilder();

+        result.unpackedSfixed32_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSfixed32(int value) {

+        PrepareBuilder();

+        result.unpackedSfixed32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSfixed32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.unpackedSfixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSfixed32() {

+        PrepareBuilder();

+        result.unpackedSfixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> UnpackedSfixed64List {

+        get { return PrepareBuilder().unpackedSfixed64_; }

+      }

+      public int UnpackedSfixed64Count {

+        get { return result.UnpackedSfixed64Count; }

+      }

+      public long GetUnpackedSfixed64(int index) {

+        return result.GetUnpackedSfixed64(index);

+      }

+      public Builder SetUnpackedSfixed64(int index, long value) {

+        PrepareBuilder();

+        result.unpackedSfixed64_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSfixed64(long value) {

+        PrepareBuilder();

+        result.unpackedSfixed64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSfixed64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.unpackedSfixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSfixed64() {

+        PrepareBuilder();

+        result.unpackedSfixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> UnpackedFloatList {

+        get { return PrepareBuilder().unpackedFloat_; }

+      }

+      public int UnpackedFloatCount {

+        get { return result.UnpackedFloatCount; }

+      }

+      public float GetUnpackedFloat(int index) {

+        return result.GetUnpackedFloat(index);

+      }

+      public Builder SetUnpackedFloat(int index, float value) {

+        PrepareBuilder();

+        result.unpackedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedFloat(float value) {

+        PrepareBuilder();

+        result.unpackedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.unpackedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedFloat() {

+        PrepareBuilder();

+        result.unpackedFloat_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<double> UnpackedDoubleList {

+        get { return PrepareBuilder().unpackedDouble_; }

+      }

+      public int UnpackedDoubleCount {

+        get { return result.UnpackedDoubleCount; }

+      }

+      public double GetUnpackedDouble(int index) {

+        return result.GetUnpackedDouble(index);

+      }

+      public Builder SetUnpackedDouble(int index, double value) {

+        PrepareBuilder();

+        result.unpackedDouble_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedDouble(double value) {

+        PrepareBuilder();

+        result.unpackedDouble_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedDouble(scg::IEnumerable<double> values) {

+        PrepareBuilder();

+        result.unpackedDouble_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedDouble() {

+        PrepareBuilder();

+        result.unpackedDouble_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<bool> UnpackedBoolList {

+        get { return PrepareBuilder().unpackedBool_; }

+      }

+      public int UnpackedBoolCount {

+        get { return result.UnpackedBoolCount; }

+      }

+      public bool GetUnpackedBool(int index) {

+        return result.GetUnpackedBool(index);

+      }

+      public Builder SetUnpackedBool(int index, bool value) {

+        PrepareBuilder();

+        result.unpackedBool_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedBool(bool value) {

+        PrepareBuilder();

+        result.unpackedBool_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedBool(scg::IEnumerable<bool> values) {

+        PrepareBuilder();

+        result.unpackedBool_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedBool() {

+        PrepareBuilder();

+        result.unpackedBool_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> UnpackedEnumList {

+        get { return PrepareBuilder().unpackedEnum_; }

+      }

+      public int UnpackedEnumCount {

+        get { return result.UnpackedEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetUnpackedEnum(int index) {

+        return result.GetUnpackedEnum(index);

+      }

+      public Builder SetUnpackedEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.unpackedEnum_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.unpackedEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {

+        PrepareBuilder();

+        result.unpackedEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedEnum() {

+        PrepareBuilder();

+        result.unpackedEnum_.Clear();

+        return this;

+      }

+    }

+    static TestUnpackedTypes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestPackedExtensions : pb::ExtendableMessage<TestPackedExtensions, TestPackedExtensions.Builder> {

+    private TestPackedExtensions() { }

+    private static readonly TestPackedExtensions defaultInstance = new TestPackedExtensions().MakeReadOnly();

+    private static readonly string[] _testPackedExtensionsFieldNames = new string[] {  };

+    private static readonly uint[] _testPackedExtensionsFieldTags = new uint[] {  };

+    public static TestPackedExtensions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestPackedExtensions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestPackedExtensions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestPackedExtensions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestPackedExtensions, TestPackedExtensions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestPackedExtensions__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testPackedExtensionsFieldNames;

+      pb::ExtendableMessage<TestPackedExtensions, TestPackedExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestPackedExtensions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestPackedExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestPackedExtensions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestPackedExtensions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestPackedExtensions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestPackedExtensions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestPackedExtensions result;

+      

+      private TestPackedExtensions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestPackedExtensions original = result;

+          result = new TestPackedExtensions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestPackedExtensions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.Descriptor; }

+      }

+      

+      public override TestPackedExtensions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.DefaultInstance; }

+      }

+      

+      public override TestPackedExtensions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestPackedExtensions) {

+          return MergeFrom((TestPackedExtensions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestPackedExtensions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testPackedExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testPackedExtensionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestPackedExtensions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestDynamicExtensions : pb::GeneratedMessage<TestDynamicExtensions, TestDynamicExtensions.Builder> {

+    private TestDynamicExtensions() { }

+    private static readonly TestDynamicExtensions defaultInstance = new TestDynamicExtensions().MakeReadOnly();

+    private static readonly string[] _testDynamicExtensionsFieldNames = new string[] { "dynamic_enum_extension", "dynamic_message_extension", "enum_extension", "message_extension", "packed_extension", "repeated_extension", "scalar_extension" };

+    private static readonly uint[] _testDynamicExtensionsFieldTags = new uint[] { 16016, 16034, 16008, 16026, 16050, 16042, 16005 };

+    public static TestDynamicExtensions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestDynamicExtensions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestDynamicExtensions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestDynamicExtensions, TestDynamicExtensions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDynamicExtensions__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum DynamicEnumType {

+        DYNAMIC_FOO = 2200,

+        DYNAMIC_BAR = 2201,

+        DYNAMIC_BAZ = 2202,

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class DynamicMessageType : pb::GeneratedMessage<DynamicMessageType, DynamicMessageType.Builder> {

+        private DynamicMessageType() { }

+        private static readonly DynamicMessageType defaultInstance = new DynamicMessageType().MakeReadOnly();

+        private static readonly string[] _dynamicMessageTypeFieldNames = new string[] { "dynamic_field" };

+        private static readonly uint[] _dynamicMessageTypeFieldTags = new uint[] { 16800 };

+        public static DynamicMessageType DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override DynamicMessageType DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override DynamicMessageType ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<DynamicMessageType, DynamicMessageType.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__FieldAccessorTable; }

+        }

+        

+        public const int DynamicFieldFieldNumber = 2100;

+        private bool hasDynamicField;

+        private int dynamicField_;

+        public bool HasDynamicField {

+          get { return hasDynamicField; }

+        }

+        public int DynamicField {

+          get { return dynamicField_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _dynamicMessageTypeFieldNames;

+          if (hasDynamicField) {

+            output.WriteInt32(2100, field_names[0], DynamicField);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasDynamicField) {

+            size += pb::CodedOutputStream.ComputeInt32Size(2100, DynamicField);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static DynamicMessageType ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static DynamicMessageType ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static DynamicMessageType ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private DynamicMessageType MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(DynamicMessageType prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<DynamicMessageType, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(DynamicMessageType cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private DynamicMessageType result;

+          

+          private DynamicMessageType PrepareBuilder() {

+            if (resultIsReadOnly) {

+              DynamicMessageType original = result;

+              result = new DynamicMessageType();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override DynamicMessageType MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Descriptor; }

+          }

+          

+          public override DynamicMessageType DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance; }

+          }

+          

+          public override DynamicMessageType BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is DynamicMessageType) {

+              return MergeFrom((DynamicMessageType) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(DynamicMessageType other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasDynamicField) {

+              DynamicField = other.DynamicField;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_dynamicMessageTypeFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _dynamicMessageTypeFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 16800: {

+                  result.hasDynamicField = input.ReadInt32(ref result.dynamicField_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasDynamicField {

+            get { return result.hasDynamicField; }

+          }

+          public int DynamicField {

+            get { return result.DynamicField; }

+            set { SetDynamicField(value); }

+          }

+          public Builder SetDynamicField(int value) {

+            PrepareBuilder();

+            result.hasDynamicField = true;

+            result.dynamicField_ = value;

+            return this;

+          }

+          public Builder ClearDynamicField() {

+            PrepareBuilder();

+            result.hasDynamicField = false;

+            result.dynamicField_ = 0;

+            return this;

+          }

+        }

+        static DynamicMessageType() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int ScalarExtensionFieldNumber = 2000;

+    private bool hasScalarExtension;

+    private uint scalarExtension_;

+    public bool HasScalarExtension {

+      get { return hasScalarExtension; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint ScalarExtension {

+      get { return scalarExtension_; }

+    }

+    

+    public const int EnumExtensionFieldNumber = 2001;

+    private bool hasEnumExtension;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum enumExtension_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+    public bool HasEnumExtension {

+      get { return hasEnumExtension; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumExtension {

+      get { return enumExtension_; }

+    }

+    

+    public const int DynamicEnumExtensionFieldNumber = 2002;

+    private bool hasDynamicEnumExtension;

+    private global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType dynamicEnumExtension_ = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType.DYNAMIC_FOO;

+    public bool HasDynamicEnumExtension {

+      get { return hasDynamicEnumExtension; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType DynamicEnumExtension {

+      get { return dynamicEnumExtension_; }

+    }

+    

+    public const int MessageExtensionFieldNumber = 2003;

+    private bool hasMessageExtension;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage messageExtension_;

+    public bool HasMessageExtension {

+      get { return hasMessageExtension; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageExtension {

+      get { return messageExtension_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }

+    }

+    

+    public const int DynamicMessageExtensionFieldNumber = 2004;

+    private bool hasDynamicMessageExtension;

+    private global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType dynamicMessageExtension_;

+    public bool HasDynamicMessageExtension {

+      get { return hasDynamicMessageExtension; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType DynamicMessageExtension {

+      get { return dynamicMessageExtension_ ?? global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance; }

+    }

+    

+    public const int RepeatedExtensionFieldNumber = 2005;

+    private pbc::PopsicleList<string> repeatedExtension_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedExtensionList {

+      get { return pbc::Lists.AsReadOnly(repeatedExtension_); }

+    }

+    public int RepeatedExtensionCount {

+      get { return repeatedExtension_.Count; }

+    }

+    public string GetRepeatedExtension(int index) {

+      return repeatedExtension_[index];

+    }

+    

+    public const int PackedExtensionFieldNumber = 2006;

+    private int packedExtensionMemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedExtension_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedExtensionList {

+      get { return pbc::Lists.AsReadOnly(packedExtension_); }

+    }

+    public int PackedExtensionCount {

+      get { return packedExtension_.Count; }

+    }

+    public int GetPackedExtension(int index) {

+      return packedExtension_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testDynamicExtensionsFieldNames;

+      if (hasScalarExtension) {

+        output.WriteFixed32(2000, field_names[6], ScalarExtension);

+      }

+      if (hasEnumExtension) {

+        output.WriteEnum(2001, field_names[2], (int) EnumExtension, EnumExtension);

+      }

+      if (hasDynamicEnumExtension) {

+        output.WriteEnum(2002, field_names[0], (int) DynamicEnumExtension, DynamicEnumExtension);

+      }

+      if (hasMessageExtension) {

+        output.WriteMessage(2003, field_names[3], MessageExtension);

+      }

+      if (hasDynamicMessageExtension) {

+        output.WriteMessage(2004, field_names[1], DynamicMessageExtension);

+      }

+      if (repeatedExtension_.Count > 0) {

+        output.WriteStringArray(2005, field_names[5], repeatedExtension_);

+      }

+      if (packedExtension_.Count > 0) {

+        output.WritePackedSInt32Array(2006, field_names[4], packedExtensionMemoizedSerializedSize, packedExtension_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasScalarExtension) {

+        size += pb::CodedOutputStream.ComputeFixed32Size(2000, ScalarExtension);

+      }

+      if (hasEnumExtension) {

+        size += pb::CodedOutputStream.ComputeEnumSize(2001, (int) EnumExtension);

+      }

+      if (hasDynamicEnumExtension) {

+        size += pb::CodedOutputStream.ComputeEnumSize(2002, (int) DynamicEnumExtension);

+      }

+      if (hasMessageExtension) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2003, MessageExtension);

+      }

+      if (hasDynamicMessageExtension) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2004, DynamicMessageExtension);

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedExtensionList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedExtension_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in PackedExtensionList) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedExtension_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedExtensionMemoizedSerializedSize = dataSize;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestDynamicExtensions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestDynamicExtensions MakeReadOnly() {

+      repeatedExtension_.MakeReadOnly();

+      packedExtension_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestDynamicExtensions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestDynamicExtensions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestDynamicExtensions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestDynamicExtensions result;

+      

+      private TestDynamicExtensions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestDynamicExtensions original = result;

+          result = new TestDynamicExtensions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestDynamicExtensions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Descriptor; }

+      }

+      

+      public override TestDynamicExtensions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.DefaultInstance; }

+      }

+      

+      public override TestDynamicExtensions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestDynamicExtensions) {

+          return MergeFrom((TestDynamicExtensions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestDynamicExtensions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasScalarExtension) {

+          ScalarExtension = other.ScalarExtension;

+        }

+        if (other.HasEnumExtension) {

+          EnumExtension = other.EnumExtension;

+        }

+        if (other.HasDynamicEnumExtension) {

+          DynamicEnumExtension = other.DynamicEnumExtension;

+        }

+        if (other.HasMessageExtension) {

+          MergeMessageExtension(other.MessageExtension);

+        }

+        if (other.HasDynamicMessageExtension) {

+          MergeDynamicMessageExtension(other.DynamicMessageExtension);

+        }

+        if (other.repeatedExtension_.Count != 0) {

+          result.repeatedExtension_.Add(other.repeatedExtension_);

+        }

+        if (other.packedExtension_.Count != 0) {

+          result.packedExtension_.Add(other.packedExtension_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testDynamicExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testDynamicExtensionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 16005: {

+              result.hasScalarExtension = input.ReadFixed32(ref result.scalarExtension_);

+              break;

+            }

+            case 16008: {

+              object unknown;

+              if(input.ReadEnum(ref result.enumExtension_, out unknown)) {

+                result.hasEnumExtension = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(2001, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 16016: {

+              object unknown;

+              if(input.ReadEnum(ref result.dynamicEnumExtension_, out unknown)) {

+                result.hasDynamicEnumExtension = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(2002, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 16026: {

+              global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder();

+              if (result.hasMessageExtension) {

+                subBuilder.MergeFrom(MessageExtension);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              MessageExtension = subBuilder.BuildPartial();

+              break;

+            }

+            case 16034: {

+              global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.CreateBuilder();

+              if (result.hasDynamicMessageExtension) {

+                subBuilder.MergeFrom(DynamicMessageExtension);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              DynamicMessageExtension = subBuilder.BuildPartial();

+              break;

+            }

+            case 16042: {

+              input.ReadStringArray(tag, field_name, result.repeatedExtension_);

+              break;

+            }

+            case 16050:

+            case 16048: {

+              input.ReadSInt32Array(tag, field_name, result.packedExtension_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasScalarExtension {

+        get { return result.hasScalarExtension; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint ScalarExtension {

+        get { return result.ScalarExtension; }

+        set { SetScalarExtension(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetScalarExtension(uint value) {

+        PrepareBuilder();

+        result.hasScalarExtension = true;

+        result.scalarExtension_ = value;

+        return this;

+      }

+      public Builder ClearScalarExtension() {

+        PrepareBuilder();

+        result.hasScalarExtension = false;

+        result.scalarExtension_ = 0;

+        return this;

+      }

+      

+      public bool HasEnumExtension {

+       get { return result.hasEnumExtension; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumExtension {

+        get { return result.EnumExtension; }

+        set { SetEnumExtension(value); }

+      }

+      public Builder SetEnumExtension(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.hasEnumExtension = true;

+        result.enumExtension_ = value;

+        return this;

+      }

+      public Builder ClearEnumExtension() {

+        PrepareBuilder();

+        result.hasEnumExtension = false;

+        result.enumExtension_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+        return this;

+      }

+      

+      public bool HasDynamicEnumExtension {

+       get { return result.hasDynamicEnumExtension; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType DynamicEnumExtension {

+        get { return result.DynamicEnumExtension; }

+        set { SetDynamicEnumExtension(value); }

+      }

+      public Builder SetDynamicEnumExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType value) {

+        PrepareBuilder();

+        result.hasDynamicEnumExtension = true;

+        result.dynamicEnumExtension_ = value;

+        return this;

+      }

+      public Builder ClearDynamicEnumExtension() {

+        PrepareBuilder();

+        result.hasDynamicEnumExtension = false;

+        result.dynamicEnumExtension_ = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType.DYNAMIC_FOO;

+        return this;

+      }

+      

+      public bool HasMessageExtension {

+       get { return result.hasMessageExtension; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageExtension {

+        get { return result.MessageExtension; }

+        set { SetMessageExtension(value); }

+      }

+      public Builder SetMessageExtension(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMessageExtension = true;

+        result.messageExtension_ = value;

+        return this;

+      }

+      public Builder SetMessageExtension(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasMessageExtension = true;

+        result.messageExtension_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeMessageExtension(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasMessageExtension &&

+            result.messageExtension_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {

+            result.messageExtension_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.messageExtension_).MergeFrom(value).BuildPartial();

+        } else {

+          result.messageExtension_ = value;

+        }

+        result.hasMessageExtension = true;

+        return this;

+      }

+      public Builder ClearMessageExtension() {

+        PrepareBuilder();

+        result.hasMessageExtension = false;

+        result.messageExtension_ = null;

+        return this;

+      }

+      

+      public bool HasDynamicMessageExtension {

+       get { return result.hasDynamicMessageExtension; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType DynamicMessageExtension {

+        get { return result.DynamicMessageExtension; }

+        set { SetDynamicMessageExtension(value); }

+      }

+      public Builder SetDynamicMessageExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDynamicMessageExtension = true;

+        result.dynamicMessageExtension_ = value;

+        return this;

+      }

+      public Builder SetDynamicMessageExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasDynamicMessageExtension = true;

+        result.dynamicMessageExtension_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeDynamicMessageExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasDynamicMessageExtension &&

+            result.dynamicMessageExtension_ != global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance) {

+            result.dynamicMessageExtension_ = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.CreateBuilder(result.dynamicMessageExtension_).MergeFrom(value).BuildPartial();

+        } else {

+          result.dynamicMessageExtension_ = value;

+        }

+        result.hasDynamicMessageExtension = true;

+        return this;

+      }

+      public Builder ClearDynamicMessageExtension() {

+        PrepareBuilder();

+        result.hasDynamicMessageExtension = false;

+        result.dynamicMessageExtension_ = null;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedExtensionList {

+        get { return PrepareBuilder().repeatedExtension_; }

+      }

+      public int RepeatedExtensionCount {

+        get { return result.RepeatedExtensionCount; }

+      }

+      public string GetRepeatedExtension(int index) {

+        return result.GetRepeatedExtension(index);

+      }

+      public Builder SetRepeatedExtension(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedExtension_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedExtension(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedExtension_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedExtension(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedExtension_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedExtension() {

+        PrepareBuilder();

+        result.repeatedExtension_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> PackedExtensionList {

+        get { return PrepareBuilder().packedExtension_; }

+      }

+      public int PackedExtensionCount {

+        get { return result.PackedExtensionCount; }

+      }

+      public int GetPackedExtension(int index) {

+        return result.GetPackedExtension(index);

+      }

+      public Builder SetPackedExtension(int index, int value) {

+        PrepareBuilder();

+        result.packedExtension_[index] = value;

+        return this;

+      }

+      public Builder AddPackedExtension(int value) {

+        PrepareBuilder();

+        result.packedExtension_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedExtension(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedExtension_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedExtension() {

+        PrepareBuilder();

+        result.packedExtension_.Clear();

+        return this;

+      }

+    }

+    static TestDynamicExtensions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRepeatedScalarDifferentTagSizes : pb::GeneratedMessage<TestRepeatedScalarDifferentTagSizes, TestRepeatedScalarDifferentTagSizes.Builder> {

+    private TestRepeatedScalarDifferentTagSizes() { }

+    private static readonly TestRepeatedScalarDifferentTagSizes defaultInstance = new TestRepeatedScalarDifferentTagSizes().MakeReadOnly();

+    private static readonly string[] _testRepeatedScalarDifferentTagSizesFieldNames = new string[] { "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_int32", "repeated_int64", "repeated_uint64" };

+    private static readonly uint[] _testRepeatedScalarDifferentTagSizesFieldTags = new uint[] { 101, 16369, 2097141, 104, 16376, 2097144 };

+    public static TestRepeatedScalarDifferentTagSizes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRepeatedScalarDifferentTagSizes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRepeatedScalarDifferentTagSizes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestRepeatedScalarDifferentTagSizes, TestRepeatedScalarDifferentTagSizes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable; }

+    }

+    

+    public const int RepeatedFixed32FieldNumber = 12;

+    private pbc::PopsicleList<uint> repeatedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> RepeatedFixed32List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed32_); }

+    }

+    public int RepeatedFixed32Count {

+      get { return repeatedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetRepeatedFixed32(int index) {

+      return repeatedFixed32_[index];

+    }

+    

+    public const int RepeatedInt32FieldNumber = 13;

+    private pbc::PopsicleList<int> repeatedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedInt32List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt32_); }

+    }

+    public int RepeatedInt32Count {

+      get { return repeatedInt32_.Count; }

+    }

+    public int GetRepeatedInt32(int index) {

+      return repeatedInt32_[index];

+    }

+    

+    public const int RepeatedFixed64FieldNumber = 2046;

+    private pbc::PopsicleList<ulong> repeatedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedFixed64List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed64_); }

+    }

+    public int RepeatedFixed64Count {

+      get { return repeatedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedFixed64(int index) {

+      return repeatedFixed64_[index];

+    }

+    

+    public const int RepeatedInt64FieldNumber = 2047;

+    private pbc::PopsicleList<long> repeatedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedInt64List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt64_); }

+    }

+    public int RepeatedInt64Count {

+      get { return repeatedInt64_.Count; }

+    }

+    public long GetRepeatedInt64(int index) {

+      return repeatedInt64_[index];

+    }

+    

+    public const int RepeatedFloatFieldNumber = 262142;

+    private pbc::PopsicleList<float> repeatedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> RepeatedFloatList {

+      get { return pbc::Lists.AsReadOnly(repeatedFloat_); }

+    }

+    public int RepeatedFloatCount {

+      get { return repeatedFloat_.Count; }

+    }

+    public float GetRepeatedFloat(int index) {

+      return repeatedFloat_[index];

+    }

+    

+    public const int RepeatedUint64FieldNumber = 262143;

+    private pbc::PopsicleList<ulong> repeatedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedUint64List {

+      get { return pbc::Lists.AsReadOnly(repeatedUint64_); }

+    }

+    public int RepeatedUint64Count {

+      get { return repeatedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedUint64(int index) {

+      return repeatedUint64_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testRepeatedScalarDifferentTagSizesFieldNames;

+      if (repeatedFixed32_.Count > 0) {

+        output.WriteFixed32Array(12, field_names[0], repeatedFixed32_);

+      }

+      if (repeatedInt32_.Count > 0) {

+        output.WriteInt32Array(13, field_names[3], repeatedInt32_);

+      }

+      if (repeatedFixed64_.Count > 0) {

+        output.WriteFixed64Array(2046, field_names[1], repeatedFixed64_);

+      }

+      if (repeatedInt64_.Count > 0) {

+        output.WriteInt64Array(2047, field_names[4], repeatedInt64_);

+      }

+      if (repeatedFloat_.Count > 0) {

+        output.WriteFloatArray(262142, field_names[2], repeatedFloat_);

+      }

+      if (repeatedUint64_.Count > 0) {

+        output.WriteUInt64Array(262143, field_names[5], repeatedUint64_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFixed32_.Count;

+        size += dataSize;

+        size += 1 * repeatedFixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedInt32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedFixed64_.Count;

+        size += dataSize;

+        size += 2 * repeatedFixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in RepeatedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedInt64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFloat_.Count;

+        size += dataSize;

+        size += 3 * repeatedFloat_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in RepeatedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 3 * repeatedUint64_.Count;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRepeatedScalarDifferentTagSizes MakeReadOnly() {

+      repeatedFixed32_.MakeReadOnly();

+      repeatedInt32_.MakeReadOnly();

+      repeatedFixed64_.MakeReadOnly();

+      repeatedInt64_.MakeReadOnly();

+      repeatedFloat_.MakeReadOnly();

+      repeatedUint64_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRepeatedScalarDifferentTagSizes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestRepeatedScalarDifferentTagSizes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRepeatedScalarDifferentTagSizes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRepeatedScalarDifferentTagSizes result;

+      

+      private TestRepeatedScalarDifferentTagSizes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRepeatedScalarDifferentTagSizes original = result;

+          result = new TestRepeatedScalarDifferentTagSizes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRepeatedScalarDifferentTagSizes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.Descriptor; }

+      }

+      

+      public override TestRepeatedScalarDifferentTagSizes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.DefaultInstance; }

+      }

+      

+      public override TestRepeatedScalarDifferentTagSizes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestRepeatedScalarDifferentTagSizes) {

+          return MergeFrom((TestRepeatedScalarDifferentTagSizes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestRepeatedScalarDifferentTagSizes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.repeatedFixed32_.Count != 0) {

+          result.repeatedFixed32_.Add(other.repeatedFixed32_);

+        }

+        if (other.repeatedInt32_.Count != 0) {

+          result.repeatedInt32_.Add(other.repeatedInt32_);

+        }

+        if (other.repeatedFixed64_.Count != 0) {

+          result.repeatedFixed64_.Add(other.repeatedFixed64_);

+        }

+        if (other.repeatedInt64_.Count != 0) {

+          result.repeatedInt64_.Add(other.repeatedInt64_);

+        }

+        if (other.repeatedFloat_.Count != 0) {

+          result.repeatedFloat_.Add(other.repeatedFloat_);

+        }

+        if (other.repeatedUint64_.Count != 0) {

+          result.repeatedUint64_.Add(other.repeatedUint64_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testRepeatedScalarDifferentTagSizesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testRepeatedScalarDifferentTagSizesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 98:

+            case 101: {

+              input.ReadFixed32Array(tag, field_name, result.repeatedFixed32_);

+              break;

+            }

+            case 106:

+            case 104: {

+              input.ReadInt32Array(tag, field_name, result.repeatedInt32_);

+              break;

+            }

+            case 16370:

+            case 16369: {

+              input.ReadFixed64Array(tag, field_name, result.repeatedFixed64_);

+              break;

+            }

+            case 16378:

+            case 16376: {

+              input.ReadInt64Array(tag, field_name, result.repeatedInt64_);

+              break;

+            }

+            case 2097138:

+            case 2097141: {

+              input.ReadFloatArray(tag, field_name, result.repeatedFloat_);

+              break;

+            }

+            case 2097146:

+            case 2097144: {

+              input.ReadUInt64Array(tag, field_name, result.repeatedUint64_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> RepeatedFixed32List {

+        get { return PrepareBuilder().repeatedFixed32_; }

+      }

+      public int RepeatedFixed32Count {

+        get { return result.RepeatedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetRepeatedFixed32(int index) {

+        return result.GetRepeatedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed32(uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed32() {

+        PrepareBuilder();

+        result.repeatedFixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedInt32List {

+        get { return PrepareBuilder().repeatedInt32_; }

+      }

+      public int RepeatedInt32Count {

+        get { return result.RepeatedInt32Count; }

+      }

+      public int GetRepeatedInt32(int index) {

+        return result.GetRepeatedInt32(index);

+      }

+      public Builder SetRepeatedInt32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt32(int value) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt32() {

+        PrepareBuilder();

+        result.repeatedInt32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedFixed64List {

+        get { return PrepareBuilder().repeatedFixed64_; }

+      }

+      public int RepeatedFixed64Count {

+        get { return result.RepeatedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedFixed64(int index) {

+        return result.GetRepeatedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed64(ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed64() {

+        PrepareBuilder();

+        result.repeatedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedInt64List {

+        get { return PrepareBuilder().repeatedInt64_; }

+      }

+      public int RepeatedInt64Count {

+        get { return result.RepeatedInt64Count; }

+      }

+      public long GetRepeatedInt64(int index) {

+        return result.GetRepeatedInt64(index);

+      }

+      public Builder SetRepeatedInt64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt64(long value) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt64() {

+        PrepareBuilder();

+        result.repeatedInt64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> RepeatedFloatList {

+        get { return PrepareBuilder().repeatedFloat_; }

+      }

+      public int RepeatedFloatCount {

+        get { return result.RepeatedFloatCount; }

+      }

+      public float GetRepeatedFloat(int index) {

+        return result.GetRepeatedFloat(index);

+      }

+      public Builder SetRepeatedFloat(int index, float value) {

+        PrepareBuilder();

+        result.repeatedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedFloat(float value) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFloat() {

+        PrepareBuilder();

+        result.repeatedFloat_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedUint64List {

+        get { return PrepareBuilder().repeatedUint64_; }

+      }

+      public int RepeatedUint64Count {

+        get { return result.RepeatedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedUint64(int index) {

+        return result.GetRepeatedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedUint64(ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedUint64() {

+        PrepareBuilder();

+        result.repeatedUint64_.Clear();

+        return this;

+      }

+    }

+    static TestRepeatedScalarDifferentTagSizes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class FooRequest : pb::GeneratedMessage<FooRequest, FooRequest.Builder> {

+    private FooRequest() { }

+    private static readonly FooRequest defaultInstance = new FooRequest().MakeReadOnly();

+    private static readonly string[] _fooRequestFieldNames = new string[] {  };

+    private static readonly uint[] _fooRequestFieldTags = new uint[] {  };

+    public static FooRequest DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override FooRequest DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override FooRequest ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_FooRequest__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<FooRequest, FooRequest.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_FooRequest__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _fooRequestFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static FooRequest ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static FooRequest ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static FooRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static FooRequest ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private FooRequest MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(FooRequest prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<FooRequest, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(FooRequest cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private FooRequest result;

+      

+      private FooRequest PrepareBuilder() {

+        if (resultIsReadOnly) {

+          FooRequest original = result;

+          result = new FooRequest();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override FooRequest MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.FooRequest.Descriptor; }

+      }

+      

+      public override FooRequest DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.FooRequest.DefaultInstance; }

+      }

+      

+      public override FooRequest BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is FooRequest) {

+          return MergeFrom((FooRequest) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(FooRequest other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.FooRequest.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_fooRequestFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _fooRequestFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static FooRequest() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class FooResponse : pb::GeneratedMessage<FooResponse, FooResponse.Builder> {

+    private FooResponse() { }

+    private static readonly FooResponse defaultInstance = new FooResponse().MakeReadOnly();

+    private static readonly string[] _fooResponseFieldNames = new string[] {  };

+    private static readonly uint[] _fooResponseFieldTags = new uint[] {  };

+    public static FooResponse DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override FooResponse DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override FooResponse ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_FooResponse__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<FooResponse, FooResponse.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_FooResponse__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _fooResponseFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static FooResponse ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static FooResponse ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static FooResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static FooResponse ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private FooResponse MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(FooResponse prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<FooResponse, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(FooResponse cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private FooResponse result;

+      

+      private FooResponse PrepareBuilder() {

+        if (resultIsReadOnly) {

+          FooResponse original = result;

+          result = new FooResponse();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override FooResponse MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.FooResponse.Descriptor; }

+      }

+      

+      public override FooResponse DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.FooResponse.DefaultInstance; }

+      }

+      

+      public override FooResponse BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is FooResponse) {

+          return MergeFrom((FooResponse) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(FooResponse other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.FooResponse.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_fooResponseFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _fooResponseFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static FooResponse() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class BarRequest : pb::GeneratedMessage<BarRequest, BarRequest.Builder> {

+    private BarRequest() { }

+    private static readonly BarRequest defaultInstance = new BarRequest().MakeReadOnly();

+    private static readonly string[] _barRequestFieldNames = new string[] {  };

+    private static readonly uint[] _barRequestFieldTags = new uint[] {  };

+    public static BarRequest DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override BarRequest DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override BarRequest ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_BarRequest__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<BarRequest, BarRequest.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_BarRequest__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _barRequestFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static BarRequest ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static BarRequest ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static BarRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static BarRequest ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private BarRequest MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(BarRequest prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<BarRequest, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(BarRequest cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private BarRequest result;

+      

+      private BarRequest PrepareBuilder() {

+        if (resultIsReadOnly) {

+          BarRequest original = result;

+          result = new BarRequest();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override BarRequest MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BarRequest.Descriptor; }

+      }

+      

+      public override BarRequest DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BarRequest.DefaultInstance; }

+      }

+      

+      public override BarRequest BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is BarRequest) {

+          return MergeFrom((BarRequest) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(BarRequest other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.BarRequest.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_barRequestFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _barRequestFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static BarRequest() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class BarResponse : pb::GeneratedMessage<BarResponse, BarResponse.Builder> {

+    private BarResponse() { }

+    private static readonly BarResponse defaultInstance = new BarResponse().MakeReadOnly();

+    private static readonly string[] _barResponseFieldNames = new string[] {  };

+    private static readonly uint[] _barResponseFieldTags = new uint[] {  };

+    public static BarResponse DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override BarResponse DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override BarResponse ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_BarResponse__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<BarResponse, BarResponse.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_BarResponse__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _barResponseFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static BarResponse ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static BarResponse ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static BarResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static BarResponse ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private BarResponse MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(BarResponse prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<BarResponse, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(BarResponse cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private BarResponse result;

+      

+      private BarResponse PrepareBuilder() {

+        if (resultIsReadOnly) {

+          BarResponse original = result;

+          result = new BarResponse();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override BarResponse MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BarResponse.Descriptor; }

+      }

+      

+      public override BarResponse DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BarResponse.DefaultInstance; }

+      }

+      

+      public override BarResponse BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is BarResponse) {

+          return MergeFrom((BarResponse) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(BarResponse other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.BarResponse.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_barResponseFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _barResponseFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static BarResponse() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+  #region Services

+  /*

+  * Service generation is now disabled by default, use the following option to enable:

+  * option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;

+  */

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestRpcInterop.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestRpcInterop.cs
new file mode 100644
index 0000000..8c6dcf6
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestRpcInterop.cs
@@ -0,0 +1,1467 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestRpcInterop {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_SearchRequest__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SearchRequest, global::Google.ProtocolBuffers.TestProtos.SearchRequest.Builder> internal__static_SearchRequest__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_SearchResponse__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SearchResponse, global::Google.ProtocolBuffers.TestProtos.SearchResponse.Builder> internal__static_SearchResponse__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_SearchResponse_ResultItem__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem, global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem.Builder> internal__static_SearchResponse_ResultItem__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_RefineSearchRequest__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest, global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest.Builder> internal__static_RefineSearchRequest__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestRpcInterop() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CiFleHRlc3QvdW5pdHRlc3RfcnBjX2ludGVyb3AucHJvdG8aJGdvb2dsZS9w", 

+            "cm90b2J1Zi9jc2hhcnBfb3B0aW9ucy5wcm90byIhCg1TZWFyY2hSZXF1ZXN0", 

+            "EhAKCENyaXRlcmlhGAEgAygJImYKDlNlYXJjaFJlc3BvbnNlEisKB3Jlc3Vs", 

+            "dHMYASADKAsyGi5TZWFyY2hSZXNwb25zZS5SZXN1bHRJdGVtGicKClJlc3Vs", 

+            "dEl0ZW0SCwoDdXJsGAEgAigJEgwKBG5hbWUYAiABKAkiUgoTUmVmaW5lU2Vh", 

+            "cmNoUmVxdWVzdBIQCghDcml0ZXJpYRgBIAMoCRIpChBwcmV2aW91c19yZXN1", 

+            "bHRzGAIgAigLMg8uU2VhcmNoUmVzcG9uc2UycQoNU2VhcmNoU2VydmljZRIp", 

+            "CgZTZWFyY2gSDi5TZWFyY2hSZXF1ZXN0Gg8uU2VhcmNoUmVzcG9uc2USNQoM", 

+            "UmVmaW5lU2VhcmNoEhQuUmVmaW5lU2VhcmNoUmVxdWVzdBoPLlNlYXJjaFJl", 

+            "c3BvbnNlQj9IAcI+OgohR29vZ2xlLlByb3RvY29sQnVmZmVycy5UZXN0UHJv", 

+          "dG9zEhJVbml0VGVzdFJwY0ludGVyb3CIDgM="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_SearchRequest__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_SearchRequest__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SearchRequest, global::Google.ProtocolBuffers.TestProtos.SearchRequest.Builder>(internal__static_SearchRequest__Descriptor,

+                new string[] { "Criteria", });

+        internal__static_SearchResponse__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_SearchResponse__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SearchResponse, global::Google.ProtocolBuffers.TestProtos.SearchResponse.Builder>(internal__static_SearchResponse__Descriptor,

+                new string[] { "Results", });

+        internal__static_SearchResponse_ResultItem__Descriptor = internal__static_SearchResponse__Descriptor.NestedTypes[0];

+        internal__static_SearchResponse_ResultItem__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem, global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem.Builder>(internal__static_SearchResponse_ResultItem__Descriptor,

+                new string[] { "Url", "Name", });

+        internal__static_RefineSearchRequest__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_RefineSearchRequest__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest, global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest.Builder>(internal__static_RefineSearchRequest__Descriptor,

+                new string[] { "Criteria", "PreviousResults", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SearchRequest : pb::GeneratedMessage<SearchRequest, SearchRequest.Builder> {

+    private SearchRequest() { }

+    private static readonly SearchRequest defaultInstance = new SearchRequest().MakeReadOnly();

+    private static readonly string[] _searchRequestFieldNames = new string[] { "Criteria" };

+    private static readonly uint[] _searchRequestFieldTags = new uint[] { 10 };

+    public static SearchRequest DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SearchRequest DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SearchRequest ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInterop.internal__static_SearchRequest__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SearchRequest, SearchRequest.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInterop.internal__static_SearchRequest__FieldAccessorTable; }

+    }

+    

+    public const int CriteriaFieldNumber = 1;

+    private pbc::PopsicleList<string> criteria_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> CriteriaList {

+      get { return pbc::Lists.AsReadOnly(criteria_); }

+    }

+    public int CriteriaCount {

+      get { return criteria_.Count; }

+    }

+    public string GetCriteria(int index) {

+      return criteria_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _searchRequestFieldNames;

+      if (criteria_.Count > 0) {

+        output.WriteStringArray(1, field_names[0], criteria_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        foreach (string element in CriteriaList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * criteria_.Count;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SearchRequest ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SearchRequest ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SearchRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SearchRequest MakeReadOnly() {

+      criteria_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SearchRequest prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SearchRequest, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SearchRequest cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SearchRequest result;

+      

+      private SearchRequest PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SearchRequest original = result;

+          result = new SearchRequest();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SearchRequest MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SearchRequest.Descriptor; }

+      }

+      

+      public override SearchRequest DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SearchRequest.DefaultInstance; }

+      }

+      

+      public override SearchRequest BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SearchRequest) {

+          return MergeFrom((SearchRequest) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SearchRequest other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.SearchRequest.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.criteria_.Count != 0) {

+          result.criteria_.Add(other.criteria_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_searchRequestFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _searchRequestFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              input.ReadStringArray(tag, field_name, result.criteria_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<string> CriteriaList {

+        get { return PrepareBuilder().criteria_; }

+      }

+      public int CriteriaCount {

+        get { return result.CriteriaCount; }

+      }

+      public string GetCriteria(int index) {

+        return result.GetCriteria(index);

+      }

+      public Builder SetCriteria(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.criteria_[index] = value;

+        return this;

+      }

+      public Builder AddCriteria(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.criteria_.Add(value);

+        return this;

+      }

+      public Builder AddRangeCriteria(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.criteria_.Add(values);

+        return this;

+      }

+      public Builder ClearCriteria() {

+        PrepareBuilder();

+        result.criteria_.Clear();

+        return this;

+      }

+    }

+    static SearchRequest() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInterop.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SearchResponse : pb::GeneratedMessage<SearchResponse, SearchResponse.Builder> {

+    private SearchResponse() { }

+    private static readonly SearchResponse defaultInstance = new SearchResponse().MakeReadOnly();

+    private static readonly string[] _searchResponseFieldNames = new string[] { "results" };

+    private static readonly uint[] _searchResponseFieldTags = new uint[] { 10 };

+    public static SearchResponse DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SearchResponse DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SearchResponse ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInterop.internal__static_SearchResponse__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SearchResponse, SearchResponse.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInterop.internal__static_SearchResponse__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class ResultItem : pb::GeneratedMessage<ResultItem, ResultItem.Builder> {

+        private ResultItem() { }

+        private static readonly ResultItem defaultInstance = new ResultItem().MakeReadOnly();

+        private static readonly string[] _resultItemFieldNames = new string[] { "name", "url" };

+        private static readonly uint[] _resultItemFieldTags = new uint[] { 18, 10 };

+        public static ResultItem DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override ResultItem DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override ResultItem ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInterop.internal__static_SearchResponse_ResultItem__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<ResultItem, ResultItem.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInterop.internal__static_SearchResponse_ResultItem__FieldAccessorTable; }

+        }

+        

+        public const int UrlFieldNumber = 1;

+        private bool hasUrl;

+        private string url_ = "";

+        public bool HasUrl {

+          get { return hasUrl; }

+        }

+        public string Url {

+          get { return url_; }

+        }

+        

+        public const int NameFieldNumber = 2;

+        private bool hasName;

+        private string name_ = "";

+        public bool HasName {

+          get { return hasName; }

+        }

+        public string Name {

+          get { return name_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            if (!hasUrl) return false;

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _resultItemFieldNames;

+          if (hasUrl) {

+            output.WriteString(1, field_names[1], Url);

+          }

+          if (hasName) {

+            output.WriteString(2, field_names[0], Name);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasUrl) {

+            size += pb::CodedOutputStream.ComputeStringSize(1, Url);

+          }

+          if (hasName) {

+            size += pb::CodedOutputStream.ComputeStringSize(2, Name);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static ResultItem ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static ResultItem ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static ResultItem ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static ResultItem ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static ResultItem ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static ResultItem ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static ResultItem ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static ResultItem ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static ResultItem ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static ResultItem ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private ResultItem MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(ResultItem prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<ResultItem, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(ResultItem cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private ResultItem result;

+          

+          private ResultItem PrepareBuilder() {

+            if (resultIsReadOnly) {

+              ResultItem original = result;

+              result = new ResultItem();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override ResultItem MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem.Descriptor; }

+          }

+          

+          public override ResultItem DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem.DefaultInstance; }

+          }

+          

+          public override ResultItem BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is ResultItem) {

+              return MergeFrom((ResultItem) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(ResultItem other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasUrl) {

+              Url = other.Url;

+            }

+            if (other.HasName) {

+              Name = other.Name;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_resultItemFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _resultItemFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 10: {

+                  result.hasUrl = input.ReadString(ref result.url_);

+                  break;

+                }

+                case 18: {

+                  result.hasName = input.ReadString(ref result.name_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasUrl {

+            get { return result.hasUrl; }

+          }

+          public string Url {

+            get { return result.Url; }

+            set { SetUrl(value); }

+          }

+          public Builder SetUrl(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasUrl = true;

+            result.url_ = value;

+            return this;

+          }

+          public Builder ClearUrl() {

+            PrepareBuilder();

+            result.hasUrl = false;

+            result.url_ = "";

+            return this;

+          }

+          

+          public bool HasName {

+            get { return result.hasName; }

+          }

+          public string Name {

+            get { return result.Name; }

+            set { SetName(value); }

+          }

+          public Builder SetName(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasName = true;

+            result.name_ = value;

+            return this;

+          }

+          public Builder ClearName() {

+            PrepareBuilder();

+            result.hasName = false;

+            result.name_ = "";

+            return this;

+          }

+        }

+        static ResultItem() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInterop.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int ResultsFieldNumber = 1;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem> results_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem> ResultsList {

+      get { return results_; }

+    }

+    public int ResultsCount {

+      get { return results_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem GetResults(int index) {

+      return results_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem element in ResultsList) {

+          if (!element.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _searchResponseFieldNames;

+      if (results_.Count > 0) {

+        output.WriteMessageArray(1, field_names[0], results_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      foreach (global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem element in ResultsList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, element);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SearchResponse ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SearchResponse ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SearchResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SearchResponse MakeReadOnly() {

+      results_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SearchResponse prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SearchResponse, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SearchResponse cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SearchResponse result;

+      

+      private SearchResponse PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SearchResponse original = result;

+          result = new SearchResponse();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SearchResponse MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SearchResponse.Descriptor; }

+      }

+      

+      public override SearchResponse DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SearchResponse.DefaultInstance; }

+      }

+      

+      public override SearchResponse BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SearchResponse) {

+          return MergeFrom((SearchResponse) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SearchResponse other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.SearchResponse.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.results_.Count != 0) {

+          result.results_.Add(other.results_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_searchResponseFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _searchResponseFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              input.ReadMessageArray(tag, field_name, result.results_, global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem> ResultsList {

+        get { return PrepareBuilder().results_; }

+      }

+      public int ResultsCount {

+        get { return result.ResultsCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem GetResults(int index) {

+        return result.GetResults(index);

+      }

+      public Builder SetResults(int index, global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.results_[index] = value;

+        return this;

+      }

+      public Builder SetResults(int index, global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.results_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddResults(global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.results_.Add(value);

+        return this;

+      }

+      public Builder AddResults(global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.results_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeResults(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem> values) {

+        PrepareBuilder();

+        result.results_.Add(values);

+        return this;

+      }

+      public Builder ClearResults() {

+        PrepareBuilder();

+        result.results_.Clear();

+        return this;

+      }

+    }

+    static SearchResponse() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInterop.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class RefineSearchRequest : pb::GeneratedMessage<RefineSearchRequest, RefineSearchRequest.Builder> {

+    private RefineSearchRequest() { }

+    private static readonly RefineSearchRequest defaultInstance = new RefineSearchRequest().MakeReadOnly();

+    private static readonly string[] _refineSearchRequestFieldNames = new string[] { "Criteria", "previous_results" };

+    private static readonly uint[] _refineSearchRequestFieldTags = new uint[] { 10, 18 };

+    public static RefineSearchRequest DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override RefineSearchRequest DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override RefineSearchRequest ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInterop.internal__static_RefineSearchRequest__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<RefineSearchRequest, RefineSearchRequest.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInterop.internal__static_RefineSearchRequest__FieldAccessorTable; }

+    }

+    

+    public const int CriteriaFieldNumber = 1;

+    private pbc::PopsicleList<string> criteria_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> CriteriaList {

+      get { return pbc::Lists.AsReadOnly(criteria_); }

+    }

+    public int CriteriaCount {

+      get { return criteria_.Count; }

+    }

+    public string GetCriteria(int index) {

+      return criteria_[index];

+    }

+    

+    public const int PreviousResultsFieldNumber = 2;

+    private bool hasPreviousResults;

+    private global::Google.ProtocolBuffers.TestProtos.SearchResponse previousResults_;

+    public bool HasPreviousResults {

+      get { return hasPreviousResults; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.SearchResponse PreviousResults {

+      get { return previousResults_ ?? global::Google.ProtocolBuffers.TestProtos.SearchResponse.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasPreviousResults) return false;

+        if (!PreviousResults.IsInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _refineSearchRequestFieldNames;

+      if (criteria_.Count > 0) {

+        output.WriteStringArray(1, field_names[0], criteria_);

+      }

+      if (hasPreviousResults) {

+        output.WriteMessage(2, field_names[1], PreviousResults);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        foreach (string element in CriteriaList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * criteria_.Count;

+      }

+      if (hasPreviousResults) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2, PreviousResults);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static RefineSearchRequest ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static RefineSearchRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private RefineSearchRequest MakeReadOnly() {

+      criteria_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(RefineSearchRequest prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<RefineSearchRequest, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(RefineSearchRequest cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private RefineSearchRequest result;

+      

+      private RefineSearchRequest PrepareBuilder() {

+        if (resultIsReadOnly) {

+          RefineSearchRequest original = result;

+          result = new RefineSearchRequest();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override RefineSearchRequest MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest.Descriptor; }

+      }

+      

+      public override RefineSearchRequest DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest.DefaultInstance; }

+      }

+      

+      public override RefineSearchRequest BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is RefineSearchRequest) {

+          return MergeFrom((RefineSearchRequest) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(RefineSearchRequest other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.criteria_.Count != 0) {

+          result.criteria_.Add(other.criteria_);

+        }

+        if (other.HasPreviousResults) {

+          MergePreviousResults(other.PreviousResults);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_refineSearchRequestFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _refineSearchRequestFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              input.ReadStringArray(tag, field_name, result.criteria_);

+              break;

+            }

+            case 18: {

+              global::Google.ProtocolBuffers.TestProtos.SearchResponse.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.SearchResponse.CreateBuilder();

+              if (result.hasPreviousResults) {

+                subBuilder.MergeFrom(PreviousResults);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              PreviousResults = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<string> CriteriaList {

+        get { return PrepareBuilder().criteria_; }

+      }

+      public int CriteriaCount {

+        get { return result.CriteriaCount; }

+      }

+      public string GetCriteria(int index) {

+        return result.GetCriteria(index);

+      }

+      public Builder SetCriteria(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.criteria_[index] = value;

+        return this;

+      }

+      public Builder AddCriteria(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.criteria_.Add(value);

+        return this;

+      }

+      public Builder AddRangeCriteria(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.criteria_.Add(values);

+        return this;

+      }

+      public Builder ClearCriteria() {

+        PrepareBuilder();

+        result.criteria_.Clear();

+        return this;

+      }

+      

+      public bool HasPreviousResults {

+       get { return result.hasPreviousResults; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.SearchResponse PreviousResults {

+        get { return result.PreviousResults; }

+        set { SetPreviousResults(value); }

+      }

+      public Builder SetPreviousResults(global::Google.ProtocolBuffers.TestProtos.SearchResponse value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasPreviousResults = true;

+        result.previousResults_ = value;

+        return this;

+      }

+      public Builder SetPreviousResults(global::Google.ProtocolBuffers.TestProtos.SearchResponse.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasPreviousResults = true;

+        result.previousResults_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergePreviousResults(global::Google.ProtocolBuffers.TestProtos.SearchResponse value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasPreviousResults &&

+            result.previousResults_ != global::Google.ProtocolBuffers.TestProtos.SearchResponse.DefaultInstance) {

+            result.previousResults_ = global::Google.ProtocolBuffers.TestProtos.SearchResponse.CreateBuilder(result.previousResults_).MergeFrom(value).BuildPartial();

+        } else {

+          result.previousResults_ = value;

+        }

+        result.hasPreviousResults = true;

+        return this;

+      }

+      public Builder ClearPreviousResults() {

+        PrepareBuilder();

+        result.hasPreviousResults = false;

+        result.previousResults_ = null;

+        return this;

+      }

+    }

+    static RefineSearchRequest() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInterop.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+  #region Services

+  public partial interface ISearchService {

+    global::Google.ProtocolBuffers.TestProtos.SearchResponse Search(global::Google.ProtocolBuffers.TestProtos.SearchRequest searchRequest);

+    global::Google.ProtocolBuffers.TestProtos.SearchResponse RefineSearch(global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest refineSearchRequest);

+  }

+  

+  [global::System.CLSCompliant(false)]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public partial class SearchService : ISearchService, pb::IRpcDispatch, global::System.IDisposable {

+    private readonly bool dispose;

+    private readonly pb::IRpcDispatch dispatch;

+    public SearchService(pb::IRpcDispatch dispatch) : this(dispatch, true) {

+    }

+    public SearchService(pb::IRpcDispatch dispatch, bool dispose) {

+      pb::ThrowHelper.ThrowIfNull(this.dispatch = dispatch, "dispatch");

+      this.dispose = dispose && dispatch is global::System.IDisposable;

+    }

+    

+    public void Dispose() {

+      if (dispose) ((global::System.IDisposable)dispatch).Dispose();

+    }

+    

+    TMessage pb::IRpcDispatch.CallMethod<TMessage, TBuilder>(string method, pb::IMessageLite request, pb::IBuilderLite<TMessage, TBuilder> response) {

+      return dispatch.CallMethod(method, request, response);

+    }

+    

+    public global::Google.ProtocolBuffers.TestProtos.SearchResponse Search(global::Google.ProtocolBuffers.TestProtos.SearchRequest searchRequest) {

+       return dispatch.CallMethod("Search", searchRequest, global::Google.ProtocolBuffers.TestProtos.SearchResponse.CreateBuilder());

+    }

+    

+    public global::Google.ProtocolBuffers.TestProtos.SearchResponse RefineSearch(global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest refineSearchRequest) {

+       return dispatch.CallMethod("RefineSearch", refineSearchRequest, global::Google.ProtocolBuffers.TestProtos.SearchResponse.CreateBuilder());

+    }

+    

+    [global::System.CLSCompliant(false)]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public partial class Dispatch : pb::IRpcDispatch, global::System.IDisposable {

+      private readonly bool dispose;

+      private readonly ISearchService implementation;

+      public Dispatch(ISearchService implementation) : this(implementation, true) {

+      }

+      public Dispatch(ISearchService implementation, bool dispose) {

+        pb::ThrowHelper.ThrowIfNull(this.implementation = implementation, "implementation");

+        this.dispose = dispose && implementation is global::System.IDisposable;

+      }

+      

+      public void Dispose() {

+        if (dispose) ((global::System.IDisposable)implementation).Dispose();

+      }

+      

+      public TMessage CallMethod<TMessage, TBuilder>(string methodName, pb::IMessageLite request, pb::IBuilderLite<TMessage, TBuilder> response)

+        where TMessage : pb::IMessageLite<TMessage, TBuilder>

+        where TBuilder : pb::IBuilderLite<TMessage, TBuilder> {

+        switch(methodName) {

+          case "Search": return response.MergeFrom(implementation.Search((global::Google.ProtocolBuffers.TestProtos.SearchRequest)request)).Build();

+          case "RefineSearch": return response.MergeFrom(implementation.RefineSearch((global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest)request)).Build();

+          default: throw pb::ThrowHelper.CreateMissingMethod(typeof(ISearchService), methodName);

+        }

+      }

+    }

+    [global::System.CLSCompliant(false)]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public partial class ServerStub : pb::IRpcServerStub, global::System.IDisposable {

+      private readonly bool dispose;

+      private readonly pb::IRpcDispatch implementation;

+      public ServerStub(ISearchService implementation) : this(implementation, true) {

+      }

+      public ServerStub(ISearchService implementation, bool dispose) : this(new Dispatch(implementation, dispose), dispose) {

+      }

+      public ServerStub(pb::IRpcDispatch implementation) : this(implementation, true) {

+      }

+      public ServerStub(pb::IRpcDispatch implementation, bool dispose) {

+        pb::ThrowHelper.ThrowIfNull(this.implementation = implementation, "implementation");

+        this.dispose = dispose && implementation is global::System.IDisposable;

+      }

+      

+      public void Dispose() {

+        if (dispose) ((global::System.IDisposable)implementation).Dispose();

+      }

+      

+      public pb::IMessageLite CallMethod(string methodName, pb::ICodedInputStream input, pb::ExtensionRegistry registry) {

+        switch(methodName) {

+          case "Search": return implementation.CallMethod(methodName, global::Google.ProtocolBuffers.TestProtos.SearchRequest.ParseFrom(input, registry), global::Google.ProtocolBuffers.TestProtos.SearchResponse.CreateBuilder());

+          case "RefineSearch": return implementation.CallMethod(methodName, global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest.ParseFrom(input, registry), global::Google.ProtocolBuffers.TestProtos.SearchResponse.CreateBuilder());

+          default: throw pb::ThrowHelper.CreateMissingMethod(typeof(ISearchService), methodName);

+        }

+      }

+    }

+  }

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestXmlSerializerTestProtoFile.cs b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestXmlSerializerTestProtoFile.cs
new file mode 100644
index 0000000..fe35c91
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestProtos/UnitTestXmlSerializerTestProtoFile.cs
@@ -0,0 +1,2292 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestXmlSerializerTestProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.ExtensionEnum);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.ExtensionText);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.ExtensionNumber);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.ExtensionMessage);

+    }

+    #endregion

+    #region Extensions

+    public const int ExtensionEnumFieldNumber = 101;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.EnumOptions> ExtensionEnum;

+    public const int ExtensionTextFieldNumber = 102;

+    public static pb::GeneratedExtensionBase<string> ExtensionText;

+    public const int ExtensionNumberFieldNumber = 103;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> ExtensionNumber;

+    public const int ExtensionMessageFieldNumber = 199;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestXmlExtension> ExtensionMessage;

+    #endregion

+    

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestXmlChild__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlChild, global::Google.ProtocolBuffers.TestProtos.TestXmlChild.Builder> internal__static_protobuf_unittest_extra_TestXmlChild__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestXmlNoFields__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields, global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields.Builder> internal__static_protobuf_unittest_extra_TestXmlNoFields__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestXmlRescursive__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive, global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.Builder> internal__static_protobuf_unittest_extra_TestXmlRescursive__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestXmlMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Builder> internal__static_protobuf_unittest_extra_TestXmlMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestXmlMessage_Children__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.Builder> internal__static_protobuf_unittest_extra_TestXmlMessage_Children__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestXmlExtension__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlExtension, global::Google.ProtocolBuffers.TestProtos.TestXmlExtension.Builder> internal__static_protobuf_unittest_extra_TestXmlExtension__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestXmlSerializerTestProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CiRleHRlc3QvdW5pdHRlc3RfZXh0cmFzX3htbHRlc3QucHJvdG8SF3Byb3Rv", 

+            "YnVmX3VuaXR0ZXN0X2V4dHJhGiRnb29nbGUvcHJvdG9idWYvY3NoYXJwX29w", 

+            "dGlvbnMucHJvdG8iVQoMVGVzdFhtbENoaWxkEjUKB29wdGlvbnMYAyADKA4y", 

+            "JC5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5FbnVtT3B0aW9ucxIOCgZiaW5h", 

+            "cnkYBCABKAwiEQoPVGVzdFhtbE5vRmllbGRzIk4KEVRlc3RYbWxSZXNjdXJz", 

+            "aXZlEjkKBWNoaWxkGAEgASgLMioucHJvdG9idWZfdW5pdHRlc3RfZXh0cmEu", 

+            "VGVzdFhtbFJlc2N1cnNpdmUitwIKDlRlc3RYbWxNZXNzYWdlEg4KBm51bWJl", 

+            "chgGIAEoAxIPCgdudW1iZXJzGAIgAygFEgwKBHRleHQYAyABKAkSEgoJdGV4", 

+            "dGxpbmVzGLwFIAMoCRINCgV2YWxpZBgFIAEoCBI0CgVjaGlsZBgBIAEoCzIl", 

+            "LnByb3RvYnVmX3VuaXR0ZXN0X2V4dHJhLlRlc3RYbWxDaGlsZBJDCghjaGls", 

+            "ZHJlbhiRAyADKAoyMC5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5UZXN0WG1s", 

+            "TWVzc2FnZS5DaGlsZHJlbhpRCghDaGlsZHJlbhI1CgdvcHRpb25zGAMgAygO", 

+            "MiQucHJvdG9idWZfdW5pdHRlc3RfZXh0cmEuRW51bU9wdGlvbnMSDgoGYmlu", 

+            "YXJ5GAQgASgMKgUIZBDIASIiChBUZXN0WG1sRXh0ZW5zaW9uEg4KBm51bWJl", 

+            "chgBIAIoBSoqCgtFbnVtT3B0aW9ucxIHCgNPTkUQABIHCgNUV08QARIJCgVU", 

+            "SFJFRRACOmUKDmV4dGVuc2lvbl9lbnVtEicucHJvdG9idWZfdW5pdHRlc3Rf", 

+            "ZXh0cmEuVGVzdFhtbE1lc3NhZ2UYZSABKA4yJC5wcm90b2J1Zl91bml0dGVz", 

+            "dF9leHRyYS5FbnVtT3B0aW9uczo/Cg5leHRlbnNpb25fdGV4dBInLnByb3Rv", 

+            "YnVmX3VuaXR0ZXN0X2V4dHJhLlRlc3RYbWxNZXNzYWdlGGYgASgJOkUKEGV4", 

+            "dGVuc2lvbl9udW1iZXISJy5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5UZXN0", 

+            "WG1sTWVzc2FnZRhnIAMoBUICEAE6bgoRZXh0ZW5zaW9uX21lc3NhZ2USJy5w", 

+            "cm90b2J1Zl91bml0dGVzdF9leHRyYS5UZXN0WG1sTWVzc2FnZRjHASABKAsy", 

+            "KS5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5UZXN0WG1sRXh0ZW5zaW9uQk5I", 

+            "AcI+SQohR29vZ2xlLlByb3RvY29sQnVmZmVycy5UZXN0UHJvdG9zEiJVbml0", 

+          "VGVzdFhtbFNlcmlhbGl6ZXJUZXN0UHJvdG9GaWxlSAE="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_extra_TestXmlChild__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_extra_TestXmlChild__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlChild, global::Google.ProtocolBuffers.TestProtos.TestXmlChild.Builder>(internal__static_protobuf_unittest_extra_TestXmlChild__Descriptor,

+                new string[] { "Options", "Binary", });

+        internal__static_protobuf_unittest_extra_TestXmlNoFields__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_protobuf_unittest_extra_TestXmlNoFields__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields, global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields.Builder>(internal__static_protobuf_unittest_extra_TestXmlNoFields__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_extra_TestXmlRescursive__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_protobuf_unittest_extra_TestXmlRescursive__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive, global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.Builder>(internal__static_protobuf_unittest_extra_TestXmlRescursive__Descriptor,

+                new string[] { "Child", });

+        internal__static_protobuf_unittest_extra_TestXmlMessage__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_protobuf_unittest_extra_TestXmlMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Builder>(internal__static_protobuf_unittest_extra_TestXmlMessage__Descriptor,

+                new string[] { "Number", "Numbers", "Text", "Textlines", "Valid", "Child", "Children", });

+        internal__static_protobuf_unittest_extra_TestXmlMessage_Children__Descriptor = internal__static_protobuf_unittest_extra_TestXmlMessage__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_extra_TestXmlMessage_Children__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.Builder>(internal__static_protobuf_unittest_extra_TestXmlMessage_Children__Descriptor,

+                new string[] { "Options", "Binary", });

+        internal__static_protobuf_unittest_extra_TestXmlExtension__Descriptor = Descriptor.MessageTypes[4];

+        internal__static_protobuf_unittest_extra_TestXmlExtension__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestXmlExtension, global::Google.ProtocolBuffers.TestProtos.TestXmlExtension.Builder>(internal__static_protobuf_unittest_extra_TestXmlExtension__Descriptor,

+                new string[] { "Number", });

+        global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.ExtensionEnum = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.EnumOptions>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor.Extensions[0]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.ExtensionText = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor.Extensions[1]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.ExtensionNumber = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor.Extensions[2]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.ExtensionMessage = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestXmlExtension>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor.Extensions[3]);

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum EnumOptions {

+    ONE = 0,

+    TWO = 1,

+    THREE = 2,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.SerializableAttribute()]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestXmlChild : pb::GeneratedMessage<TestXmlChild, TestXmlChild.Builder> {

+    private TestXmlChild() { }

+    private static readonly TestXmlChild defaultInstance = new TestXmlChild().MakeReadOnly();

+    private static readonly string[] _testXmlChildFieldNames = new string[] { "binary", "options" };

+    private static readonly uint[] _testXmlChildFieldTags = new uint[] { 34, 24 };

+    public static TestXmlChild DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestXmlChild DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestXmlChild ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.internal__static_protobuf_unittest_extra_TestXmlChild__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestXmlChild, TestXmlChild.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.internal__static_protobuf_unittest_extra_TestXmlChild__FieldAccessorTable; }

+    }

+    

+    public const int OptionsFieldNumber = 3;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> options_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> OptionsList {

+      get { return pbc::Lists.AsReadOnly(options_); }

+    }

+    public int OptionsCount {

+      get { return options_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.EnumOptions GetOptions(int index) {

+      return options_[index];

+    }

+    

+    public const int BinaryFieldNumber = 4;

+    private bool hasBinary;

+    private pb::ByteString binary_ = pb::ByteString.Empty;

+    public bool HasBinary {

+      get { return hasBinary; }

+    }

+    public pb::ByteString Binary {

+      get { return binary_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testXmlChildFieldNames;

+      if (options_.Count > 0) {

+        output.WriteEnumArray(3, field_names[1], options_);

+      }

+      if (hasBinary) {

+        output.WriteBytes(4, field_names[0], Binary);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        if (options_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.EnumOptions element in options_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 1 * options_.Count;

+        }

+      }

+      if (hasBinary) {

+        size += pb::CodedOutputStream.ComputeBytesSize(4, Binary);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestXmlChild ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestXmlChild ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlChild ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestXmlChild ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlChild ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestXmlChild ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlChild ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestXmlChild ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestXmlChild ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestXmlChild ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestXmlChild MakeReadOnly() {

+      options_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestXmlChild prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.SerializableAttribute()]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestXmlChild, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestXmlChild cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestXmlChild result;

+      

+      private TestXmlChild PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestXmlChild original = result;

+          result = new TestXmlChild();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestXmlChild MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlChild.Descriptor; }

+      }

+      

+      public override TestXmlChild DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlChild.DefaultInstance; }

+      }

+      

+      public override TestXmlChild BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestXmlChild) {

+          return MergeFrom((TestXmlChild) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestXmlChild other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestXmlChild.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.options_.Count != 0) {

+          result.options_.Add(other.options_);

+        }

+        if (other.HasBinary) {

+          Binary = other.Binary;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testXmlChildFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testXmlChildFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 26:

+            case 24: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.EnumOptions>(tag, field_name, result.options_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(3, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 34: {

+              result.hasBinary = input.ReadBytes(ref result.binary_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> OptionsList {

+        get { return PrepareBuilder().options_; }

+      }

+      public int OptionsCount {

+        get { return result.OptionsCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.EnumOptions GetOptions(int index) {

+        return result.GetOptions(index);

+      }

+      public Builder SetOptions(int index, global::Google.ProtocolBuffers.TestProtos.EnumOptions value) {

+        PrepareBuilder();

+        result.options_[index] = value;

+        return this;

+      }

+      public Builder AddOptions(global::Google.ProtocolBuffers.TestProtos.EnumOptions value) {

+        PrepareBuilder();

+        result.options_.Add(value);

+        return this;

+      }

+      public Builder AddRangeOptions(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.EnumOptions> values) {

+        PrepareBuilder();

+        result.options_.Add(values);

+        return this;

+      }

+      public Builder ClearOptions() {

+        PrepareBuilder();

+        result.options_.Clear();

+        return this;

+      }

+      

+      public bool HasBinary {

+        get { return result.hasBinary; }

+      }

+      public pb::ByteString Binary {

+        get { return result.Binary; }

+        set { SetBinary(value); }

+      }

+      public Builder SetBinary(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasBinary = true;

+        result.binary_ = value;

+        return this;

+      }

+      public Builder ClearBinary() {

+        PrepareBuilder();

+        result.hasBinary = false;

+        result.binary_ = pb::ByteString.Empty;

+        return this;

+      }

+    }

+    static TestXmlChild() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.SerializableAttribute()]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestXmlNoFields : pb::GeneratedMessage<TestXmlNoFields, TestXmlNoFields.Builder> {

+    private TestXmlNoFields() { }

+    private static readonly TestXmlNoFields defaultInstance = new TestXmlNoFields().MakeReadOnly();

+    private static readonly string[] _testXmlNoFieldsFieldNames = new string[] {  };

+    private static readonly uint[] _testXmlNoFieldsFieldTags = new uint[] {  };

+    public static TestXmlNoFields DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestXmlNoFields DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestXmlNoFields ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.internal__static_protobuf_unittest_extra_TestXmlNoFields__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestXmlNoFields, TestXmlNoFields.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.internal__static_protobuf_unittest_extra_TestXmlNoFields__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testXmlNoFieldsFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestXmlNoFields ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestXmlNoFields ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlNoFields ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestXmlNoFields ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlNoFields ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestXmlNoFields ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlNoFields ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestXmlNoFields ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestXmlNoFields ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestXmlNoFields ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestXmlNoFields MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestXmlNoFields prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.SerializableAttribute()]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestXmlNoFields, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestXmlNoFields cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestXmlNoFields result;

+      

+      private TestXmlNoFields PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestXmlNoFields original = result;

+          result = new TestXmlNoFields();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestXmlNoFields MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields.Descriptor; }

+      }

+      

+      public override TestXmlNoFields DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields.DefaultInstance; }

+      }

+      

+      public override TestXmlNoFields BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestXmlNoFields) {

+          return MergeFrom((TestXmlNoFields) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestXmlNoFields other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestXmlNoFields.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testXmlNoFieldsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testXmlNoFieldsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestXmlNoFields() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.SerializableAttribute()]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestXmlRescursive : pb::GeneratedMessage<TestXmlRescursive, TestXmlRescursive.Builder> {

+    private TestXmlRescursive() { }

+    private static readonly TestXmlRescursive defaultInstance = new TestXmlRescursive().MakeReadOnly();

+    private static readonly string[] _testXmlRescursiveFieldNames = new string[] { "child" };

+    private static readonly uint[] _testXmlRescursiveFieldTags = new uint[] { 10 };

+    public static TestXmlRescursive DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestXmlRescursive DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestXmlRescursive ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.internal__static_protobuf_unittest_extra_TestXmlRescursive__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestXmlRescursive, TestXmlRescursive.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.internal__static_protobuf_unittest_extra_TestXmlRescursive__FieldAccessorTable; }

+    }

+    

+    public const int ChildFieldNumber = 1;

+    private bool hasChild;

+    private global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive child_;

+    public bool HasChild {

+      get { return hasChild; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive Child {

+      get { return child_ ?? global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testXmlRescursiveFieldNames;

+      if (hasChild) {

+        output.WriteMessage(1, field_names[0], Child);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasChild) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, Child);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestXmlRescursive ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestXmlRescursive ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlRescursive ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestXmlRescursive ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlRescursive ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestXmlRescursive ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlRescursive ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestXmlRescursive ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestXmlRescursive ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestXmlRescursive ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestXmlRescursive MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestXmlRescursive prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.SerializableAttribute()]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestXmlRescursive, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestXmlRescursive cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestXmlRescursive result;

+      

+      private TestXmlRescursive PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestXmlRescursive original = result;

+          result = new TestXmlRescursive();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestXmlRescursive MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.Descriptor; }

+      }

+      

+      public override TestXmlRescursive DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.DefaultInstance; }

+      }

+      

+      public override TestXmlRescursive BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestXmlRescursive) {

+          return MergeFrom((TestXmlRescursive) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestXmlRescursive other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasChild) {

+          MergeChild(other.Child);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testXmlRescursiveFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testXmlRescursiveFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.CreateBuilder();

+              if (result.hasChild) {

+                subBuilder.MergeFrom(Child);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Child = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasChild {

+       get { return result.hasChild; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive Child {

+        get { return result.Child; }

+        set { SetChild(value); }

+      }

+      public Builder SetChild(global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasChild = true;

+        result.child_ = value;

+        return this;

+      }

+      public Builder SetChild(global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasChild = true;

+        result.child_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeChild(global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasChild &&

+            result.child_ != global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.DefaultInstance) {

+            result.child_ = global::Google.ProtocolBuffers.TestProtos.TestXmlRescursive.CreateBuilder(result.child_).MergeFrom(value).BuildPartial();

+        } else {

+          result.child_ = value;

+        }

+        result.hasChild = true;

+        return this;

+      }

+      public Builder ClearChild() {

+        PrepareBuilder();

+        result.hasChild = false;

+        result.child_ = null;

+        return this;

+      }

+    }

+    static TestXmlRescursive() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.SerializableAttribute()]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestXmlMessage : pb::ExtendableMessage<TestXmlMessage, TestXmlMessage.Builder> {

+    private TestXmlMessage() { }

+    private static readonly TestXmlMessage defaultInstance = new TestXmlMessage().MakeReadOnly();

+    private static readonly string[] _testXmlMessageFieldNames = new string[] { "child", "children", "number", "numbers", "text", "textlines", "valid" };

+    private static readonly uint[] _testXmlMessageFieldTags = new uint[] { 10, 3211, 48, 16, 26, 5602, 40 };

+    public static TestXmlMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestXmlMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestXmlMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.internal__static_protobuf_unittest_extra_TestXmlMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestXmlMessage, TestXmlMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.internal__static_protobuf_unittest_extra_TestXmlMessage__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.SerializableAttribute()]

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Children : pb::GeneratedMessage<Children, Children.Builder> {

+        private Children() { }

+        private static readonly Children defaultInstance = new Children().MakeReadOnly();

+        private static readonly string[] _childrenFieldNames = new string[] { "binary", "options" };

+        private static readonly uint[] _childrenFieldTags = new uint[] { 34, 24 };

+        public static Children DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Children DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Children ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.internal__static_protobuf_unittest_extra_TestXmlMessage_Children__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Children, Children.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.internal__static_protobuf_unittest_extra_TestXmlMessage_Children__FieldAccessorTable; }

+        }

+        

+        public const int OptionsFieldNumber = 3;

+        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> options_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions>();

+        public scg::IList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> OptionsList {

+          get { return pbc::Lists.AsReadOnly(options_); }

+        }

+        public int OptionsCount {

+          get { return options_.Count; }

+        }

+        public global::Google.ProtocolBuffers.TestProtos.EnumOptions GetOptions(int index) {

+          return options_[index];

+        }

+        

+        public const int BinaryFieldNumber = 4;

+        private bool hasBinary;

+        private pb::ByteString binary_ = pb::ByteString.Empty;

+        public bool HasBinary {

+          get { return hasBinary; }

+        }

+        public pb::ByteString Binary {

+          get { return binary_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _childrenFieldNames;

+          if (options_.Count > 0) {

+            output.WriteEnumArray(3, field_names[1], options_);

+          }

+          if (hasBinary) {

+            output.WriteBytes(4, field_names[0], Binary);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          {

+            int dataSize = 0;

+            if (options_.Count > 0) {

+              foreach (global::Google.ProtocolBuffers.TestProtos.EnumOptions element in options_) {

+                dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+              }

+              size += dataSize;

+              size += 1 * options_.Count;

+            }

+          }

+          if (hasBinary) {

+            size += pb::CodedOutputStream.ComputeBytesSize(4, Binary);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static Children ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Children ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Children ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Children ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Children ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Children ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Children ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Children ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Children ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Children ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Children MakeReadOnly() {

+          options_.MakeReadOnly();

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Children prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.SerializableAttribute()]

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Children, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Children cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Children result;

+          

+          private Children PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Children original = result;

+              result = new Children();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Children MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.Descriptor; }

+          }

+          

+          public override Children DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.DefaultInstance; }

+          }

+          

+          public override Children BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is Children) {

+              return MergeFrom((Children) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(Children other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.options_.Count != 0) {

+              result.options_.Add(other.options_);

+            }

+            if (other.HasBinary) {

+              Binary = other.Binary;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_childrenFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _childrenFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 26:

+                case 24: {

+                  scg::ICollection<object> unknownItems;

+                  input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.EnumOptions>(tag, field_name, result.options_, out unknownItems);

+                  if (unknownItems != null) {

+                    if (unknownFields == null) {

+                      unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                    }

+                    foreach (object rawValue in unknownItems)

+                      if (rawValue is int)

+                        unknownFields.MergeVarintField(3, (ulong)(int)rawValue);

+                  }

+                  break;

+                }

+                case 34: {

+                  result.hasBinary = input.ReadBytes(ref result.binary_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.EnumOptions> OptionsList {

+            get { return PrepareBuilder().options_; }

+          }

+          public int OptionsCount {

+            get { return result.OptionsCount; }

+          }

+          public global::Google.ProtocolBuffers.TestProtos.EnumOptions GetOptions(int index) {

+            return result.GetOptions(index);

+          }

+          public Builder SetOptions(int index, global::Google.ProtocolBuffers.TestProtos.EnumOptions value) {

+            PrepareBuilder();

+            result.options_[index] = value;

+            return this;

+          }

+          public Builder AddOptions(global::Google.ProtocolBuffers.TestProtos.EnumOptions value) {

+            PrepareBuilder();

+            result.options_.Add(value);

+            return this;

+          }

+          public Builder AddRangeOptions(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.EnumOptions> values) {

+            PrepareBuilder();

+            result.options_.Add(values);

+            return this;

+          }

+          public Builder ClearOptions() {

+            PrepareBuilder();

+            result.options_.Clear();

+            return this;

+          }

+          

+          public bool HasBinary {

+            get { return result.hasBinary; }

+          }

+          public pb::ByteString Binary {

+            get { return result.Binary; }

+            set { SetBinary(value); }

+          }

+          public Builder SetBinary(pb::ByteString value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasBinary = true;

+            result.binary_ = value;

+            return this;

+          }

+          public Builder ClearBinary() {

+            PrepareBuilder();

+            result.hasBinary = false;

+            result.binary_ = pb::ByteString.Empty;

+            return this;

+          }

+        }

+        static Children() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int NumberFieldNumber = 6;

+    private bool hasNumber;

+    private long number_;

+    public bool HasNumber {

+      get { return hasNumber; }

+    }

+    public long Number {

+      get { return number_; }

+    }

+    

+    public const int NumbersFieldNumber = 2;

+    private pbc::PopsicleList<int> numbers_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> NumbersList {

+      get { return pbc::Lists.AsReadOnly(numbers_); }

+    }

+    public int NumbersCount {

+      get { return numbers_.Count; }

+    }

+    public int GetNumbers(int index) {

+      return numbers_[index];

+    }

+    

+    public const int TextFieldNumber = 3;

+    private bool hasText;

+    private string text_ = "";

+    public bool HasText {

+      get { return hasText; }

+    }

+    public string Text {

+      get { return text_; }

+    }

+    

+    public const int TextlinesFieldNumber = 700;

+    private pbc::PopsicleList<string> textlines_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> TextlinesList {

+      get { return pbc::Lists.AsReadOnly(textlines_); }

+    }

+    public int TextlinesCount {

+      get { return textlines_.Count; }

+    }

+    public string GetTextlines(int index) {

+      return textlines_[index];

+    }

+    

+    public const int ValidFieldNumber = 5;

+    private bool hasValid;

+    private bool valid_;

+    public bool HasValid {

+      get { return hasValid; }

+    }

+    public bool Valid {

+      get { return valid_; }

+    }

+    

+    public const int ChildFieldNumber = 1;

+    private bool hasChild;

+    private global::Google.ProtocolBuffers.TestProtos.TestXmlChild child_;

+    public bool HasChild {

+      get { return hasChild; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestXmlChild Child {

+      get { return child_ ?? global::Google.ProtocolBuffers.TestProtos.TestXmlChild.DefaultInstance; }

+    }

+    

+    public const int ChildrenFieldNumber = 401;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children> children_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children> ChildrenList {

+      get { return children_; }

+    }

+    public int ChildrenCount {

+      get { return children_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children GetChildren(int index) {

+      return children_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testXmlMessageFieldNames;

+      pb::ExtendableMessage<TestXmlMessage, TestXmlMessage.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (hasChild) {

+        output.WriteMessage(1, field_names[0], Child);

+      }

+      if (numbers_.Count > 0) {

+        output.WriteInt32Array(2, field_names[3], numbers_);

+      }

+      if (hasText) {

+        output.WriteString(3, field_names[4], Text);

+      }

+      if (hasValid) {

+        output.WriteBool(5, field_names[6], Valid);

+      }

+      if (hasNumber) {

+        output.WriteInt64(6, field_names[2], Number);

+      }

+      extensionWriter.WriteUntil(200, output);

+      if (children_.Count > 0) {

+        output.WriteGroupArray(401, field_names[1], children_);

+      }

+      if (textlines_.Count > 0) {

+        output.WriteStringArray(700, field_names[5], textlines_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasNumber) {

+        size += pb::CodedOutputStream.ComputeInt64Size(6, Number);

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in NumbersList) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * numbers_.Count;

+      }

+      if (hasText) {

+        size += pb::CodedOutputStream.ComputeStringSize(3, Text);

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in TextlinesList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * textlines_.Count;

+      }

+      if (hasValid) {

+        size += pb::CodedOutputStream.ComputeBoolSize(5, Valid);

+      }

+      if (hasChild) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, Child);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children element in ChildrenList) {

+        size += pb::CodedOutputStream.ComputeGroupSize(401, element);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestXmlMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestXmlMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestXmlMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestXmlMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestXmlMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestXmlMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestXmlMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestXmlMessage MakeReadOnly() {

+      numbers_.MakeReadOnly();

+      textlines_.MakeReadOnly();

+      children_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestXmlMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.SerializableAttribute()]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestXmlMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestXmlMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestXmlMessage result;

+      

+      private TestXmlMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestXmlMessage original = result;

+          result = new TestXmlMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestXmlMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Descriptor; }

+      }

+      

+      public override TestXmlMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.DefaultInstance; }

+      }

+      

+      public override TestXmlMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestXmlMessage) {

+          return MergeFrom((TestXmlMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestXmlMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasNumber) {

+          Number = other.Number;

+        }

+        if (other.numbers_.Count != 0) {

+          result.numbers_.Add(other.numbers_);

+        }

+        if (other.HasText) {

+          Text = other.Text;

+        }

+        if (other.textlines_.Count != 0) {

+          result.textlines_.Add(other.textlines_);

+        }

+        if (other.HasValid) {

+          Valid = other.Valid;

+        }

+        if (other.HasChild) {

+          MergeChild(other.Child);

+        }

+        if (other.children_.Count != 0) {

+          result.children_.Add(other.children_);

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testXmlMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testXmlMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestXmlChild.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestXmlChild.CreateBuilder();

+              if (result.hasChild) {

+                subBuilder.MergeFrom(Child);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Child = subBuilder.BuildPartial();

+              break;

+            }

+            case 18:

+            case 16: {

+              input.ReadInt32Array(tag, field_name, result.numbers_);

+              break;

+            }

+            case 26: {

+              result.hasText = input.ReadString(ref result.text_);

+              break;

+            }

+            case 40: {

+              result.hasValid = input.ReadBool(ref result.valid_);

+              break;

+            }

+            case 48: {

+              result.hasNumber = input.ReadInt64(ref result.number_);

+              break;

+            }

+            case 3211: {

+              input.ReadGroupArray(tag, field_name, result.children_, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 5602: {

+              input.ReadStringArray(tag, field_name, result.textlines_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasNumber {

+        get { return result.hasNumber; }

+      }

+      public long Number {

+        get { return result.Number; }

+        set { SetNumber(value); }

+      }

+      public Builder SetNumber(long value) {

+        PrepareBuilder();

+        result.hasNumber = true;

+        result.number_ = value;

+        return this;

+      }

+      public Builder ClearNumber() {

+        PrepareBuilder();

+        result.hasNumber = false;

+        result.number_ = 0L;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> NumbersList {

+        get { return PrepareBuilder().numbers_; }

+      }

+      public int NumbersCount {

+        get { return result.NumbersCount; }

+      }

+      public int GetNumbers(int index) {

+        return result.GetNumbers(index);

+      }

+      public Builder SetNumbers(int index, int value) {

+        PrepareBuilder();

+        result.numbers_[index] = value;

+        return this;

+      }

+      public Builder AddNumbers(int value) {

+        PrepareBuilder();

+        result.numbers_.Add(value);

+        return this;

+      }

+      public Builder AddRangeNumbers(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.numbers_.Add(values);

+        return this;

+      }

+      public Builder ClearNumbers() {

+        PrepareBuilder();

+        result.numbers_.Clear();

+        return this;

+      }

+      

+      public bool HasText {

+        get { return result.hasText; }

+      }

+      public string Text {

+        get { return result.Text; }

+        set { SetText(value); }

+      }

+      public Builder SetText(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasText = true;

+        result.text_ = value;

+        return this;

+      }

+      public Builder ClearText() {

+        PrepareBuilder();

+        result.hasText = false;

+        result.text_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> TextlinesList {

+        get { return PrepareBuilder().textlines_; }

+      }

+      public int TextlinesCount {

+        get { return result.TextlinesCount; }

+      }

+      public string GetTextlines(int index) {

+        return result.GetTextlines(index);

+      }

+      public Builder SetTextlines(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.textlines_[index] = value;

+        return this;

+      }

+      public Builder AddTextlines(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.textlines_.Add(value);

+        return this;

+      }

+      public Builder AddRangeTextlines(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.textlines_.Add(values);

+        return this;

+      }

+      public Builder ClearTextlines() {

+        PrepareBuilder();

+        result.textlines_.Clear();

+        return this;

+      }

+      

+      public bool HasValid {

+        get { return result.hasValid; }

+      }

+      public bool Valid {

+        get { return result.Valid; }

+        set { SetValid(value); }

+      }

+      public Builder SetValid(bool value) {

+        PrepareBuilder();

+        result.hasValid = true;

+        result.valid_ = value;

+        return this;

+      }

+      public Builder ClearValid() {

+        PrepareBuilder();

+        result.hasValid = false;

+        result.valid_ = false;

+        return this;

+      }

+      

+      public bool HasChild {

+       get { return result.hasChild; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestXmlChild Child {

+        get { return result.Child; }

+        set { SetChild(value); }

+      }

+      public Builder SetChild(global::Google.ProtocolBuffers.TestProtos.TestXmlChild value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasChild = true;

+        result.child_ = value;

+        return this;

+      }

+      public Builder SetChild(global::Google.ProtocolBuffers.TestProtos.TestXmlChild.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasChild = true;

+        result.child_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeChild(global::Google.ProtocolBuffers.TestProtos.TestXmlChild value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasChild &&

+            result.child_ != global::Google.ProtocolBuffers.TestProtos.TestXmlChild.DefaultInstance) {

+            result.child_ = global::Google.ProtocolBuffers.TestProtos.TestXmlChild.CreateBuilder(result.child_).MergeFrom(value).BuildPartial();

+        } else {

+          result.child_ = value;

+        }

+        result.hasChild = true;

+        return this;

+      }

+      public Builder ClearChild() {

+        PrepareBuilder();

+        result.hasChild = false;

+        result.child_ = null;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children> ChildrenList {

+        get { return PrepareBuilder().children_; }

+      }

+      public int ChildrenCount {

+        get { return result.ChildrenCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children GetChildren(int index) {

+        return result.GetChildren(index);

+      }

+      public Builder SetChildren(int index, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.children_[index] = value;

+        return this;

+      }

+      public Builder SetChildren(int index, global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.children_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddChildren(global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.children_.Add(value);

+        return this;

+      }

+      public Builder AddChildren(global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.children_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeChildren(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestXmlMessage.Types.Children> values) {

+        PrepareBuilder();

+        result.children_.Add(values);

+        return this;

+      }

+      public Builder ClearChildren() {

+        PrepareBuilder();

+        result.children_.Clear();

+        return this;

+      }

+    }

+    static TestXmlMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.SerializableAttribute()]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestXmlExtension : pb::GeneratedMessage<TestXmlExtension, TestXmlExtension.Builder> {

+    private TestXmlExtension() { }

+    private static readonly TestXmlExtension defaultInstance = new TestXmlExtension().MakeReadOnly();

+    private static readonly string[] _testXmlExtensionFieldNames = new string[] { "number" };

+    private static readonly uint[] _testXmlExtensionFieldTags = new uint[] { 8 };

+    public static TestXmlExtension DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestXmlExtension DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestXmlExtension ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.internal__static_protobuf_unittest_extra_TestXmlExtension__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestXmlExtension, TestXmlExtension.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.internal__static_protobuf_unittest_extra_TestXmlExtension__FieldAccessorTable; }

+    }

+    

+    public const int NumberFieldNumber = 1;

+    private bool hasNumber;

+    private int number_;

+    public bool HasNumber {

+      get { return hasNumber; }

+    }

+    public int Number {

+      get { return number_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasNumber) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testXmlExtensionFieldNames;

+      if (hasNumber) {

+        output.WriteInt32(1, field_names[0], Number);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasNumber) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, Number);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestXmlExtension ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestXmlExtension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlExtension ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestXmlExtension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlExtension ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestXmlExtension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestXmlExtension ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestXmlExtension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestXmlExtension ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestXmlExtension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestXmlExtension MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestXmlExtension prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.SerializableAttribute()]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestXmlExtension, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestXmlExtension cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestXmlExtension result;

+      

+      private TestXmlExtension PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestXmlExtension original = result;

+          result = new TestXmlExtension();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestXmlExtension MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlExtension.Descriptor; }

+      }

+      

+      public override TestXmlExtension DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestXmlExtension.DefaultInstance; }

+      }

+      

+      public override TestXmlExtension BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestXmlExtension) {

+          return MergeFrom((TestXmlExtension) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestXmlExtension other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestXmlExtension.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasNumber) {

+          Number = other.Number;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testXmlExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testXmlExtensionFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasNumber = input.ReadInt32(ref result.number_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasNumber {

+        get { return result.hasNumber; }

+      }

+      public int Number {

+        get { return result.Number; }

+        set { SetNumber(value); }

+      }

+      public Builder SetNumber(int value) {

+        PrepareBuilder();

+        result.hasNumber = true;

+        result.number_ = value;

+        return this;

+      }

+      public Builder ClearNumber() {

+        PrepareBuilder();

+        result.hasNumber = false;

+        result.number_ = 0;

+        return this;

+      }

+    }

+    static TestXmlExtension() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestXmlSerializerTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers.Test/TestReaderForUrlEncoded.cs b/csharp/src/ProtocolBuffers.Test/TestReaderForUrlEncoded.cs
new file mode 100644
index 0000000..1c43e24
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestReaderForUrlEncoded.cs
@@ -0,0 +1,84 @@
+using System;

+using System.IO;

+using System.Text;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using Google.ProtocolBuffers.TestProtos;

+using Google.ProtocolBuffers.Serialization.Http;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class TestReaderForUrlEncoded

+    {

+        [TestMethod]

+        public void Example_FromQueryString()

+        {

+            Uri sampleUri = new Uri("http://sample.com/Path/File.ext?text=two+three%20four&valid=true&numbers=1&numbers=2", UriKind.Absolute);

+

+            ICodedInputStream input = FormUrlEncodedReader.CreateInstance(sampleUri.Query);

+

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            builder.MergeFrom(input);

+            

+            TestXmlMessage message = builder.Build();

+            Assert.AreEqual(true, message.Valid);

+            Assert.AreEqual("two three four", message.Text);

+            Assert.AreEqual(2, message.NumbersCount);

+            Assert.AreEqual(1, message.NumbersList[0]);

+            Assert.AreEqual(2, message.NumbersList[1]);

+        }

+

+        [TestMethod]

+        public void Example_FromFormData()

+        {

+            Stream rawPost = new MemoryStream(Encoding.UTF8.GetBytes("text=two+three%20four&valid=true&numbers=1&numbers=2"), false);

+

+            ICodedInputStream input = FormUrlEncodedReader.CreateInstance(rawPost);

+

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            builder.MergeFrom(input);

+

+            TestXmlMessage message = builder.Build();

+            Assert.AreEqual(true, message.Valid);

+            Assert.AreEqual("two three four", message.Text);

+            Assert.AreEqual(2, message.NumbersCount);

+            Assert.AreEqual(1, message.NumbersList[0]);

+            Assert.AreEqual(2, message.NumbersList[1]);

+        }

+

+        [TestMethod]

+        public void TestEmptyValues()

+        {

+            ICodedInputStream input = FormUrlEncodedReader.CreateInstance("valid=true&text=&numbers=1");

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            builder.MergeFrom(input);

+

+            Assert.IsTrue(builder.Valid);

+            Assert.IsTrue(builder.HasText);

+            Assert.AreEqual("", builder.Text);

+            Assert.AreEqual(1, builder.NumbersCount);

+            Assert.AreEqual(1, builder.NumbersList[0]);

+        }

+

+        [TestMethod]

+        public void TestNoValue()

+        {

+            ICodedInputStream input = FormUrlEncodedReader.CreateInstance("valid=true&text&numbers=1");

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            builder.MergeFrom(input);

+

+            Assert.IsTrue(builder.Valid);

+            Assert.IsTrue(builder.HasText);

+            Assert.AreEqual("", builder.Text);

+            Assert.AreEqual(1, builder.NumbersCount);

+            Assert.AreEqual(1, builder.NumbersList[0]);

+        }

+

+        [TestMethod, ExpectedException(typeof(NotSupportedException))]

+        public void FormUrlEncodedReaderDoesNotSupportChildren()

+        {

+            ICodedInputStream input = FormUrlEncodedReader.CreateInstance("child=uh0");

+            TestXmlMessage.CreateBuilder().MergeFrom(input);

+        }

+    }

+}

diff --git a/csharp/src/ProtocolBuffers.Test/TestResources.cs b/csharp/src/ProtocolBuffers.Test/TestResources.cs
new file mode 100644
index 0000000..c978ca6
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestResources.cs
@@ -0,0 +1,294 @@
+namespace Google.ProtocolBuffers

+{

+    internal class TestResources

+    {

+        #region golden_message

+        internal static byte[] golden_message

+        {

+            get

+            {

+                return System.Convert.FromBase64String(@"

+CGUQZhhnIGgo0gEw1AE9awAAAEFsAAAAAAAAAE1tAAAAUW4AAAAAAAAAXQAA3kJhAAAAAAAAXEBo

+AXIDMTE1egMxMTaDAYgBdYQBkgECCHaaAQIId6IBAgh4qAEDsAEGuAEJwgEDMTI0ygEDMTI1+AHJ

+AfgBrQKAAsoBgAKuAogCywGIAq8CkALMAZACsAKYApoDmALiBKACnAOgAuQErQLPAAAArQIzAQAA

+sQLQAAAAAAAAALECNAEAAAAAAAC9AtEAAAC9AjUBAADBAtIAAAAAAAAAwQI2AQAAAAAAAM0CAABT

+Q80CAICbQ9ECAAAAAACAakDRAgAAAAAAgHNA2AIB2AIA4gIDMjE14gIDMzE16gIDMjE26gIDMzE2

+8wL4AtkB9ALzAvgCvQL0AoIDAwjaAYIDAwi+AooDAwjbAYoDAwi/ApIDAwjcAZIDAwjAApgDApgD

+A6ADBaADBqgDCKgDCbIDAzIyNLIDAzMyNLoDAzIyNboDAzMyNegDkQPwA5ID+AOTA4AElAOIBKoG

+kASsBp0ElwEAAKEEmAEAAAAAAACtBJkBAACxBJoBAAAAAAAAvQQAgM1DwQQAAAAAAMB5QMgEANIE

+AzQxNdoEAzQxNogFAZAFBJgFB6IFAzQyNKoFAzQyNQ==

+");

+            }

+        }

+        #endregion

+

+        #region golden_packed_fields_message

+        internal static byte[] golden_packed_fields_message

+        {

+            get

+            {

+                return System.Convert.FromBase64String(@"

+0gUE2QS9BdoFBNoEvgXiBQTbBL8F6gUE3ATABfIFBLoJggv6BQS8CYQLggYIXwIAAMMCAACKBhBg

+AgAAAAAAAMQCAAAAAAAAkgYIYQIAAMUCAACaBhBiAgAAAAAAAMYCAAAAAAAAogYIAMAYRADAMUSq

+BhAAAAAAACCDQAAAAAAAQIZAsgYCAQC6BgIFBg==

+");

+            }

+        }

+        #endregion

+

+        #region text_format_unittest_data

+        internal static string text_format_unittest_data

+        {

+            get

+            {

+                return @"

+optional_int32: 101

+optional_int64: 102

+optional_uint32: 103

+optional_uint64: 104

+optional_sint32: 105

+optional_sint64: 106

+optional_fixed32: 107

+optional_fixed64: 108

+optional_sfixed32: 109

+optional_sfixed64: 110

+optional_float: 111

+optional_double: 112

+optional_bool: true

+optional_string: ""115""

+optional_bytes: ""116""

+OptionalGroup {

+  a: 117

+}

+optional_nested_message {

+  bb: 118

+}

+optional_foreign_message {

+  c: 119

+}

+optional_import_message {

+  d: 120

+}

+optional_nested_enum: BAZ

+optional_foreign_enum: FOREIGN_BAZ

+optional_import_enum: IMPORT_BAZ

+optional_string_piece: ""124""

+optional_cord: ""125""

+repeated_int32: 201

+repeated_int32: 301

+repeated_int64: 202

+repeated_int64: 302

+repeated_uint32: 203

+repeated_uint32: 303

+repeated_uint64: 204

+repeated_uint64: 304

+repeated_sint32: 205

+repeated_sint32: 305

+repeated_sint64: 206

+repeated_sint64: 306

+repeated_fixed32: 207

+repeated_fixed32: 307

+repeated_fixed64: 208

+repeated_fixed64: 308

+repeated_sfixed32: 209

+repeated_sfixed32: 309

+repeated_sfixed64: 210

+repeated_sfixed64: 310

+repeated_float: 211

+repeated_float: 311

+repeated_double: 212

+repeated_double: 312

+repeated_bool: true

+repeated_bool: false

+repeated_string: ""215""

+repeated_string: ""315""

+repeated_bytes: ""216""

+repeated_bytes: ""316""

+RepeatedGroup {

+  a: 217

+}

+RepeatedGroup {

+  a: 317

+}

+repeated_nested_message {

+  bb: 218

+}

+repeated_nested_message {

+  bb: 318

+}

+repeated_foreign_message {

+  c: 219

+}

+repeated_foreign_message {

+  c: 319

+}

+repeated_import_message {

+  d: 220

+}

+repeated_import_message {

+  d: 320

+}

+repeated_nested_enum: BAR

+repeated_nested_enum: BAZ

+repeated_foreign_enum: FOREIGN_BAR

+repeated_foreign_enum: FOREIGN_BAZ

+repeated_import_enum: IMPORT_BAR

+repeated_import_enum: IMPORT_BAZ

+repeated_string_piece: ""224""

+repeated_string_piece: ""324""

+repeated_cord: ""225""

+repeated_cord: ""325""

+default_int32: 401

+default_int64: 402

+default_uint32: 403

+default_uint64: 404

+default_sint32: 405

+default_sint64: 406

+default_fixed32: 407

+default_fixed64: 408

+default_sfixed32: 409

+default_sfixed64: 410

+default_float: 411

+default_double: 412

+default_bool: false

+default_string: ""415""

+default_bytes: ""416""

+default_nested_enum: FOO

+default_foreign_enum: FOREIGN_FOO

+default_import_enum: IMPORT_FOO

+default_string_piece: ""424""

+default_cord: ""425""

+

+";

+            }

+        }

+        #endregion

+

+        #region text_format_unittest_extensions_data

+        internal static string text_format_unittest_extensions_data

+        {

+            get

+            {

+                return @"

+[protobuf_unittest.optional_int32_extension]: 101

+[protobuf_unittest.optional_int64_extension]: 102

+[protobuf_unittest.optional_uint32_extension]: 103

+[protobuf_unittest.optional_uint64_extension]: 104

+[protobuf_unittest.optional_sint32_extension]: 105

+[protobuf_unittest.optional_sint64_extension]: 106

+[protobuf_unittest.optional_fixed32_extension]: 107

+[protobuf_unittest.optional_fixed64_extension]: 108

+[protobuf_unittest.optional_sfixed32_extension]: 109

+[protobuf_unittest.optional_sfixed64_extension]: 110

+[protobuf_unittest.optional_float_extension]: 111

+[protobuf_unittest.optional_double_extension]: 112

+[protobuf_unittest.optional_bool_extension]: true

+[protobuf_unittest.optional_string_extension]: ""115""

+[protobuf_unittest.optional_bytes_extension]: ""116""

+[protobuf_unittest.optionalgroup_extension] {

+  a: 117

+}

+[protobuf_unittest.optional_nested_message_extension] {

+  bb: 118

+}

+[protobuf_unittest.optional_foreign_message_extension] {

+  c: 119

+}

+[protobuf_unittest.optional_import_message_extension] {

+  d: 120

+}

+[protobuf_unittest.optional_nested_enum_extension]: BAZ

+[protobuf_unittest.optional_foreign_enum_extension]: FOREIGN_BAZ

+[protobuf_unittest.optional_import_enum_extension]: IMPORT_BAZ

+[protobuf_unittest.optional_string_piece_extension]: ""124""

+[protobuf_unittest.optional_cord_extension]: ""125""

+[protobuf_unittest.repeated_int32_extension]: 201

+[protobuf_unittest.repeated_int32_extension]: 301

+[protobuf_unittest.repeated_int64_extension]: 202

+[protobuf_unittest.repeated_int64_extension]: 302

+[protobuf_unittest.repeated_uint32_extension]: 203

+[protobuf_unittest.repeated_uint32_extension]: 303

+[protobuf_unittest.repeated_uint64_extension]: 204

+[protobuf_unittest.repeated_uint64_extension]: 304

+[protobuf_unittest.repeated_sint32_extension]: 205

+[protobuf_unittest.repeated_sint32_extension]: 305

+[protobuf_unittest.repeated_sint64_extension]: 206

+[protobuf_unittest.repeated_sint64_extension]: 306

+[protobuf_unittest.repeated_fixed32_extension]: 207

+[protobuf_unittest.repeated_fixed32_extension]: 307

+[protobuf_unittest.repeated_fixed64_extension]: 208

+[protobuf_unittest.repeated_fixed64_extension]: 308

+[protobuf_unittest.repeated_sfixed32_extension]: 209

+[protobuf_unittest.repeated_sfixed32_extension]: 309

+[protobuf_unittest.repeated_sfixed64_extension]: 210

+[protobuf_unittest.repeated_sfixed64_extension]: 310

+[protobuf_unittest.repeated_float_extension]: 211

+[protobuf_unittest.repeated_float_extension]: 311

+[protobuf_unittest.repeated_double_extension]: 212

+[protobuf_unittest.repeated_double_extension]: 312

+[protobuf_unittest.repeated_bool_extension]: true

+[protobuf_unittest.repeated_bool_extension]: false

+[protobuf_unittest.repeated_string_extension]: ""215""

+[protobuf_unittest.repeated_string_extension]: ""315""

+[protobuf_unittest.repeated_bytes_extension]: ""216""

+[protobuf_unittest.repeated_bytes_extension]: ""316""

+[protobuf_unittest.repeatedgroup_extension] {

+  a: 217

+}

+[protobuf_unittest.repeatedgroup_extension] {

+  a: 317

+}

+[protobuf_unittest.repeated_nested_message_extension] {

+  bb: 218

+}

+[protobuf_unittest.repeated_nested_message_extension] {

+  bb: 318

+}

+[protobuf_unittest.repeated_foreign_message_extension] {

+  c: 219

+}

+[protobuf_unittest.repeated_foreign_message_extension] {

+  c: 319

+}

+[protobuf_unittest.repeated_import_message_extension] {

+  d: 220

+}

+[protobuf_unittest.repeated_import_message_extension] {

+  d: 320

+}

+[protobuf_unittest.repeated_nested_enum_extension]: BAR

+[protobuf_unittest.repeated_nested_enum_extension]: BAZ

+[protobuf_unittest.repeated_foreign_enum_extension]: FOREIGN_BAR

+[protobuf_unittest.repeated_foreign_enum_extension]: FOREIGN_BAZ

+[protobuf_unittest.repeated_import_enum_extension]: IMPORT_BAR

+[protobuf_unittest.repeated_import_enum_extension]: IMPORT_BAZ

+[protobuf_unittest.repeated_string_piece_extension]: ""224""

+[protobuf_unittest.repeated_string_piece_extension]: ""324""

+[protobuf_unittest.repeated_cord_extension]: ""225""

+[protobuf_unittest.repeated_cord_extension]: ""325""

+[protobuf_unittest.default_int32_extension]: 401

+[protobuf_unittest.default_int64_extension]: 402

+[protobuf_unittest.default_uint32_extension]: 403

+[protobuf_unittest.default_uint64_extension]: 404

+[protobuf_unittest.default_sint32_extension]: 405

+[protobuf_unittest.default_sint64_extension]: 406

+[protobuf_unittest.default_fixed32_extension]: 407

+[protobuf_unittest.default_fixed64_extension]: 408

+[protobuf_unittest.default_sfixed32_extension]: 409

+[protobuf_unittest.default_sfixed64_extension]: 410

+[protobuf_unittest.default_float_extension]: 411

+[protobuf_unittest.default_double_extension]: 412

+[protobuf_unittest.default_bool_extension]: false

+[protobuf_unittest.default_string_extension]: ""415""

+[protobuf_unittest.default_bytes_extension]: ""416""

+[protobuf_unittest.default_nested_enum_extension]: FOO

+[protobuf_unittest.default_foreign_enum_extension]: FOREIGN_FOO

+[protobuf_unittest.default_import_enum_extension]: IMPORT_FOO

+[protobuf_unittest.default_string_piece_extension]: ""424""

+[protobuf_unittest.default_cord_extension]: ""425""

+";

+            }

+        }

+        #endregion

+    }

+}

diff --git a/csharp/src/ProtocolBuffers.Test/TestRpcForMimeTypes.cs b/csharp/src/ProtocolBuffers.Test/TestRpcForMimeTypes.cs
new file mode 100644
index 0000000..68cb93d
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestRpcForMimeTypes.cs
@@ -0,0 +1,386 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using Google.ProtocolBuffers;

+using Google.ProtocolBuffers.Serialization.Http;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using System.IO;

+using Google.ProtocolBuffers.Serialization;

+using System.Text;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// This class verifies the correct code is generated from unittest_rpc_interop.proto and provides a small demonstration

+    /// of using the new IRpcDispatch to write a client/server

+    /// </summary>

+    [TestClass]

+    public class TestRpcForMimeTypes

+    {

+        /// <summary>

+        /// A sample implementation of the ISearchService for testing

+        /// </summary>

+        private class ExampleSearchImpl : ISearchService

+        {

+            SearchResponse ISearchService.Search(SearchRequest searchRequest)

+            {

+                if (searchRequest.CriteriaCount == 0)

+                {

+                    throw new ArgumentException("No criteria specified.", new InvalidOperationException());

+                }

+                SearchResponse.Builder resp = SearchResponse.CreateBuilder();

+                foreach (string criteria in searchRequest.CriteriaList)

+                {

+                    resp.AddResults(

+                        SearchResponse.Types.ResultItem.CreateBuilder().SetName(criteria).SetUrl("http://search.com").

+                            Build());

+                }

+                return resp.Build();

+            }

+

+            SearchResponse ISearchService.RefineSearch(RefineSearchRequest refineSearchRequest)

+            {

+                SearchResponse.Builder resp = refineSearchRequest.PreviousResults.ToBuilder();

+                foreach (string criteria in refineSearchRequest.CriteriaList)

+                {

+                    resp.AddResults(

+                        SearchResponse.Types.ResultItem.CreateBuilder().SetName(criteria).SetUrl("http://refine.com").

+                            Build());

+                }

+                return resp.Build();

+            }

+        }

+

+        /// <summary>

+        /// An example extraction of the wire protocol

+        /// </summary>

+        private interface IHttpTransfer

+        {

+            void Execute(string method, string contentType, Stream input, string acceptType, Stream output);

+        }

+

+        /// <summary>

+        /// An example of a server responding to a web/http request

+        /// </summary>

+        private class ExampleHttpServer : IHttpTransfer

+        {

+            public readonly MessageFormatOptions Options =

+                new MessageFormatOptions

+                {

+                    ExtensionRegistry = ExtensionRegistry.Empty,

+                    FormattedOutput = true,

+                    XmlReaderOptions = XmlReaderOptions.ReadNestedArrays,

+                    XmlReaderRootElementName = "request",

+                    XmlWriterOptions = XmlWriterOptions.OutputNestedArrays,

+                    XmlWriterRootElementName = "response"

+                };

+

+            private readonly IRpcServerStub _stub;

+

+            public ExampleHttpServer(ISearchService implementation)

+            {

+                //on the server, we create a dispatch to call the appropriate method by name

+                IRpcDispatch dispatch = new SearchService.Dispatch(implementation);

+                //we then wrap that dispatch in a server stub which will deserialize the wire bytes to the message

+                //type appropriate for the method name being invoked.

+                _stub = new SearchService.ServerStub(dispatch);

+            }

+

+            void IHttpTransfer.Execute(string method, string contentType, Stream input, string acceptType, Stream output)

+            {

+                //3.5: _stub.HttpCallMethod(

+                Extensions.HttpCallMethod(_stub,

+                    method, Options,

+                    contentType, input,

+                    acceptType, output

+                    );

+            }

+        }

+

+        /// <summary>

+        /// An example of a client sending a wire request

+        /// </summary>

+        private class ExampleClient : IRpcDispatch

+        {

+            public readonly MessageFormatOptions Options =

+                new MessageFormatOptions

+                {

+                    ExtensionRegistry = ExtensionRegistry.Empty,

+                    FormattedOutput = true,

+                    XmlReaderOptions = XmlReaderOptions.ReadNestedArrays,

+                    XmlReaderRootElementName = "response",

+                    XmlWriterOptions = XmlWriterOptions.OutputNestedArrays,

+                    XmlWriterRootElementName = "request"

+                };

+

+

+            private readonly IHttpTransfer _wire;

+            private readonly string _mimeType;

+

+            public ExampleClient(IHttpTransfer wire, string mimeType)

+            {

+                _wire = wire;

+                _mimeType = mimeType;

+            }

+

+            TMessage IRpcDispatch.CallMethod<TMessage, TBuilder>(string method, IMessageLite request,

+                                                                 IBuilderLite<TMessage, TBuilder> response)

+            {

+                MemoryStream input = new MemoryStream();

+                MemoryStream output = new MemoryStream();

+

+                //Write to _mimeType format

+                Extensions.WriteTo(request, Options, _mimeType, input);

+

+                input.Position = 0;

+                _wire.Execute(method, _mimeType, input, _mimeType, output);

+

+                //Read from _mimeType format

+                output.Position = 0;

+                Extensions.MergeFrom(response, Options, _mimeType, output);

+                

+                return response.Build();

+            }

+        }

+

+        /// <summary>

+        /// Test sending and recieving messages via text/json

+        /// </summary>

+        [TestMethod]

+        public void TestClientServerWithJsonFormat()

+        {

+            ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl());

+            //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting

+            IHttpTransfer wire = server;

+

+            ISearchService client = new SearchService(new ExampleClient(wire, "text/json"));

+            //now the client has a real, typed, interface to work with:

+            SearchResponse result = client.Search(SearchRequest.CreateBuilder().AddCriteria("Test").Build());

+            Assert.AreEqual(1, result.ResultsCount);

+            Assert.AreEqual("Test", result.ResultsList[0].Name);

+            Assert.AreEqual("http://search.com", result.ResultsList[0].Url);

+

+            //The test part of this, call the only other method

+            result =

+                client.RefineSearch(

+                    RefineSearchRequest.CreateBuilder().SetPreviousResults(result).AddCriteria("Refine").Build());

+            Assert.AreEqual(2, result.ResultsCount);

+            Assert.AreEqual("Test", result.ResultsList[0].Name);

+            Assert.AreEqual("http://search.com", result.ResultsList[0].Url);

+

+            Assert.AreEqual("Refine", result.ResultsList[1].Name);

+            Assert.AreEqual("http://refine.com", result.ResultsList[1].Url);

+        }

+

+        /// <summary>

+        /// Test sending and recieving messages via text/json

+        /// </summary>

+        [TestMethod]

+        public void TestClientServerWithXmlFormat()

+        {

+            ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl());

+            //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting

+            IHttpTransfer wire = server;

+

+            ISearchService client = new SearchService(new ExampleClient(wire, "text/xml"));

+            //now the client has a real, typed, interface to work with:

+            SearchResponse result = client.Search(SearchRequest.CreateBuilder().AddCriteria("Test").Build());

+            Assert.AreEqual(1, result.ResultsCount);

+            Assert.AreEqual("Test", result.ResultsList[0].Name);

+            Assert.AreEqual("http://search.com", result.ResultsList[0].Url);

+

+            //The test part of this, call the only other method

+            result =

+                client.RefineSearch(

+                    RefineSearchRequest.CreateBuilder().SetPreviousResults(result).AddCriteria("Refine").Build());

+            Assert.AreEqual(2, result.ResultsCount);

+            Assert.AreEqual("Test", result.ResultsList[0].Name);

+            Assert.AreEqual("http://search.com", result.ResultsList[0].Url);

+

+            Assert.AreEqual("Refine", result.ResultsList[1].Name);

+            Assert.AreEqual("http://refine.com", result.ResultsList[1].Url);

+        }

+

+        /// <summary>

+        /// Test sending and recieving messages via text/json

+        /// </summary>

+        [TestMethod]

+        public void TestClientServerWithProtoFormat()

+        {

+            ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl());

+            //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting

+            IHttpTransfer wire = server;

+

+            ISearchService client = new SearchService(new ExampleClient(wire, "application/x-protobuf"));

+            //now the client has a real, typed, interface to work with:

+            SearchResponse result = client.Search(SearchRequest.CreateBuilder().AddCriteria("Test").Build());

+            Assert.AreEqual(1, result.ResultsCount);

+            Assert.AreEqual("Test", result.ResultsList[0].Name);

+            Assert.AreEqual("http://search.com", result.ResultsList[0].Url);

+

+            //The test part of this, call the only other method

+            result =

+                client.RefineSearch(

+                    RefineSearchRequest.CreateBuilder().SetPreviousResults(result).AddCriteria("Refine").Build());

+            Assert.AreEqual(2, result.ResultsCount);

+            Assert.AreEqual("Test", result.ResultsList[0].Name);

+            Assert.AreEqual("http://search.com", result.ResultsList[0].Url);

+

+            Assert.AreEqual("Refine", result.ResultsList[1].Name);

+            Assert.AreEqual("http://refine.com", result.ResultsList[1].Url);

+        }

+

+        /// <summary>

+        /// Test sending and recieving messages via text/json

+        /// </summary>

+        [TestMethod]

+        public void TestClientServerWithCustomFormat()

+        {

+            ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl());

+            //Setup our custom mime-type format as the only format supported:

+            server.Options.MimeInputTypes.Clear();

+            server.Options.MimeInputTypes.Add("foo/bar", CodedInputStream.CreateInstance);

+            server.Options.MimeOutputTypes.Clear();

+            server.Options.MimeOutputTypes.Add("foo/bar", CodedOutputStream.CreateInstance);

+

+            //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting

+            IHttpTransfer wire = server;

+

+            ExampleClient exclient = new ExampleClient(wire, "foo/bar");

+            //Add our custom mime-type format

+            exclient.Options.MimeInputTypes.Add("foo/bar", CodedInputStream.CreateInstance);

+            exclient.Options.MimeOutputTypes.Add("foo/bar", CodedOutputStream.CreateInstance);

+            ISearchService client = new SearchService(exclient);

+

+            //now the client has a real, typed, interface to work with:

+            SearchResponse result = client.Search(SearchRequest.CreateBuilder().AddCriteria("Test").Build());

+            Assert.AreEqual(1, result.ResultsCount);

+            Assert.AreEqual("Test", result.ResultsList[0].Name);

+            Assert.AreEqual("http://search.com", result.ResultsList[0].Url);

+

+            //The test part of this, call the only other method

+            result =

+                client.RefineSearch(

+                    RefineSearchRequest.CreateBuilder().SetPreviousResults(result).AddCriteria("Refine").Build());

+            Assert.AreEqual(2, result.ResultsCount);

+            Assert.AreEqual("Test", result.ResultsList[0].Name);

+            Assert.AreEqual("http://search.com", result.ResultsList[0].Url);

+

+            Assert.AreEqual("Refine", result.ResultsList[1].Name);

+            Assert.AreEqual("http://refine.com", result.ResultsList[1].Url);

+        }

+

+        /// <summary>

+        /// Test sending and recieving messages via text/json

+        /// </summary>

+        [TestMethod]

+        public void TestServerWithUriFormat()

+        {

+            ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl());

+            //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting

+            IHttpTransfer wire = server;

+

+            MemoryStream input = new MemoryStream(Encoding.UTF8.GetBytes("?Criteria=Test&Criteria=Test+of%20URI"));

+            MemoryStream output = new MemoryStream();

+

+            //Call the server

+            wire.Execute("Search",

+                         MessageFormatOptions.ContentFormUrlEncoded, input,

+                         MessageFormatOptions.ContentTypeProtoBuffer, output

+                         );

+

+            SearchResponse result = SearchResponse.ParseFrom(output.ToArray());

+            Assert.AreEqual(2, result.ResultsCount);

+            Assert.AreEqual("Test", result.ResultsList[0].Name);

+            Assert.AreEqual("http://search.com", result.ResultsList[0].Url);

+

+            Assert.AreEqual("Test of URI", result.ResultsList[1].Name);

+            Assert.AreEqual("http://search.com", result.ResultsList[1].Url);

+        }

+

+        /// <summary>

+        /// Test sending and recieving messages via text/json

+        /// </summary>

+        [TestMethod, ExpectedException(typeof(ArgumentOutOfRangeException))]

+        public void TestInvalidMimeType()

+        {

+            ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl());

+            //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting

+            IHttpTransfer wire = server;

+

+            MemoryStream input = new MemoryStream();

+            MemoryStream output = new MemoryStream();

+

+            //Call the server

+            wire.Execute("Search",

+                         "bad/mime", input,

+                         MessageFormatOptions.ContentTypeProtoBuffer, output

+                         );

+            Assert.Fail();

+        }

+

+        /// <summary>

+        /// Test sending and recieving messages via text/json

+        /// </summary>

+        [TestMethod]

+        public void TestDefaultMimeType()

+        {

+            ExampleHttpServer server = new ExampleHttpServer(new ExampleSearchImpl());

+            

+            //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting

+            IHttpTransfer wire = server;

+

+

+            MemoryStream input = new MemoryStream(new SearchRequest.Builder().AddCriteria("Test").Build().ToByteArray());

+            MemoryStream output = new MemoryStream();

+

+            //With this default set, any invalid/unknown mime-type will be mapped to use that format

+            server.Options.DefaultContentType = MessageFormatOptions.ContentTypeProtoBuffer;

+

+            wire.Execute("Search",

+                         "foo", input,

+                         "bar", output

+                         );

+

+            SearchResponse result = SearchResponse.ParseFrom(output.ToArray());

+            Assert.AreEqual(1, result.ResultsCount);

+            Assert.AreEqual("Test", result.ResultsList[0].Name);

+            Assert.AreEqual("http://search.com", result.ResultsList[0].Url);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/TestRpcGenerator.cs b/csharp/src/ProtocolBuffers.Test/TestRpcGenerator.cs
new file mode 100644
index 0000000..18532d6
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestRpcGenerator.cs
@@ -0,0 +1,171 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using Google.ProtocolBuffers;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// This class verifies the correct code is generated from unittest_rpc_interop.proto and provides a small demonstration

+    /// of using the new IRpcDispatch to write a client/server

+    /// </summary>

+    [TestClass]

+    public class TestRpcGenerator

+    {

+        /// <summary>

+        /// A sample implementation of the ISearchService for testing

+        /// </summary>

+        private class ExampleSearchImpl : ISearchService

+        {

+            SearchResponse ISearchService.Search(SearchRequest searchRequest)

+            {

+                if (searchRequest.CriteriaCount == 0)

+                {

+                    throw new ArgumentException("No criteria specified.", new InvalidOperationException());

+                }

+                SearchResponse.Builder resp = SearchResponse.CreateBuilder();

+                foreach (string criteria in searchRequest.CriteriaList)

+                {

+                    resp.AddResults(

+                        SearchResponse.Types.ResultItem.CreateBuilder().SetName(criteria).SetUrl("http://search.com").

+                            Build());

+                }

+                return resp.Build();

+            }

+

+            SearchResponse ISearchService.RefineSearch(RefineSearchRequest refineSearchRequest)

+            {

+                SearchResponse.Builder resp = refineSearchRequest.PreviousResults.ToBuilder();

+                foreach (string criteria in refineSearchRequest.CriteriaList)

+                {

+                    resp.AddResults(

+                        SearchResponse.Types.ResultItem.CreateBuilder().SetName(criteria).SetUrl("http://refine.com").

+                            Build());

+                }

+                return resp.Build();

+            }

+        }

+

+        /// <summary>

+        /// An example extraction of the wire protocol

+        /// </summary>

+        private interface IWireTransfer

+        {

+            byte[] Execute(string method, byte[] message);

+        }

+

+        /// <summary>

+        /// An example of a server responding to a wire request

+        /// </summary>

+        private class ExampleServerHost : IWireTransfer

+        {

+            private readonly IRpcServerStub _stub;

+

+            public ExampleServerHost(ISearchService implementation)

+            {

+                //on the server, we create a dispatch to call the appropriate method by name

+                IRpcDispatch dispatch = new SearchService.Dispatch(implementation);

+                //we then wrap that dispatch in a server stub which will deserialize the wire bytes to the message

+                //type appropriate for the method name being invoked.

+                _stub = new SearchService.ServerStub(dispatch);

+            }

+

+            byte[] IWireTransfer.Execute(string method, byte[] message)

+            {

+                //now when we recieve a wire transmission to invoke a method by name with a byte[] or stream payload

+                //we just simply call the sub:

+                IMessageLite response = _stub.CallMethod(method, CodedInputStream.CreateInstance(message),

+                                                         ExtensionRegistry.Empty);

+                //now we return the expected response message:

+                return response.ToByteArray();

+            }

+        }

+

+        /// <summary>

+        /// An example of a client sending a wire request

+        /// </summary>

+        private class ExampleClient : IRpcDispatch

+        {

+            private readonly IWireTransfer _wire;

+

+            public ExampleClient(IWireTransfer wire)

+            {

+                _wire = wire;

+            }

+

+            TMessage IRpcDispatch.CallMethod<TMessage, TBuilder>(string method, IMessageLite request,

+                                                                 IBuilderLite<TMessage, TBuilder> response)

+            {

+                byte[] rawResponse = _wire.Execute(method, request.ToByteArray());

+                response.MergeFrom(rawResponse);

+                return response.Build();

+            }

+        }

+

+        /// <summary>

+        /// Put it all together to create one seamless client/server experience full of rich-type goodness ;)

+        /// All you need to do is send/recieve the method name and message bytes across the wire.

+        /// </summary>

+        [TestMethod]

+        public void TestClientServerDispatch()

+        {

+            ExampleServerHost server = new ExampleServerHost(new ExampleSearchImpl());

+            //obviously if this was a 'real' transport we would not use the server, rather the server would be listening, the client transmitting

+            IWireTransfer wire = server;

+

+            ISearchService client = new SearchService(new ExampleClient(wire));

+            //now the client has a real, typed, interface to work with:

+            SearchResponse result = client.Search(SearchRequest.CreateBuilder().AddCriteria("Test").Build());

+            Assert.AreEqual(1, result.ResultsCount);

+            Assert.AreEqual("Test", result.ResultsList[0].Name);

+            Assert.AreEqual("http://search.com", result.ResultsList[0].Url);

+

+            //The test part of this, call the only other method

+            result =

+                client.RefineSearch(

+                    RefineSearchRequest.CreateBuilder().SetPreviousResults(result).AddCriteria("Refine").Build());

+            Assert.AreEqual(2, result.ResultsCount);

+            Assert.AreEqual("Test", result.ResultsList[0].Name);

+            Assert.AreEqual("http://search.com", result.ResultsList[0].Url);

+

+            Assert.AreEqual("Refine", result.ResultsList[1].Name);

+            Assert.AreEqual("http://refine.com", result.ResultsList[1].Url);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/TestUtil.cs b/csharp/src/ProtocolBuffers.Test/TestUtil.cs
new file mode 100644
index 0000000..19c0df3
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestUtil.cs
@@ -0,0 +1,1812 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.Globalization;

+using System.IO;

+using System.Text;

+using System.Threading;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    internal static class TestUtil

+    {

+        private static ByteString goldenMessage = null;

+

+        internal static ByteString GoldenMessage

+        {

+            get

+            {

+                if (goldenMessage == null)

+                {

+                    goldenMessage = ByteString.CopyFrom(TestResources.golden_message);

+                }

+                return goldenMessage;

+            }

+        }

+

+        private static ByteString goldenPackedFieldsMessage = null;

+

+        /// <summary>

+        /// Get the bytes of the "golden packed fields message".  This is a serialized

+        /// TestPackedTypes with all fields set as they would be by SetPackedFields,

+        /// but it is loaded from a file on disk rather than generated dynamically.

+        /// The file is actually generated by C++ code, so testing against it verifies compatibility

+        /// with C++.

+        /// </summary>

+        public static ByteString GetGoldenPackedFieldsMessage()

+        {

+            if (goldenPackedFieldsMessage == null)

+            {

+                goldenPackedFieldsMessage = ByteString.CopyFrom(TestResources.golden_packed_fields_message);

+            }

+            return goldenPackedFieldsMessage;

+        }

+

+        /// <summary>

+        /// Creates an unmodifiable ExtensionRegistry containing all the extensions

+        /// of TestAllExtensions.

+        /// </summary>

+        /// <returns></returns>

+        internal static ExtensionRegistry CreateExtensionRegistry()

+        {

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            RegisterAllExtensions(registry);

+            return registry.AsReadOnly();

+        }

+

+        /// <summary>

+        /// Registers all of the extensions in TestAllExtensions with the given

+        /// ExtensionRegistry.

+        /// </summary>

+        internal static void RegisterAllExtensions(ExtensionRegistry registry)

+        {

+            registry.Add(UnitTestProtoFile.OptionalInt32Extension);

+            registry.Add(UnitTestProtoFile.OptionalInt64Extension);

+            registry.Add(UnitTestProtoFile.OptionalUint32Extension);

+            registry.Add(UnitTestProtoFile.OptionalUint64Extension);

+            registry.Add(UnitTestProtoFile.OptionalSint32Extension);

+            registry.Add(UnitTestProtoFile.OptionalSint64Extension);

+            registry.Add(UnitTestProtoFile.OptionalFixed32Extension);

+            registry.Add(UnitTestProtoFile.OptionalFixed64Extension);

+            registry.Add(UnitTestProtoFile.OptionalSfixed32Extension);

+            registry.Add(UnitTestProtoFile.OptionalSfixed64Extension);

+            registry.Add(UnitTestProtoFile.OptionalFloatExtension);

+            registry.Add(UnitTestProtoFile.OptionalDoubleExtension);

+            registry.Add(UnitTestProtoFile.OptionalBoolExtension);

+            registry.Add(UnitTestProtoFile.OptionalStringExtension);

+            registry.Add(UnitTestProtoFile.OptionalBytesExtension);

+            registry.Add(UnitTestProtoFile.OptionalGroupExtension);

+            registry.Add(UnitTestProtoFile.OptionalNestedMessageExtension);

+            registry.Add(UnitTestProtoFile.OptionalForeignMessageExtension);

+            registry.Add(UnitTestProtoFile.OptionalImportMessageExtension);

+            registry.Add(UnitTestProtoFile.OptionalNestedEnumExtension);

+            registry.Add(UnitTestProtoFile.OptionalForeignEnumExtension);

+            registry.Add(UnitTestProtoFile.OptionalImportEnumExtension);

+            registry.Add(UnitTestProtoFile.OptionalStringPieceExtension);

+            registry.Add(UnitTestProtoFile.OptionalCordExtension);

+

+            registry.Add(UnitTestProtoFile.RepeatedInt32Extension);

+            registry.Add(UnitTestProtoFile.RepeatedInt64Extension);

+            registry.Add(UnitTestProtoFile.RepeatedUint32Extension);

+            registry.Add(UnitTestProtoFile.RepeatedUint64Extension);

+            registry.Add(UnitTestProtoFile.RepeatedSint32Extension);

+            registry.Add(UnitTestProtoFile.RepeatedSint64Extension);

+            registry.Add(UnitTestProtoFile.RepeatedFixed32Extension);

+            registry.Add(UnitTestProtoFile.RepeatedFixed64Extension);

+            registry.Add(UnitTestProtoFile.RepeatedSfixed32Extension);

+            registry.Add(UnitTestProtoFile.RepeatedSfixed64Extension);

+            registry.Add(UnitTestProtoFile.RepeatedFloatExtension);

+            registry.Add(UnitTestProtoFile.RepeatedDoubleExtension);

+            registry.Add(UnitTestProtoFile.RepeatedBoolExtension);

+            registry.Add(UnitTestProtoFile.RepeatedStringExtension);

+            registry.Add(UnitTestProtoFile.RepeatedBytesExtension);

+            registry.Add(UnitTestProtoFile.RepeatedGroupExtension);

+            registry.Add(UnitTestProtoFile.RepeatedNestedMessageExtension);

+            registry.Add(UnitTestProtoFile.RepeatedForeignMessageExtension);

+            registry.Add(UnitTestProtoFile.RepeatedImportMessageExtension);

+            registry.Add(UnitTestProtoFile.RepeatedNestedEnumExtension);

+            registry.Add(UnitTestProtoFile.RepeatedForeignEnumExtension);

+            registry.Add(UnitTestProtoFile.RepeatedImportEnumExtension);

+            registry.Add(UnitTestProtoFile.RepeatedStringPieceExtension);

+            registry.Add(UnitTestProtoFile.RepeatedCordExtension);

+

+            registry.Add(UnitTestProtoFile.DefaultInt32Extension);

+            registry.Add(UnitTestProtoFile.DefaultInt64Extension);

+            registry.Add(UnitTestProtoFile.DefaultUint32Extension);

+            registry.Add(UnitTestProtoFile.DefaultUint64Extension);

+            registry.Add(UnitTestProtoFile.DefaultSint32Extension);

+            registry.Add(UnitTestProtoFile.DefaultSint64Extension);

+            registry.Add(UnitTestProtoFile.DefaultFixed32Extension);

+            registry.Add(UnitTestProtoFile.DefaultFixed64Extension);

+            registry.Add(UnitTestProtoFile.DefaultSfixed32Extension);

+            registry.Add(UnitTestProtoFile.DefaultSfixed64Extension);

+            registry.Add(UnitTestProtoFile.DefaultFloatExtension);

+            registry.Add(UnitTestProtoFile.DefaultDoubleExtension);

+            registry.Add(UnitTestProtoFile.DefaultBoolExtension);

+            registry.Add(UnitTestProtoFile.DefaultStringExtension);

+            registry.Add(UnitTestProtoFile.DefaultBytesExtension);

+            registry.Add(UnitTestProtoFile.DefaultNestedEnumExtension);

+            registry.Add(UnitTestProtoFile.DefaultForeignEnumExtension);

+            registry.Add(UnitTestProtoFile.DefaultImportEnumExtension);

+            registry.Add(UnitTestProtoFile.DefaultStringPieceExtension);

+            registry.Add(UnitTestProtoFile.DefaultCordExtension);

+

+            registry.Add(UnitTestProtoFile.PackedInt32Extension);

+            registry.Add(UnitTestProtoFile.PackedInt64Extension);

+            registry.Add(UnitTestProtoFile.PackedUint32Extension);

+            registry.Add(UnitTestProtoFile.PackedUint64Extension);

+            registry.Add(UnitTestProtoFile.PackedSint32Extension);

+            registry.Add(UnitTestProtoFile.PackedSint64Extension);

+            registry.Add(UnitTestProtoFile.PackedFixed32Extension);

+            registry.Add(UnitTestProtoFile.PackedFixed64Extension);

+            registry.Add(UnitTestProtoFile.PackedSfixed32Extension);

+            registry.Add(UnitTestProtoFile.PackedSfixed64Extension);

+            registry.Add(UnitTestProtoFile.PackedFloatExtension);

+            registry.Add(UnitTestProtoFile.PackedDoubleExtension);

+            registry.Add(UnitTestProtoFile.PackedBoolExtension);

+            registry.Add(UnitTestProtoFile.PackedEnumExtension);

+        }

+

+        /// <summary>

+        /// Helper to convert a String to ByteString.

+        /// </summary>

+        internal static ByteString ToBytes(String str)

+        {

+            return ByteString.CopyFrom(Encoding.UTF8.GetBytes(str));

+        }

+

+        internal static TestAllTypes GetAllSet()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            SetAllFields(builder);

+            return builder.Build();

+        }

+

+        /// <summary>

+        /// Sets every field of the specified message to the values expected by

+        /// AssertAllFieldsSet.

+        /// </summary>

+        internal static void SetAllFields(TestAllTypes.Builder message)

+        {

+            message.SetOptionalInt32(101);

+            message.SetOptionalInt64(102);

+            message.SetOptionalUint32(103);

+            message.SetOptionalUint64(104);

+            message.SetOptionalSint32(105);

+            message.SetOptionalSint64(106);

+            message.SetOptionalFixed32(107);

+            message.SetOptionalFixed64(108);

+            message.SetOptionalSfixed32(109);

+            message.SetOptionalSfixed64(110);

+            message.SetOptionalFloat(111);

+            message.SetOptionalDouble(112);

+            message.SetOptionalBool(true);

+            message.SetOptionalString("115");

+            message.SetOptionalBytes(ToBytes("116"));

+

+            message.SetOptionalGroup(TestAllTypes.Types.OptionalGroup.CreateBuilder().SetA(117).Build());

+            message.SetOptionalNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(118).Build());

+            message.SetOptionalForeignMessage(ForeignMessage.CreateBuilder().SetC(119).Build());

+            message.SetOptionalImportMessage(ImportMessage.CreateBuilder().SetD(120).Build());

+

+            message.SetOptionalNestedEnum(TestAllTypes.Types.NestedEnum.BAZ);

+            message.SetOptionalForeignEnum(ForeignEnum.FOREIGN_BAZ);

+            message.SetOptionalImportEnum(ImportEnum.IMPORT_BAZ);

+

+            message.SetOptionalStringPiece("124");

+            message.SetOptionalCord("125");

+

+            // -----------------------------------------------------------------

+

+            message.AddRepeatedInt32(201);

+            message.AddRepeatedInt64(202);

+            message.AddRepeatedUint32(203);

+            message.AddRepeatedUint64(204);

+            message.AddRepeatedSint32(205);

+            message.AddRepeatedSint64(206);

+            message.AddRepeatedFixed32(207);

+            message.AddRepeatedFixed64(208);

+            message.AddRepeatedSfixed32(209);

+            message.AddRepeatedSfixed64(210);

+            message.AddRepeatedFloat(211);

+            message.AddRepeatedDouble(212);

+            message.AddRepeatedBool(true);

+            message.AddRepeatedString("215");

+            message.AddRepeatedBytes(ToBytes("216"));

+

+            message.AddRepeatedGroup(TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(217).Build());

+            message.AddRepeatedNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(218).Build());

+            message.AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(219).Build());

+            message.AddRepeatedImportMessage(ImportMessage.CreateBuilder().SetD(220).Build());

+

+            message.AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.BAR);

+            message.AddRepeatedForeignEnum(ForeignEnum.FOREIGN_BAR);

+            message.AddRepeatedImportEnum(ImportEnum.IMPORT_BAR);

+

+            message.AddRepeatedStringPiece("224");

+            message.AddRepeatedCord("225");

+

+            // Add a second one of each field.

+            message.AddRepeatedInt32(301);

+            message.AddRepeatedInt64(302);

+            message.AddRepeatedUint32(303);

+            message.AddRepeatedUint64(304);

+            message.AddRepeatedSint32(305);

+            message.AddRepeatedSint64(306);

+            message.AddRepeatedFixed32(307);

+            message.AddRepeatedFixed64(308);

+            message.AddRepeatedSfixed32(309);

+            message.AddRepeatedSfixed64(310);

+            message.AddRepeatedFloat(311);

+            message.AddRepeatedDouble(312);

+            message.AddRepeatedBool(false);

+            message.AddRepeatedString("315");

+            message.AddRepeatedBytes(ToBytes("316"));

+

+            message.AddRepeatedGroup(TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(317).Build());

+            message.AddRepeatedNestedMessage(TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(318).Build());

+            message.AddRepeatedForeignMessage(ForeignMessage.CreateBuilder().SetC(319).Build());

+            message.AddRepeatedImportMessage(ImportMessage.CreateBuilder().SetD(320).Build());

+

+            message.AddRepeatedNestedEnum(TestAllTypes.Types.NestedEnum.BAZ);

+            message.AddRepeatedForeignEnum(ForeignEnum.FOREIGN_BAZ);

+            message.AddRepeatedImportEnum(ImportEnum.IMPORT_BAZ);

+

+            message.AddRepeatedStringPiece("324");

+            message.AddRepeatedCord("325");

+

+            // -----------------------------------------------------------------

+

+            message.SetDefaultInt32(401);

+            message.SetDefaultInt64(402);

+            message.SetDefaultUint32(403);

+            message.SetDefaultUint64(404);

+            message.SetDefaultSint32(405);

+            message.SetDefaultSint64(406);

+            message.SetDefaultFixed32(407);

+            message.SetDefaultFixed64(408);

+            message.SetDefaultSfixed32(409);

+            message.SetDefaultSfixed64(410);

+            message.SetDefaultFloat(411);

+            message.SetDefaultDouble(412);

+            message.SetDefaultBool(false);

+            message.SetDefaultString("415");

+            message.SetDefaultBytes(ToBytes("416"));

+

+            message.SetDefaultNestedEnum(TestAllTypes.Types.NestedEnum.FOO);

+            message.SetDefaultForeignEnum(ForeignEnum.FOREIGN_FOO);

+            message.SetDefaultImportEnum(ImportEnum.IMPORT_FOO);

+

+            message.SetDefaultStringPiece("424");

+            message.SetDefaultCord("425");

+        }

+

+        /// <summary>

+        /// Asserts that all fields of the specified message are set to the values

+        /// assigned by SetAllFields.

+        /// </summary>

+        internal static void AssertAllFieldsSet(TestAllTypes message)

+        {

+            Assert.IsTrue(message.HasOptionalInt32);

+            Assert.IsTrue(message.HasOptionalInt64);

+            Assert.IsTrue(message.HasOptionalUint32);

+            Assert.IsTrue(message.HasOptionalUint64);

+            Assert.IsTrue(message.HasOptionalSint32);

+            Assert.IsTrue(message.HasOptionalSint64);

+            Assert.IsTrue(message.HasOptionalFixed32);

+            Assert.IsTrue(message.HasOptionalFixed64);

+            Assert.IsTrue(message.HasOptionalSfixed32);

+            Assert.IsTrue(message.HasOptionalSfixed64);

+            Assert.IsTrue(message.HasOptionalFloat);

+            Assert.IsTrue(message.HasOptionalDouble);

+            Assert.IsTrue(message.HasOptionalBool);

+            Assert.IsTrue(message.HasOptionalString);

+            Assert.IsTrue(message.HasOptionalBytes);

+

+            Assert.IsTrue(message.HasOptionalGroup);

+            Assert.IsTrue(message.HasOptionalNestedMessage);

+            Assert.IsTrue(message.HasOptionalForeignMessage);

+            Assert.IsTrue(message.HasOptionalImportMessage);

+

+            Assert.IsTrue(message.OptionalGroup.HasA);

+            Assert.IsTrue(message.OptionalNestedMessage.HasBb);

+            Assert.IsTrue(message.OptionalForeignMessage.HasC);

+            Assert.IsTrue(message.OptionalImportMessage.HasD);

+

+            Assert.IsTrue(message.HasOptionalNestedEnum);

+            Assert.IsTrue(message.HasOptionalForeignEnum);

+            Assert.IsTrue(message.HasOptionalImportEnum);

+

+            Assert.IsTrue(message.HasOptionalStringPiece);

+            Assert.IsTrue(message.HasOptionalCord);

+

+            Assert.AreEqual(101, message.OptionalInt32);

+            Assert.AreEqual(102, message.OptionalInt64);

+            Assert.AreEqual(103u, message.OptionalUint32);

+            Assert.AreEqual(104u, message.OptionalUint64);

+            Assert.AreEqual(105, message.OptionalSint32);

+            Assert.AreEqual(106, message.OptionalSint64);

+            Assert.AreEqual(107u, message.OptionalFixed32);

+            Assert.AreEqual(108u, message.OptionalFixed64);

+            Assert.AreEqual(109, message.OptionalSfixed32);

+            Assert.AreEqual(110, message.OptionalSfixed64);

+            Assert.AreEqual(111, message.OptionalFloat);

+            Assert.AreEqual(112, message.OptionalDouble);

+            Assert.AreEqual(true, message.OptionalBool);

+            Assert.AreEqual("115", message.OptionalString);

+            Assert.AreEqual(ToBytes("116"), message.OptionalBytes);

+

+            Assert.AreEqual(117, message.OptionalGroup.A);

+            Assert.AreEqual(118, message.OptionalNestedMessage.Bb);

+            Assert.AreEqual(119, message.OptionalForeignMessage.C);

+            Assert.AreEqual(120, message.OptionalImportMessage.D);

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.OptionalNestedEnum);

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.OptionalForeignEnum);

+            Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.OptionalImportEnum);

+

+            Assert.AreEqual("124", message.OptionalStringPiece);

+            Assert.AreEqual("125", message.OptionalCord);

+

+            // -----------------------------------------------------------------

+

+            Assert.AreEqual(2, message.RepeatedInt32Count);

+            Assert.AreEqual(2, message.RepeatedInt64Count);

+            Assert.AreEqual(2, message.RepeatedUint32Count);

+            Assert.AreEqual(2, message.RepeatedUint64Count);

+            Assert.AreEqual(2, message.RepeatedSint32Count);

+            Assert.AreEqual(2, message.RepeatedSint64Count);

+            Assert.AreEqual(2, message.RepeatedFixed32Count);

+            Assert.AreEqual(2, message.RepeatedFixed64Count);

+            Assert.AreEqual(2, message.RepeatedSfixed32Count);

+            Assert.AreEqual(2, message.RepeatedSfixed64Count);

+            Assert.AreEqual(2, message.RepeatedFloatCount);

+            Assert.AreEqual(2, message.RepeatedDoubleCount);

+            Assert.AreEqual(2, message.RepeatedBoolCount);

+            Assert.AreEqual(2, message.RepeatedStringCount);

+            Assert.AreEqual(2, message.RepeatedBytesCount);

+

+            Assert.AreEqual(2, message.RepeatedGroupCount);

+            Assert.AreEqual(2, message.RepeatedNestedMessageCount);

+            Assert.AreEqual(2, message.RepeatedForeignMessageCount);

+            Assert.AreEqual(2, message.RepeatedImportMessageCount);

+            Assert.AreEqual(2, message.RepeatedNestedEnumCount);

+            Assert.AreEqual(2, message.RepeatedForeignEnumCount);

+            Assert.AreEqual(2, message.RepeatedImportEnumCount);

+

+            Assert.AreEqual(2, message.RepeatedStringPieceCount);

+            Assert.AreEqual(2, message.RepeatedCordCount);

+

+            Assert.AreEqual(201, message.GetRepeatedInt32(0));

+            Assert.AreEqual(202, message.GetRepeatedInt64(0));

+            Assert.AreEqual(203u, message.GetRepeatedUint32(0));

+            Assert.AreEqual(204u, message.GetRepeatedUint64(0));

+            Assert.AreEqual(205, message.GetRepeatedSint32(0));

+            Assert.AreEqual(206, message.GetRepeatedSint64(0));

+            Assert.AreEqual(207u, message.GetRepeatedFixed32(0));

+            Assert.AreEqual(208u, message.GetRepeatedFixed64(0));

+            Assert.AreEqual(209, message.GetRepeatedSfixed32(0));

+            Assert.AreEqual(210, message.GetRepeatedSfixed64(0));

+            Assert.AreEqual(211, message.GetRepeatedFloat(0));

+            Assert.AreEqual(212, message.GetRepeatedDouble(0));

+            Assert.AreEqual(true, message.GetRepeatedBool(0));

+            Assert.AreEqual("215", message.GetRepeatedString(0));

+            Assert.AreEqual(ToBytes("216"), message.GetRepeatedBytes(0));

+

+            Assert.AreEqual(217, message.GetRepeatedGroup(0).A);

+            Assert.AreEqual(218, message.GetRepeatedNestedMessage(0).Bb);

+            Assert.AreEqual(219, message.GetRepeatedForeignMessage(0).C);

+            Assert.AreEqual(220, message.GetRepeatedImportMessage(0).D);

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetRepeatedNestedEnum(0));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetRepeatedForeignEnum(0));

+            Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetRepeatedImportEnum(0));

+

+            Assert.AreEqual("224", message.GetRepeatedStringPiece(0));

+            Assert.AreEqual("225", message.GetRepeatedCord(0));

+

+            Assert.AreEqual(301, message.GetRepeatedInt32(1));

+            Assert.AreEqual(302, message.GetRepeatedInt64(1));

+            Assert.AreEqual(303u, message.GetRepeatedUint32(1));

+            Assert.AreEqual(304u, message.GetRepeatedUint64(1));

+            Assert.AreEqual(305, message.GetRepeatedSint32(1));

+            Assert.AreEqual(306, message.GetRepeatedSint64(1));

+            Assert.AreEqual(307u, message.GetRepeatedFixed32(1));

+            Assert.AreEqual(308u, message.GetRepeatedFixed64(1));

+            Assert.AreEqual(309, message.GetRepeatedSfixed32(1));

+            Assert.AreEqual(310, message.GetRepeatedSfixed64(1));

+            Assert.AreEqual(311, message.GetRepeatedFloat(1), 0.0);

+            Assert.AreEqual(312, message.GetRepeatedDouble(1), 0.0);

+            Assert.AreEqual(false, message.GetRepeatedBool(1));

+            Assert.AreEqual("315", message.GetRepeatedString(1));

+            Assert.AreEqual(ToBytes("316"), message.GetRepeatedBytes(1));

+

+            Assert.AreEqual(317, message.GetRepeatedGroup(1).A);

+            Assert.AreEqual(318, message.GetRepeatedNestedMessage(1).Bb);

+            Assert.AreEqual(319, message.GetRepeatedForeignMessage(1).C);

+            Assert.AreEqual(320, message.GetRepeatedImportMessage(1).D);

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ, message.GetRepeatedNestedEnum(1));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetRepeatedForeignEnum(1));

+            Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetRepeatedImportEnum(1));

+

+            Assert.AreEqual("324", message.GetRepeatedStringPiece(1));

+            Assert.AreEqual("325", message.GetRepeatedCord(1));

+

+            // -----------------------------------------------------------------

+

+            Assert.IsTrue(message.HasDefaultInt32);

+            Assert.IsTrue(message.HasDefaultInt64);

+            Assert.IsTrue(message.HasDefaultUint32);

+            Assert.IsTrue(message.HasDefaultUint64);

+            Assert.IsTrue(message.HasDefaultSint32);

+            Assert.IsTrue(message.HasDefaultSint64);

+            Assert.IsTrue(message.HasDefaultFixed32);

+            Assert.IsTrue(message.HasDefaultFixed64);

+            Assert.IsTrue(message.HasDefaultSfixed32);

+            Assert.IsTrue(message.HasDefaultSfixed64);

+            Assert.IsTrue(message.HasDefaultFloat);

+            Assert.IsTrue(message.HasDefaultDouble);

+            Assert.IsTrue(message.HasDefaultBool);

+            Assert.IsTrue(message.HasDefaultString);

+            Assert.IsTrue(message.HasDefaultBytes);

+

+            Assert.IsTrue(message.HasDefaultNestedEnum);

+            Assert.IsTrue(message.HasDefaultForeignEnum);

+            Assert.IsTrue(message.HasDefaultImportEnum);

+

+            Assert.IsTrue(message.HasDefaultStringPiece);

+            Assert.IsTrue(message.HasDefaultCord);

+

+            Assert.AreEqual(401, message.DefaultInt32);

+            Assert.AreEqual(402, message.DefaultInt64);

+            Assert.AreEqual(403u, message.DefaultUint32);

+            Assert.AreEqual(404u, message.DefaultUint64);

+            Assert.AreEqual(405, message.DefaultSint32);

+            Assert.AreEqual(406, message.DefaultSint64);

+            Assert.AreEqual(407u, message.DefaultFixed32);

+            Assert.AreEqual(408u, message.DefaultFixed64);

+            Assert.AreEqual(409, message.DefaultSfixed32);

+            Assert.AreEqual(410, message.DefaultSfixed64);

+            Assert.AreEqual(411, message.DefaultFloat);

+            Assert.AreEqual(412, message.DefaultDouble);

+            Assert.AreEqual(false, message.DefaultBool);

+            Assert.AreEqual("415", message.DefaultString);

+            Assert.AreEqual(ToBytes("416"), message.DefaultBytes);

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.DefaultNestedEnum);

+            Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.DefaultForeignEnum);

+            Assert.AreEqual(ImportEnum.IMPORT_FOO, message.DefaultImportEnum);

+

+            Assert.AreEqual("424", message.DefaultStringPiece);

+            Assert.AreEqual("425", message.DefaultCord);

+        }

+

+        internal static void AssertClear(TestAllTypes message)

+        {

+            // HasBlah() should initially be false for all optional fields.

+            Assert.IsFalse(message.HasOptionalInt32);

+            Assert.IsFalse(message.HasOptionalInt64);

+            Assert.IsFalse(message.HasOptionalUint32);

+            Assert.IsFalse(message.HasOptionalUint64);

+            Assert.IsFalse(message.HasOptionalSint32);

+            Assert.IsFalse(message.HasOptionalSint64);

+            Assert.IsFalse(message.HasOptionalFixed32);

+            Assert.IsFalse(message.HasOptionalFixed64);

+            Assert.IsFalse(message.HasOptionalSfixed32);

+            Assert.IsFalse(message.HasOptionalSfixed64);

+            Assert.IsFalse(message.HasOptionalFloat);

+            Assert.IsFalse(message.HasOptionalDouble);

+            Assert.IsFalse(message.HasOptionalBool);

+            Assert.IsFalse(message.HasOptionalString);

+            Assert.IsFalse(message.HasOptionalBytes);

+

+            Assert.IsFalse(message.HasOptionalGroup);

+            Assert.IsFalse(message.HasOptionalNestedMessage);

+            Assert.IsFalse(message.HasOptionalForeignMessage);

+            Assert.IsFalse(message.HasOptionalImportMessage);

+

+            Assert.IsFalse(message.HasOptionalNestedEnum);

+            Assert.IsFalse(message.HasOptionalForeignEnum);

+            Assert.IsFalse(message.HasOptionalImportEnum);

+

+            Assert.IsFalse(message.HasOptionalStringPiece);

+            Assert.IsFalse(message.HasOptionalCord);

+

+            // Optional fields without defaults are set to zero or something like it.

+            Assert.AreEqual(0, message.OptionalInt32);

+            Assert.AreEqual(0, message.OptionalInt64);

+            Assert.AreEqual(0u, message.OptionalUint32);

+            Assert.AreEqual(0u, message.OptionalUint64);

+            Assert.AreEqual(0, message.OptionalSint32);

+            Assert.AreEqual(0, message.OptionalSint64);

+            Assert.AreEqual(0u, message.OptionalFixed32);

+            Assert.AreEqual(0u, message.OptionalFixed64);

+            Assert.AreEqual(0, message.OptionalSfixed32);

+            Assert.AreEqual(0, message.OptionalSfixed64);

+            Assert.AreEqual(0, message.OptionalFloat);

+            Assert.AreEqual(0, message.OptionalDouble);

+            Assert.AreEqual(false, message.OptionalBool);

+            Assert.AreEqual("", message.OptionalString);

+            Assert.AreEqual(ByteString.Empty, message.OptionalBytes);

+

+            // Embedded messages should also be clear.

+            Assert.IsFalse(message.OptionalGroup.HasA);

+            Assert.IsFalse(message.OptionalNestedMessage.HasBb);

+            Assert.IsFalse(message.OptionalForeignMessage.HasC);

+            Assert.IsFalse(message.OptionalImportMessage.HasD);

+

+            Assert.AreEqual(0, message.OptionalGroup.A);

+            Assert.AreEqual(0, message.OptionalNestedMessage.Bb);

+            Assert.AreEqual(0, message.OptionalForeignMessage.C);

+            Assert.AreEqual(0, message.OptionalImportMessage.D);

+

+            // Enums without defaults are set to the first value in the enum.

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.OptionalNestedEnum);

+            Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.OptionalForeignEnum);

+            Assert.AreEqual(ImportEnum.IMPORT_FOO, message.OptionalImportEnum);

+

+            Assert.AreEqual("", message.OptionalStringPiece);

+            Assert.AreEqual("", message.OptionalCord);

+

+            // Repeated fields are empty.

+            Assert.AreEqual(0, message.RepeatedInt32Count);

+            Assert.AreEqual(0, message.RepeatedInt64Count);

+            Assert.AreEqual(0, message.RepeatedUint32Count);

+            Assert.AreEqual(0, message.RepeatedUint64Count);

+            Assert.AreEqual(0, message.RepeatedSint32Count);

+            Assert.AreEqual(0, message.RepeatedSint64Count);

+            Assert.AreEqual(0, message.RepeatedFixed32Count);

+            Assert.AreEqual(0, message.RepeatedFixed64Count);

+            Assert.AreEqual(0, message.RepeatedSfixed32Count);

+            Assert.AreEqual(0, message.RepeatedSfixed64Count);

+            Assert.AreEqual(0, message.RepeatedFloatCount);

+            Assert.AreEqual(0, message.RepeatedDoubleCount);

+            Assert.AreEqual(0, message.RepeatedBoolCount);

+            Assert.AreEqual(0, message.RepeatedStringCount);

+            Assert.AreEqual(0, message.RepeatedBytesCount);

+

+            Assert.AreEqual(0, message.RepeatedGroupCount);

+            Assert.AreEqual(0, message.RepeatedNestedMessageCount);

+            Assert.AreEqual(0, message.RepeatedForeignMessageCount);

+            Assert.AreEqual(0, message.RepeatedImportMessageCount);

+            Assert.AreEqual(0, message.RepeatedNestedEnumCount);

+            Assert.AreEqual(0, message.RepeatedForeignEnumCount);

+            Assert.AreEqual(0, message.RepeatedImportEnumCount);

+

+            Assert.AreEqual(0, message.RepeatedStringPieceCount);

+            Assert.AreEqual(0, message.RepeatedCordCount);

+

+            // HasBlah() should also be false for all default fields.

+            Assert.IsFalse(message.HasDefaultInt32);

+            Assert.IsFalse(message.HasDefaultInt64);

+            Assert.IsFalse(message.HasDefaultUint32);

+            Assert.IsFalse(message.HasDefaultUint64);

+            Assert.IsFalse(message.HasDefaultSint32);

+            Assert.IsFalse(message.HasDefaultSint64);

+            Assert.IsFalse(message.HasDefaultFixed32);

+            Assert.IsFalse(message.HasDefaultFixed64);

+            Assert.IsFalse(message.HasDefaultSfixed32);

+            Assert.IsFalse(message.HasDefaultSfixed64);

+            Assert.IsFalse(message.HasDefaultFloat);

+            Assert.IsFalse(message.HasDefaultDouble);

+            Assert.IsFalse(message.HasDefaultBool);

+            Assert.IsFalse(message.HasDefaultString);

+            Assert.IsFalse(message.HasDefaultBytes);

+

+            Assert.IsFalse(message.HasDefaultNestedEnum);

+            Assert.IsFalse(message.HasDefaultForeignEnum);

+            Assert.IsFalse(message.HasDefaultImportEnum);

+

+            Assert.IsFalse(message.HasDefaultStringPiece);

+            Assert.IsFalse(message.HasDefaultCord);

+

+            // Fields with defaults have their default values (duh).

+            Assert.AreEqual(41, message.DefaultInt32);

+            Assert.AreEqual(42, message.DefaultInt64);

+            Assert.AreEqual(43u, message.DefaultUint32);

+            Assert.AreEqual(44u, message.DefaultUint64);

+            Assert.AreEqual(-45, message.DefaultSint32);

+            Assert.AreEqual(46, message.DefaultSint64);

+            Assert.AreEqual(47u, message.DefaultFixed32);

+            Assert.AreEqual(48u, message.DefaultFixed64);

+            Assert.AreEqual(49, message.DefaultSfixed32);

+            Assert.AreEqual(-50, message.DefaultSfixed64);

+            Assert.AreEqual(51.5, message.DefaultFloat, 0.0);

+            Assert.AreEqual(52e3, message.DefaultDouble, 0.0);

+            Assert.AreEqual(true, message.DefaultBool);

+            Assert.AreEqual("hello", message.DefaultString);

+            Assert.AreEqual(ToBytes("world"), message.DefaultBytes);

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.DefaultNestedEnum);

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.DefaultForeignEnum);

+            Assert.AreEqual(ImportEnum.IMPORT_BAR, message.DefaultImportEnum);

+

+            Assert.AreEqual("abc", message.DefaultStringPiece);

+            Assert.AreEqual("123", message.DefaultCord);

+        }

+

+        /// <summary>

+        /// Get a TestAllExtensions with all fields set as they would be by

+        /// SetAllExtensions(TestAllExtensions.Builder).

+        /// </summary>

+        internal static TestAllExtensions GetAllExtensionsSet()

+        {

+            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();

+            SetAllExtensions(builder);

+            return builder.Build();

+        }

+

+        public static TestPackedTypes GetPackedSet()

+        {

+            TestPackedTypes.Builder builder = TestPackedTypes.CreateBuilder();

+            SetPackedFields(builder);

+            return builder.Build();

+        }

+

+        public static TestPackedExtensions GetPackedExtensionsSet()

+        {

+            TestPackedExtensions.Builder builder = TestPackedExtensions.CreateBuilder();

+            SetPackedExtensions(builder);

+            return builder.Build();

+        }

+

+        /// <summary>

+        /// Sets every field of the specified builder to the values expected by

+        /// AssertAllExtensionsSet.

+        /// </summary>

+        internal static void SetAllExtensions(TestAllExtensions.Builder message)

+        {

+            message.SetExtension(UnitTestProtoFile.OptionalInt32Extension, 101);

+            message.SetExtension(UnitTestProtoFile.OptionalInt64Extension, 102L);

+            message.SetExtension(UnitTestProtoFile.OptionalUint32Extension, 103U);

+            message.SetExtension(UnitTestProtoFile.OptionalUint64Extension, 104UL);

+            message.SetExtension(UnitTestProtoFile.OptionalSint32Extension, 105);

+            message.SetExtension(UnitTestProtoFile.OptionalSint64Extension, 106L);

+            message.SetExtension(UnitTestProtoFile.OptionalFixed32Extension, 107U);

+            message.SetExtension(UnitTestProtoFile.OptionalFixed64Extension, 108UL);

+            message.SetExtension(UnitTestProtoFile.OptionalSfixed32Extension, 109);

+            message.SetExtension(UnitTestProtoFile.OptionalSfixed64Extension, 110L);

+            message.SetExtension(UnitTestProtoFile.OptionalFloatExtension, 111F);

+            message.SetExtension(UnitTestProtoFile.OptionalDoubleExtension, 112D);

+            message.SetExtension(UnitTestProtoFile.OptionalBoolExtension, true);

+            message.SetExtension(UnitTestProtoFile.OptionalStringExtension, "115");

+            message.SetExtension(UnitTestProtoFile.OptionalBytesExtension, ToBytes("116"));

+

+            message.SetExtension(UnitTestProtoFile.OptionalGroupExtension,

+                                 OptionalGroup_extension.CreateBuilder().SetA(117).Build());

+            message.SetExtension(UnitTestProtoFile.OptionalNestedMessageExtension,

+                                 TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(118).Build());

+            message.SetExtension(UnitTestProtoFile.OptionalForeignMessageExtension,

+                                 ForeignMessage.CreateBuilder().SetC(119).Build());

+            message.SetExtension(UnitTestProtoFile.OptionalImportMessageExtension,

+                                 ImportMessage.CreateBuilder().SetD(120).Build());

+

+            message.SetExtension(UnitTestProtoFile.OptionalNestedEnumExtension, TestAllTypes.Types.NestedEnum.BAZ);

+            message.SetExtension(UnitTestProtoFile.OptionalForeignEnumExtension, ForeignEnum.FOREIGN_BAZ);

+            message.SetExtension(UnitTestProtoFile.OptionalImportEnumExtension, ImportEnum.IMPORT_BAZ);

+

+            message.SetExtension(UnitTestProtoFile.OptionalStringPieceExtension, "124");

+            message.SetExtension(UnitTestProtoFile.OptionalCordExtension, "125");

+

+            // -----------------------------------------------------------------

+

+            message.AddExtension(UnitTestProtoFile.RepeatedInt32Extension, 201);

+            message.AddExtension(UnitTestProtoFile.RepeatedInt64Extension, 202L);

+            message.AddExtension(UnitTestProtoFile.RepeatedUint32Extension, 203U);

+            message.AddExtension(UnitTestProtoFile.RepeatedUint64Extension, 204UL);

+            message.AddExtension(UnitTestProtoFile.RepeatedSint32Extension, 205);

+            message.AddExtension(UnitTestProtoFile.RepeatedSint64Extension, 206L);

+            message.AddExtension(UnitTestProtoFile.RepeatedFixed32Extension, 207U);

+            message.AddExtension(UnitTestProtoFile.RepeatedFixed64Extension, 208UL);

+            message.AddExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 209);

+            message.AddExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 210L);

+            message.AddExtension(UnitTestProtoFile.RepeatedFloatExtension, 211F);

+            message.AddExtension(UnitTestProtoFile.RepeatedDoubleExtension, 212D);

+            message.AddExtension(UnitTestProtoFile.RepeatedBoolExtension, true);

+            message.AddExtension(UnitTestProtoFile.RepeatedStringExtension, "215");

+            message.AddExtension(UnitTestProtoFile.RepeatedBytesExtension, ToBytes("216"));

+

+            message.AddExtension(UnitTestProtoFile.RepeatedGroupExtension,

+                                 RepeatedGroup_extension.CreateBuilder().SetA(217).Build());

+            message.AddExtension(UnitTestProtoFile.RepeatedNestedMessageExtension,

+                                 TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(218).Build());

+            message.AddExtension(UnitTestProtoFile.RepeatedForeignMessageExtension,

+                                 ForeignMessage.CreateBuilder().SetC(219).Build());

+            message.AddExtension(UnitTestProtoFile.RepeatedImportMessageExtension,

+                                 ImportMessage.CreateBuilder().SetD(220).Build());

+

+            message.AddExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, TestAllTypes.Types.NestedEnum.BAR);

+            message.AddExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAR);

+            message.AddExtension(UnitTestProtoFile.RepeatedImportEnumExtension, ImportEnum.IMPORT_BAR);

+

+            message.AddExtension(UnitTestProtoFile.RepeatedStringPieceExtension, "224");

+            message.AddExtension(UnitTestProtoFile.RepeatedCordExtension, "225");

+

+            // Add a second one of each field.

+            message.AddExtension(UnitTestProtoFile.RepeatedInt32Extension, 301);

+            message.AddExtension(UnitTestProtoFile.RepeatedInt64Extension, 302L);

+            message.AddExtension(UnitTestProtoFile.RepeatedUint32Extension, 303U);

+            message.AddExtension(UnitTestProtoFile.RepeatedUint64Extension, 304UL);

+            message.AddExtension(UnitTestProtoFile.RepeatedSint32Extension, 305);

+            message.AddExtension(UnitTestProtoFile.RepeatedSint64Extension, 306L);

+            message.AddExtension(UnitTestProtoFile.RepeatedFixed32Extension, 307U);

+            message.AddExtension(UnitTestProtoFile.RepeatedFixed64Extension, 308UL);

+            message.AddExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 309);

+            message.AddExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 310L);

+            message.AddExtension(UnitTestProtoFile.RepeatedFloatExtension, 311F);

+            message.AddExtension(UnitTestProtoFile.RepeatedDoubleExtension, 312D);

+            message.AddExtension(UnitTestProtoFile.RepeatedBoolExtension, false);

+            message.AddExtension(UnitTestProtoFile.RepeatedStringExtension, "315");

+            message.AddExtension(UnitTestProtoFile.RepeatedBytesExtension, ToBytes("316"));

+

+            message.AddExtension(UnitTestProtoFile.RepeatedGroupExtension,

+                                 RepeatedGroup_extension.CreateBuilder().SetA(317).Build());

+            message.AddExtension(UnitTestProtoFile.RepeatedNestedMessageExtension,

+                                 TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(318).Build());

+            message.AddExtension(UnitTestProtoFile.RepeatedForeignMessageExtension,

+                                 ForeignMessage.CreateBuilder().SetC(319).Build());

+            message.AddExtension(UnitTestProtoFile.RepeatedImportMessageExtension,

+                                 ImportMessage.CreateBuilder().SetD(320).Build());

+

+            message.AddExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, TestAllTypes.Types.NestedEnum.BAZ);

+            message.AddExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAZ);

+            message.AddExtension(UnitTestProtoFile.RepeatedImportEnumExtension, ImportEnum.IMPORT_BAZ);

+

+            message.AddExtension(UnitTestProtoFile.RepeatedStringPieceExtension, "324");

+            message.AddExtension(UnitTestProtoFile.RepeatedCordExtension, "325");

+

+            // -----------------------------------------------------------------

+

+            message.SetExtension(UnitTestProtoFile.DefaultInt32Extension, 401);

+            message.SetExtension(UnitTestProtoFile.DefaultInt64Extension, 402L);

+            message.SetExtension(UnitTestProtoFile.DefaultUint32Extension, 403U);

+            message.SetExtension(UnitTestProtoFile.DefaultUint64Extension, 404UL);

+            message.SetExtension(UnitTestProtoFile.DefaultSint32Extension, 405);

+            message.SetExtension(UnitTestProtoFile.DefaultSint64Extension, 406L);

+            message.SetExtension(UnitTestProtoFile.DefaultFixed32Extension, 407U);

+            message.SetExtension(UnitTestProtoFile.DefaultFixed64Extension, 408UL);

+            message.SetExtension(UnitTestProtoFile.DefaultSfixed32Extension, 409);

+            message.SetExtension(UnitTestProtoFile.DefaultSfixed64Extension, 410L);

+            message.SetExtension(UnitTestProtoFile.DefaultFloatExtension, 411F);

+            message.SetExtension(UnitTestProtoFile.DefaultDoubleExtension, 412D);

+            message.SetExtension(UnitTestProtoFile.DefaultBoolExtension, false);

+            message.SetExtension(UnitTestProtoFile.DefaultStringExtension, "415");

+            message.SetExtension(UnitTestProtoFile.DefaultBytesExtension, ToBytes("416"));

+

+            message.SetExtension(UnitTestProtoFile.DefaultNestedEnumExtension, TestAllTypes.Types.NestedEnum.FOO);

+            message.SetExtension(UnitTestProtoFile.DefaultForeignEnumExtension, ForeignEnum.FOREIGN_FOO);

+            message.SetExtension(UnitTestProtoFile.DefaultImportEnumExtension, ImportEnum.IMPORT_FOO);

+

+            message.SetExtension(UnitTestProtoFile.DefaultStringPieceExtension, "424");

+            message.SetExtension(UnitTestProtoFile.DefaultCordExtension, "425");

+        }

+

+        internal static void ModifyRepeatedFields(TestAllTypes.Builder message)

+        {

+            message.SetRepeatedInt32(1, 501);

+            message.SetRepeatedInt64(1, 502);

+            message.SetRepeatedUint32(1, 503);

+            message.SetRepeatedUint64(1, 504);

+            message.SetRepeatedSint32(1, 505);

+            message.SetRepeatedSint64(1, 506);

+            message.SetRepeatedFixed32(1, 507);

+            message.SetRepeatedFixed64(1, 508);

+            message.SetRepeatedSfixed32(1, 509);

+            message.SetRepeatedSfixed64(1, 510);

+            message.SetRepeatedFloat(1, 511);

+            message.SetRepeatedDouble(1, 512);

+            message.SetRepeatedBool(1, true);

+            message.SetRepeatedString(1, "515");

+            message.SetRepeatedBytes(1, ToBytes("516"));

+

+            message.SetRepeatedGroup(1, TestAllTypes.Types.RepeatedGroup.CreateBuilder().SetA(517).Build());

+            message.SetRepeatedNestedMessage(1, TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(518).Build());

+            message.SetRepeatedForeignMessage(1, ForeignMessage.CreateBuilder().SetC(519).Build());

+            message.SetRepeatedImportMessage(1, ImportMessage.CreateBuilder().SetD(520).Build());

+

+            message.SetRepeatedNestedEnum(1, TestAllTypes.Types.NestedEnum.FOO);

+            message.SetRepeatedForeignEnum(1, ForeignEnum.FOREIGN_FOO);

+            message.SetRepeatedImportEnum(1, ImportEnum.IMPORT_FOO);

+

+            message.SetRepeatedStringPiece(1, "524");

+            message.SetRepeatedCord(1, "525");

+        }

+

+        internal static void AssertRepeatedFieldsModified(TestAllTypes message)

+        {

+            // ModifyRepeatedFields only sets the second repeated element of each

+            // field.  In addition to verifying this, we also verify that the first

+            // element and size were *not* modified.

+            Assert.AreEqual(2, message.RepeatedInt32Count);

+            Assert.AreEqual(2, message.RepeatedInt64Count);

+            Assert.AreEqual(2, message.RepeatedUint32Count);

+            Assert.AreEqual(2, message.RepeatedUint64Count);

+            Assert.AreEqual(2, message.RepeatedSint32Count);

+            Assert.AreEqual(2, message.RepeatedSint64Count);

+            Assert.AreEqual(2, message.RepeatedFixed32Count);

+            Assert.AreEqual(2, message.RepeatedFixed64Count);

+            Assert.AreEqual(2, message.RepeatedSfixed32Count);

+            Assert.AreEqual(2, message.RepeatedSfixed64Count);

+            Assert.AreEqual(2, message.RepeatedFloatCount);

+            Assert.AreEqual(2, message.RepeatedDoubleCount);

+            Assert.AreEqual(2, message.RepeatedBoolCount);

+            Assert.AreEqual(2, message.RepeatedStringCount);

+            Assert.AreEqual(2, message.RepeatedBytesCount);

+

+            Assert.AreEqual(2, message.RepeatedGroupCount);

+            Assert.AreEqual(2, message.RepeatedNestedMessageCount);

+            Assert.AreEqual(2, message.RepeatedForeignMessageCount);

+            Assert.AreEqual(2, message.RepeatedImportMessageCount);

+            Assert.AreEqual(2, message.RepeatedNestedEnumCount);

+            Assert.AreEqual(2, message.RepeatedForeignEnumCount);

+            Assert.AreEqual(2, message.RepeatedImportEnumCount);

+

+            Assert.AreEqual(2, message.RepeatedStringPieceCount);

+            Assert.AreEqual(2, message.RepeatedCordCount);

+

+            Assert.AreEqual(201, message.GetRepeatedInt32(0));

+            Assert.AreEqual(202L, message.GetRepeatedInt64(0));

+            Assert.AreEqual(203U, message.GetRepeatedUint32(0));

+            Assert.AreEqual(204UL, message.GetRepeatedUint64(0));

+            Assert.AreEqual(205, message.GetRepeatedSint32(0));

+            Assert.AreEqual(206L, message.GetRepeatedSint64(0));

+            Assert.AreEqual(207U, message.GetRepeatedFixed32(0));

+            Assert.AreEqual(208UL, message.GetRepeatedFixed64(0));

+            Assert.AreEqual(209, message.GetRepeatedSfixed32(0));

+            Assert.AreEqual(210L, message.GetRepeatedSfixed64(0));

+            Assert.AreEqual(211F, message.GetRepeatedFloat(0));

+            Assert.AreEqual(212D, message.GetRepeatedDouble(0));

+            Assert.AreEqual(true, message.GetRepeatedBool(0));

+            Assert.AreEqual("215", message.GetRepeatedString(0));

+            Assert.AreEqual(ToBytes("216"), message.GetRepeatedBytes(0));

+

+            Assert.AreEqual(217, message.GetRepeatedGroup(0).A);

+            Assert.AreEqual(218, message.GetRepeatedNestedMessage(0).Bb);

+            Assert.AreEqual(219, message.GetRepeatedForeignMessage(0).C);

+            Assert.AreEqual(220, message.GetRepeatedImportMessage(0).D);

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, message.GetRepeatedNestedEnum(0));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetRepeatedForeignEnum(0));

+            Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetRepeatedImportEnum(0));

+

+            Assert.AreEqual("224", message.GetRepeatedStringPiece(0));

+            Assert.AreEqual("225", message.GetRepeatedCord(0));

+

+            // Actually verify the second (modified) elements now.

+            Assert.AreEqual(501, message.GetRepeatedInt32(1));

+            Assert.AreEqual(502L, message.GetRepeatedInt64(1));

+            Assert.AreEqual(503U, message.GetRepeatedUint32(1));

+            Assert.AreEqual(504UL, message.GetRepeatedUint64(1));

+            Assert.AreEqual(505, message.GetRepeatedSint32(1));

+            Assert.AreEqual(506L, message.GetRepeatedSint64(1));

+            Assert.AreEqual(507U, message.GetRepeatedFixed32(1));

+            Assert.AreEqual(508UL, message.GetRepeatedFixed64(1));

+            Assert.AreEqual(509, message.GetRepeatedSfixed32(1));

+            Assert.AreEqual(510L, message.GetRepeatedSfixed64(1));

+            Assert.AreEqual(511F, message.GetRepeatedFloat(1));

+            Assert.AreEqual(512D, message.GetRepeatedDouble(1));

+            Assert.AreEqual(true, message.GetRepeatedBool(1));

+            Assert.AreEqual("515", message.GetRepeatedString(1));

+            Assert.AreEqual(ToBytes("516"), message.GetRepeatedBytes(1));

+

+            Assert.AreEqual(517, message.GetRepeatedGroup(1).A);

+            Assert.AreEqual(518, message.GetRepeatedNestedMessage(1).Bb);

+            Assert.AreEqual(519, message.GetRepeatedForeignMessage(1).C);

+            Assert.AreEqual(520, message.GetRepeatedImportMessage(1).D);

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO, message.GetRepeatedNestedEnum(1));

+            Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.GetRepeatedForeignEnum(1));

+            Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetRepeatedImportEnum(1));

+

+            Assert.AreEqual("524", message.GetRepeatedStringPiece(1));

+            Assert.AreEqual("525", message.GetRepeatedCord(1));

+        }

+

+        /// <summary>

+        /// Helper to assert that sequences are equal.

+        /// </summary>

+        internal static void AssertEqual<T>(IEnumerable<T> first, IEnumerable<T> second)

+        {

+            using (IEnumerator<T> firstEnumerator = first.GetEnumerator())

+            {

+                foreach (T secondElement in second)

+                {

+                    Assert.IsTrue(firstEnumerator.MoveNext(), "First enumerator ran out of elements too early.");

+                    Assert.AreEqual(firstEnumerator.Current, secondElement);

+                }

+                Assert.IsFalse(firstEnumerator.MoveNext(), "Second enumerator ran out of elements too early.");

+            }

+        }

+

+        internal static void AssertEqualBytes(byte[] expected, byte[] actual)

+        {

+            Assert.AreEqual(ByteString.CopyFrom(expected), ByteString.CopyFrom(actual));

+        }

+

+        internal static void AssertAllExtensionsSet(TestAllExtensions message)

+        {

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalInt32Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalInt64Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalUint32Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalUint64Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSint32Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSint64Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFixed32Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFixed64Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSfixed32Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalSfixed64Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalFloatExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalDoubleExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalBoolExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalStringExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalBytesExtension));

+

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalGroupExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalNestedMessageExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalForeignMessageExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalImportMessageExtension));

+

+            Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalGroupExtension).HasA);

+            Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension).HasBb);

+            Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).HasC);

+            Assert.IsTrue(message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension).HasD);

+

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalNestedEnumExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalForeignEnumExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalImportEnumExtension));

+

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalStringPieceExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.OptionalCordExtension));

+

+            Assert.AreEqual(101, message.GetExtension(UnitTestProtoFile.OptionalInt32Extension));

+            Assert.AreEqual(102L, message.GetExtension(UnitTestProtoFile.OptionalInt64Extension));

+            Assert.AreEqual(103U, message.GetExtension(UnitTestProtoFile.OptionalUint32Extension));

+            Assert.AreEqual(104UL, message.GetExtension(UnitTestProtoFile.OptionalUint64Extension));

+            Assert.AreEqual(105, message.GetExtension(UnitTestProtoFile.OptionalSint32Extension));

+            Assert.AreEqual(106L, message.GetExtension(UnitTestProtoFile.OptionalSint64Extension));

+            Assert.AreEqual(107U, message.GetExtension(UnitTestProtoFile.OptionalFixed32Extension));

+            Assert.AreEqual(108UL, message.GetExtension(UnitTestProtoFile.OptionalFixed64Extension));

+            Assert.AreEqual(109, message.GetExtension(UnitTestProtoFile.OptionalSfixed32Extension));

+            Assert.AreEqual(110L, message.GetExtension(UnitTestProtoFile.OptionalSfixed64Extension));

+            Assert.AreEqual(111F, message.GetExtension(UnitTestProtoFile.OptionalFloatExtension));

+            Assert.AreEqual(112D, message.GetExtension(UnitTestProtoFile.OptionalDoubleExtension));

+            Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.OptionalBoolExtension));

+            Assert.AreEqual("115", message.GetExtension(UnitTestProtoFile.OptionalStringExtension));

+            Assert.AreEqual(ToBytes("116"), message.GetExtension(UnitTestProtoFile.OptionalBytesExtension));

+

+            Assert.AreEqual(117, message.GetExtension(UnitTestProtoFile.OptionalGroupExtension).A);

+            Assert.AreEqual(118, message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension).Bb);

+            Assert.AreEqual(119, message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).C);

+            Assert.AreEqual(120, message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension).D);

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ,

+                            message.GetExtension(UnitTestProtoFile.OptionalNestedEnumExtension));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ,

+                            message.GetExtension(UnitTestProtoFile.OptionalForeignEnumExtension));

+            Assert.AreEqual(ImportEnum.IMPORT_BAZ, message.GetExtension(UnitTestProtoFile.OptionalImportEnumExtension));

+

+            Assert.AreEqual("124", message.GetExtension(UnitTestProtoFile.OptionalStringPieceExtension));

+            Assert.AreEqual("125", message.GetExtension(UnitTestProtoFile.OptionalCordExtension));

+

+            // -----------------------------------------------------------------

+

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFloatExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBoolExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBytesExtension));

+

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedGroupExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedMessageExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignMessageExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportMessageExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedEnumExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignEnumExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportEnumExtension));

+

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringPieceExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedCordExtension));

+

+            Assert.AreEqual(201, message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension, 0));

+            Assert.AreEqual(202L, message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension, 0));

+            Assert.AreEqual(203U, message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension, 0));

+            Assert.AreEqual(204UL, message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension, 0));

+            Assert.AreEqual(205, message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension, 0));

+            Assert.AreEqual(206L, message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension, 0));

+            Assert.AreEqual(207U, message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 0));

+            Assert.AreEqual(208UL, message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 0));

+            Assert.AreEqual(209, message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 0));

+            Assert.AreEqual(210L, message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 0));

+            Assert.AreEqual(211F, message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension, 0));

+            Assert.AreEqual(212D, message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 0));

+            Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension, 0));

+            Assert.AreEqual("215", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension, 0));

+            Assert.AreEqual(ToBytes("216"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 0));

+

+            Assert.AreEqual(217, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension, 0).A);

+            Assert.AreEqual(218, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, 0).Bb);

+            Assert.AreEqual(219, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 0).C);

+            Assert.AreEqual(220, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension, 0).D);

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR,

+                            message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 0));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAR,

+                            message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 0));

+            Assert.AreEqual(ImportEnum.IMPORT_BAR,

+                            message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 0));

+

+            Assert.AreEqual("224", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 0));

+            Assert.AreEqual("225", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 0));

+

+            Assert.AreEqual(301, message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension, 1));

+            Assert.AreEqual(302L, message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension, 1));

+            Assert.AreEqual(303U, message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension, 1));

+            Assert.AreEqual(304UL, message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension, 1));

+            Assert.AreEqual(305, message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension, 1));

+            Assert.AreEqual(306L, message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension, 1));

+            Assert.AreEqual(307U, message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 1));

+            Assert.AreEqual(308UL, message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 1));

+            Assert.AreEqual(309, message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 1));

+            Assert.AreEqual(310L, message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 1));

+            Assert.AreEqual(311F, message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension, 1));

+            Assert.AreEqual(312D, message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 1));

+            Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension, 1));

+            Assert.AreEqual("315", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension, 1));

+            Assert.AreEqual(ToBytes("316"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 1));

+

+            Assert.AreEqual(317, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension, 1).A);

+            Assert.AreEqual(318, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, 1).Bb);

+            Assert.AreEqual(319, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 1).C);

+            Assert.AreEqual(320, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension, 1).D);

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAZ,

+                            message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 1));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ,

+                            message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 1));

+            Assert.AreEqual(ImportEnum.IMPORT_BAZ,

+                            message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 1));

+

+            Assert.AreEqual("324", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 1));

+            Assert.AreEqual("325", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 1));

+

+            // -----------------------------------------------------------------

+

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultInt32Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultInt64Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultUint32Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultUint64Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSint32Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSint64Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFixed32Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFixed64Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSfixed32Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultSfixed64Extension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultFloatExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultDoubleExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultBoolExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultStringExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultBytesExtension));

+

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultNestedEnumExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultForeignEnumExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultImportEnumExtension));

+

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultStringPieceExtension));

+            Assert.IsTrue(message.HasExtension(UnitTestProtoFile.DefaultCordExtension));

+

+            Assert.AreEqual(401, message.GetExtension(UnitTestProtoFile.DefaultInt32Extension));

+            Assert.AreEqual(402L, message.GetExtension(UnitTestProtoFile.DefaultInt64Extension));

+            Assert.AreEqual(403U, message.GetExtension(UnitTestProtoFile.DefaultUint32Extension));

+            Assert.AreEqual(404UL, message.GetExtension(UnitTestProtoFile.DefaultUint64Extension));

+            Assert.AreEqual(405, message.GetExtension(UnitTestProtoFile.DefaultSint32Extension));

+            Assert.AreEqual(406L, message.GetExtension(UnitTestProtoFile.DefaultSint64Extension));

+            Assert.AreEqual(407U, message.GetExtension(UnitTestProtoFile.DefaultFixed32Extension));

+            Assert.AreEqual(408UL, message.GetExtension(UnitTestProtoFile.DefaultFixed64Extension));

+            Assert.AreEqual(409, message.GetExtension(UnitTestProtoFile.DefaultSfixed32Extension));

+            Assert.AreEqual(410L, message.GetExtension(UnitTestProtoFile.DefaultSfixed64Extension));

+            Assert.AreEqual(411F, message.GetExtension(UnitTestProtoFile.DefaultFloatExtension));

+            Assert.AreEqual(412D, message.GetExtension(UnitTestProtoFile.DefaultDoubleExtension));

+            Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.DefaultBoolExtension));

+            Assert.AreEqual("415", message.GetExtension(UnitTestProtoFile.DefaultStringExtension));

+            Assert.AreEqual(ToBytes("416"), message.GetExtension(UnitTestProtoFile.DefaultBytesExtension));

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,

+                            message.GetExtension(UnitTestProtoFile.DefaultNestedEnumExtension));

+            Assert.AreEqual(ForeignEnum.FOREIGN_FOO, message.GetExtension(UnitTestProtoFile.DefaultForeignEnumExtension));

+            Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetExtension(UnitTestProtoFile.DefaultImportEnumExtension));

+

+            Assert.AreEqual("424", message.GetExtension(UnitTestProtoFile.DefaultStringPieceExtension));

+            Assert.AreEqual("425", message.GetExtension(UnitTestProtoFile.DefaultCordExtension));

+        }

+

+        /// <summary>

+        /// Modifies the repeated extensions of the given message to contain the values

+        /// expected by AssertRepeatedExtensionsModified.

+        /// </summary>

+        internal static void ModifyRepeatedExtensions(TestAllExtensions.Builder message)

+        {

+            message.SetExtension(UnitTestProtoFile.RepeatedInt32Extension, 1, 501);

+            message.SetExtension(UnitTestProtoFile.RepeatedInt64Extension, 1, 502L);

+            message.SetExtension(UnitTestProtoFile.RepeatedUint32Extension, 1, 503U);

+            message.SetExtension(UnitTestProtoFile.RepeatedUint64Extension, 1, 504UL);

+            message.SetExtension(UnitTestProtoFile.RepeatedSint32Extension, 1, 505);

+            message.SetExtension(UnitTestProtoFile.RepeatedSint64Extension, 1, 506L);

+            message.SetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 1, 507U);

+            message.SetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 1, 508UL);

+            message.SetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 1, 509);

+            message.SetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 1, 510L);

+            message.SetExtension(UnitTestProtoFile.RepeatedFloatExtension, 1, 511F);

+            message.SetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 1, 512D);

+            message.SetExtension(UnitTestProtoFile.RepeatedBoolExtension, 1, true);

+            message.SetExtension(UnitTestProtoFile.RepeatedStringExtension, 1, "515");

+            message.SetExtension(UnitTestProtoFile.RepeatedBytesExtension, 1, ToBytes("516"));

+

+            message.SetExtension(UnitTestProtoFile.RepeatedGroupExtension, 1,

+                                 RepeatedGroup_extension.CreateBuilder().SetA(517).Build());

+            message.SetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, 1,

+                                 TestAllTypes.Types.NestedMessage.CreateBuilder().SetBb(518).Build());

+            message.SetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 1,

+                                 ForeignMessage.CreateBuilder().SetC(519).Build());

+            message.SetExtension(UnitTestProtoFile.RepeatedImportMessageExtension, 1,

+                                 ImportMessage.CreateBuilder().SetD(520).Build());

+

+            message.SetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 1, TestAllTypes.Types.NestedEnum.FOO);

+            message.SetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 1, ForeignEnum.FOREIGN_FOO);

+            message.SetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 1, ImportEnum.IMPORT_FOO);

+

+            message.SetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 1, "524");

+            message.SetExtension(UnitTestProtoFile.RepeatedCordExtension, 1, "525");

+        }

+

+        /// <summary>

+        /// Asserts that all repeated extensions are set to the values assigned by

+        /// SetAllExtensions follwed by ModifyRepeatedExtensions.

+        /// </summary>

+        internal static void AssertRepeatedExtensionsModified(TestAllExtensions message)

+        {

+            // ModifyRepeatedFields only sets the second repeated element of each

+            // field.  In addition to verifying this, we also verify that the first

+            // element and size were *not* modified.

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedFloatExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBoolExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedBytesExtension));

+

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedGroupExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedMessageExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignMessageExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportMessageExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedEnumExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignEnumExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportEnumExtension));

+

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringPieceExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.RepeatedCordExtension));

+

+            Assert.AreEqual(201, message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension, 0));

+            Assert.AreEqual(202L, message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension, 0));

+            Assert.AreEqual(203U, message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension, 0));

+            Assert.AreEqual(204UL, message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension, 0));

+            Assert.AreEqual(205, message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension, 0));

+            Assert.AreEqual(206L, message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension, 0));

+            Assert.AreEqual(207U, message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 0));

+            Assert.AreEqual(208UL, message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 0));

+            Assert.AreEqual(209, message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 0));

+            Assert.AreEqual(210L, message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 0));

+            Assert.AreEqual(211F, message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension, 0));

+            Assert.AreEqual(212D, message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 0));

+            Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension, 0));

+            Assert.AreEqual("215", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension, 0));

+            Assert.AreEqual(ToBytes("216"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 0));

+

+            Assert.AreEqual(217, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension, 0).A);

+            Assert.AreEqual(218, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, 0).Bb);

+            Assert.AreEqual(219, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 0).C);

+            Assert.AreEqual(220, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension, 0).D);

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR,

+                            message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 0));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAR,

+                            message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 0));

+            Assert.AreEqual(ImportEnum.IMPORT_BAR,

+                            message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 0));

+

+            Assert.AreEqual("224", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 0));

+            Assert.AreEqual("225", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 0));

+

+            // Actually verify the second (modified) elements now.

+            Assert.AreEqual(501, message.GetExtension(UnitTestProtoFile.RepeatedInt32Extension, 1));

+            Assert.AreEqual(502L, message.GetExtension(UnitTestProtoFile.RepeatedInt64Extension, 1));

+            Assert.AreEqual(503U, message.GetExtension(UnitTestProtoFile.RepeatedUint32Extension, 1));

+            Assert.AreEqual(504UL, message.GetExtension(UnitTestProtoFile.RepeatedUint64Extension, 1));

+            Assert.AreEqual(505, message.GetExtension(UnitTestProtoFile.RepeatedSint32Extension, 1));

+            Assert.AreEqual(506L, message.GetExtension(UnitTestProtoFile.RepeatedSint64Extension, 1));

+            Assert.AreEqual(507U, message.GetExtension(UnitTestProtoFile.RepeatedFixed32Extension, 1));

+            Assert.AreEqual(508UL, message.GetExtension(UnitTestProtoFile.RepeatedFixed64Extension, 1));

+            Assert.AreEqual(509, message.GetExtension(UnitTestProtoFile.RepeatedSfixed32Extension, 1));

+            Assert.AreEqual(510L, message.GetExtension(UnitTestProtoFile.RepeatedSfixed64Extension, 1));

+            Assert.AreEqual(511F, message.GetExtension(UnitTestProtoFile.RepeatedFloatExtension, 1));

+            Assert.AreEqual(512D, message.GetExtension(UnitTestProtoFile.RepeatedDoubleExtension, 1));

+            Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.RepeatedBoolExtension, 1));

+            Assert.AreEqual("515", message.GetExtension(UnitTestProtoFile.RepeatedStringExtension, 1));

+            Assert.AreEqual(ToBytes("516"), message.GetExtension(UnitTestProtoFile.RepeatedBytesExtension, 1));

+

+            Assert.AreEqual(517, message.GetExtension(UnitTestProtoFile.RepeatedGroupExtension, 1).A);

+            Assert.AreEqual(518, message.GetExtension(UnitTestProtoFile.RepeatedNestedMessageExtension, 1).Bb);

+            Assert.AreEqual(519, message.GetExtension(UnitTestProtoFile.RepeatedForeignMessageExtension, 1).C);

+            Assert.AreEqual(520, message.GetExtension(UnitTestProtoFile.RepeatedImportMessageExtension, 1).D);

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,

+                            message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension, 1));

+            Assert.AreEqual(ForeignEnum.FOREIGN_FOO,

+                            message.GetExtension(UnitTestProtoFile.RepeatedForeignEnumExtension, 1));

+            Assert.AreEqual(ImportEnum.IMPORT_FOO,

+                            message.GetExtension(UnitTestProtoFile.RepeatedImportEnumExtension, 1));

+

+            Assert.AreEqual("524", message.GetExtension(UnitTestProtoFile.RepeatedStringPieceExtension, 1));

+            Assert.AreEqual("525", message.GetExtension(UnitTestProtoFile.RepeatedCordExtension, 1));

+        }

+

+        internal static void AssertExtensionsClear(TestAllExtensions message)

+        {

+            // HasBlah() should initially be false for all optional fields.

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalInt32Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalInt64Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalUint32Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalUint64Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalSint32Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalSint64Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalFixed32Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalFixed64Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalSfixed32Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalSfixed64Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalFloatExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalDoubleExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalBoolExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalStringExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalBytesExtension));

+

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalGroupExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalNestedMessageExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalForeignMessageExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalImportMessageExtension));

+

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalNestedEnumExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalForeignEnumExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalImportEnumExtension));

+

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalStringPieceExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.OptionalCordExtension));

+

+            // Optional fields without defaults are set to zero or something like it.

+            Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalInt32Extension));

+            Assert.AreEqual(0L, message.GetExtension(UnitTestProtoFile.OptionalInt64Extension));

+            Assert.AreEqual(0U, message.GetExtension(UnitTestProtoFile.OptionalUint32Extension));

+            Assert.AreEqual(0UL, message.GetExtension(UnitTestProtoFile.OptionalUint64Extension));

+            Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalSint32Extension));

+            Assert.AreEqual(0L, message.GetExtension(UnitTestProtoFile.OptionalSint64Extension));

+            Assert.AreEqual(0U, message.GetExtension(UnitTestProtoFile.OptionalFixed32Extension));

+            Assert.AreEqual(0UL, message.GetExtension(UnitTestProtoFile.OptionalFixed64Extension));

+            Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalSfixed32Extension));

+            Assert.AreEqual(0L, message.GetExtension(UnitTestProtoFile.OptionalSfixed64Extension));

+            Assert.AreEqual(0F, message.GetExtension(UnitTestProtoFile.OptionalFloatExtension));

+            Assert.AreEqual(0D, message.GetExtension(UnitTestProtoFile.OptionalDoubleExtension));

+            Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.OptionalBoolExtension));

+            Assert.AreEqual("", message.GetExtension(UnitTestProtoFile.OptionalStringExtension));

+            Assert.AreEqual(ByteString.Empty, message.GetExtension(UnitTestProtoFile.OptionalBytesExtension));

+

+            // Embedded messages should also be clear.

+            Assert.IsFalse(message.GetExtension(UnitTestProtoFile.OptionalGroupExtension).HasA);

+            Assert.IsFalse(message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension).HasBb);

+            Assert.IsFalse(message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).HasC);

+            Assert.IsFalse(message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension).HasD);

+

+            Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalGroupExtension).A);

+            Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalNestedMessageExtension).Bb);

+            Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalForeignMessageExtension).C);

+            Assert.AreEqual(0, message.GetExtension(UnitTestProtoFile.OptionalImportMessageExtension).D);

+

+            // Enums without defaults are set to the first value in the enum.

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.FOO,

+                            message.GetExtension(UnitTestProtoFile.OptionalNestedEnumExtension));

+            Assert.AreEqual(ForeignEnum.FOREIGN_FOO,

+                            message.GetExtension(UnitTestProtoFile.OptionalForeignEnumExtension));

+            Assert.AreEqual(ImportEnum.IMPORT_FOO, message.GetExtension(UnitTestProtoFile.OptionalImportEnumExtension));

+

+            Assert.AreEqual("", message.GetExtension(UnitTestProtoFile.OptionalStringPieceExtension));

+            Assert.AreEqual("", message.GetExtension(UnitTestProtoFile.OptionalCordExtension));

+

+            // Repeated fields are empty.

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt32Extension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedInt64Extension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint32Extension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedUint64Extension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint32Extension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedSint64Extension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed32Extension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedFixed64Extension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed32Extension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedSfixed64Extension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedFloatExtension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedBoolExtension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringExtension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedBytesExtension));

+

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedGroupExtension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedMessageExtension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignMessageExtension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportMessageExtension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedNestedEnumExtension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedForeignEnumExtension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedImportEnumExtension));

+

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedStringPieceExtension));

+            Assert.AreEqual(0, message.GetExtensionCount(UnitTestProtoFile.RepeatedCordExtension));

+

+            // HasBlah() should also be false for all default fields.

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultInt32Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultInt64Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultUint32Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultUint64Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultSint32Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultSint64Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultFixed32Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultFixed64Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultSfixed32Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultSfixed64Extension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultFloatExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultDoubleExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultBoolExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultStringExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultBytesExtension));

+

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultNestedEnumExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultForeignEnumExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultImportEnumExtension));

+

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultStringPieceExtension));

+            Assert.IsFalse(message.HasExtension(UnitTestProtoFile.DefaultCordExtension));

+

+            // Fields with defaults have their default values (duh).

+            Assert.AreEqual(41, message.GetExtension(UnitTestProtoFile.DefaultInt32Extension));

+            Assert.AreEqual(42L, message.GetExtension(UnitTestProtoFile.DefaultInt64Extension));

+            Assert.AreEqual(43U, message.GetExtension(UnitTestProtoFile.DefaultUint32Extension));

+            Assert.AreEqual(44UL, message.GetExtension(UnitTestProtoFile.DefaultUint64Extension));

+            Assert.AreEqual(-45, message.GetExtension(UnitTestProtoFile.DefaultSint32Extension));

+            Assert.AreEqual(46L, message.GetExtension(UnitTestProtoFile.DefaultSint64Extension));

+            Assert.AreEqual(47U, message.GetExtension(UnitTestProtoFile.DefaultFixed32Extension));

+            Assert.AreEqual(48UL, message.GetExtension(UnitTestProtoFile.DefaultFixed64Extension));

+            Assert.AreEqual(49, message.GetExtension(UnitTestProtoFile.DefaultSfixed32Extension));

+            Assert.AreEqual(-50L, message.GetExtension(UnitTestProtoFile.DefaultSfixed64Extension));

+            Assert.AreEqual(51.5F, message.GetExtension(UnitTestProtoFile.DefaultFloatExtension));

+            Assert.AreEqual(52e3D, message.GetExtension(UnitTestProtoFile.DefaultDoubleExtension));

+            Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.DefaultBoolExtension));

+            Assert.AreEqual("hello", message.GetExtension(UnitTestProtoFile.DefaultStringExtension));

+            Assert.AreEqual(ToBytes("world"), message.GetExtension(UnitTestProtoFile.DefaultBytesExtension));

+

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR,

+                            message.GetExtension(UnitTestProtoFile.DefaultNestedEnumExtension));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetExtension(UnitTestProtoFile.DefaultForeignEnumExtension));

+            Assert.AreEqual(ImportEnum.IMPORT_BAR, message.GetExtension(UnitTestProtoFile.DefaultImportEnumExtension));

+

+            Assert.AreEqual("abc", message.GetExtension(UnitTestProtoFile.DefaultStringPieceExtension));

+            Assert.AreEqual("123", message.GetExtension(UnitTestProtoFile.DefaultCordExtension));

+        }

+

+        /// <summary>

+        /// Set every field of the specified message to a unique value.

+        /// </summary>

+        public static void SetPackedFields(TestPackedTypes.Builder message)

+        {

+            message.AddPackedInt32(601);

+            message.AddPackedInt64(602);

+            message.AddPackedUint32(603);

+            message.AddPackedUint64(604);

+            message.AddPackedSint32(605);

+            message.AddPackedSint64(606);

+            message.AddPackedFixed32(607);

+            message.AddPackedFixed64(608);

+            message.AddPackedSfixed32(609);

+            message.AddPackedSfixed64(610);

+            message.AddPackedFloat(611);

+            message.AddPackedDouble(612);

+            message.AddPackedBool(true);

+            message.AddPackedEnum(ForeignEnum.FOREIGN_BAR);

+            // Add a second one of each field.

+            message.AddPackedInt32(701);

+            message.AddPackedInt64(702);

+            message.AddPackedUint32(703);

+            message.AddPackedUint64(704);

+            message.AddPackedSint32(705);

+            message.AddPackedSint64(706);

+            message.AddPackedFixed32(707);

+            message.AddPackedFixed64(708);

+            message.AddPackedSfixed32(709);

+            message.AddPackedSfixed64(710);

+            message.AddPackedFloat(711);

+            message.AddPackedDouble(712);

+            message.AddPackedBool(false);

+            message.AddPackedEnum(ForeignEnum.FOREIGN_BAZ);

+        }

+

+        /// <summary>

+        /// Asserts that all the fields of the specified message are set to the values assigned

+        /// in SetPackedFields.

+        /// </summary>

+        public static void AssertPackedFieldsSet(TestPackedTypes message)

+        {

+            Assert.AreEqual(2, message.PackedInt32Count);

+            Assert.AreEqual(2, message.PackedInt64Count);

+            Assert.AreEqual(2, message.PackedUint32Count);

+            Assert.AreEqual(2, message.PackedUint64Count);

+            Assert.AreEqual(2, message.PackedSint32Count);

+            Assert.AreEqual(2, message.PackedSint64Count);

+            Assert.AreEqual(2, message.PackedFixed32Count);

+            Assert.AreEqual(2, message.PackedFixed64Count);

+            Assert.AreEqual(2, message.PackedSfixed32Count);

+            Assert.AreEqual(2, message.PackedSfixed64Count);

+            Assert.AreEqual(2, message.PackedFloatCount);

+            Assert.AreEqual(2, message.PackedDoubleCount);

+            Assert.AreEqual(2, message.PackedBoolCount);

+            Assert.AreEqual(2, message.PackedEnumCount);

+            Assert.AreEqual(601, message.GetPackedInt32(0));

+            Assert.AreEqual(602, message.GetPackedInt64(0));

+            Assert.AreEqual(603u, message.GetPackedUint32(0));

+            Assert.AreEqual(604u, message.GetPackedUint64(0));

+            Assert.AreEqual(605, message.GetPackedSint32(0));

+            Assert.AreEqual(606, message.GetPackedSint64(0));

+            Assert.AreEqual(607u, message.GetPackedFixed32(0));

+            Assert.AreEqual(608u, message.GetPackedFixed64(0));

+            Assert.AreEqual(609, message.GetPackedSfixed32(0));

+            Assert.AreEqual(610, message.GetPackedSfixed64(0));

+            Assert.AreEqual(611, message.GetPackedFloat(0), 0.0);

+            Assert.AreEqual(612, message.GetPackedDouble(0), 0.0);

+            Assert.AreEqual(true, message.GetPackedBool(0));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetPackedEnum(0));

+            Assert.AreEqual(701, message.GetPackedInt32(1));

+            Assert.AreEqual(702, message.GetPackedInt64(1));

+            Assert.AreEqual(703u, message.GetPackedUint32(1));

+            Assert.AreEqual(704u, message.GetPackedUint64(1));

+            Assert.AreEqual(705, message.GetPackedSint32(1));

+            Assert.AreEqual(706, message.GetPackedSint64(1));

+            Assert.AreEqual(707u, message.GetPackedFixed32(1));

+            Assert.AreEqual(708u, message.GetPackedFixed64(1));

+            Assert.AreEqual(709, message.GetPackedSfixed32(1));

+            Assert.AreEqual(710, message.GetPackedSfixed64(1));

+            Assert.AreEqual(711, message.GetPackedFloat(1), 0.0);

+            Assert.AreEqual(712, message.GetPackedDouble(1), 0.0);

+            Assert.AreEqual(false, message.GetPackedBool(1));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetPackedEnum(1));

+        }

+        /// <summary>

+        /// Asserts that all the fields of the specified message are set to the values assigned

+        /// in SetPackedFields.

+        /// </summary>

+        public static void AssertUnpackedFieldsSet(TestUnpackedTypes message)

+        {

+            Assert.AreEqual(2, message.UnpackedInt32Count);

+            Assert.AreEqual(2, message.UnpackedInt64Count);

+            Assert.AreEqual(2, message.UnpackedUint32Count);

+            Assert.AreEqual(2, message.UnpackedUint64Count);

+            Assert.AreEqual(2, message.UnpackedSint32Count);

+            Assert.AreEqual(2, message.UnpackedSint64Count);

+            Assert.AreEqual(2, message.UnpackedFixed32Count);

+            Assert.AreEqual(2, message.UnpackedFixed64Count);

+            Assert.AreEqual(2, message.UnpackedSfixed32Count);

+            Assert.AreEqual(2, message.UnpackedSfixed64Count);

+            Assert.AreEqual(2, message.UnpackedFloatCount);

+            Assert.AreEqual(2, message.UnpackedDoubleCount);

+            Assert.AreEqual(2, message.UnpackedBoolCount);

+            Assert.AreEqual(2, message.UnpackedEnumCount);

+            Assert.AreEqual(601, message.GetUnpackedInt32(0));

+            Assert.AreEqual(602, message.GetUnpackedInt64(0));

+            Assert.AreEqual(603u, message.GetUnpackedUint32(0));

+            Assert.AreEqual(604u, message.GetUnpackedUint64(0));

+            Assert.AreEqual(605, message.GetUnpackedSint32(0));

+            Assert.AreEqual(606, message.GetUnpackedSint64(0));

+            Assert.AreEqual(607u, message.GetUnpackedFixed32(0));

+            Assert.AreEqual(608u, message.GetUnpackedFixed64(0));

+            Assert.AreEqual(609, message.GetUnpackedSfixed32(0));

+            Assert.AreEqual(610, message.GetUnpackedSfixed64(0));

+            Assert.AreEqual(611, message.GetUnpackedFloat(0), 0.0);

+            Assert.AreEqual(612, message.GetUnpackedDouble(0), 0.0);

+            Assert.AreEqual(true, message.GetUnpackedBool(0));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAR, message.GetUnpackedEnum(0));

+            Assert.AreEqual(701, message.GetUnpackedInt32(1));

+            Assert.AreEqual(702, message.GetUnpackedInt64(1));

+            Assert.AreEqual(703u, message.GetUnpackedUint32(1));

+            Assert.AreEqual(704u, message.GetUnpackedUint64(1));

+            Assert.AreEqual(705, message.GetUnpackedSint32(1));

+            Assert.AreEqual(706, message.GetUnpackedSint64(1));

+            Assert.AreEqual(707u, message.GetUnpackedFixed32(1));

+            Assert.AreEqual(708u, message.GetUnpackedFixed64(1));

+            Assert.AreEqual(709, message.GetUnpackedSfixed32(1));

+            Assert.AreEqual(710, message.GetUnpackedSfixed64(1));

+            Assert.AreEqual(711, message.GetUnpackedFloat(1), 0.0);

+            Assert.AreEqual(712, message.GetUnpackedDouble(1), 0.0);

+            Assert.AreEqual(false, message.GetUnpackedBool(1));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetUnpackedEnum(1));

+        }

+

+        public static void SetPackedExtensions(TestPackedExtensions.Builder message)

+        {

+            message.AddExtension(UnitTestProtoFile.PackedInt32Extension, 601);

+            message.AddExtension(UnitTestProtoFile.PackedInt64Extension, 602L);

+            message.AddExtension(UnitTestProtoFile.PackedUint32Extension, 603U);

+            message.AddExtension(UnitTestProtoFile.PackedUint64Extension, 604UL);

+            message.AddExtension(UnitTestProtoFile.PackedSint32Extension, 605);

+            message.AddExtension(UnitTestProtoFile.PackedSint64Extension, 606L);

+            message.AddExtension(UnitTestProtoFile.PackedFixed32Extension, 607U);

+            message.AddExtension(UnitTestProtoFile.PackedFixed64Extension, 608UL);

+            message.AddExtension(UnitTestProtoFile.PackedSfixed32Extension, 609);

+            message.AddExtension(UnitTestProtoFile.PackedSfixed64Extension, 610L);

+            message.AddExtension(UnitTestProtoFile.PackedFloatExtension, 611F);

+            message.AddExtension(UnitTestProtoFile.PackedDoubleExtension, 612D);

+            message.AddExtension(UnitTestProtoFile.PackedBoolExtension, true);

+            message.AddExtension(UnitTestProtoFile.PackedEnumExtension, ForeignEnum.FOREIGN_BAR);

+            // Add a second one of each field.

+            message.AddExtension(UnitTestProtoFile.PackedInt32Extension, 701);

+            message.AddExtension(UnitTestProtoFile.PackedInt64Extension, 702L);

+            message.AddExtension(UnitTestProtoFile.PackedUint32Extension, 703U);

+            message.AddExtension(UnitTestProtoFile.PackedUint64Extension, 704UL);

+            message.AddExtension(UnitTestProtoFile.PackedSint32Extension, 705);

+            message.AddExtension(UnitTestProtoFile.PackedSint64Extension, 706L);

+            message.AddExtension(UnitTestProtoFile.PackedFixed32Extension, 707U);

+            message.AddExtension(UnitTestProtoFile.PackedFixed64Extension, 708UL);

+            message.AddExtension(UnitTestProtoFile.PackedSfixed32Extension, 709);

+            message.AddExtension(UnitTestProtoFile.PackedSfixed64Extension, 710L);

+            message.AddExtension(UnitTestProtoFile.PackedFloatExtension, 711F);

+            message.AddExtension(UnitTestProtoFile.PackedDoubleExtension, 712D);

+            message.AddExtension(UnitTestProtoFile.PackedBoolExtension, false);

+            message.AddExtension(UnitTestProtoFile.PackedEnumExtension, ForeignEnum.FOREIGN_BAZ);

+        }

+

+        public static void AssertPackedExtensionsSet(TestPackedExtensions message)

+        {

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedInt32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedInt64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedUint32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedUint64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedSint32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedSint64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedFixed32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedFixed64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedSfixed32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedSfixed64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedFloatExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedDoubleExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedBoolExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestProtoFile.PackedEnumExtension));

+            Assert.AreEqual(601, message.GetExtension(UnitTestProtoFile.PackedInt32Extension, 0));

+            Assert.AreEqual(602L, message.GetExtension(UnitTestProtoFile.PackedInt64Extension, 0));

+            Assert.AreEqual(603u, message.GetExtension(UnitTestProtoFile.PackedUint32Extension, 0));

+            Assert.AreEqual(604uL, message.GetExtension(UnitTestProtoFile.PackedUint64Extension, 0));

+            Assert.AreEqual(605, message.GetExtension(UnitTestProtoFile.PackedSint32Extension, 0));

+            Assert.AreEqual(606L, message.GetExtension(UnitTestProtoFile.PackedSint64Extension, 0));

+            Assert.AreEqual(607u, message.GetExtension(UnitTestProtoFile.PackedFixed32Extension, 0));

+            Assert.AreEqual(608uL, message.GetExtension(UnitTestProtoFile.PackedFixed64Extension, 0));

+            Assert.AreEqual(609, message.GetExtension(UnitTestProtoFile.PackedSfixed32Extension, 0));

+            Assert.AreEqual(610L, message.GetExtension(UnitTestProtoFile.PackedSfixed64Extension, 0));

+            Assert.AreEqual(611F, message.GetExtension(UnitTestProtoFile.PackedFloatExtension, 0));

+            Assert.AreEqual(612D, message.GetExtension(UnitTestProtoFile.PackedDoubleExtension, 0));

+            Assert.AreEqual(true, message.GetExtension(UnitTestProtoFile.PackedBoolExtension, 0));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAR,

+                            message.GetExtension(UnitTestProtoFile.PackedEnumExtension, 0));

+            Assert.AreEqual(701, message.GetExtension(UnitTestProtoFile.PackedInt32Extension, 1));

+            Assert.AreEqual(702L, message.GetExtension(UnitTestProtoFile.PackedInt64Extension, 1));

+            Assert.AreEqual(703u, message.GetExtension(UnitTestProtoFile.PackedUint32Extension, 1));

+            Assert.AreEqual(704uL, message.GetExtension(UnitTestProtoFile.PackedUint64Extension, 1));

+            Assert.AreEqual(705, message.GetExtension(UnitTestProtoFile.PackedSint32Extension, 1));

+            Assert.AreEqual(706L, message.GetExtension(UnitTestProtoFile.PackedSint64Extension, 1));

+            Assert.AreEqual(707u, message.GetExtension(UnitTestProtoFile.PackedFixed32Extension, 1));

+            Assert.AreEqual(708uL, message.GetExtension(UnitTestProtoFile.PackedFixed64Extension, 1));

+            Assert.AreEqual(709, message.GetExtension(UnitTestProtoFile.PackedSfixed32Extension, 1));

+            Assert.AreEqual(710L, message.GetExtension(UnitTestProtoFile.PackedSfixed64Extension, 1));

+            Assert.AreEqual(711F, message.GetExtension(UnitTestProtoFile.PackedFloatExtension, 1));

+            Assert.AreEqual(712D, message.GetExtension(UnitTestProtoFile.PackedDoubleExtension, 1));

+            Assert.AreEqual(false, message.GetExtension(UnitTestProtoFile.PackedBoolExtension, 1));

+            Assert.AreEqual(ForeignEnum.FOREIGN_BAZ, message.GetExtension(UnitTestProtoFile.PackedEnumExtension, 1));

+        }

+

+        public static void AssertUnpackedExtensionsSet(TestUnpackedExtensions message)

+        {

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedInt32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedInt64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedUint32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedUint64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedSint32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedSint64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedFixed32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedFixed64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedSfixed32Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedSfixed64Extension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedFloatExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedDoubleExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedBoolExtension));

+            Assert.AreEqual(2, message.GetExtensionCount(UnitTestExtrasProtoFile.UnpackedEnumExtension));

+            Assert.AreEqual(601, message.GetExtension(UnitTestExtrasProtoFile.UnpackedInt32Extension, 0));

+            Assert.AreEqual(602L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedInt64Extension, 0));

+            Assert.AreEqual(603u, message.GetExtension(UnitTestExtrasProtoFile.UnpackedUint32Extension, 0));

+            Assert.AreEqual(604uL, message.GetExtension(UnitTestExtrasProtoFile.UnpackedUint64Extension, 0));

+            Assert.AreEqual(605, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSint32Extension, 0));

+            Assert.AreEqual(606L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSint64Extension, 0));

+            Assert.AreEqual(607u, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFixed32Extension, 0));

+            Assert.AreEqual(608uL, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFixed64Extension, 0));

+            Assert.AreEqual(609, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSfixed32Extension, 0));

+            Assert.AreEqual(610L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSfixed64Extension, 0));

+            Assert.AreEqual(611F, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFloatExtension, 0));

+            Assert.AreEqual(612D, message.GetExtension(UnitTestExtrasProtoFile.UnpackedDoubleExtension, 0));

+            Assert.AreEqual(true, message.GetExtension(UnitTestExtrasProtoFile.UnpackedBoolExtension, 0));

+            Assert.AreEqual(UnpackedExtensionsForeignEnum.FOREIGN_BAR,

+                            message.GetExtension(UnitTestExtrasProtoFile.UnpackedEnumExtension, 0));

+            Assert.AreEqual(701, message.GetExtension(UnitTestExtrasProtoFile.UnpackedInt32Extension, 1));

+            Assert.AreEqual(702L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedInt64Extension, 1));

+            Assert.AreEqual(703u, message.GetExtension(UnitTestExtrasProtoFile.UnpackedUint32Extension, 1));

+            Assert.AreEqual(704uL, message.GetExtension(UnitTestExtrasProtoFile.UnpackedUint64Extension, 1));

+            Assert.AreEqual(705, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSint32Extension, 1));

+            Assert.AreEqual(706L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSint64Extension, 1));

+            Assert.AreEqual(707u, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFixed32Extension, 1));

+            Assert.AreEqual(708uL, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFixed64Extension, 1));

+            Assert.AreEqual(709, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSfixed32Extension, 1));

+            Assert.AreEqual(710L, message.GetExtension(UnitTestExtrasProtoFile.UnpackedSfixed64Extension, 1));

+            Assert.AreEqual(711F, message.GetExtension(UnitTestExtrasProtoFile.UnpackedFloatExtension, 1));

+            Assert.AreEqual(712D, message.GetExtension(UnitTestExtrasProtoFile.UnpackedDoubleExtension, 1));

+            Assert.AreEqual(false, message.GetExtension(UnitTestExtrasProtoFile.UnpackedBoolExtension, 1));

+            Assert.AreEqual(UnpackedExtensionsForeignEnum.FOREIGN_BAZ, message.GetExtension(UnitTestExtrasProtoFile.UnpackedEnumExtension, 1));

+        }

+

+        private static readonly string[] TestCultures = {"en-US", "en-GB", "fr-FR", "de-DE"};

+

+        public delegate void CultureAction();

+

+        public static void TestInMultipleCultures(CultureAction test)

+        {

+#if COMPACT_FRAMEWORK

+            test();

+#else

+            CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;

+            foreach (string culture in TestCultures)

+            {

+                try

+                {

+                    Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);

+                    test();

+                }

+                finally

+                {

+                    Thread.CurrentThread.CurrentCulture = originalCulture;

+                }

+            }

+#endif

+        }

+

+        /// <summary>

+        /// Helper to construct a byte array from a bunch of bytes.

+        /// </summary>

+        internal static byte[] Bytes(params byte[] bytesAsInts)

+        {

+            byte[] bytes = new byte[bytesAsInts.Length];

+            for (int i = 0; i < bytesAsInts.Length; i++)

+            {

+                bytes[i] = (byte) bytesAsInts[i];

+            }

+            return bytes;

+        }

+

+

+        internal delegate void Action();

+

+        internal static void AssertNotSupported(Action action)

+        {

+            try

+            {

+                action();

+                Assert.Fail("Expected NotSupportedException");

+            }

+            catch (NotSupportedException)

+            {

+                // Expected

+            }

+        }

+

+        internal static void AssertArgumentNullException(Action action)

+        {

+            try

+            {

+                action();

+                Assert.Fail("Exception was not thrown");

+            }

+            // Not a general case, however, Compact Framework v2 does use Invoke

+            catch (System.Reflection.TargetInvocationException te)

+            {

+                if (te.InnerException.GetType() != typeof(ArgumentNullException))

+                    throw;

+            }

+            // Normally expected exception

+            catch (ArgumentNullException)

+            {

+                // We expect this exception.

+            }

+        }

+

+        internal static void AssertBytesEqual(byte[] a, byte[]b)

+        {

+            if (a == null || b == null)

+            {

+                Assert.AreEqual<object>(a, b);

+            }

+            else

+            {

+                Assert.AreEqual(a.Length, b.Length, "The byte[] is not of the expected length.");

+

+                for (int i = 0; i < a.Length; i++)

+                {

+                    if (a[i] != b[i])

+                    {

+                        Assert.AreEqual(a[i], b[i], "Byte[] differs at index " + i);

+                    }

+                }

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/TestWriterFormatJson.cs b/csharp/src/ProtocolBuffers.Test/TestWriterFormatJson.cs
new file mode 100644
index 0000000..a3543af
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestWriterFormatJson.cs
@@ -0,0 +1,498 @@
+using System;

+using System.IO;

+using System.Text;

+using Google.ProtocolBuffers.DescriptorProtos;

+using Google.ProtocolBuffers.Serialization;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using Google.ProtocolBuffers.TestProtos;

+using EnumOptions = Google.ProtocolBuffers.TestProtos.EnumOptions;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class TestWriterFormatJson

+    {

+        [TestMethod]

+        public void Example_FromJson()

+        {

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+

+            //3.5: builder.MergeFromJson(@"{""valid"":true}");

+            Extensions.MergeFromJson(builder, @"{""valid"":true}");

+            

+            TestXmlMessage message = builder.Build();

+            Assert.AreEqual(true, message.Valid);

+        }

+

+        [TestMethod]

+        public void Example_ToJson()

+        {

+            TestXmlMessage message = 

+                TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .Build();

+

+            //3.5: string json = message.ToJson();

+            string json = Extensions.ToJson(message);

+

+            Assert.AreEqual(@"{""valid"":true}", json);

+        }

+

+        [TestMethod]

+        public void Example_WriteJsonUsingICodedOutputStream()

+        {

+            TestXmlMessage message =

+                TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .Build();

+

+            using (TextWriter output = new StringWriter())

+            {

+                ICodedOutputStream writer = JsonFormatWriter.CreateInstance(output);

+                writer.WriteMessageStart();      //manually begin the message, output is '{'

+                

+                writer.Flush();

+                Assert.AreEqual("{", output.ToString());

+

+                ICodedOutputStream stream = writer;

+                message.WriteTo(stream);    //write the message normally

+

+                writer.Flush();

+                Assert.AreEqual(@"{""valid"":true", output.ToString());

+

+                writer.WriteMessageEnd();        //manually write the end message '}'

+                Assert.AreEqual(@"{""valid"":true}", output.ToString());

+            }

+        }

+

+        [TestMethod]

+        public void Example_ReadJsonUsingICodedInputStream()

+        {

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            ICodedInputStream reader = JsonFormatReader.CreateInstance(@"{""valid"":true}");

+

+            reader.ReadMessageStart();  //manually read the begin the message '{'

+

+            builder.MergeFrom(reader);  //write the message normally

+

+            reader.ReadMessageEnd();    //manually read the end message '}'

+        }

+

+        protected string Content;

+        [System.Diagnostics.DebuggerNonUserCode]

+        protected void FormatterAssert<TMessage>(TMessage message, params string[] expecting) where TMessage : IMessageLite

+        {

+            StringWriter sw = new StringWriter();

+            JsonFormatWriter.CreateInstance(sw).WriteMessage(message);

+            

+            Content = sw.ToString();

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);

+

+            IMessageLite copy = 

+                JsonFormatReader.CreateInstance(Content)

+                .Merge(message.WeakCreateBuilderForType(), registry).WeakBuild();

+

+            Assert.AreEqual(typeof(TMessage), copy.GetType());

+            Assert.AreEqual(message, copy);

+            foreach (string expect in expecting)

+                Assert.IsTrue(Content.IndexOf(expect) >= 0, "Expected to find content '{0}' in: \r\n{1}", expect, Content);

+        }

+

+        [TestMethod]

+        public void TestToJsonParseFromJson()

+        {

+            TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();

+            string json = Extensions.ToJson(msg);

+            Assert.AreEqual("{\"default_bool\":true}", json);

+            TestAllTypes copy = Extensions.MergeFromJson(new TestAllTypes.Builder(), json).Build();

+            Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);

+            Assert.AreEqual(msg, copy);

+        }

+

+        [TestMethod]

+        public void TestToJsonParseFromJsonReader()

+        {

+            TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();

+            string json = Extensions.ToJson(msg);

+            Assert.AreEqual("{\"default_bool\":true}", json);

+            TestAllTypes copy = Extensions.MergeFromJson(new TestAllTypes.Builder(), new StringReader(json)).Build();

+            Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);

+            Assert.AreEqual(msg, copy);

+        }

+

+        [TestMethod]

+        public void TestJsonFormatted()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .SetNumber(0x1010)

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder())

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.ONE))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.ONE).AddOptions(EnumOptions.TWO))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().SetBinary(ByteString.CopyFromUtf8("abc")))

+                .Build();

+

+            StringWriter sw = new StringWriter();

+            JsonFormatWriter.CreateInstance(sw).Formatted()

+                .WriteMessage(message);

+

+            string json = sw.ToString();

+

+            TestXmlMessage copy = JsonFormatReader.CreateInstance(json)

+                .Merge(TestXmlMessage.CreateBuilder()).Build();

+            Assert.AreEqual(message, copy);

+        }

+

+        [TestMethod]

+        public void TestEmptyMessage()

+        {

+            FormatterAssert(

+                TestXmlChild.CreateBuilder()

+                .Build(),

+                @"{}"

+                );

+        }

+        

+        [TestMethod]

+        public void TestRepeatedField()

+        {

+            FormatterAssert(

+                TestXmlChild.CreateBuilder()

+                .AddOptions(EnumOptions.ONE)

+                .AddOptions(EnumOptions.TWO)

+                .Build(),

+                @"{""options"":[""ONE"",""TWO""]}"

+                );

+        }

+        

+        [TestMethod]

+        public void TestNestedEmptyMessage()

+        {

+            FormatterAssert(

+                TestXmlMessage.CreateBuilder()

+                .SetChild(TestXmlChild.CreateBuilder().Build())

+                .Build(),

+                @"{""child"":{}}"

+                );

+        }

+        

+        [TestMethod]

+        public void TestNestedMessage()

+        {

+            FormatterAssert(

+                TestXmlMessage.CreateBuilder()

+                .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.TWO).Build())

+                .Build(),

+                @"{""child"":{""options"":[""TWO""]}}"

+                );

+        }

+        

+        [TestMethod]

+        public void TestBooleanTypes()

+        {

+            FormatterAssert(

+                TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .Build(),

+                @"{""valid"":true}"

+                );

+        }

+        

+        [TestMethod]

+        public void TestFullMessage()

+        {

+            FormatterAssert(

+                TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .SetText("text")

+                .AddTextlines("a")

+                .AddTextlines("b")

+                .AddTextlines("c")

+                .SetNumber(0x1010101010)

+                .AddNumbers(1)

+                .AddNumbers(2)

+                .AddNumbers(3)

+                .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))

+                .Build(),

+                @"""text"":""text""",

+                @"[""a"",""b"",""c""]",

+                @"[1,2,3]",

+                @"""child"":{",

+                @"""children"":[{",

+                @"AA==",

+                @"AAA=",

+                @"AAAA",

+                0x1010101010L.ToString()

+                );

+        }

+        

+        [TestMethod]

+        public void TestMessageWithXmlText()

+        {

+            FormatterAssert(

+                TestXmlMessage.CreateBuilder()

+                .SetText("<text></text>")

+                .Build(),

+                @"{""text"":""<text><\/text>""}"

+                );

+        }

+        

+        [TestMethod]

+        public void TestWithEscapeChars()

+        {

+            FormatterAssert(

+                TestXmlMessage.CreateBuilder()

+                .SetText(" \t <- \"leading space and trailing\" -> \\ \xef54 \x0000 \xFF \xFFFF \b \f \r \n \t ")

+                .Build(),

+                "{\"text\":\" \\t <- \\\"leading space and trailing\\\" -> \\\\ \\uef54 \\u0000 \\u00ff \\uffff \\b \\f \\r \\n \\t \"}"

+                );

+        }

+        

+        [TestMethod]

+        public void TestWithExtensionText()

+        {

+            FormatterAssert(

+                TestXmlMessage.CreateBuilder()

+                .SetValid(false)

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ")

+                .Build(),

+                @"{""valid"":false,""extension_text"":"" extension text value ! ""}"

+                );

+        }

+        

+        [TestMethod]

+        public void TestWithExtensionNumber()

+        {

+            FormatterAssert(

+                TestXmlMessage.CreateBuilder()

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage,

+                new TestXmlExtension.Builder().SetNumber(42).Build())

+                .Build(),

+                @"{""number"":42}"

+                );

+        }

+        

+        [TestMethod]

+        public void TestWithExtensionArray()

+        {

+            FormatterAssert(

+                TestXmlMessage.CreateBuilder()

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)

+                .Build(),

+                @"{""extension_number"":[100,101,102]}"

+                );

+        }

+        

+        [TestMethod]

+        public void TestWithExtensionEnum()

+        {

+            FormatterAssert(

+                TestXmlMessage.CreateBuilder()

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)

+                .Build(),

+                @"{""extension_enum"":""ONE""}"

+                );

+        }

+        

+        [TestMethod]

+        public void TestMessageWithExtensions()

+        {

+            FormatterAssert(

+                TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .SetText("text")

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, "extension text")

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build())

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)

+                .Build(),

+                @"""text"":""text""",

+                @"""valid"":true",

+                @"""extension_enum"":""ONE""",

+                @"""extension_text"":""extension text""",

+                @"""extension_number"":[100,101,102]",

+                @"""extension_message"":{""number"":42}"

+                );

+        }

+        

+        [TestMethod]

+        public void TestMessageMissingExtensions()

+        {

+            TestXmlMessage original = TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .SetText("text")

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ")

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage, new TestXmlExtension.Builder().SetNumber(42).Build())

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)

+                .Build();

+

+            TestXmlMessage message = original.ToBuilder()

+                .ClearExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText)

+                .ClearExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage)

+                .ClearExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber)

+                .ClearExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum)

+                .Build();

+

+            JsonFormatWriter writer = JsonFormatWriter.CreateInstance();

+            writer.WriteMessage(original);

+            Content = writer.ToString();

+

+            IMessageLite copy = JsonFormatReader.CreateInstance(Content)

+                .Merge(message.CreateBuilderForType()).Build();

+

+            Assert.AreNotEqual(original, message);

+            Assert.AreNotEqual(original, copy);

+            Assert.AreEqual(message, copy);

+        }

+        

+        [TestMethod]

+        public void TestMergeFields()

+        {

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            builder.MergeFrom(JsonFormatReader.CreateInstance("\"valid\": true"));

+            builder.MergeFrom(JsonFormatReader.CreateInstance("\"text\": \"text\", \"number\": \"411\""));

+            Assert.AreEqual(true, builder.Valid);

+            Assert.AreEqual("text", builder.Text);

+            Assert.AreEqual(411, builder.Number);

+        }

+        

+        [TestMethod]

+        public void TestMessageArray()

+        {

+            JsonFormatWriter writer = JsonFormatWriter.CreateInstance().Formatted();

+            using (writer.StartArray())

+            {

+                writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(1).AddTextlines("a").Build());

+                writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(2).AddTextlines("b").Build());

+                writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(3).AddTextlines("c").Build());

+            }

+            string json = writer.ToString();

+            JsonFormatReader reader = JsonFormatReader.CreateInstance(json);

+            

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            int ordinal = 0;

+

+            foreach (JsonFormatReader r in reader.EnumerateArray())

+            {

+                r.Merge(builder);

+                Assert.AreEqual(++ordinal, builder.Number);

+            }

+            Assert.AreEqual(3, ordinal);

+            Assert.AreEqual(3, builder.TextlinesCount);

+        }

+        

+        [TestMethod]

+        public void TestNestedMessageArray()

+        {

+            JsonFormatWriter writer = JsonFormatWriter.CreateInstance();

+            using (writer.StartArray())

+            {

+                using (writer.StartArray())

+                {

+                    writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(1).AddTextlines("a").Build());

+                    writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(2).AddTextlines("b").Build());

+                } 

+                using (writer.StartArray())

+                    writer.WriteMessage(TestXmlMessage.CreateBuilder().SetNumber(3).AddTextlines("c").Build());

+            }

+            string json = writer.ToString();

+            JsonFormatReader reader = JsonFormatReader.CreateInstance(json);

+

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            int ordinal = 0;

+

+            foreach (JsonFormatReader r in reader.EnumerateArray())

+                foreach (JsonFormatReader r2 in r.EnumerateArray())

+                {

+                    r2.Merge(builder);

+                    Assert.AreEqual(++ordinal, builder.Number);

+                }

+            Assert.AreEqual(3, ordinal);

+            Assert.AreEqual(3, builder.TextlinesCount);

+        }

+        

+        [TestMethod]

+        public void TestReadWriteJsonWithoutRoot()

+        {

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            TestXmlMessage message = builder.SetText("abc").SetNumber(123).Build();

+

+            string Json;

+            using (StringWriter sw = new StringWriter())

+            {

+                ICodedOutputStream output = JsonFormatWriter.CreateInstance(sw);

+

+                message.WriteTo(output);

+                output.Flush();

+                Json = sw.ToString();

+            }

+            Assert.AreEqual(@"""text"":""abc"",""number"":123", Json);

+

+            ICodedInputStream input = JsonFormatReader.CreateInstance(Json);

+            TestXmlMessage copy = TestXmlMessage.CreateBuilder().MergeFrom(input).Build();

+

+            Assert.AreEqual(message, copy);

+        }

+        

+        [TestMethod,ExpectedException(typeof(RecursionLimitExceededException))]

+        public void TestRecursiveLimit()

+        {

+            StringBuilder sb = new StringBuilder(8192);

+            for (int i = 0; i < 80; i++)

+                sb.Append("{\"child\":");

+            TestXmlRescursive msg = Extensions.MergeFromJson(new TestXmlRescursive.Builder(), sb.ToString()).Build();

+        }

+

+        [TestMethod, ExpectedException(typeof(FormatException))]

+        public void FailWithEmptyText()

+        {

+            JsonFormatReader.CreateInstance("")

+                .Merge(TestXmlMessage.CreateBuilder());

+        }

+        

+        [TestMethod, ExpectedException(typeof(FormatException))]

+        public void FailWithUnexpectedValue()

+        {

+            JsonFormatReader.CreateInstance("{{}}")

+                .Merge(TestXmlMessage.CreateBuilder());

+        }

+        

+        [TestMethod, ExpectedException(typeof(FormatException))]

+        public void FailWithUnQuotedName()

+        {

+            JsonFormatReader.CreateInstance("{name:{}}")

+                .Merge(TestXmlMessage.CreateBuilder());

+        }

+        

+        [TestMethod, ExpectedException(typeof(FormatException))]

+        public void FailWithUnexpectedType()

+        {

+            JsonFormatReader.CreateInstance("{\"valid\":{}}")

+                .Merge(TestXmlMessage.CreateBuilder());

+        }

+

+        // See issue 64 for background.

+        [TestMethod]

+        public void ToJsonRequiringBufferExpansion()

+        {

+            string s = new string('.', 4086);

+            var opts = FileDescriptorProto.CreateBuilder()

+               .SetName(s)

+               .SetPackage("package")

+               .BuildPartial();

+

+            Assert.IsNotNull(Extensions.ToJson(opts));

+        }

+    }

+}

diff --git a/csharp/src/ProtocolBuffers.Test/TestWriterFormatXml.cs b/csharp/src/ProtocolBuffers.Test/TestWriterFormatXml.cs
new file mode 100644
index 0000000..13ea060
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TestWriterFormatXml.cs
@@ -0,0 +1,455 @@
+using System;

+using System.Collections.Generic;

+using System.IO;

+using System.Text;

+using System.Xml;

+using Google.ProtocolBuffers.Serialization;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using Google.ProtocolBuffers.TestProtos;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class TestWriterFormatXml

+    {

+        [TestMethod]

+        public void Example_FromXml()

+        {

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+

+            XmlReader rdr = XmlReader.Create(new StringReader(@"<root><valid>true</valid></root>"));

+            //3.5: builder.MergeFromXml(rdr);

+            Extensions.MergeFromXml(builder, rdr);

+

+            TestXmlMessage message = builder.Build();

+            Assert.AreEqual(true, message.Valid);

+        }

+

+        [TestMethod]

+        public void Example_ToXml()

+        {

+            TestXmlMessage message =

+                TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .Build();

+

+            //3.5: string Xml = message.ToXml();

+            string Xml = Extensions.ToXml(message);

+

+            Assert.AreEqual(@"<root><valid>true</valid></root>", Xml);

+        }

+

+        [TestMethod]

+        public void Example_WriteXmlUsingICodedOutputStream()

+        {

+            TestXmlMessage message =

+                TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .Build();

+

+            using (TextWriter output = new StringWriter())

+            {

+                ICodedOutputStream writer = XmlFormatWriter.CreateInstance(output);

+                writer.WriteMessageStart();      //manually begin the message, output is '{'

+

+                ICodedOutputStream stream = writer;

+                message.WriteTo(stream);         //write the message normally

+

+                writer.WriteMessageEnd();        //manually write the end message '}'

+                Assert.AreEqual(@"<root><valid>true</valid></root>", output.ToString());

+            }

+        }

+

+        [TestMethod]

+        public void Example_ReadXmlUsingICodedInputStream()

+        {

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            ICodedInputStream reader = XmlFormatReader.CreateInstance(@"<root><valid>true</valid></root>");

+

+            reader.ReadMessageStart();  //manually read the begin the message '{'

+

+            builder.MergeFrom(reader);  //read the message normally

+

+            reader.ReadMessageEnd();    //manually read the end message '}'

+        }

+

+        [TestMethod]

+        public void TestToXmlParseFromXml()

+        {

+            TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();

+            string xml = Extensions.ToXml(msg);

+            Assert.AreEqual("<root><default_bool>true</default_bool></root>", xml);

+            TestAllTypes copy = Extensions.MergeFromXml(new TestAllTypes.Builder(), XmlReader.Create(new StringReader(xml))).Build();

+            Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);

+            Assert.AreEqual(msg, copy);

+        }

+

+        [TestMethod]

+        public void TestToXmlParseFromXmlWithRootName()

+        {

+            TestAllTypes msg = new TestAllTypes.Builder().SetDefaultBool(true).Build();

+            string xml = Extensions.ToXml(msg, "message");

+            Assert.AreEqual("<message><default_bool>true</default_bool></message>", xml);

+            TestAllTypes copy = Extensions.MergeFromXml(new TestAllTypes.Builder(), "message", XmlReader.Create(new StringReader(xml))).Build();

+            Assert.IsTrue(copy.HasDefaultBool && copy.DefaultBool);

+            Assert.AreEqual(msg, copy);

+        }

+

+        [TestMethod]

+        public void TestEmptyMessage()

+        {

+            TestXmlChild message = TestXmlChild.CreateBuilder()

+                .Build();

+

+            StringWriter sw = new StringWriter();

+            XmlWriter xw = XmlWriter.Create(sw);

+

+            //When we call message.WriteTo, we are responsible for the root element

+            xw.WriteStartElement("root");

+            message.WriteTo(XmlFormatWriter.CreateInstance(xw));

+            xw.WriteEndElement();

+            xw.Flush();

+

+            string xml = sw.ToString();

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            TestXmlChild copy = rdr.Merge(TestXmlChild.CreateBuilder()).Build();

+            Assert.AreEqual(message, copy);

+        }

+        [TestMethod]

+        public void TestRepeatedField()

+        {

+            TestXmlChild message = TestXmlChild.CreateBuilder()

+                .AddOptions(EnumOptions.ONE)

+                .AddOptions(EnumOptions.TWO)

+                .Build();

+

+            //Allow the writer to write the root element

+            StringWriter sw = new StringWriter();

+            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);

+

+            string xml = sw.ToString();

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            TestXmlChild copy = rdr.Merge(TestXmlChild.CreateBuilder()).Build();

+            Assert.AreEqual(message, copy);

+        }

+        [TestMethod]

+        public void TestNestedEmptyMessage()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .SetChild(TestXmlChild.CreateBuilder().Build())

+                .Build();

+

+            StringWriter sw = new StringWriter();

+            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);

+

+            string xml = sw.ToString();

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();

+            Assert.AreEqual(message, copy);

+        }

+        [TestMethod]

+        public void TestNestedMessage()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.TWO).Build())

+                .Build();

+

+            StringWriter sw = new StringWriter();

+            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);

+

+            string xml = sw.ToString();

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();

+            Assert.AreEqual(message, copy);

+        }

+        [TestMethod]

+        public void TestBooleanTypes()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .Build();

+

+            StringWriter sw = new StringWriter();

+            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);

+

+            string xml = sw.ToString();

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();

+            Assert.AreEqual(message, copy);

+        }

+        [TestMethod]

+        public void TestFullMessage()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .SetText("text")

+                .AddTextlines("a")

+                .AddTextlines("b")

+                .AddTextlines("c")

+                .SetNumber(0x1010101010)

+                .AddNumbers(1)

+                .AddNumbers(2)

+                .AddNumbers(3)

+                .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))

+                .Build();

+

+            StringWriter sw = new StringWriter();

+            XmlWriter xwtr = XmlWriter.Create(sw, new XmlWriterSettings {Indent = true, IndentChars = "  "});

+

+            XmlFormatWriter.CreateInstance(xwtr).WriteMessage("root", message);

+

+            string xml = sw.ToString();

+

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();

+            Assert.AreEqual(message, copy);

+        }

+        [TestMethod]

+        public void TestFullMessageWithRichTypes()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .SetValid(true)

+                .SetText("text")

+                .AddTextlines("a")

+                .AddTextlines("b")

+                .AddTextlines("c")

+                .SetNumber(0x1010101010)

+                .AddNumbers(1)

+                .AddNumbers(2)

+                .AddNumbers(3)

+                .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))

+                .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))

+                .Build();

+

+            StringWriter sw = new StringWriter();

+            XmlWriter xwtr = XmlWriter.Create(sw, new XmlWriterSettings { Indent = true, IndentChars = "  " });

+

+            XmlFormatWriter.CreateInstance(xwtr)

+                .SetOptions(XmlWriterOptions.OutputNestedArrays | XmlWriterOptions.OutputEnumValues)

+                .WriteMessage("root", message);

+

+            string xml = sw.ToString();

+

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            rdr.Options = XmlReaderOptions.ReadNestedArrays;

+            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();

+            Assert.AreEqual(message, copy);

+        }

+        [TestMethod]

+        public void TestFullMessageWithUnknownFields()

+        {

+            TestXmlMessage origial = TestXmlMessage.CreateBuilder()

+                    .SetValid(true)

+                    .SetText("text")

+                    .AddTextlines("a")

+                    .AddTextlines("b")

+                    .AddTextlines("c")

+                    .SetNumber(0x1010101010)

+                    .AddNumbers(1)

+                    .AddNumbers(2)

+                    .AddNumbers(3)

+                    .SetChild(TestXmlChild.CreateBuilder().AddOptions(EnumOptions.ONE).SetBinary(ByteString.CopyFrom(new byte[1])))

+                    .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.TWO).SetBinary(ByteString.CopyFrom(new byte[2])))

+                    .AddChildren(TestXmlMessage.Types.Children.CreateBuilder().AddOptions(EnumOptions.THREE).SetBinary(ByteString.CopyFrom(new byte[3])))

+                .Build();

+            TestXmlNoFields message = TestXmlNoFields.CreateBuilder().MergeFrom(origial.ToByteArray()).Build();

+

+            Assert.AreEqual(0, message.AllFields.Count);

+

+            StringWriter sw = new StringWriter();

+            XmlFormatWriter.CreateInstance(sw)

+                .SetOptions(XmlWriterOptions.OutputNestedArrays | XmlWriterOptions.OutputEnumValues)

+                .WriteMessage("root", message);

+

+            string xml = sw.ToString();

+

+            using (XmlReader x = XmlReader.Create(new StringReader(xml)))

+            {

+                x.MoveToContent();

+                Assert.AreEqual(XmlNodeType.Element, x.NodeType);

+                //should always be empty

+                Assert.IsTrue(x.IsEmptyElement ||

+                    (x.Read() && x.NodeType == XmlNodeType.EndElement)

+                    );

+            }

+

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            rdr.Options = XmlReaderOptions.ReadNestedArrays;

+            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();

+            Assert.AreEqual(TestXmlMessage.DefaultInstance, copy);

+        }

+        [TestMethod]

+        public void TestMessageWithXmlText()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .SetText("<text>").Build();

+

+            StringWriter sw = new StringWriter();

+            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);

+

+            string xml = sw.ToString();

+

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();

+            Assert.AreEqual(message, copy);

+        }

+        [TestMethod]

+        public void TestXmlWithWhitespace()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .SetText(" \t <- leading space and trailing -> \r\n\t").Build();

+

+            StringWriter sw = new StringWriter();

+            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);

+

+            string xml = sw.ToString();

+

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder()).Build();

+            Assert.AreEqual(message, copy);

+        }

+        [TestMethod]

+        public void TestXmlWithExtensionText()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionText, " extension text value ! ")

+                .Build();

+

+            StringWriter sw = new StringWriter();

+            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);

+

+            string xml = sw.ToString();

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);

+

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();

+            Assert.AreEqual(message, copy);

+        }

+        [TestMethod]

+        public void TestXmlWithExtensionMessage()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionMessage,

+                new TestXmlExtension.Builder().SetNumber(42).Build()).Build();

+

+            StringWriter sw = new StringWriter();

+            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);

+

+            string xml = sw.ToString();

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);

+

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();

+            Assert.AreEqual(message, copy);

+        }

+        [TestMethod]

+        public void TestXmlWithExtensionArray()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 100)

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 101)

+                .AddExtension(UnitTestXmlSerializerTestProtoFile.ExtensionNumber, 102)

+                .Build();

+

+            StringWriter sw = new StringWriter();

+            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);

+

+            string xml = sw.ToString();

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);

+

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();

+            Assert.AreEqual(message, copy);

+        }

+        [TestMethod]

+        public void TestXmlWithExtensionEnum()

+        {

+            TestXmlMessage message = TestXmlMessage.CreateBuilder()

+                .SetExtension(UnitTestXmlSerializerTestProtoFile.ExtensionEnum, EnumOptions.ONE)

+                .Build();

+

+            StringWriter sw = new StringWriter();

+            XmlFormatWriter.CreateInstance(sw).WriteMessage("root", message);

+

+            string xml = sw.ToString();

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestXmlSerializerTestProtoFile.RegisterAllExtensions(registry);

+

+            XmlFormatReader rdr = XmlFormatReader.CreateInstance(xml);

+            TestXmlMessage copy = rdr.Merge(TestXmlMessage.CreateBuilder(), registry).Build();

+            Assert.AreEqual(message, copy);

+        }

+        [TestMethod]

+        public void TestXmlReadEmptyRoot()

+        {

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            ICodedInputStream reader = XmlFormatReader.CreateInstance(@"<root/>");

+

+            reader.ReadMessageStart();  //manually read the begin the message '{'

+

+            builder.MergeFrom(reader);  //write the message normally

+

+            reader.ReadMessageEnd();    //manually read the end message '}'

+        }

+

+        [TestMethod]

+        public void TestXmlReadEmptyChild()

+        {

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            ICodedInputStream reader = XmlFormatReader.CreateInstance(@"<root><text /></root>");

+

+            reader.ReadMessageStart();  //manually read the begin the message '{'

+

+            builder.MergeFrom(reader);  //write the message normally

+            Assert.IsTrue(builder.HasText);

+            Assert.AreEqual(String.Empty, builder.Text);

+        }

+

+        [TestMethod]

+        public void TestXmlReadWriteWithoutRoot()

+        {

+            TestXmlMessage.Builder builder = TestXmlMessage.CreateBuilder();

+            TestXmlMessage message = builder.SetText("abc").SetNumber(123).Build();

+

+            string xml;

+            using (StringWriter sw = new StringWriter())

+            {

+                ICodedOutputStream output = XmlFormatWriter.CreateInstance(

+                    XmlWriter.Create(sw, new XmlWriterSettings() { ConformanceLevel = ConformanceLevel.Fragment }));

+

+                message.WriteTo(output);

+                output.Flush();

+                xml = sw.ToString();

+            }

+            Assert.AreEqual("<text>abc</text><number>123</number>", xml);

+

+            TestXmlMessage copy;

+            using (XmlReader xr = XmlReader.Create(new StringReader(xml), new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment }))

+            {

+                ICodedInputStream input = XmlFormatReader.CreateInstance(xr);

+                copy = TestXmlMessage.CreateBuilder().MergeFrom(input).Build();

+            }

+

+            Assert.AreEqual(message, copy);

+        }

+

+        [TestMethod, ExpectedException(typeof(RecursionLimitExceededException))]

+        public void TestRecursiveLimit()

+        {

+            StringBuilder sb = new StringBuilder(8192);

+            for (int i = 0; i < 80; i++)

+                sb.Append("<child>");

+            TestXmlRescursive msg = Extensions.MergeFromXml(new TestXmlRescursive.Builder(), "child", XmlReader.Create(new StringReader(sb.ToString()))).Build();

+        }

+    }

+}

diff --git a/csharp/src/ProtocolBuffers.Test/TextFormatTest.cs b/csharp/src/ProtocolBuffers.Test/TextFormatTest.cs
new file mode 100644
index 0000000..37a4192
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/TextFormatTest.cs
@@ -0,0 +1,586 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.IO;

+using System.Text;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using System.Globalization;

+using System.Threading;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class TextFormatTest

+    {

+        private static readonly string AllFieldsSetText = TestResources.text_format_unittest_data;

+        private static readonly string AllExtensionsSetText = TestResources.text_format_unittest_extensions_data;

+

+        /// <summary>

+        /// Note that this is slightly different to the Java - 123.0 becomes 123, and 1.23E17 becomes 1.23E+17.

+        /// Both of these differences can be parsed by the Java and the C++, and we can parse their output too.

+        /// </summary>

+        private const string ExoticText =

+            "repeated_int32: -1\n" +

+            "repeated_int32: -2147483648\n" +

+            "repeated_int64: -1\n" +

+            "repeated_int64: -9223372036854775808\n" +

+            "repeated_uint32: 4294967295\n" +

+            "repeated_uint32: 2147483648\n" +

+            "repeated_uint64: 18446744073709551615\n" +

+            "repeated_uint64: 9223372036854775808\n" +

+            "repeated_double: 123\n" +

+            "repeated_double: 123.5\n" +

+            "repeated_double: 0.125\n" +

+            "repeated_double: 1.23E+17\n" +

+            "repeated_double: 1.235E+22\n" +

+            "repeated_double: 1.235E-18\n" +

+            "repeated_double: 123.456789\n" +

+            "repeated_double: Infinity\n" +

+            "repeated_double: -Infinity\n" +

+            "repeated_double: NaN\n" +

+            "repeated_string: \"\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\"" +

+            "\\341\\210\\264\"\n" +

+            "repeated_bytes: \"\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\"\\376\"\n";

+

+        private const string MessageSetText =

+            "[protobuf_unittest.TestMessageSetExtension1] {\n" +

+            "  i: 123\n" +

+            "}\n" +

+            "[protobuf_unittest.TestMessageSetExtension2] {\n" +

+            "  str: \"foo\"\n" +

+            "}\n";

+

+        /// <summary>

+        /// Print TestAllTypes and compare with golden file. 

+        /// </summary>

+        [TestMethod]

+        public void PrintMessage()

+        {

+            TestUtil.TestInMultipleCultures(() =>

+                                                {

+                                                    string text = TextFormat.PrintToString(TestUtil.GetAllSet());

+                                                    Assert.AreEqual(AllFieldsSetText.Replace("\r\n", "\n").Trim(),

+                                                                    text.Replace("\r\n", "\n").Trim());

+                                                });

+        }

+

+        /// <summary>

+        /// Tests that a builder prints the same way as a message.

+        /// </summary>

+        [TestMethod]

+        public void PrintBuilder()

+        {

+            TestUtil.TestInMultipleCultures(() =>

+            {

+                string messageText = TextFormat.PrintToString(TestUtil.GetAllSet());

+                string builderText = TextFormat.PrintToString(TestUtil.GetAllSet().ToBuilder());

+                Assert.AreEqual(messageText, builderText);

+            });

+        }

+

+        /// <summary>

+        /// Print TestAllExtensions and compare with golden file.

+        /// </summary>

+        [TestMethod]

+        public void PrintExtensions()

+        {

+            string text = TextFormat.PrintToString(TestUtil.GetAllExtensionsSet());

+

+            Assert.AreEqual(AllExtensionsSetText.Replace("\r\n", "\n").Trim(), text.Replace("\r\n", "\n").Trim());

+        }

+

+        /// <summary>

+        /// Test printing of unknown fields in a message.

+        /// </summary>

+        [TestMethod]

+        public void PrintUnknownFields()

+        {

+            TestEmptyMessage message =

+                TestEmptyMessage.CreateBuilder()

+                    .SetUnknownFields(

+                        UnknownFieldSet.CreateBuilder()

+                            .AddField(5,

+                                      UnknownField.CreateBuilder()

+                                          .AddVarint(1)

+                                          .AddFixed32(2)

+                                          .AddFixed64(3)

+                                          .AddLengthDelimited(ByteString.CopyFromUtf8("4"))

+                                          .AddGroup(

+                                              UnknownFieldSet.CreateBuilder()

+                                                  .AddField(10,

+                                                            UnknownField.CreateBuilder()

+                                                                .AddVarint(5)

+                                                                .Build())

+                                                  .Build())

+                                          .Build())

+                            .AddField(8,

+                                      UnknownField.CreateBuilder()

+                                          .AddVarint(1)

+                                          .AddVarint(2)

+                                          .AddVarint(3)

+                                          .Build())

+                            .AddField(15,

+                                      UnknownField.CreateBuilder()

+                                          .AddVarint(0xABCDEF1234567890L)

+                                          .AddFixed32(0xABCD1234)

+                                          .AddFixed64(0xABCDEF1234567890L)

+                                          .Build())

+                            .Build())

+                    .Build();

+

+            Assert.AreEqual(

+                "5: 1\n" +

+                "5: 0x00000002\n" +

+                "5: 0x0000000000000003\n" +

+                "5: \"4\"\n" +

+                "5 {\n" +

+                "  10: 5\n" +

+                "}\n" +

+                "8: 1\n" +

+                "8: 2\n" +

+                "8: 3\n" +

+                "15: 12379813812177893520\n" +

+                "15: 0xabcd1234\n" +

+                "15: 0xabcdef1234567890\n",

+                TextFormat.PrintToString(message));

+        }

+

+        /// <summary>

+        /// Helper to construct a ByteString from a string containing only 8-bit

+        /// characters. The characters are converted directly to bytes, *not*

+        /// encoded using UTF-8.

+        /// </summary>

+        private static ByteString Bytes(string str)

+        {

+            byte[] bytes = new byte[str.Length];

+            for (int i = 0; i < bytes.Length; i++)

+                bytes[i] = (byte)str[i];

+            return ByteString.CopyFrom(bytes);

+        }

+

+        [TestMethod]

+        public void PrintExotic()

+        {

+            IMessage message = TestAllTypes.CreateBuilder()

+                // Signed vs. unsigned numbers.

+                .AddRepeatedInt32(-1)

+                .AddRepeatedUint32(uint.MaxValue)

+                .AddRepeatedInt64(-1)

+                .AddRepeatedUint64(ulong.MaxValue)

+                .AddRepeatedInt32(1 << 31)

+                .AddRepeatedUint32(1U << 31)

+                .AddRepeatedInt64(1L << 63)

+                .AddRepeatedUint64(1UL << 63)

+

+                // Floats of various precisions and exponents.

+                .AddRepeatedDouble(123)

+                .AddRepeatedDouble(123.5)

+                .AddRepeatedDouble(0.125)

+                .AddRepeatedDouble(123e15)

+                .AddRepeatedDouble(123.5e20)

+                .AddRepeatedDouble(123.5e-20)

+                .AddRepeatedDouble(123.456789)

+                .AddRepeatedDouble(Double.PositiveInfinity)

+                .AddRepeatedDouble(Double.NegativeInfinity)

+                .AddRepeatedDouble(Double.NaN)

+

+                // Strings and bytes that needing escaping.

+                .AddRepeatedString("\0\u0001\u0007\b\f\n\r\t\v\\\'\"\u1234")

+                .AddRepeatedBytes(Bytes("\0\u0001\u0007\b\f\n\r\t\v\\\'\"\u00fe"))

+                .Build();

+

+            Assert.AreEqual(ExoticText, message.ToString());

+        }

+

+        [TestMethod]

+        public void PrintMessageSet()

+        {

+            TestMessageSet messageSet =

+                TestMessageSet.CreateBuilder()

+                    .SetExtension(

+                        TestMessageSetExtension1.MessageSetExtension,

+                        TestMessageSetExtension1.CreateBuilder().SetI(123).Build())

+                    .SetExtension(

+                        TestMessageSetExtension2.MessageSetExtension,

+                        TestMessageSetExtension2.CreateBuilder().SetStr("foo").Build())

+                    .Build();

+

+            Assert.AreEqual(MessageSetText, messageSet.ToString());

+        }

+

+        // =================================================================

+

+        [TestMethod]

+        public void Parse()

+        {

+            TestUtil.TestInMultipleCultures(() =>

+                                                {

+                                                    TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+                                                    TextFormat.Merge(AllFieldsSetText, builder);

+                                                    TestUtil.AssertAllFieldsSet(builder.Build());

+                                                });

+        }

+

+        [TestMethod]

+        public void ParseReader()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TextFormat.Merge(new StringReader(AllFieldsSetText), builder);

+            TestUtil.AssertAllFieldsSet(builder.Build());

+        }

+

+        [TestMethod]

+        public void ParseExtensions()

+        {

+            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();

+            TextFormat.Merge(AllExtensionsSetText,

+                             TestUtil.CreateExtensionRegistry(),

+                             builder);

+            TestUtil.AssertAllExtensionsSet(builder.Build());

+        }

+

+        [TestMethod]

+        public void ParseCompatibility()

+        {

+            string original = "repeated_float: inf\n" +

+                              "repeated_float: -inf\n" +

+                              "repeated_float: nan\n" +

+                              "repeated_float: inff\n" +

+                              "repeated_float: -inff\n" +

+                              "repeated_float: nanf\n" +

+                              "repeated_float: 1.0f\n" +

+                              "repeated_float: infinityf\n" +

+                              "repeated_float: -Infinityf\n" +

+                              "repeated_double: infinity\n" +

+                              "repeated_double: -infinity\n" +

+                              "repeated_double: nan\n";

+            string canonical = "repeated_float: Infinity\n" +

+                               "repeated_float: -Infinity\n" +

+                               "repeated_float: NaN\n" +

+                               "repeated_float: Infinity\n" +

+                               "repeated_float: -Infinity\n" +

+                               "repeated_float: NaN\n" +

+                               "repeated_float: 1\n" + // Java has 1.0; this is fine

+                               "repeated_float: Infinity\n" +

+                               "repeated_float: -Infinity\n" +

+                               "repeated_double: Infinity\n" +

+                               "repeated_double: -Infinity\n" +

+                               "repeated_double: NaN\n";

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TextFormat.Merge(original, builder);

+            Assert.AreEqual(canonical, builder.Build().ToString());

+        }

+

+        [TestMethod]

+        public void ParseExotic()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TextFormat.Merge(ExoticText, builder);

+

+            // Too lazy to check things individually.  Don't try to debug this

+            // if testPrintExotic() is Assert.Failing.

+            Assert.AreEqual(ExoticText, builder.Build().ToString());

+        }

+

+        [TestMethod]

+        public void ParseMessageSet()

+        {

+            ExtensionRegistry extensionRegistry = ExtensionRegistry.CreateInstance();

+            extensionRegistry.Add(TestMessageSetExtension1.MessageSetExtension);

+            extensionRegistry.Add(TestMessageSetExtension2.MessageSetExtension);

+

+            TestMessageSet.Builder builder = TestMessageSet.CreateBuilder();

+            TextFormat.Merge(MessageSetText, extensionRegistry, builder);

+            TestMessageSet messageSet = builder.Build();

+

+            Assert.IsTrue(messageSet.HasExtension(TestMessageSetExtension1.MessageSetExtension));

+            Assert.AreEqual(123, messageSet.GetExtension(TestMessageSetExtension1.MessageSetExtension).I);

+            Assert.IsTrue(messageSet.HasExtension(TestMessageSetExtension2.MessageSetExtension));

+            Assert.AreEqual("foo", messageSet.GetExtension(TestMessageSetExtension2.MessageSetExtension).Str);

+        }

+

+        [TestMethod]

+        public void ParseNumericEnum()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TextFormat.Merge("optional_nested_enum: 2", builder);

+            Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR, builder.OptionalNestedEnum);

+        }

+

+        [TestMethod]

+        public void ParseAngleBrackets()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TextFormat.Merge("OptionalGroup: < a: 1 >", builder);

+            Assert.IsTrue(builder.HasOptionalGroup);

+            Assert.AreEqual(1, builder.OptionalGroup.A);

+        }

+

+        [TestMethod]

+        public void ParseComment()

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TextFormat.Merge(

+                "# this is a comment\n" +

+                "optional_int32: 1  # another comment\n" +

+                "optional_int64: 2\n" +

+                "# EOF comment", builder);

+            Assert.AreEqual(1, builder.OptionalInt32);

+            Assert.AreEqual(2, builder.OptionalInt64);

+        }

+

+

+        private static void AssertParseError(string error, string text)

+        {

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            try

+            {

+                TextFormat.Merge(text, TestUtil.CreateExtensionRegistry(), builder);

+                Assert.Fail("Expected parse exception.");

+            }

+            catch (FormatException e)

+            {

+                Assert.AreEqual(error, e.Message);

+            }

+        }

+

+        [TestMethod]

+        public void ParseErrors()

+        {

+            AssertParseError(

+                "1:16: Expected \":\".",

+                "optional_int32 123");

+            AssertParseError(

+                "1:23: Expected identifier.",

+                "optional_nested_enum: ?");

+            AssertParseError(

+                "1:18: Couldn't parse integer: Number must be positive: -1",

+                "optional_uint32: -1");

+            AssertParseError(

+                "1:17: Couldn't parse integer: Number out of range for 32-bit signed " +

+                "integer: 82301481290849012385230157",

+                "optional_int32: 82301481290849012385230157");

+            AssertParseError(

+                "1:16: Expected \"true\" or \"false\".",

+                "optional_bool: maybe");

+            AssertParseError(

+                "1:18: Expected string.",

+                "optional_string: 123");

+            AssertParseError(

+                "1:18: String missing ending quote.",

+                "optional_string: \"ueoauaoe");

+            AssertParseError(

+                "1:18: String missing ending quote.",

+                "optional_string: \"ueoauaoe\n" +

+                "optional_int32: 123");

+            AssertParseError(

+                "1:18: Invalid escape sequence: '\\z'",

+                "optional_string: \"\\z\"");

+            AssertParseError(

+                "1:18: String missing ending quote.",

+                "optional_string: \"ueoauaoe\n" +

+                "optional_int32: 123");

+            AssertParseError(

+                "1:2: Extension \"nosuchext\" not found in the ExtensionRegistry.",

+                "[nosuchext]: 123");

+            AssertParseError(

+                "1:20: Extension \"protobuf_unittest.optional_int32_extension\" " +

+                "not found in the ExtensionRegistry.",

+                "[protobuf_unittest.optional_int32_extension]: 123");

+            AssertParseError(

+                "1:1: Message type \"protobuf_unittest.TestAllTypes\" has no field " +

+                "named \"nosuchfield\".",

+                "nosuchfield: 123");

+            AssertParseError(

+                "1:21: Expected \">\".",

+                "OptionalGroup < a: 1");

+            AssertParseError(

+                "1:23: Enum type \"protobuf_unittest.TestAllTypes.NestedEnum\" has no " +

+                "value named \"NO_SUCH_VALUE\".",

+                "optional_nested_enum: NO_SUCH_VALUE");

+            AssertParseError(

+                "1:23: Enum type \"protobuf_unittest.TestAllTypes.NestedEnum\" has no " +

+                "value with number 123.",

+                "optional_nested_enum: 123");

+

+            // Delimiters must match.

+            AssertParseError(

+                "1:22: Expected identifier.",

+                "OptionalGroup < a: 1 }");

+            AssertParseError(

+                "1:22: Expected identifier.",

+                "OptionalGroup { a: 1 >");

+        }

+

+        // =================================================================

+

+        private static ByteString Bytes(params byte[] bytes)

+        {

+            return ByteString.CopyFrom(bytes);

+        }

+

+        private delegate void FormattingAction();

+

+        private static void AssertFormatException(FormattingAction action)

+        {

+            try

+            {

+                action();

+                Assert.Fail("Should have thrown an exception.");

+            }

+            catch (FormatException)

+            {

+                // success

+            }

+        }

+

+        [TestMethod]

+        public void Escape()

+        {

+            // Escape sequences.

+            Assert.AreEqual("\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\"",

+                            TextFormat.EscapeBytes(Bytes("\0\u0001\u0007\b\f\n\r\t\v\\\'\"")));

+            Assert.AreEqual("\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\"",

+                            TextFormat.EscapeText("\0\u0001\u0007\b\f\n\r\t\v\\\'\""));

+            Assert.AreEqual(Bytes("\0\u0001\u0007\b\f\n\r\t\v\\\'\""),

+                            TextFormat.UnescapeBytes("\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\""));

+            Assert.AreEqual("\0\u0001\u0007\b\f\n\r\t\v\\\'\"",

+                            TextFormat.UnescapeText("\\000\\001\\a\\b\\f\\n\\r\\t\\v\\\\\\'\\\""));

+

+            // Unicode handling.

+            Assert.AreEqual("\\341\\210\\264", TextFormat.EscapeText("\u1234"));

+            Assert.AreEqual("\\341\\210\\264", TextFormat.EscapeBytes(Bytes(0xe1, 0x88, 0xb4)));

+            Assert.AreEqual("\u1234", TextFormat.UnescapeText("\\341\\210\\264"));

+            Assert.AreEqual(Bytes(0xe1, 0x88, 0xb4), TextFormat.UnescapeBytes("\\341\\210\\264"));

+            Assert.AreEqual("\u1234", TextFormat.UnescapeText("\\xe1\\x88\\xb4"));

+            Assert.AreEqual(Bytes(0xe1, 0x88, 0xb4), TextFormat.UnescapeBytes("\\xe1\\x88\\xb4"));

+

+            // Errors.

+            AssertFormatException(() => TextFormat.UnescapeText("\\x"));

+            AssertFormatException(() => TextFormat.UnescapeText("\\z"));

+            AssertFormatException(() => TextFormat.UnescapeText("\\"));

+        }

+

+        [TestMethod]

+        public void ParseInteger()

+        {

+            Assert.AreEqual(0, TextFormat.ParseInt32("0"));

+            Assert.AreEqual(1, TextFormat.ParseInt32("1"));

+            Assert.AreEqual(-1, TextFormat.ParseInt32("-1"));

+            Assert.AreEqual(12345, TextFormat.ParseInt32("12345"));

+            Assert.AreEqual(-12345, TextFormat.ParseInt32("-12345"));

+            Assert.AreEqual(2147483647, TextFormat.ParseInt32("2147483647"));

+            Assert.AreEqual(-2147483648, TextFormat.ParseInt32("-2147483648"));

+

+            Assert.AreEqual(0u, TextFormat.ParseUInt32("0"));

+            Assert.AreEqual(1u, TextFormat.ParseUInt32("1"));

+            Assert.AreEqual(12345u, TextFormat.ParseUInt32("12345"));

+            Assert.AreEqual(2147483647u, TextFormat.ParseUInt32("2147483647"));

+            Assert.AreEqual(2147483648U, TextFormat.ParseUInt32("2147483648"));

+            Assert.AreEqual(4294967295U, TextFormat.ParseUInt32("4294967295"));

+

+            Assert.AreEqual(0L, TextFormat.ParseInt64("0"));

+            Assert.AreEqual(1L, TextFormat.ParseInt64("1"));

+            Assert.AreEqual(-1L, TextFormat.ParseInt64("-1"));

+            Assert.AreEqual(12345L, TextFormat.ParseInt64("12345"));

+            Assert.AreEqual(-12345L, TextFormat.ParseInt64("-12345"));

+            Assert.AreEqual(2147483647L, TextFormat.ParseInt64("2147483647"));

+            Assert.AreEqual(-2147483648L, TextFormat.ParseInt64("-2147483648"));

+            Assert.AreEqual(4294967295L, TextFormat.ParseInt64("4294967295"));

+            Assert.AreEqual(4294967296L, TextFormat.ParseInt64("4294967296"));

+            Assert.AreEqual(9223372036854775807L, TextFormat.ParseInt64("9223372036854775807"));

+            Assert.AreEqual(-9223372036854775808L, TextFormat.ParseInt64("-9223372036854775808"));

+

+            Assert.AreEqual(0uL, TextFormat.ParseUInt64("0"));

+            Assert.AreEqual(1uL, TextFormat.ParseUInt64("1"));

+            Assert.AreEqual(12345uL, TextFormat.ParseUInt64("12345"));

+            Assert.AreEqual(2147483647uL, TextFormat.ParseUInt64("2147483647"));

+            Assert.AreEqual(4294967295uL, TextFormat.ParseUInt64("4294967295"));

+            Assert.AreEqual(4294967296uL, TextFormat.ParseUInt64("4294967296"));

+            Assert.AreEqual(9223372036854775807UL, TextFormat.ParseUInt64("9223372036854775807"));

+            Assert.AreEqual(9223372036854775808UL, TextFormat.ParseUInt64("9223372036854775808"));

+            Assert.AreEqual(18446744073709551615UL, TextFormat.ParseUInt64("18446744073709551615"));

+

+            // Hex

+            Assert.AreEqual(0x1234abcd, TextFormat.ParseInt32("0x1234abcd"));

+            Assert.AreEqual(-0x1234abcd, TextFormat.ParseInt32("-0x1234abcd"));

+            Assert.AreEqual(0xffffffffffffffffUL, TextFormat.ParseUInt64("0xffffffffffffffff"));

+            Assert.AreEqual(0x7fffffffffffffffL,

+                            TextFormat.ParseInt64("0x7fffffffffffffff"));

+

+            // Octal

+            Assert.AreEqual(342391, TextFormat.ParseInt32("01234567"));

+

+            // Out-of-range

+            AssertFormatException(() => TextFormat.ParseInt32("2147483648"));

+            AssertFormatException(() => TextFormat.ParseInt32("-2147483649"));

+            AssertFormatException(() => TextFormat.ParseUInt32("4294967296"));

+            AssertFormatException(() => TextFormat.ParseUInt32("-1"));

+            AssertFormatException(() => TextFormat.ParseInt64("9223372036854775808"));

+            AssertFormatException(() => TextFormat.ParseInt64("-9223372036854775809"));

+            AssertFormatException(() => TextFormat.ParseUInt64("18446744073709551616"));

+            AssertFormatException(() => TextFormat.ParseUInt64("-1"));

+            AssertFormatException(() => TextFormat.ParseInt32("abcd"));

+        }

+

+        [TestMethod]

+        public void ParseLongString()

+        {

+            string longText =

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890" +

+                "123456789012345678901234567890123456789012345678901234567890";

+            TestAllTypes.Builder builder = TestAllTypes.CreateBuilder();

+            TextFormat.Merge("optional_string: \"" + longText + "\"", builder);

+            Assert.AreEqual(longText, builder.OptionalString);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/UnknownFieldSetTest.cs b/csharp/src/ProtocolBuffers.Test/UnknownFieldSetTest.cs
new file mode 100644
index 0000000..f9bfd84
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/UnknownFieldSetTest.cs
@@ -0,0 +1,433 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Descriptors;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class UnknownFieldSetTest

+    {

+        private MessageDescriptor descriptor;

+        private TestAllTypes allFields;

+        private ByteString allFieldsData;

+

+        /// <summary>

+        /// An empty message that has been parsed from allFieldsData.  So, it has

+        /// unknown fields of every type.

+        /// </summary>

+        private TestEmptyMessage emptyMessage;

+

+        private UnknownFieldSet unknownFields;

+

+        [TestInitialize]

+        public void SetUp()

+        {

+            descriptor = TestAllTypes.Descriptor;

+            allFields = TestUtil.GetAllSet();

+            allFieldsData = allFields.ToByteString();

+            emptyMessage = TestEmptyMessage.ParseFrom(allFieldsData);

+            unknownFields = emptyMessage.UnknownFields;

+        }

+

+        private UnknownField GetField(String name)

+        {

+            FieldDescriptor field = descriptor.FindDescriptor<FieldDescriptor>(name);

+            Assert.IsNotNull(field);

+            return unknownFields.FieldDictionary[field.FieldNumber];

+        }

+

+        /// <summary>

+        /// Constructs a protocol buffer which contains fields with all the same

+        /// numbers as allFieldsData except that each field is some other wire

+        /// type.

+        /// </summary>

+        private ByteString GetBizarroData()

+        {

+            UnknownFieldSet.Builder bizarroFields = UnknownFieldSet.CreateBuilder();

+

+            UnknownField varintField = UnknownField.CreateBuilder().AddVarint(1).Build();

+            UnknownField fixed32Field = UnknownField.CreateBuilder().AddFixed32(1).Build();

+

+            foreach (KeyValuePair<int, UnknownField> entry in unknownFields.FieldDictionary)

+            {

+                if (entry.Value.VarintList.Count == 0)

+                {

+                    // Original field is not a varint, so use a varint.

+                    bizarroFields.AddField(entry.Key, varintField);

+                }

+                else

+                {

+                    // Original field *is* a varint, so use something else.

+                    bizarroFields.AddField(entry.Key, fixed32Field);

+                }

+            }

+

+            return bizarroFields.Build().ToByteString();

+        }

+

+        // =================================================================

+

+        [TestMethod]

+        public void Varint()

+        {

+            UnknownField field = GetField("optional_int32");

+            Assert.AreEqual(1, field.VarintList.Count);

+            Assert.AreEqual(allFields.OptionalInt32, (long) field.VarintList[0]);

+        }

+

+        [TestMethod]

+        public void Fixed32()

+        {

+            UnknownField field = GetField("optional_fixed32");

+            Assert.AreEqual(1, field.Fixed32List.Count);

+            Assert.AreEqual<long>(allFields.OptionalFixed32, (int) field.Fixed32List[0]);

+        }

+

+        [TestMethod]

+        public void Fixed64()

+        {

+            UnknownField field = GetField("optional_fixed64");

+            Assert.AreEqual(1, field.Fixed64List.Count);

+            Assert.AreEqual((long)allFields.OptionalFixed64, (long)field.Fixed64List[0]);

+        }

+

+        [TestMethod]

+        public void LengthDelimited()

+        {

+            UnknownField field = GetField("optional_bytes");

+            Assert.AreEqual(1, field.LengthDelimitedList.Count);

+            Assert.AreEqual(allFields.OptionalBytes, field.LengthDelimitedList[0]);

+        }

+

+        [TestMethod]

+        public void Group()

+        {

+            FieldDescriptor nestedFieldDescriptor =

+                TestAllTypes.Types.OptionalGroup.Descriptor.FindDescriptor<FieldDescriptor>("a");

+            Assert.IsNotNull(nestedFieldDescriptor);

+

+            UnknownField field = GetField("optionalgroup");

+            Assert.AreEqual(1, field.GroupList.Count);

+

+            UnknownFieldSet group = field.GroupList[0];

+            Assert.AreEqual(1, group.FieldDictionary.Count);

+            Assert.IsTrue(group.HasField(nestedFieldDescriptor.FieldNumber));

+

+            UnknownField nestedField = group[nestedFieldDescriptor.FieldNumber];

+            Assert.AreEqual(1, nestedField.VarintList.Count);

+            Assert.AreEqual(allFields.OptionalGroup.A, (long) nestedField.VarintList[0]);

+        }

+

+        [TestMethod]

+        public void Serialize()

+        {

+            // Check that serializing the UnknownFieldSet produces the original data again.

+            ByteString data = emptyMessage.ToByteString();

+            Assert.AreEqual(allFieldsData, data);

+        }

+

+        [TestMethod]

+        public void CopyFrom()

+        {

+            TestEmptyMessage message =

+                TestEmptyMessage.CreateBuilder().MergeFrom(emptyMessage).Build();

+

+            Assert.AreEqual(emptyMessage.ToString(), message.ToString());

+        }

+

+        [TestMethod]

+        public void MergeFrom()

+        {

+            TestEmptyMessage source =

+                TestEmptyMessage.CreateBuilder()

+                    .SetUnknownFields(

+                        UnknownFieldSet.CreateBuilder()

+                            .AddField(2,

+                                      UnknownField.CreateBuilder()

+                                          .AddVarint(2).Build())

+                            .AddField(3,

+                                      UnknownField.CreateBuilder()

+                                          .AddVarint(4).Build())

+                            .Build())

+                    .Build();

+            TestEmptyMessage destination =

+                TestEmptyMessage.CreateBuilder()

+                    .SetUnknownFields(

+                        UnknownFieldSet.CreateBuilder()

+                            .AddField(1,

+                                      UnknownField.CreateBuilder()

+                                          .AddVarint(1).Build())

+                            .AddField(3,

+                                      UnknownField.CreateBuilder()

+                                          .AddVarint(3).Build())

+                            .Build())

+                    .MergeFrom(source)

+                    .Build();

+

+            Assert.AreEqual(

+                "1: 1\n" +

+                "2: 2\n" +

+                "3: 3\n" +

+                "3: 4\n",

+                destination.ToString());

+        }

+

+        [TestMethod]

+        public void Clear()

+        {

+            UnknownFieldSet fields =

+                UnknownFieldSet.CreateBuilder().MergeFrom(unknownFields).Clear().Build();

+            Assert.AreEqual(0, fields.FieldDictionary.Count);

+        }

+

+        [TestMethod]

+        public void ClearMessage()

+        {

+            TestEmptyMessage message =

+                TestEmptyMessage.CreateBuilder().MergeFrom(emptyMessage).Clear().Build();

+            Assert.AreEqual(0, message.SerializedSize);

+        }

+

+        [TestMethod]

+        public void ParseKnownAndUnknown()

+        {

+            // Test mixing known and unknown fields when parsing.

+

+            UnknownFieldSet fields =

+                UnknownFieldSet.CreateBuilder(unknownFields)

+                    .AddField(123456,

+                              UnknownField.CreateBuilder().AddVarint(654321).Build())

+                    .Build();

+

+            ByteString data = fields.ToByteString();

+            TestAllTypes destination = TestAllTypes.ParseFrom(data);

+

+            TestUtil.AssertAllFieldsSet(destination);

+            Assert.AreEqual(1, destination.UnknownFields.FieldDictionary.Count);

+

+            UnknownField field = destination.UnknownFields[123456];

+            Assert.AreEqual(1, field.VarintList.Count);

+            Assert.AreEqual(654321, (long) field.VarintList[0]);

+        }

+

+        [TestMethod]

+        public void WrongTypeTreatedAsUnknown()

+        {

+            // Test that fields of the wrong wire type are treated like unknown fields

+            // when parsing.

+

+            ByteString bizarroData = GetBizarroData();

+            TestAllTypes allTypesMessage = TestAllTypes.ParseFrom(bizarroData);

+            TestEmptyMessage emptyMessage = TestEmptyMessage.ParseFrom(bizarroData);

+

+            // All fields should have been interpreted as unknown, so the debug strings

+            // should be the same.

+            Assert.AreEqual(emptyMessage.ToString(), allTypesMessage.ToString());

+        }

+

+        [TestMethod]

+        public void UnknownExtensions()

+        {

+            // Make sure fields are properly parsed to the UnknownFieldSet even when

+            // they are declared as extension numbers.

+

+            TestEmptyMessageWithExtensions message =

+                TestEmptyMessageWithExtensions.ParseFrom(allFieldsData);

+

+            Assert.AreEqual(unknownFields.FieldDictionary.Count,

+                            message.UnknownFields.FieldDictionary.Count);

+            Assert.AreEqual(allFieldsData, message.ToByteString());

+        }

+

+        [TestMethod]

+        public void WrongExtensionTypeTreatedAsUnknown()

+        {

+            // Test that fields of the wrong wire type are treated like unknown fields

+            // when parsing extensions.

+

+            ByteString bizarroData = GetBizarroData();

+            TestAllExtensions allExtensionsMessage = TestAllExtensions.ParseFrom(bizarroData);

+            TestEmptyMessage emptyMessage = TestEmptyMessage.ParseFrom(bizarroData);

+

+            // All fields should have been interpreted as unknown, so the debug strings

+            // should be the same.

+            Assert.AreEqual(emptyMessage.ToString(),

+                            allExtensionsMessage.ToString());

+        }

+

+        [TestMethod]

+        public void ParseUnknownEnumValue()

+        {

+            FieldDescriptor singularField =

+                TestAllTypes.Descriptor.FindDescriptor<FieldDescriptor>("optional_nested_enum");

+            FieldDescriptor repeatedField =

+                TestAllTypes.Descriptor.FindDescriptor<FieldDescriptor>("repeated_nested_enum");

+            Assert.IsNotNull(singularField);

+            Assert.IsNotNull(repeatedField);

+

+            ByteString data =

+                UnknownFieldSet.CreateBuilder()

+                    .AddField(singularField.FieldNumber,

+                              UnknownField.CreateBuilder()

+                                  .AddVarint((int) TestAllTypes.Types.NestedEnum.BAR)

+                                  .AddVarint(5) // not valid

+                                  .Build())

+                    .AddField(repeatedField.FieldNumber,

+                              UnknownField.CreateBuilder()

+                                  .AddVarint((int) TestAllTypes.Types.NestedEnum.FOO)

+                                  .AddVarint(4) // not valid

+                                  .AddVarint((int) TestAllTypes.Types.NestedEnum.BAZ)

+                                  .AddVarint(6) // not valid

+                                  .Build())

+                    .Build()

+                    .ToByteString();

+

+            {

+                TestAllTypes message = TestAllTypes.ParseFrom(data);

+                Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR,

+                                message.OptionalNestedEnum);

+                TestUtil.AssertEqual(new[] {TestAllTypes.Types.NestedEnum.FOO, TestAllTypes.Types.NestedEnum.BAZ},

+                                     message.RepeatedNestedEnumList);

+                TestUtil.AssertEqual(new[] {5UL}, message.UnknownFields[singularField.FieldNumber].VarintList);

+                TestUtil.AssertEqual(new[] {4UL, 6UL}, message.UnknownFields[repeatedField.FieldNumber].VarintList);

+            }

+

+            {

+                TestAllExtensions message =

+                    TestAllExtensions.ParseFrom(data, TestUtil.CreateExtensionRegistry());

+                Assert.AreEqual(TestAllTypes.Types.NestedEnum.BAR,

+                                message.GetExtension(UnitTestProtoFile.OptionalNestedEnumExtension));

+                TestUtil.AssertEqual(new[] {TestAllTypes.Types.NestedEnum.FOO, TestAllTypes.Types.NestedEnum.BAZ},

+                                     message.GetExtension(UnitTestProtoFile.RepeatedNestedEnumExtension));

+                TestUtil.AssertEqual(new[] {5UL}, message.UnknownFields[singularField.FieldNumber].VarintList);

+                TestUtil.AssertEqual(new[] {4UL, 6UL}, message.UnknownFields[repeatedField.FieldNumber].VarintList);

+            }

+        }

+

+        [TestMethod]

+        public void LargeVarint()

+        {

+            ByteString data =

+                UnknownFieldSet.CreateBuilder()

+                    .AddField(1,

+                              UnknownField.CreateBuilder()

+                                  .AddVarint(0x7FFFFFFFFFFFFFFFL)

+                                  .Build())

+                    .Build()

+                    .ToByteString();

+            UnknownFieldSet parsed = UnknownFieldSet.ParseFrom(data);

+            UnknownField field = parsed[1];

+            Assert.AreEqual(1, field.VarintList.Count);

+            Assert.AreEqual(0x7FFFFFFFFFFFFFFFUL, field.VarintList[0]);

+        }

+

+        [TestMethod]

+        public void EqualsAndHashCode()

+        {

+            UnknownField fixed32Field = UnknownField.CreateBuilder().AddFixed32(1).Build();

+            UnknownField fixed64Field = UnknownField.CreateBuilder().AddFixed64(1).Build();

+            UnknownField varIntField = UnknownField.CreateBuilder().AddVarint(1).Build();

+            UnknownField lengthDelimitedField =

+                UnknownField.CreateBuilder().AddLengthDelimited(ByteString.Empty).Build();

+            UnknownField groupField = UnknownField.CreateBuilder().AddGroup(unknownFields).Build();

+

+            UnknownFieldSet a = UnknownFieldSet.CreateBuilder().AddField(1, fixed32Field).Build();

+            UnknownFieldSet b = UnknownFieldSet.CreateBuilder().AddField(1, fixed64Field).Build();

+            UnknownFieldSet c = UnknownFieldSet.CreateBuilder().AddField(1, varIntField).Build();

+            UnknownFieldSet d = UnknownFieldSet.CreateBuilder().AddField(1, lengthDelimitedField).Build();

+            UnknownFieldSet e = UnknownFieldSet.CreateBuilder().AddField(1, groupField).Build();

+

+            CheckEqualsIsConsistent(a);

+            CheckEqualsIsConsistent(b);

+            CheckEqualsIsConsistent(c);

+            CheckEqualsIsConsistent(d);

+            CheckEqualsIsConsistent(e);

+

+            CheckNotEqual(a, b);

+            CheckNotEqual(a, c);

+            CheckNotEqual(a, d);

+            CheckNotEqual(a, e);

+            CheckNotEqual(b, c);

+            CheckNotEqual(b, d);

+            CheckNotEqual(b, e);

+            CheckNotEqual(c, d);

+            CheckNotEqual(c, e);

+            CheckNotEqual(d, e);

+        }

+

+        /// <summary>

+        /// Asserts that the given field sets are not equal and have different

+        /// hash codes.

+        /// </summary>

+        /// <remarks>

+        /// It's valid for non-equal objects to have the same hash code, so

+        /// this test is stricter than it needs to be. However, this should happen

+        /// relatively rarely.

+        /// </remarks>

+        /// <param name="s1"></param>

+        /// <param name="s2"></param>

+        private static void CheckNotEqual(UnknownFieldSet s1, UnknownFieldSet s2)

+        {

+            String equalsError = string.Format("{0} should not be equal to {1}", s1, s2);

+            Assert.IsFalse(s1.Equals(s2), equalsError);

+            Assert.IsFalse(s2.Equals(s1), equalsError);

+

+            Assert.IsFalse(s1.GetHashCode() == s2.GetHashCode(),

+                           string.Format("{0} should have a different hash code from {1}", s1, s2));

+        }

+

+        /**

+     * Asserts that the given field sets are equal and have identical hash codes.

+     */

+

+        private static void CheckEqualsIsConsistent(UnknownFieldSet set)

+        {

+            // Object should be equal to itself.

+            Assert.AreEqual(set, set);

+

+            // Object should be equal to a copy of itself.

+            UnknownFieldSet copy = UnknownFieldSet.CreateBuilder(set).Build();

+            Assert.AreEqual(set, copy);

+            Assert.AreEqual(copy, set);

+            Assert.AreEqual(set.GetHashCode(), copy.GetHashCode());

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.Test/WireFormatTest.cs b/csharp/src/ProtocolBuffers.Test/WireFormatTest.cs
new file mode 100644
index 0000000..2e2c077
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.Test/WireFormatTest.cs
@@ -0,0 +1,312 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.IO;

+using System.Reflection;

+using Google.ProtocolBuffers.Descriptors;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class WireFormatTest

+    {

+        /// <summary>

+        /// Keeps the attributes on FieldType and the switch statement in WireFormat in sync.

+        /// </summary>

+        [TestMethod]

+        public void FieldTypeToWireTypeMapping()

+        {

+            foreach (FieldInfo field in typeof(FieldType).GetFields(BindingFlags.Static | BindingFlags.Public))

+            {

+                FieldType fieldType = (FieldType) field.GetValue(null);

+                FieldMappingAttribute mapping =

+                    (FieldMappingAttribute) field.GetCustomAttributes(typeof(FieldMappingAttribute), false)[0];

+                Assert.AreEqual(mapping.WireType, WireFormat.GetWireType(fieldType));

+            }

+        }

+

+        [TestMethod]

+        public void Serialization()

+        {

+            TestAllTypes message = TestUtil.GetAllSet();

+

+            ByteString rawBytes = message.ToByteString();

+            Assert.AreEqual(rawBytes.Length, message.SerializedSize);

+

+            TestAllTypes message2 = TestAllTypes.ParseFrom(rawBytes);

+

+            TestUtil.AssertAllFieldsSet(message2);

+        }

+

+        [TestMethod]

+        public void SerializationPacked()

+        {

+            TestPackedTypes message = TestUtil.GetPackedSet();

+            ByteString rawBytes = message.ToByteString();

+            Assert.AreEqual(rawBytes.Length, message.SerializedSize);

+            TestPackedTypes message2 = TestPackedTypes.ParseFrom(rawBytes);

+            TestUtil.AssertPackedFieldsSet(message2);

+        }

+

+        [TestMethod]

+        public void SerializeExtensions()

+        {

+            // TestAllTypes and TestAllExtensions should have compatible wire formats,

+            // so if we serialize a TestAllExtensions then parse it as TestAllTypes

+            // it should work.

+            TestAllExtensions message = TestUtil.GetAllExtensionsSet();

+            ByteString rawBytes = message.ToByteString();

+            Assert.AreEqual(rawBytes.Length, message.SerializedSize);

+

+            TestAllTypes message2 = TestAllTypes.ParseFrom(rawBytes);

+

+            TestUtil.AssertAllFieldsSet(message2);

+        }

+

+        [TestMethod]

+        public void SerializePackedExtensions()

+        {

+            // TestPackedTypes and TestPackedExtensions should have compatible wire

+            // formats; check that they serialize to the same string.

+            TestPackedExtensions message = TestUtil.GetPackedExtensionsSet();

+            ByteString rawBytes = message.ToByteString();

+

+            TestPackedTypes message2 = TestUtil.GetPackedSet();

+            ByteString rawBytes2 = message2.ToByteString();

+

+            Assert.AreEqual(rawBytes, rawBytes2);

+        }

+

+        [TestMethod]

+        public void SerializeDelimited()

+        {

+            MemoryStream stream = new MemoryStream();

+            TestUtil.GetAllSet().WriteDelimitedTo(stream);

+            stream.WriteByte(12);

+            TestUtil.GetPackedSet().WriteDelimitedTo(stream);

+            stream.WriteByte(34);

+

+            stream.Position = 0;

+

+            TestUtil.AssertAllFieldsSet(TestAllTypes.ParseDelimitedFrom(stream));

+            Assert.AreEqual(12, stream.ReadByte());

+            TestUtil.AssertPackedFieldsSet(TestPackedTypes.ParseDelimitedFrom(stream));

+            Assert.AreEqual(34, stream.ReadByte());

+            Assert.AreEqual(-1, stream.ReadByte());

+        }

+

+        [TestMethod]

+        public void ParseExtensions()

+        {

+            // TestAllTypes and TestAllExtensions should have compatible wire formats,

+            // so if we serealize a TestAllTypes then parse it as TestAllExtensions

+            // it should work.

+

+            TestAllTypes message = TestUtil.GetAllSet();

+            ByteString rawBytes = message.ToByteString();

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            TestUtil.RegisterAllExtensions(registry);

+            registry = registry.AsReadOnly();

+

+            TestAllExtensions message2 = TestAllExtensions.ParseFrom(rawBytes, registry);

+

+            TestUtil.AssertAllExtensionsSet(message2);

+        }

+

+        [TestMethod]

+        public void ParsePackedExtensions()

+        {

+            // Ensure that packed extensions can be properly parsed.

+            TestPackedExtensions message = TestUtil.GetPackedExtensionsSet();

+            ByteString rawBytes = message.ToByteString();

+

+            ExtensionRegistry registry = TestUtil.CreateExtensionRegistry();

+

+            TestPackedExtensions message2 = TestPackedExtensions.ParseFrom(rawBytes, registry);

+            TestUtil.AssertPackedExtensionsSet(message2);

+        }

+

+        [TestMethod]

+        public void ExtensionsSerializedSize()

+        {

+            Assert.AreEqual(TestUtil.GetAllSet().SerializedSize, TestUtil.GetAllExtensionsSet().SerializedSize);

+        }

+

+        private static void AssertFieldsInOrder(ByteString data)

+        {

+            CodedInputStream input = data.CreateCodedInput();

+            uint previousTag = 0;

+

+            uint tag;

+            string name;

+            while (input.ReadTag(out tag, out name))

+            {

+                Assert.IsTrue(tag > previousTag);

+                previousTag = tag;

+                input.SkipField();

+            }

+        }

+

+        [TestMethod]

+        public void InterleavedFieldsAndExtensions()

+        {

+            // Tests that fields are written in order even when extension ranges

+            // are interleaved with field numbers.

+            ByteString data =

+                TestFieldOrderings.CreateBuilder()

+                    .SetMyInt(1)

+                    .SetMyString("foo")

+                    .SetMyFloat(1.0F)

+                    .SetExtension(UnitTestProtoFile.MyExtensionInt, 23)

+                    .SetExtension(UnitTestProtoFile.MyExtensionString, "bar")

+                    .Build().ToByteString();

+            AssertFieldsInOrder(data);

+

+            MessageDescriptor descriptor = TestFieldOrderings.Descriptor;

+            ByteString dynamic_data =

+                DynamicMessage.CreateBuilder(TestFieldOrderings.Descriptor)

+                    .SetField(descriptor.FindDescriptor<FieldDescriptor>("my_int"), 1L)

+                    .SetField(descriptor.FindDescriptor<FieldDescriptor>("my_string"), "foo")

+                    .SetField(descriptor.FindDescriptor<FieldDescriptor>("my_float"), 1.0F)

+                    .SetField(UnitTestProtoFile.MyExtensionInt.Descriptor, 23)

+                    .SetField(UnitTestProtoFile.MyExtensionString.Descriptor, "bar")

+                    .WeakBuild().ToByteString();

+            AssertFieldsInOrder(dynamic_data);

+        }

+

+        private const int UnknownTypeId = 1550055;

+        private static readonly int TypeId1 = TestMessageSetExtension1.Descriptor.Extensions[0].FieldNumber;

+        private static readonly int TypeId2 = TestMessageSetExtension2.Descriptor.Extensions[0].FieldNumber;

+

+        [TestMethod]

+        public void SerializeMessageSet()

+        {

+            // Set up a TestMessageSet with two known messages and an unknown one.

+            TestMessageSet messageSet =

+                TestMessageSet.CreateBuilder()

+                    .SetExtension(

+                        TestMessageSetExtension1.MessageSetExtension,

+                        TestMessageSetExtension1.CreateBuilder().SetI(123).Build())

+                    .SetExtension(

+                        TestMessageSetExtension2.MessageSetExtension,

+                        TestMessageSetExtension2.CreateBuilder().SetStr("foo").Build())

+                    .SetUnknownFields(

+                        UnknownFieldSet.CreateBuilder()

+                            .AddField(UnknownTypeId,

+                                      UnknownField.CreateBuilder()

+                                          .AddLengthDelimited(ByteString.CopyFromUtf8("bar"))

+                                          .Build())

+                            .Build())

+                    .Build();

+

+            ByteString data = messageSet.ToByteString();

+

+            // Parse back using RawMessageSet and check the contents.

+            RawMessageSet raw = RawMessageSet.ParseFrom(data);

+

+            Assert.AreEqual(0, raw.UnknownFields.FieldDictionary.Count);

+

+            Assert.AreEqual(3, raw.ItemCount);

+            Assert.AreEqual(TypeId1, raw.ItemList[0].TypeId);

+            Assert.AreEqual(TypeId2, raw.ItemList[1].TypeId);

+            Assert.AreEqual(UnknownTypeId, raw.ItemList[2].TypeId);

+

+            TestMessageSetExtension1 message1 = TestMessageSetExtension1.ParseFrom(raw.GetItem(0).Message.ToByteArray());

+            Assert.AreEqual(123, message1.I);

+

+            TestMessageSetExtension2 message2 = TestMessageSetExtension2.ParseFrom(raw.GetItem(1).Message.ToByteArray());

+            Assert.AreEqual("foo", message2.Str);

+

+            Assert.AreEqual("bar", raw.GetItem(2).Message.ToStringUtf8());

+        }

+

+        [TestMethod]

+        public void ParseMessageSet()

+        {

+            ExtensionRegistry extensionRegistry = ExtensionRegistry.CreateInstance();

+            extensionRegistry.Add(TestMessageSetExtension1.MessageSetExtension);

+            extensionRegistry.Add(TestMessageSetExtension2.MessageSetExtension);

+

+            // Set up a RawMessageSet with two known messages and an unknown one.

+            RawMessageSet raw =

+                RawMessageSet.CreateBuilder()

+                    .AddItem(

+                        RawMessageSet.Types.Item.CreateBuilder()

+                            .SetTypeId(TypeId1)

+                            .SetMessage(

+                                TestMessageSetExtension1.CreateBuilder()

+                                    .SetI(123)

+                                    .Build().ToByteString())

+                            .Build())

+                    .AddItem(

+                        RawMessageSet.Types.Item.CreateBuilder()

+                            .SetTypeId(TypeId2)

+                            .SetMessage(

+                                TestMessageSetExtension2.CreateBuilder()

+                                    .SetStr("foo")

+                                    .Build().ToByteString())

+                            .Build())

+                    .AddItem(

+                        RawMessageSet.Types.Item.CreateBuilder()

+                            .SetTypeId(UnknownTypeId)

+                            .SetMessage(ByteString.CopyFromUtf8("bar"))

+                            .Build())

+                    .Build();

+

+            ByteString data = raw.ToByteString();

+

+            // Parse as a TestMessageSet and check the contents.

+            TestMessageSet messageSet =

+                TestMessageSet.ParseFrom(data, extensionRegistry);

+

+            Assert.AreEqual(123, messageSet.GetExtension(TestMessageSetExtension1.MessageSetExtension).I);

+            Assert.AreEqual("foo", messageSet.GetExtension(TestMessageSetExtension2.MessageSetExtension).Str);

+

+            // Check for unknown field with type LENGTH_DELIMITED,

+            //   number UNKNOWN_TYPE_ID, and contents "bar".

+            UnknownFieldSet unknownFields = messageSet.UnknownFields;

+            Assert.AreEqual(1, unknownFields.FieldDictionary.Count);

+            Assert.IsTrue(unknownFields.HasField(UnknownTypeId));

+

+            UnknownField field = unknownFields[UnknownTypeId];

+            Assert.AreEqual(1, field.LengthDelimitedList.Count);

+            Assert.AreEqual("bar", field.LengthDelimitedList[0].ToStringUtf8());

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers.sln b/csharp/src/ProtocolBuffers.sln
new file mode 100644
index 0000000..7741777
--- /dev/null
+++ b/csharp/src/ProtocolBuffers.sln
@@ -0,0 +1,215 @@
+Microsoft Visual Studio Solution File, Format Version 12.00

+# Visual Studio 2012

+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "proto", "proto", "{1F896D5C-5FC2-4671-9216-781CB8187EC7}"

+	ProjectSection(SolutionItems) = preProject

+		..\protos\tutorial\addressbook.proto = ..\protos\tutorial\addressbook.proto

+		..\protos\google\protobuf\csharp_options.proto = ..\protos\google\protobuf\csharp_options.proto

+		..\protos\google\protobuf\descriptor.proto = ..\protos\google\protobuf\descriptor.proto

+		..\protos\google\protobuf\compiler\plugin.proto = ..\protos\google\protobuf\compiler\plugin.proto

+	EndProjectSection

+EndProject

+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "unittest", "unittest", "{C8D3015A-EA39-4F03-AEEC-3FF1F2087A12}"

+	ProjectSection(SolutionItems) = preProject

+		..\protos\google\test\google_size.proto = ..\protos\google\test\google_size.proto

+		..\protos\google\test\google_speed.proto = ..\protos\google\test\google_speed.proto

+		..\protos\google\protobuf\unittest.proto = ..\protos\google\protobuf\unittest.proto

+		..\protos\google\protobuf\unittest_csharp_options.proto = ..\protos\google\protobuf\unittest_csharp_options.proto

+		..\protos\google\protobuf\unittest_custom_options.proto = ..\protos\google\protobuf\unittest_custom_options.proto

+		..\protos\google\protobuf\unittest_embed_optimize_for.proto = ..\protos\google\protobuf\unittest_embed_optimize_for.proto

+		..\protos\google\protobuf\unittest_empty.proto = ..\protos\google\protobuf\unittest_empty.proto

+		..\protos\google\protobuf\unittest_enormous_descriptor.proto = ..\protos\google\protobuf\unittest_enormous_descriptor.proto

+		..\protos\extest\unittest_extras.proto = ..\protos\extest\unittest_extras.proto

+		..\protos\extest\unittest_extras_full.proto = ..\protos\extest\unittest_extras_full.proto

+		..\protos\extest\unittest_extras_lite.proto = ..\protos\extest\unittest_extras_lite.proto

+		..\protos\extest\unittest_extras_xmltest.proto = ..\protos\extest\unittest_extras_xmltest.proto

+		..\protos\extest\unittest_generic_services.proto = ..\protos\extest\unittest_generic_services.proto

+		..\protos\google\protobuf\unittest_import.proto = ..\protos\google\protobuf\unittest_import.proto

+		..\protos\google\protobuf\unittest_import_lite.proto = ..\protos\google\protobuf\unittest_import_lite.proto

+		..\protos\extest\unittest_issues.proto = ..\protos\extest\unittest_issues.proto

+		..\protos\google\protobuf\unittest_lite.proto = ..\protos\google\protobuf\unittest_lite.proto

+		..\protos\google\protobuf\unittest_lite_imports_nonlite.proto = ..\protos\google\protobuf\unittest_lite_imports_nonlite.proto

+		..\protos\google\protobuf\unittest_mset.proto = ..\protos\google\protobuf\unittest_mset.proto

+		..\protos\google\protobuf\unittest_no_generic_services.proto = ..\protos\google\protobuf\unittest_no_generic_services.proto

+		..\protos\google\protobuf\unittest_optimize_for.proto = ..\protos\google\protobuf\unittest_optimize_for.proto

+		..\protos\extest\unittest_rpc_interop.proto = ..\protos\extest\unittest_rpc_interop.proto

+		..\protos\extest\unittest_rpc_interop_lite.proto = ..\protos\extest\unittest_rpc_interop_lite.proto

+	EndProjectSection

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers", "ProtocolBuffers\ProtocolBuffers.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Test", "ProtocolBuffers.Test\ProtocolBuffers.Test.csproj", "{DD01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtoGen", "ProtoGen\ProtoGen.csproj", "{250ADE34-82FD-4BAE-86D5-985FBE589C4A}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtoGen.Test", "ProtoGen.Test\ProtoGen.Test.csproj", "{C268DA4C-4004-47DA-AF23-44C983281A68}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddressBook", "AddressBook\AddressBook.csproj", "{A31F5FB2-4FF3-432A-B35B-5CD203606311}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtoMunge", "ProtoMunge\ProtoMunge.csproj", "{8F09AF72-3327-4FA7-BC09-070B80221AB9}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtoBench", "ProtoBench\ProtoBench.csproj", "{C7A4A435-2813-41C8-AA87-BD914BA5223D}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtoDump", "ProtoDump\ProtoDump.csproj", "{D7282E99-2DC3-405B-946F-177DB2FD2AE2}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite", "ProtocolBuffers\ProtocolBuffersLite.csproj", "{6969BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLite.Test.csproj", "{EE01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLiteMixed.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLiteMixed.Test.csproj", "{EEFFED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{66ED1950-AD27-42D7-88F8-94355AEC8225}"

+	ProjectSection(SolutionItems) = preProject

+		..\build\build.bat = ..\build\build.bat

+		..\build\build.csproj = ..\build\build.csproj

+		..\build\BuildAll.bat = ..\build\BuildAll.bat

+		..\build\Common.targets = ..\build\Common.targets

+		..\build\GenerateProjects.bat = ..\build\GenerateProjects.bat

+		..\build\GenerateSource.bat = ..\build\GenerateSource.bat

+		..\build\Google.ProtocolBuffers.nuspec = ..\build\Google.ProtocolBuffers.nuspec

+		..\build\Google.ProtocolBuffersLite.nuspec = ..\build\Google.ProtocolBuffersLite.nuspec

+		..\build\publish.csproj = ..\build\publish.csproj

+		..\build\PublishTool.bat = ..\build\PublishTool.bat

+		..\build\RunBenchmarks.bat = ..\build\RunBenchmarks.bat

+		..\build\target.csproj = ..\build\target.csproj

+	EndProjectSection

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.csproj", "{231391AF-449C-4A39-986C-AD7F270F4750}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.csproj", "{E067A59D-9D0A-4A1F-92B1-38E4457241D1}"

+EndProject

+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{0D7CDA8F-1BBF-4E0F-8D35-31AEA21A96E6}"

+EndProject

+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{C7B69674-7A51-4AC6-8674-0330BA742CE4}"

+EndProject

+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{75D5D25A-01A6-4594-957F-5993FB83F450}"

+EndProject

+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmarks", "benchmarks", "{FA9F5250-FDDC-48B8-832E-96E0464A02E6}"

+	ProjectSection(SolutionItems) = preProject

+		..\protos\benchmarks\google_size.proto = ..\protos\benchmarks\google_size.proto

+		..\protos\benchmarks\google_speed.proto = ..\protos\benchmarks\google_speed.proto

+	EndProjectSection

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "protoc-gen-cs", "ProtoGen\protoc-gen-cs.csproj", "{250ADE34-82FD-4BAE-86D5-985FBE589C4B}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "protoc-gen-cs.Test", "ProtoGen.Test\protoc-gen-cs.Test.csproj", "{C1024C9C-8176-48C3-B547-B9F6DF6B80A6}"

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug_Silverlight|Any CPU = Debug_Silverlight|Any CPU

+		Debug|Any CPU = Debug|Any CPU

+		Release_Silverlight|Any CPU = Release_Silverlight|Any CPU

+		Release|Any CPU = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4A}.Release|Any CPU.Build.0 = Release|Any CPU

+		{C268DA4C-4004-47DA-AF23-44C983281A68}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{C268DA4C-4004-47DA-AF23-44C983281A68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{C268DA4C-4004-47DA-AF23-44C983281A68}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{C268DA4C-4004-47DA-AF23-44C983281A68}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{C268DA4C-4004-47DA-AF23-44C983281A68}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{C268DA4C-4004-47DA-AF23-44C983281A68}.Release|Any CPU.Build.0 = Release|Any CPU

+		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{A31F5FB2-4FF3-432A-B35B-5CD203606311}.Release|Any CPU.Build.0 = Release|Any CPU

+		{8F09AF72-3327-4FA7-BC09-070B80221AB9}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{8F09AF72-3327-4FA7-BC09-070B80221AB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{8F09AF72-3327-4FA7-BC09-070B80221AB9}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{8F09AF72-3327-4FA7-BC09-070B80221AB9}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{8F09AF72-3327-4FA7-BC09-070B80221AB9}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{8F09AF72-3327-4FA7-BC09-070B80221AB9}.Release|Any CPU.Build.0 = Release|Any CPU

+		{C7A4A435-2813-41C8-AA87-BD914BA5223D}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{C7A4A435-2813-41C8-AA87-BD914BA5223D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{C7A4A435-2813-41C8-AA87-BD914BA5223D}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{C7A4A435-2813-41C8-AA87-BD914BA5223D}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{C7A4A435-2813-41C8-AA87-BD914BA5223D}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{C7A4A435-2813-41C8-AA87-BD914BA5223D}.Release|Any CPU.Build.0 = Release|Any CPU

+		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{D7282E99-2DC3-405B-946F-177DB2FD2AE2}.Release|Any CPU.Build.0 = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.Build.0 = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.Build.0 = Release|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4B}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4B}.Debug_Silverlight|Any CPU.Build.0 = Debug|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4B}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4B}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4B}.Release_Silverlight|Any CPU.Build.0 = Release|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4B}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{250ADE34-82FD-4BAE-86D5-985FBE589C4B}.Release|Any CPU.Build.0 = Release|Any CPU

+		{C1024C9C-8176-48C3-B547-B9F6DF6B80A6}.Debug_Silverlight|Any CPU.ActiveCfg = Debug|Any CPU

+		{C1024C9C-8176-48C3-B547-B9F6DF6B80A6}.Debug_Silverlight|Any CPU.Build.0 = Debug|Any CPU

+		{C1024C9C-8176-48C3-B547-B9F6DF6B80A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{C1024C9C-8176-48C3-B547-B9F6DF6B80A6}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{C1024C9C-8176-48C3-B547-B9F6DF6B80A6}.Release_Silverlight|Any CPU.ActiveCfg = Release|Any CPU

+		{C1024C9C-8176-48C3-B547-B9F6DF6B80A6}.Release_Silverlight|Any CPU.Build.0 = Release|Any CPU

+		{C1024C9C-8176-48C3-B547-B9F6DF6B80A6}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{C1024C9C-8176-48C3-B547-B9F6DF6B80A6}.Release|Any CPU.Build.0 = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+	GlobalSection(NestedProjects) = preSolution

+		{C8D3015A-EA39-4F03-AEEC-3FF1F2087A12} = {1F896D5C-5FC2-4671-9216-781CB8187EC7}

+		{FA9F5250-FDDC-48B8-832E-96E0464A02E6} = {1F896D5C-5FC2-4671-9216-781CB8187EC7}

+		{C268DA4C-4004-47DA-AF23-44C983281A68} = {C7B69674-7A51-4AC6-8674-0330BA742CE4}

+		{EE01ED24-3750-4567-9A23-1DB676A15610} = {C7B69674-7A51-4AC6-8674-0330BA742CE4}

+		{EEFFED24-3750-4567-9A23-1DB676A15610} = {C7B69674-7A51-4AC6-8674-0330BA742CE4}

+		{DD01ED24-3750-4567-9A23-1DB676A15610} = {C7B69674-7A51-4AC6-8674-0330BA742CE4}

+		{C1024C9C-8176-48C3-B547-B9F6DF6B80A6} = {C7B69674-7A51-4AC6-8674-0330BA742CE4}

+		{A31F5FB2-4FF3-432A-B35B-5CD203606311} = {75D5D25A-01A6-4594-957F-5993FB83F450}

+		{C7A4A435-2813-41C8-AA87-BD914BA5223D} = {0D7CDA8F-1BBF-4E0F-8D35-31AEA21A96E6}

+		{D7282E99-2DC3-405B-946F-177DB2FD2AE2} = {0D7CDA8F-1BBF-4E0F-8D35-31AEA21A96E6}

+		{8F09AF72-3327-4FA7-BC09-070B80221AB9} = {0D7CDA8F-1BBF-4E0F-8D35-31AEA21A96E6}

+	EndGlobalSection

+EndGlobal

diff --git a/csharp/src/ProtocolBuffers/AbstractBuilder.cs b/csharp/src/ProtocolBuffers/AbstractBuilder.cs
new file mode 100644
index 0000000..e7a41fb
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/AbstractBuilder.cs
@@ -0,0 +1,266 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Implementation of the non-generic IMessage interface as far as possible.

+    /// </summary>

+    public abstract partial class AbstractBuilder<TMessage, TBuilder> : AbstractBuilderLite<TMessage, TBuilder>,

+                                                                IBuilder<TMessage, TBuilder>

+        where TMessage : AbstractMessage<TMessage, TBuilder>

+        where TBuilder : AbstractBuilder<TMessage, TBuilder>

+    {

+        #region Unimplemented members of IBuilder

+

+        public abstract UnknownFieldSet UnknownFields { get; set; }

+        public abstract IDictionary<FieldDescriptor, object> AllFields { get; }

+        public abstract object this[FieldDescriptor field] { get; set; }

+        public abstract MessageDescriptor DescriptorForType { get; }

+        public abstract int GetRepeatedFieldCount(FieldDescriptor field);

+        public abstract object this[FieldDescriptor field, int index] { get; set; }

+        public abstract bool HasField(FieldDescriptor field);

+        public abstract IBuilder CreateBuilderForField(FieldDescriptor field);

+        public abstract TBuilder ClearField(FieldDescriptor field);

+        public abstract TBuilder AddRepeatedField(FieldDescriptor field, object value);

+

+        #endregion

+

+        public TBuilder SetUnknownFields(UnknownFieldSet fields)

+        {

+            UnknownFields = fields;

+            return ThisBuilder;

+        }

+

+        public override TBuilder Clear()

+        {

+            foreach (FieldDescriptor field in AllFields.Keys)

+            {

+                ClearField(field);

+            }

+            return ThisBuilder;

+        }

+

+        public override sealed TBuilder MergeFrom(IMessageLite other)

+        {

+            if (other is IMessage)

+            {

+                return MergeFrom((IMessage) other);

+            }

+            throw new ArgumentException("MergeFrom(Message) can only merge messages of the same type.");

+        }

+

+        /// <summary>

+        /// Merge the specified other message into the message being

+        /// built. Merging occurs as follows. For each field:

+        /// For singular primitive fields, if the field is set in <paramref name="other"/>,

+        /// then <paramref name="other"/>'s value overwrites the value in this message.

+        /// For singular message fields, if the field is set in <paramref name="other"/>,

+        /// it is merged into the corresponding sub-message of this message using the same

+        /// merging rules.

+        /// For repeated fields, the elements in <paramref name="other"/> are concatenated

+        /// with the elements in this message.

+        /// </summary>

+        /// <param name="other"></param>

+        /// <returns></returns>

+        public abstract TBuilder MergeFrom(TMessage other);

+

+        public virtual TBuilder MergeFrom(IMessage other)

+        {

+            if (other.DescriptorForType != DescriptorForType)

+            {

+                throw new ArgumentException("MergeFrom(IMessage) can only merge messages of the same type.");

+            }

+

+            // Note:  We don't attempt to verify that other's fields have valid

+            //   types.  Doing so would be a losing battle.  We'd have to verify

+            //   all sub-messages as well, and we'd have to make copies of all of

+            //   them to insure that they don't change after verification (since

+            //   the Message interface itself cannot enforce immutability of

+            //   implementations).

+            // TODO(jonskeet):  Provide a function somewhere called MakeDeepCopy()

+            //   which allows people to make secure deep copies of messages.

+            foreach (KeyValuePair<FieldDescriptor, object> entry in other.AllFields)

+            {

+                FieldDescriptor field = entry.Key;

+                if (field.IsRepeated)

+                {

+                    // Concatenate repeated fields

+                    foreach (object element in (IEnumerable) entry.Value)

+                    {

+                        AddRepeatedField(field, element);

+                    }

+                }

+                else if (field.MappedType == MappedType.Message)

+                {

+                    // Merge singular messages

+                    IMessageLite existingValue = (IMessageLite) this[field];

+                    if (existingValue == existingValue.WeakDefaultInstanceForType)

+                    {

+                        this[field] = entry.Value;

+                    }

+                    else

+                    {

+                        this[field] = existingValue.WeakCreateBuilderForType()

+                            .WeakMergeFrom(existingValue)

+                            .WeakMergeFrom((IMessageLite) entry.Value)

+                            .WeakBuild();

+                    }

+                }

+                else

+                {

+                    // Overwrite simple values

+                    this[field] = entry.Value;

+                }

+            }

+

+            //Fix for unknown fields not merging, see java's AbstractMessage.Builder<T> line 236

+            MergeUnknownFields(other.UnknownFields);

+

+            return ThisBuilder;

+        }

+

+        public override TBuilder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry)

+        {

+            UnknownFieldSet.Builder unknownFields = UnknownFieldSet.CreateBuilder(UnknownFields);

+            unknownFields.MergeFrom(input, extensionRegistry, this);

+            UnknownFields = unknownFields.Build();

+            return ThisBuilder;

+        }

+

+        public virtual TBuilder MergeUnknownFields(UnknownFieldSet unknownFields)

+        {

+            UnknownFields = UnknownFieldSet.CreateBuilder(UnknownFields)

+                .MergeFrom(unknownFields)

+                .Build();

+            return ThisBuilder;

+        }

+

+        public virtual IBuilder SetField(FieldDescriptor field, object value)

+        {

+            this[field] = value;

+            return ThisBuilder;

+        }

+

+        public virtual IBuilder SetRepeatedField(FieldDescriptor field, int index, object value)

+        {

+            this[field, index] = value;

+            return ThisBuilder;

+        }

+

+        #region Explicit Implementations

+

+        IMessage IBuilder.WeakBuild()

+        {

+            return Build();

+        }

+

+        IBuilder IBuilder.WeakAddRepeatedField(FieldDescriptor field, object value)

+        {

+            return AddRepeatedField(field, value);

+        }

+

+        IBuilder IBuilder.WeakClear()

+        {

+            return Clear();

+        }

+

+        IBuilder IBuilder.WeakMergeFrom(IMessage message)

+        {

+            return MergeFrom(message);

+        }

+

+        IBuilder IBuilder.WeakMergeFrom(ICodedInputStream input)

+        {

+            return MergeFrom(input);

+        }

+

+        IBuilder IBuilder.WeakMergeFrom(ICodedInputStream input, ExtensionRegistry registry)

+        {

+            return MergeFrom(input, registry);

+        }

+

+        IBuilder IBuilder.WeakMergeFrom(ByteString data)

+        {

+            return MergeFrom(data);

+        }

+

+        IBuilder IBuilder.WeakMergeFrom(ByteString data, ExtensionRegistry registry)

+        {

+            return MergeFrom(data, registry);

+        }

+

+        IMessage IBuilder.WeakBuildPartial()

+        {

+            return BuildPartial();

+        }

+

+        IBuilder IBuilder.WeakClone()

+        {

+            return Clone();

+        }

+

+        IMessage IBuilder.WeakDefaultInstanceForType

+        {

+            get { return DefaultInstanceForType; }

+        }

+

+        IBuilder IBuilder.WeakClearField(FieldDescriptor field)

+        {

+            return ClearField(field);

+        }

+

+        #endregion

+

+        /// <summary>

+        /// Converts this builder to a string using <see cref="TextFormat" />.

+        /// </summary>

+        /// <remarks>

+        /// This method is not sealed (in the way that it is in <see cref="AbstractMessage{TMessage, TBuilder}" />

+        /// as it was added after earlier releases; some other implementations may already be overriding the

+        /// method.

+        /// </remarks>

+        public override string ToString()

+        {

+            return TextFormat.PrintToString(this);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/AbstractBuilderLite.cs b/csharp/src/ProtocolBuffers/AbstractBuilderLite.cs
new file mode 100644
index 0000000..a7fedea
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/AbstractBuilderLite.cs
@@ -0,0 +1,264 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.IO;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Implementation of the non-generic IMessage interface as far as possible.

+    /// </summary>

+    public abstract partial class AbstractBuilderLite<TMessage, TBuilder> : IBuilderLite<TMessage, TBuilder>

+        where TMessage : AbstractMessageLite<TMessage, TBuilder>

+        where TBuilder : AbstractBuilderLite<TMessage, TBuilder>

+    {

+        protected abstract TBuilder ThisBuilder { get; }

+

+        public abstract bool IsInitialized { get; }

+

+        public abstract TBuilder Clear();

+

+        public abstract TBuilder Clone();

+

+        public abstract TMessage Build();

+

+        public abstract TMessage BuildPartial();

+

+        public abstract TBuilder MergeFrom(IMessageLite other);

+

+        public abstract TBuilder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry);

+

+        public abstract TMessage DefaultInstanceForType { get; }

+

+        #region IBuilderLite<TMessage,TBuilder> Members

+

+        public virtual TBuilder MergeFrom(ICodedInputStream input)

+        {

+            return MergeFrom(input, ExtensionRegistry.CreateInstance());

+        }

+

+        public TBuilder MergeDelimitedFrom(Stream input)

+        {

+            return MergeDelimitedFrom(input, ExtensionRegistry.CreateInstance());

+        }

+

+        public TBuilder MergeDelimitedFrom(Stream input, ExtensionRegistry extensionRegistry)

+        {

+            int size = (int) CodedInputStream.ReadRawVarint32(input);

+            Stream limitedStream = new LimitedInputStream(input, size);

+            return MergeFrom(limitedStream, extensionRegistry);

+        }

+

+        public TBuilder MergeFrom(ByteString data)

+        {

+            return MergeFrom(data, ExtensionRegistry.CreateInstance());

+        }

+

+        public TBuilder MergeFrom(ByteString data, ExtensionRegistry extensionRegistry)

+        {

+            CodedInputStream input = data.CreateCodedInput();

+            MergeFrom(input, extensionRegistry);

+            input.CheckLastTagWas(0);

+            return ThisBuilder;

+        }

+

+        public TBuilder MergeFrom(byte[] data)

+        {

+            CodedInputStream input = CodedInputStream.CreateInstance(data);

+            MergeFrom(input);

+            input.CheckLastTagWas(0);

+            return ThisBuilder;

+        }

+

+        public TBuilder MergeFrom(byte[] data, ExtensionRegistry extensionRegistry)

+        {

+            CodedInputStream input = CodedInputStream.CreateInstance(data);

+            MergeFrom(input, extensionRegistry);

+            input.CheckLastTagWas(0);

+            return ThisBuilder;

+        }

+

+        public TBuilder MergeFrom(Stream input)

+        {

+            CodedInputStream codedInput = CodedInputStream.CreateInstance(input);

+            MergeFrom(codedInput);

+            codedInput.CheckLastTagWas(0);

+            return ThisBuilder;

+        }

+

+        public TBuilder MergeFrom(Stream input, ExtensionRegistry extensionRegistry)

+        {

+            CodedInputStream codedInput = CodedInputStream.CreateInstance(input);

+            MergeFrom(codedInput, extensionRegistry);

+            codedInput.CheckLastTagWas(0);

+            return ThisBuilder;

+        }

+

+        #endregion

+

+        #region Explicit definitions

+

+        IBuilderLite IBuilderLite.WeakClear()

+        {

+            return Clear();

+        }

+

+        IBuilderLite IBuilderLite.WeakMergeFrom(IMessageLite message)

+        {

+            return MergeFrom(message);

+        }

+

+        IBuilderLite IBuilderLite.WeakMergeFrom(ByteString data)

+        {

+            return MergeFrom(data);

+        }

+

+        IBuilderLite IBuilderLite.WeakMergeFrom(ByteString data, ExtensionRegistry registry)

+        {

+            return MergeFrom(data, registry);

+        }

+

+        IBuilderLite IBuilderLite.WeakMergeFrom(ICodedInputStream input)

+        {

+            return MergeFrom(input);

+        }

+

+        IBuilderLite IBuilderLite.WeakMergeFrom(ICodedInputStream input, ExtensionRegistry registry)

+        {

+            return MergeFrom(input, registry);

+        }

+

+        IMessageLite IBuilderLite.WeakBuild()

+        {

+            return Build();

+        }

+

+        IMessageLite IBuilderLite.WeakBuildPartial()

+        {

+            return BuildPartial();

+        }

+

+        IBuilderLite IBuilderLite.WeakClone()

+        {

+            return Clone();

+        }

+

+        IMessageLite IBuilderLite.WeakDefaultInstanceForType

+        {

+            get { return DefaultInstanceForType; }

+        }

+

+        #endregion

+

+        #region LimitedInputStream

+

+        /// <summary>

+        /// Stream implementation which proxies another stream, only allowing a certain amount

+        /// of data to be read. Note that this is only used to read delimited streams, so it

+        /// doesn't attempt to implement everything.

+        /// </summary>

+        private class LimitedInputStream : Stream

+        {

+            private readonly Stream proxied;

+            private int bytesLeft;

+

+            internal LimitedInputStream(Stream proxied, int size)

+            {

+                this.proxied = proxied;

+                bytesLeft = size;

+            }

+

+            public override bool CanRead

+            {

+                get { return true; }

+            }

+

+            public override bool CanSeek

+            {

+                get { return false; }

+            }

+

+            public override bool CanWrite

+            {

+                get { return false; }

+            }

+

+            public override void Flush()

+            {

+            }

+

+            public override long Length

+            {

+                get { throw new NotSupportedException(); }

+            }

+

+            public override long Position

+            {

+                get { throw new NotSupportedException(); }

+                set { throw new NotSupportedException(); }

+            }

+

+            public override int Read(byte[] buffer, int offset, int count)

+            {

+                if (bytesLeft > 0)

+                {

+                    int bytesRead = proxied.Read(buffer, offset, Math.Min(bytesLeft, count));

+                    bytesLeft -= bytesRead;

+                    return bytesRead;

+                }

+                return 0;

+            }

+

+            public override long Seek(long offset, SeekOrigin origin)

+            {

+                throw new NotSupportedException();

+            }

+

+            public override void SetLength(long value)

+            {

+                throw new NotSupportedException();

+            }

+

+            public override void Write(byte[] buffer, int offset, int count)

+            {

+                throw new NotSupportedException();

+            }

+        }

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/AbstractMessage.cs b/csharp/src/ProtocolBuffers/AbstractMessage.cs
new file mode 100644
index 0000000..16c8c78
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/AbstractMessage.cs
@@ -0,0 +1,291 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.Collections;

+using System.Collections.Generic;

+using System.IO;

+using System.Text;

+using Google.ProtocolBuffers.Collections;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Implementation of the non-generic IMessage interface as far as possible.

+    /// </summary>

+    public abstract partial class AbstractMessage<TMessage, TBuilder> : AbstractMessageLite<TMessage, TBuilder>,

+                                                                IMessage<TMessage, TBuilder>

+        where TMessage : AbstractMessage<TMessage, TBuilder>

+        where TBuilder : AbstractBuilder<TMessage, TBuilder>

+    {

+        /// <summary>

+        /// The serialized size if it's already been computed, or null

+        /// if we haven't computed it yet.

+        /// </summary>

+        private int? memoizedSize = null;

+

+        #region Unimplemented members of IMessage

+

+        public abstract MessageDescriptor DescriptorForType { get; }

+        public abstract IDictionary<FieldDescriptor, object> AllFields { get; }

+        public abstract bool HasField(FieldDescriptor field);

+        public abstract object this[FieldDescriptor field] { get; }

+        public abstract int GetRepeatedFieldCount(FieldDescriptor field);

+        public abstract object this[FieldDescriptor field, int index] { get; }

+        public abstract UnknownFieldSet UnknownFields { get; }

+

+        #endregion

+

+        /// <summary>

+        /// Returns true iff all required fields in the message and all embedded

+        /// messages are set.

+        /// </summary>

+        public override bool IsInitialized

+        {

+            get

+            {

+                // Check that all required fields are present.

+                foreach (FieldDescriptor field in DescriptorForType.Fields)

+                {

+                    if (field.IsRequired && !HasField(field))

+                    {

+                        return false;

+                    }

+                }

+

+                // Check that embedded messages are initialized.

+                foreach (KeyValuePair<FieldDescriptor, object> entry in AllFields)

+                {

+                    FieldDescriptor field = entry.Key;

+                    if (field.MappedType == MappedType.Message)

+                    {

+                        if (field.IsRepeated)

+                        {

+                            // We know it's an IList<T>, but not the exact type - so

+                            // IEnumerable is the best we can do. (C# generics aren't covariant yet.)

+                            foreach (IMessageLite element in (IEnumerable) entry.Value)

+                            {

+                                if (!element.IsInitialized)

+                                {

+                                    return false;

+                                }

+                            }

+                        }

+                        else

+                        {

+                            if (!((IMessageLite) entry.Value).IsInitialized)

+                            {

+                                return false;

+                            }

+                        }

+                    }

+                }

+                return true;

+            }

+        }

+

+        public override sealed string ToString()

+        {

+            return TextFormat.PrintToString(this);

+        }

+

+        public override sealed void PrintTo(TextWriter writer)

+        {

+            TextFormat.Print(this, writer);

+        }

+

+        /// <summary>

+        /// Serializes the message and writes it to the given output stream.

+        /// This does not flush or close the stream.

+        /// </summary>

+        /// <remarks>

+        /// Protocol Buffers are not self-delimiting. Therefore, if you write

+        /// any more data to the stream after the message, you must somehow ensure

+        /// that the parser on the receiving end does not interpret this as being

+        /// part of the protocol message. One way of doing this is by writing the size

+        /// of the message before the data, then making sure you limit the input to

+        /// that size when receiving the data. Alternatively, use WriteDelimitedTo(Stream).

+        /// </remarks>

+        public override void WriteTo(ICodedOutputStream output)

+        {

+            foreach (KeyValuePair<FieldDescriptor, object> entry in AllFields)

+            {

+                FieldDescriptor field = entry.Key;

+                if (field.IsRepeated)

+                {

+                    // We know it's an IList<T>, but not the exact type - so

+                    // IEnumerable is the best we can do. (C# generics aren't covariant yet.)

+                    IEnumerable valueList = (IEnumerable) entry.Value;

+                    if (field.IsPacked)

+                    {

+                        output.WritePackedArray(field.FieldType, field.FieldNumber, field.Name, valueList);

+                    }

+                    else

+                    {

+                        output.WriteArray(field.FieldType, field.FieldNumber, field.Name, valueList);

+                    }

+                }

+                else

+                {

+                    output.WriteField(field.FieldType, field.FieldNumber, field.Name, entry.Value);

+                }

+            }

+

+            UnknownFieldSet unknownFields = UnknownFields;

+            if (DescriptorForType.Options.MessageSetWireFormat)

+            {

+                unknownFields.WriteAsMessageSetTo(output);

+            }

+            else

+            {

+                unknownFields.WriteTo(output);

+            }

+        }

+

+        /// <summary>

+        /// Returns the number of bytes required to encode this message.

+        /// The result is only computed on the first call and memoized after that.

+        /// </summary>

+        public override int SerializedSize

+        {

+            get

+            {

+                if (memoizedSize != null)

+                {

+                    return memoizedSize.Value;

+                }

+

+                int size = 0;

+                foreach (KeyValuePair<FieldDescriptor, object> entry in AllFields)

+                {

+                    FieldDescriptor field = entry.Key;

+                    if (field.IsRepeated)

+                    {

+                        IEnumerable valueList = (IEnumerable) entry.Value;

+                        if (field.IsPacked)

+                        {

+                            int dataSize = 0;

+                            foreach (object element in valueList)

+                            {

+                                dataSize += CodedOutputStream.ComputeFieldSizeNoTag(field.FieldType, element);

+                            }

+                            size += dataSize;

+                            size += CodedOutputStream.ComputeTagSize(field.FieldNumber);

+                            size += CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);

+                        }

+                        else

+                        {

+                            foreach (object element in valueList)

+                            {

+                                size += CodedOutputStream.ComputeFieldSize(field.FieldType, field.FieldNumber, element);

+                            }

+                        }

+                    }

+                    else

+                    {

+                        size += CodedOutputStream.ComputeFieldSize(field.FieldType, field.FieldNumber, entry.Value);

+                    }

+                }

+

+                UnknownFieldSet unknownFields = UnknownFields;

+                if (DescriptorForType.Options.MessageSetWireFormat)

+                {

+                    size += unknownFields.SerializedSizeAsMessageSet;

+                }

+                else

+                {

+                    size += unknownFields.SerializedSize;

+                }

+

+                memoizedSize = size;

+                return size;

+            }

+        }

+

+        /// <summary>

+        /// Compares the specified object with this message for equality.

+        /// Returns true iff the given object is a message of the same type

+        /// (as defined by DescriptorForType) and has identical values

+        /// for all its fields.

+        /// </summary>

+        public override bool Equals(object other)

+        {

+            if (other == this)

+            {

+                return true;

+            }

+            IMessage otherMessage = other as IMessage;

+            if (otherMessage == null || otherMessage.DescriptorForType != DescriptorForType)

+            {

+                return false;

+            }

+            return Dictionaries.Equals(AllFields, otherMessage.AllFields) &&

+                   UnknownFields.Equals(otherMessage.UnknownFields);

+        }

+

+        /// <summary>

+        /// Returns the hash code value for this message.

+        /// TODO(jonskeet): Specify the hash algorithm, but better than the Java one!

+        /// </summary>

+        public override int GetHashCode()

+        {

+            int hash = 41;

+            hash = (19*hash) + DescriptorForType.GetHashCode();

+            hash = (53*hash) + Dictionaries.GetHashCode(AllFields);

+            hash = (29*hash) + UnknownFields.GetHashCode();

+            return hash;

+        }

+

+        #region Explicit Members

+

+        IBuilder IMessage.WeakCreateBuilderForType()

+        {

+            return CreateBuilderForType();

+        }

+

+        IBuilder IMessage.WeakToBuilder()

+        {

+            return ToBuilder();

+        }

+

+        IMessage IMessage.WeakDefaultInstanceForType

+        {

+            get { return DefaultInstanceForType; }

+        }

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/AbstractMessageLite.cs b/csharp/src/ProtocolBuffers/AbstractMessageLite.cs
new file mode 100644
index 0000000..1cdead2
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/AbstractMessageLite.cs
@@ -0,0 +1,140 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.IO;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Implementation of the non-generic IMessage interface as far as possible.

+    /// </summary>

+    public abstract partial class AbstractMessageLite<TMessage, TBuilder> : IMessageLite<TMessage, TBuilder>

+        where TMessage : AbstractMessageLite<TMessage, TBuilder>

+        where TBuilder : AbstractBuilderLite<TMessage, TBuilder>

+    {

+        public abstract TBuilder CreateBuilderForType();

+

+        public abstract TBuilder ToBuilder();

+

+        public abstract TMessage DefaultInstanceForType { get; }

+

+        public abstract bool IsInitialized { get; }

+

+        public abstract void WriteTo(ICodedOutputStream output);

+

+        public abstract int SerializedSize { get; }

+

+        //public override bool Equals(object other) {

+        //}

+

+        //public override int GetHashCode() {

+        //}

+

+        public abstract void PrintTo(TextWriter writer);

+

+        #region IMessageLite<TMessage,TBuilder> Members

+

+        /// <summary>

+        /// Serializes the message to a ByteString. This is a trivial wrapper

+        /// around WriteTo(ICodedOutputStream).

+        /// </summary>

+        public ByteString ToByteString()

+        {

+            ByteString.CodedBuilder output = new ByteString.CodedBuilder(SerializedSize);

+            WriteTo(output.CodedOutput);

+            return output.Build();

+        }

+

+        /// <summary>

+        /// Serializes the message to a byte array. This is a trivial wrapper

+        /// around WriteTo(ICodedOutputStream).

+        /// </summary>

+        public byte[] ToByteArray()

+        {

+            byte[] result = new byte[SerializedSize];

+            CodedOutputStream output = CodedOutputStream.CreateInstance(result);

+            WriteTo(output);

+            output.CheckNoSpaceLeft();

+            return result;

+        }

+

+        /// <summary>

+        /// Serializes the message and writes it to the given stream.

+        /// This is just a wrapper around WriteTo(CodedOutputStream). This

+        /// does not flush or close the stream.

+        /// </summary>

+        /// <param name="output"></param>

+        public void WriteTo(Stream output)

+        {

+            CodedOutputStream codedOutput = CodedOutputStream.CreateInstance(output);

+            WriteTo(codedOutput);

+            codedOutput.Flush();

+        }

+

+        /// <summary>

+        /// Like WriteTo(Stream) but writes the size of the message as a varint before

+        /// writing the data. This allows more data to be written to the stream after the

+        /// message without the need to delimit the message data yourself. Use 

+        /// IBuilder.MergeDelimitedFrom(Stream) or the static method

+        /// YourMessageType.ParseDelimitedFrom(Stream) to parse messages written by this method.

+        /// </summary>

+        /// <param name="output"></param>

+        public void WriteDelimitedTo(Stream output)

+        {

+            CodedOutputStream codedOutput = CodedOutputStream.CreateInstance(output);

+            codedOutput.WriteRawVarint32((uint) SerializedSize);

+            WriteTo(codedOutput);

+            codedOutput.Flush();

+        }

+

+        IBuilderLite IMessageLite.WeakCreateBuilderForType()

+        {

+            return CreateBuilderForType();

+        }

+

+        IBuilderLite IMessageLite.WeakToBuilder()

+        {

+            return ToBuilder();

+        }

+

+        IMessageLite IMessageLite.WeakDefaultInstanceForType

+        {

+            get { return DefaultInstanceForType; }

+        }

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ByteArray.cs b/csharp/src/ProtocolBuffers/ByteArray.cs
new file mode 100644
index 0000000..3c51b7b
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ByteArray.cs
@@ -0,0 +1,92 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Provides a utility routine to copy small arrays much more quickly than Buffer.BlockCopy

+    /// </summary>

+    internal static class ByteArray

+    {

+        /// <summary>

+        /// The threshold above which you should use Buffer.BlockCopy rather than ByteArray.Copy

+        /// </summary>

+        private const int CopyThreshold = 12;

+

+        /// <summary>

+        /// Determines which copy routine to use based on the number of bytes to be copied.

+        /// </summary>

+        public static void Copy(byte[] src, int srcOffset, byte[] dst, int dstOffset, int count)

+        {

+            if (count > CopyThreshold)

+            {

+                Buffer.BlockCopy(src, srcOffset, dst, dstOffset, count);

+            }

+            else

+            {

+                ByteCopy(src, srcOffset, dst, dstOffset, count);

+            }

+        }

+

+        /// <summary>

+        /// Copy the bytes provided with a for loop, faster when there are only a few bytes to copy

+        /// </summary>

+        public static void ByteCopy(byte[] src, int srcOffset, byte[] dst, int dstOffset, int count)

+        {

+            int stop = srcOffset + count;

+            for (int i = srcOffset; i < stop; i++)

+            {

+                dst[dstOffset++] = src[i];

+            }

+        }

+

+        /// <summary>

+        /// Reverses the order of bytes in the array

+        /// </summary>

+        public static void Reverse(byte[] bytes)

+        {

+            byte temp;

+            for (int first = 0, last = bytes.Length - 1; first < last; first++, last--)

+            {

+                temp = bytes[first];

+                bytes[first] = bytes[last];

+                bytes[last] = temp;

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ByteString.cs b/csharp/src/ProtocolBuffers/ByteString.cs
new file mode 100644
index 0000000..434865b
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ByteString.cs
@@ -0,0 +1,305 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using System.IO;

+using System.Text;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Immutable array of bytes.

+    /// TODO(jonskeet): Implement the common collection interfaces?

+    /// </summary>

+    public sealed class ByteString : IEnumerable<byte>, IEquatable<ByteString>

+    {

+        private static readonly ByteString empty = new ByteString(new byte[0]);

+

+        private readonly byte[] bytes;

+

+        /// <summary>

+        /// Unsafe operations that can cause IO Failure and/or other catestrophic side-effects.

+        /// </summary>

+        public static class Unsafe

+        {

+            /// <summary>

+            /// Constructs a new ByteString from the given byte array. The array is

+            /// *not* copied, and must not be modified after this constructor is called.

+            /// </summary>

+            public static ByteString FromBytes(byte[] bytes)

+            {

+                return new ByteString(bytes);

+            }

+

+            /// <summary>

+            /// Provides direct, unrestricted access to the bytes contained in this instance.

+            /// You must not modify or resize the byte array returned by this method.

+            /// </summary>

+            public static byte[] GetBuffer(ByteString bytes)

+            {

+                return bytes.bytes;

+            }

+        }

+

+        /// <summary>

+        /// Internal use only.  Ensure that the provided array is not mutated and belongs to this instance.

+        /// </summary>

+        internal static ByteString AttachBytes(byte[] bytes)

+        {

+            return new ByteString(bytes);

+        }

+

+        /// <summary>

+        /// Constructs a new ByteString from the given byte array. The array is

+        /// *not* copied, and must not be modified after this constructor is called.

+        /// </summary>

+        private ByteString(byte[] bytes)

+        {

+            this.bytes = bytes;

+        }

+

+        /// <summary>

+        /// Returns an empty ByteString.

+        /// </summary>

+        public static ByteString Empty

+        {

+            get { return empty; }

+        }

+

+        /// <summary>

+        /// Returns the length of this ByteString in bytes.

+        /// </summary>

+        public int Length

+        {

+            get { return bytes.Length; }

+        }

+

+        public bool IsEmpty

+        {

+            get { return Length == 0; }

+        }

+

+        public byte[] ToByteArray()

+        {

+            return (byte[]) bytes.Clone();

+        }

+

+        public string ToBase64()

+        {

+            return Convert.ToBase64String(bytes);

+        }

+

+        /// <summary>

+        /// Constructs a ByteString from the Base64 Encoded String.

+        /// </summary>

+        public static ByteString FromBase64(string bytes)

+        {

+            // By handling the empty string explicitly, we not only optimize but we fix a

+            // problem on CF 2.0. See issue 61 for details.

+            return bytes == "" ? Empty : new ByteString(Convert.FromBase64String(bytes));

+        }

+

+        /// <summary>

+        /// Constructs a ByteString from the given array. The contents

+        /// are copied, so further modifications to the array will not

+        /// be reflected in the returned ByteString.

+        /// </summary>

+        public static ByteString CopyFrom(byte[] bytes)

+        {

+            return new ByteString((byte[]) bytes.Clone());

+        }

+

+        /// <summary>

+        /// Constructs a ByteString from a portion of a byte array.

+        /// </summary>

+        public static ByteString CopyFrom(byte[] bytes, int offset, int count)

+        {

+            byte[] portion = new byte[count];

+            ByteArray.Copy(bytes, offset, portion, 0, count);

+            return new ByteString(portion);

+        }

+

+        /// <summary>

+        /// Creates a new ByteString by encoding the specified text with

+        /// the given encoding.

+        /// </summary>

+        public static ByteString CopyFrom(string text, Encoding encoding)

+        {

+            return new ByteString(encoding.GetBytes(text));

+        }

+

+        /// <summary>

+        /// Creates a new ByteString by encoding the specified text in UTF-8.

+        /// </summary>

+        public static ByteString CopyFromUtf8(string text)

+        {

+            return CopyFrom(text, Encoding.UTF8);

+        }

+

+        /// <summary>

+        /// Retuns the byte at the given index.

+        /// </summary>

+        public byte this[int index]

+        {

+            get { return bytes[index]; }

+        }

+

+        public string ToString(Encoding encoding)

+        {

+            return encoding.GetString(bytes, 0, bytes.Length);

+        }

+

+        public string ToStringUtf8()

+        {

+            return ToString(Encoding.UTF8);

+        }

+

+        public IEnumerator<byte> GetEnumerator()

+        {

+            return ((IEnumerable<byte>) bytes).GetEnumerator();

+        }

+

+        IEnumerator IEnumerable.GetEnumerator()

+        {

+            return GetEnumerator();

+        }

+

+        /// <summary>

+        /// Creates a CodedInputStream from this ByteString's data.

+        /// </summary>

+        public CodedInputStream CreateCodedInput()

+        {

+            // We trust CodedInputStream not to reveal the provided byte array or modify it

+            return CodedInputStream.CreateInstance(bytes);

+        }

+

+        // TODO(jonskeet): CopyTo if it turns out to be required

+

+        public override bool Equals(object obj)

+        {

+            ByteString other = obj as ByteString;

+            if (obj == null)

+            {

+                return false;

+            }

+            return Equals(other);

+        }

+

+        public override int GetHashCode()

+        {

+            int ret = 23;

+            foreach (byte b in bytes)

+            {

+                ret = (ret << 8) | b;

+            }

+            return ret;

+        }

+

+        public bool Equals(ByteString other)

+        {

+            if (other.bytes.Length != bytes.Length)

+            {

+                return false;

+            }

+            for (int i = 0; i < bytes.Length; i++)

+            {

+                if (other.bytes[i] != bytes[i])

+                {

+                    return false;

+                }

+            }

+            return true;

+        }

+

+        /// <summary>

+        /// Builder for ByteStrings which allows them to be created without extra

+        /// copying being involved. This has to be a nested type in order to have access

+        /// to the private ByteString constructor.

+        /// </summary>

+        internal sealed class CodedBuilder

+        {

+            private readonly CodedOutputStream output;

+            private readonly byte[] buffer;

+

+            internal CodedBuilder(int size)

+            {

+                buffer = new byte[size];

+                output = CodedOutputStream.CreateInstance(buffer);

+            }

+

+            internal ByteString Build()

+            {

+                output.CheckNoSpaceLeft();

+

+                // We can be confident that the CodedOutputStream will not modify the

+                // underlying bytes anymore because it already wrote all of them.  So,

+                // no need to make a copy.

+                return new ByteString(buffer);

+            }

+

+            internal CodedOutputStream CodedOutput

+            {

+                get { return output; }

+            }

+        }

+

+        /// <summary>

+        /// Used internally by CodedOutputStream to avoid creating a copy for the write

+        /// </summary>

+        internal void WriteRawBytesTo(CodedOutputStream outputStream)

+        {

+            outputStream.WriteRawBytes(bytes, 0, bytes.Length);

+        }

+

+        /// <summary>

+        /// Copies the entire byte array to the destination array provided at the offset specified.

+        /// </summary>

+        public void CopyTo(byte[] array, int position)

+        {

+            ByteArray.Copy(bytes, 0, array, position, bytes.Length);

+        }

+

+        /// <summary>

+        /// Writes the entire byte array to the provided stream

+        /// </summary>

+        public void WriteTo(Stream outputStream)

+        {

+            outputStream.Write(bytes, 0, bytes.Length);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/CodedInputStream.cs b/csharp/src/ProtocolBuffers/CodedInputStream.cs
new file mode 100644
index 0000000..773e8c1
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/CodedInputStream.cs
@@ -0,0 +1,1864 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.IO;

+using System.Text;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Readings and decodes protocol message fields.

+    /// </summary>

+    /// <remarks>

+    /// This class contains two kinds of methods:  methods that read specific

+    /// protocol message constructs and field types (e.g. ReadTag and

+    /// ReadInt32) and methods that read low-level values (e.g.

+    /// ReadRawVarint32 and ReadRawBytes).  If you are reading encoded protocol

+    /// messages, you should use the former methods, but if you are reading some

+    /// other format of your own design, use the latter. The names of the former

+    /// methods are taken from the protocol buffer type names, not .NET types.

+    /// (Hence ReadFloat instead of ReadSingle, and ReadBool instead of ReadBoolean.)

+    /// 

+    /// TODO(jonskeet): Consider whether recursion and size limits shouldn't be readonly,

+    /// set at construction time.

+    /// </remarks>

+    public sealed class CodedInputStream : ICodedInputStream

+    {

+        private readonly byte[] buffer;

+        private int bufferSize;

+        private int bufferSizeAfterLimit = 0;

+        private int bufferPos = 0;

+        private readonly Stream input;

+        private uint lastTag = 0;

+

+        private uint nextTag = 0;

+        private bool hasNextTag = false;

+

+        internal const int DefaultRecursionLimit = 64;

+        internal const int DefaultSizeLimit = 64 << 20; // 64MB

+        public const int BufferSize = 4096;

+

+        /// <summary>

+        /// The total number of bytes read before the current buffer. The

+        /// total bytes read up to the current position can be computed as

+        /// totalBytesRetired + bufferPos.

+        /// </summary>

+        private int totalBytesRetired = 0;

+

+        /// <summary>

+        /// The absolute position of the end of the current message.

+        /// </summary> 

+        private int currentLimit = int.MaxValue;

+

+        /// <summary>

+        /// <see cref="SetRecursionLimit"/>

+        /// </summary>

+        private int recursionDepth = 0;

+

+        private int recursionLimit = DefaultRecursionLimit;

+

+        /// <summary>

+        /// <see cref="SetSizeLimit"/>

+        /// </summary>

+        private int sizeLimit = DefaultSizeLimit;

+

+        #region Construction

+

+        /// <summary>

+        /// Creates a new CodedInputStream reading data from the given

+        /// stream.

+        /// </summary>

+        public static CodedInputStream CreateInstance(Stream input)

+        {

+            return new CodedInputStream(input);

+        }

+        /// <summary>

+        /// Creates a new CodedInputStream reading data from the given

+        /// stream and a pre-allocated memory buffer.

+        /// </summary>

+        public static CodedInputStream CreateInstance(Stream input, byte[] buffer)

+        {

+            return new CodedInputStream(input, buffer);

+        }

+

+        /// <summary>

+        /// Creates a new CodedInputStream reading data from the given

+        /// byte array.

+        /// </summary>

+        public static CodedInputStream CreateInstance(byte[] buf)

+        {

+            return new CodedInputStream(buf, 0, buf.Length);

+        }

+

+        /// <summary>

+        /// Creates a new CodedInputStream that reads from the given

+        /// byte array slice.

+        /// </summary>

+        public static CodedInputStream CreateInstance(byte[] buf, int offset, int length)

+        {

+            return new CodedInputStream(buf, offset, length);

+        }

+

+        private CodedInputStream(byte[] buffer, int offset, int length)

+        {

+            this.buffer = buffer;

+            this.bufferPos = offset;

+            this.bufferSize = offset + length;

+            this.input = null;

+        }

+

+        private CodedInputStream(Stream input)

+        {

+            this.buffer = new byte[BufferSize];

+            this.bufferSize = 0;

+            this.input = input;

+        }

+

+        private CodedInputStream(Stream input, byte[] buffer)

+        {

+            this.buffer = buffer;

+            this.bufferSize = 0;

+            this.input = input;

+        }

+        #endregion

+

+        /// <summary>

+        /// Returns the current position in the input stream, or the position in the input buffer

+        /// </summary>

+        public long Position 

+        {

+            get

+            {

+                if (input != null)

+                {

+                    return input.Position - ((bufferSize + bufferSizeAfterLimit) - bufferPos);

+                }

+                return bufferPos;

+            }

+        }

+

+

+        void ICodedInputStream.ReadMessageStart() { }

+        void ICodedInputStream.ReadMessageEnd() { }

+

+        #region Validation

+

+        /// <summary>

+        /// Verifies that the last call to ReadTag() returned the given tag value.

+        /// This is used to verify that a nested group ended with the correct

+        /// end tag.

+        /// </summary>

+        /// <exception cref="InvalidProtocolBufferException">The last

+        /// tag read was not the one specified</exception>

+        [CLSCompliant(false)]

+        public void CheckLastTagWas(uint value)

+        {

+            if (lastTag != value)

+            {

+                throw InvalidProtocolBufferException.InvalidEndTag();

+            }

+        }

+

+        #endregion

+

+        #region Reading of tags etc

+

+        /// <summary>

+        /// Attempt to peek at the next field tag.

+        /// </summary>

+        [CLSCompliant(false)]

+        public bool PeekNextTag(out uint fieldTag, out string fieldName)

+        {

+            if (hasNextTag)

+            {

+                fieldName = null;

+                fieldTag = nextTag;

+                return true;

+            }

+

+            uint savedLast = lastTag;

+            hasNextTag = ReadTag(out nextTag, out fieldName);

+            lastTag = savedLast;

+            fieldTag = nextTag;

+            return hasNextTag;

+        }

+

+        /// <summary>

+        /// Attempt to read a field tag, returning false if we have reached the end

+        /// of the input data.

+        /// </summary>

+        /// <param name="fieldTag">The 'tag' of the field (id * 8 + wire-format)</param>

+        /// <param name="fieldName">Not Supported - For protobuffer streams, this parameter is always null</param>

+        /// <returns>true if the next fieldTag was read</returns>

+        [CLSCompliant(false)]

+        public bool ReadTag(out uint fieldTag, out string fieldName)

+        {

+            fieldName = null;

+

+            if (hasNextTag)

+            {

+                fieldTag = nextTag;

+                lastTag = fieldTag;

+                hasNextTag = false;

+                return true;

+            }

+

+            if (IsAtEnd)

+            {

+                fieldTag = 0;

+                lastTag = fieldTag;

+                return false;

+            }

+

+            fieldTag = ReadRawVarint32();

+            lastTag = fieldTag;

+            if (lastTag == 0)

+            {

+                // If we actually read zero, that's not a valid tag.

+                throw InvalidProtocolBufferException.InvalidTag();

+            }

+            return true;

+        }

+

+        /// <summary>

+        /// Read a double field from the stream.

+        /// </summary>

+        public bool ReadDouble(ref double value)

+        {

+            value = FrameworkPortability.Int64ToDouble((long) ReadRawLittleEndian64());

+            return true;

+        }

+

+        /// <summary>

+        /// Read a float field from the stream.

+        /// </summary>

+        public bool ReadFloat(ref float value)

+        {

+            if (BitConverter.IsLittleEndian && 4 <= bufferSize - bufferPos)

+            {

+                value = BitConverter.ToSingle(buffer, bufferPos);

+                bufferPos += 4;

+            }

+            else

+            {

+                byte[] rawBytes = ReadRawBytes(4);

+                if (!BitConverter.IsLittleEndian)

+                {

+                    ByteArray.Reverse(rawBytes);

+                }

+                value = BitConverter.ToSingle(rawBytes, 0);

+            }

+            return true;

+        }

+

+        /// <summary>

+        /// Read a uint64 field from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        public bool ReadUInt64(ref ulong value)

+        {

+            value = ReadRawVarint64();

+            return true;

+        }

+

+        /// <summary>

+        /// Read an int64 field from the stream.

+        /// </summary>

+        public bool ReadInt64(ref long value)

+        {

+            value = (long) ReadRawVarint64();

+            return true;

+        }

+

+        /// <summary>

+        /// Read an int32 field from the stream.

+        /// </summary>

+        public bool ReadInt32(ref int value)

+        {

+            value = (int) ReadRawVarint32();

+            return true;

+        }

+

+        /// <summary>

+        /// Read a fixed64 field from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        public bool ReadFixed64(ref ulong value)

+        {

+            value = ReadRawLittleEndian64();

+            return true;

+        }

+

+        /// <summary>

+        /// Read a fixed32 field from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        public bool ReadFixed32(ref uint value)

+        {

+            value = ReadRawLittleEndian32();

+            return true;

+        }

+

+        /// <summary>

+        /// Read a bool field from the stream.

+        /// </summary>

+        public bool ReadBool(ref bool value)

+        {

+            value = ReadRawVarint32() != 0;

+            return true;

+        }

+

+        /// <summary>

+        /// Reads a string field from the stream.

+        /// </summary>

+        public bool ReadString(ref string value)

+        {

+            int size = (int) ReadRawVarint32();

+            // No need to read any data for an empty string.

+            if (size == 0)

+            {

+                value = "";

+                return true;

+            }

+            if (size <= bufferSize - bufferPos)

+            {

+                // Fast path:  We already have the bytes in a contiguous buffer, so

+                //   just copy directly from it.

+                String result = Encoding.UTF8.GetString(buffer, bufferPos, size);

+                bufferPos += size;

+                value = result;

+                return true;

+            }

+            // Slow path: Build a byte array first then copy it.

+            value = Encoding.UTF8.GetString(ReadRawBytes(size), 0, size);

+            return true;

+        }

+

+        /// <summary>

+        /// Reads a group field value from the stream.

+        /// </summary>    

+        public void ReadGroup(int fieldNumber, IBuilderLite builder,

+                              ExtensionRegistry extensionRegistry)

+        {

+            if (recursionDepth >= recursionLimit)

+            {

+                throw InvalidProtocolBufferException.RecursionLimitExceeded();

+            }

+            ++recursionDepth;

+            builder.WeakMergeFrom(this, extensionRegistry);

+            CheckLastTagWas(WireFormat.MakeTag(fieldNumber, WireFormat.WireType.EndGroup));

+            --recursionDepth;

+        }

+

+        /// <summary>

+        /// Reads a group field value from the stream and merges it into the given

+        /// UnknownFieldSet.

+        /// </summary>   

+        [Obsolete]

+        public void ReadUnknownGroup(int fieldNumber, IBuilderLite builder)

+        {

+            if (recursionDepth >= recursionLimit)

+            {

+                throw InvalidProtocolBufferException.RecursionLimitExceeded();

+            }

+            ++recursionDepth;

+            builder.WeakMergeFrom(this);

+            CheckLastTagWas(WireFormat.MakeTag(fieldNumber, WireFormat.WireType.EndGroup));

+            --recursionDepth;

+        }

+

+        /// <summary>

+        /// Reads an embedded message field value from the stream.

+        /// </summary>   

+        public void ReadMessage(IBuilderLite builder, ExtensionRegistry extensionRegistry)

+        {

+            int length = (int) ReadRawVarint32();

+            if (recursionDepth >= recursionLimit)

+            {

+                throw InvalidProtocolBufferException.RecursionLimitExceeded();

+            }

+            int oldLimit = PushLimit(length);

+            ++recursionDepth;

+            builder.WeakMergeFrom(this, extensionRegistry);

+            CheckLastTagWas(0);

+            --recursionDepth;

+            PopLimit(oldLimit);

+        }

+

+        /// <summary>

+        /// Reads a bytes field value from the stream.

+        /// </summary>   

+        public bool ReadBytes(ref ByteString value)

+        {

+            int size = (int) ReadRawVarint32();

+            if (size <= bufferSize - bufferPos && size > 0)

+            {

+                // Fast path:  We already have the bytes in a contiguous buffer, so

+                //   just copy directly from it.

+                ByteString result = ByteString.CopyFrom(buffer, bufferPos, size);

+                bufferPos += size;

+                value = result;

+                return true;

+            }

+            else

+            {

+                // Slow path:  Build a byte array and attach it to a new ByteString.

+                value = ByteString.AttachBytes(ReadRawBytes(size));

+                return true;

+            }

+        }

+

+        /// <summary>

+        /// Reads a uint32 field value from the stream.

+        /// </summary>   

+        [CLSCompliant(false)]

+        public bool ReadUInt32(ref uint value)

+        {

+            value = ReadRawVarint32();

+            return true;

+        }

+

+        /// <summary>

+        /// Reads an enum field value from the stream. The caller is responsible

+        /// for converting the numeric value to an actual enum.

+        /// </summary>   

+        public bool ReadEnum(ref IEnumLite value, out object unknown, IEnumLiteMap mapping)

+        {

+            int rawValue = (int) ReadRawVarint32();

+

+            value = mapping.FindValueByNumber(rawValue);

+            if (value != null)

+            {

+                unknown = null;

+                return true;

+            }

+            unknown = rawValue;

+            return false;

+        }

+

+        /// <summary>

+        /// Reads an enum field value from the stream. If the enum is valid for type T,

+        /// then the ref value is set and it returns true.  Otherwise the unknown output

+        /// value is set and this method returns false.

+        /// </summary>   

+        [CLSCompliant(false)]

+        public bool ReadEnum<T>(ref T value, out object unknown)

+            where T : struct, IComparable, IFormattable

+        {

+            int number = (int) ReadRawVarint32();

+            if (EnumParser<T>.TryConvert(number, ref value))

+            {

+                unknown = null;

+                return true;

+            }

+            unknown = number;

+            return false;

+        }

+

+        /// <summary>

+        /// Reads an sfixed32 field value from the stream.

+        /// </summary>   

+        public bool ReadSFixed32(ref int value)

+        {

+            value = (int) ReadRawLittleEndian32();

+            return true;

+        }

+

+        /// <summary>

+        /// Reads an sfixed64 field value from the stream.

+        /// </summary>   

+        public bool ReadSFixed64(ref long value)

+        {

+            value = (long) ReadRawLittleEndian64();

+            return true;

+        }

+

+        /// <summary>

+        /// Reads an sint32 field value from the stream.

+        /// </summary>   

+        public bool ReadSInt32(ref int value)

+        {

+            value = DecodeZigZag32(ReadRawVarint32());

+            return true;

+        }

+

+        /// <summary>

+        /// Reads an sint64 field value from the stream.

+        /// </summary>   

+        public bool ReadSInt64(ref long value)

+        {

+            value = DecodeZigZag64(ReadRawVarint64());

+            return true;

+        }

+

+        private bool BeginArray(uint fieldTag, out bool isPacked, out int oldLimit)

+        {

+            isPacked = WireFormat.GetTagWireType(fieldTag) == WireFormat.WireType.LengthDelimited;

+

+            if (isPacked)

+            {

+                int length = (int) (ReadRawVarint32() & int.MaxValue);

+                if (length > 0)

+                {

+                    oldLimit = PushLimit(length);

+                    return true;

+                }

+                oldLimit = -1;

+                return false; //packed but empty

+            }

+

+            oldLimit = -1;

+            return true;

+        }

+

+        /// <summary>

+        /// Returns true if the next tag is also part of the same unpacked array.

+        /// </summary>

+        private bool ContinueArray(uint currentTag)

+        {

+            string ignore;

+            uint next;

+            if (PeekNextTag(out next, out ignore))

+            {

+                if (next == currentTag)

+                {

+                    hasNextTag = false;

+                    return true;

+                }

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// Returns true if the next tag is also part of the same array, which may or may not be packed.

+        /// </summary>

+        private bool ContinueArray(uint currentTag, bool packed, int oldLimit)

+        {

+            if (packed)

+            {

+                if (ReachedLimit)

+                {

+                    PopLimit(oldLimit);

+                    return false;

+                }

+                return true;

+            }

+

+            string ignore;

+            uint next;

+            if (PeekNextTag(out next, out ignore))

+            {

+                if (next == currentTag)

+                {

+                    hasNextTag = false;

+                    return true;

+                }

+            }

+            return false;

+        }

+

+        [CLSCompliant(false)]

+        public void ReadPrimitiveArray(FieldType fieldType, uint fieldTag, string fieldName, ICollection<object> list)

+        {

+            WireFormat.WireType normal = WireFormat.GetWireType(fieldType);

+            WireFormat.WireType wformat = WireFormat.GetTagWireType(fieldTag);

+

+            // 2.3 allows packed form even if the field is not declared packed.

+            if (normal != wformat && wformat == WireFormat.WireType.LengthDelimited)

+            {

+                int length = (int) (ReadRawVarint32() & int.MaxValue);

+                int limit = PushLimit(length);

+                while (!ReachedLimit)

+                {

+                    Object value = null;

+                    if (ReadPrimitiveField(fieldType, ref value))

+                    {

+                        list.Add(value);

+                    }

+                }

+                PopLimit(limit);

+            }

+            else

+            {

+                Object value = null;

+                do

+                {

+                    if (ReadPrimitiveField(fieldType, ref value))

+                    {

+                        list.Add(value);

+                    }

+                } while (ContinueArray(fieldTag));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadStringArray(uint fieldTag, string fieldName, ICollection<string> list)

+        {

+            string tmp = null;

+            do

+            {

+                ReadString(ref tmp);

+                list.Add(tmp);

+            } while (ContinueArray(fieldTag));

+        }

+

+        [CLSCompliant(false)]

+        public void ReadBytesArray(uint fieldTag, string fieldName, ICollection<ByteString> list)

+        {

+            ByteString tmp = null;

+            do

+            {

+                ReadBytes(ref tmp);

+                list.Add(tmp);

+            } while (ContinueArray(fieldTag));

+        }

+

+        [CLSCompliant(false)]

+        public void ReadBoolArray(uint fieldTag, string fieldName, ICollection<bool> list)

+        {

+            bool isPacked;

+            int holdLimit;

+            if (BeginArray(fieldTag, out isPacked, out holdLimit))

+            {

+                bool tmp = false;

+                do

+                {

+                    ReadBool(ref tmp);

+                    list.Add(tmp);

+                } while (ContinueArray(fieldTag, isPacked, holdLimit));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadInt32Array(uint fieldTag, string fieldName, ICollection<int> list)

+        {

+            bool isPacked;

+            int holdLimit;

+            if (BeginArray(fieldTag, out isPacked, out holdLimit))

+            {

+                int tmp = 0;

+                do

+                {

+                    ReadInt32(ref tmp);

+                    list.Add(tmp);

+                } while (ContinueArray(fieldTag, isPacked, holdLimit));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadSInt32Array(uint fieldTag, string fieldName, ICollection<int> list)

+        {

+            bool isPacked;

+            int holdLimit;

+            if (BeginArray(fieldTag, out isPacked, out holdLimit))

+            {

+                int tmp = 0;

+                do

+                {

+                    ReadSInt32(ref tmp);

+                    list.Add(tmp);

+                } while (ContinueArray(fieldTag, isPacked, holdLimit));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadUInt32Array(uint fieldTag, string fieldName, ICollection<uint> list)

+        {

+            bool isPacked;

+            int holdLimit;

+            if (BeginArray(fieldTag, out isPacked, out holdLimit))

+            {

+                uint tmp = 0;

+                do

+                {

+                    ReadUInt32(ref tmp);

+                    list.Add(tmp);

+                } while (ContinueArray(fieldTag, isPacked, holdLimit));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadFixed32Array(uint fieldTag, string fieldName, ICollection<uint> list)

+        {

+            bool isPacked;

+            int holdLimit;

+            if (BeginArray(fieldTag, out isPacked, out holdLimit))

+            {

+                uint tmp = 0;

+                do

+                {

+                    ReadFixed32(ref tmp);

+                    list.Add(tmp);

+                } while (ContinueArray(fieldTag, isPacked, holdLimit));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadSFixed32Array(uint fieldTag, string fieldName, ICollection<int> list)

+        {

+            bool isPacked;

+            int holdLimit;

+            if (BeginArray(fieldTag, out isPacked, out holdLimit))

+            {

+                int tmp = 0;

+                do

+                {

+                    ReadSFixed32(ref tmp);

+                    list.Add(tmp);

+                } while (ContinueArray(fieldTag, isPacked, holdLimit));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadInt64Array(uint fieldTag, string fieldName, ICollection<long> list)

+        {

+            bool isPacked;

+            int holdLimit;

+            if (BeginArray(fieldTag, out isPacked, out holdLimit))

+            {

+                long tmp = 0;

+                do

+                {

+                    ReadInt64(ref tmp);

+                    list.Add(tmp);

+                } while (ContinueArray(fieldTag, isPacked, holdLimit));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadSInt64Array(uint fieldTag, string fieldName, ICollection<long> list)

+        {

+            bool isPacked;

+            int holdLimit;

+            if (BeginArray(fieldTag, out isPacked, out holdLimit))

+            {

+                long tmp = 0;

+                do

+                {

+                    ReadSInt64(ref tmp);

+                    list.Add(tmp);

+                } while (ContinueArray(fieldTag, isPacked, holdLimit));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadUInt64Array(uint fieldTag, string fieldName, ICollection<ulong> list)

+        {

+            bool isPacked;

+            int holdLimit;

+            if (BeginArray(fieldTag, out isPacked, out holdLimit))

+            {

+                ulong tmp = 0;

+                do

+                {

+                    ReadUInt64(ref tmp);

+                    list.Add(tmp);

+                } while (ContinueArray(fieldTag, isPacked, holdLimit));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadFixed64Array(uint fieldTag, string fieldName, ICollection<ulong> list)

+        {

+            bool isPacked;

+            int holdLimit;

+            if (BeginArray(fieldTag, out isPacked, out holdLimit))

+            {

+                ulong tmp = 0;

+                do

+                {

+                    ReadFixed64(ref tmp);

+                    list.Add(tmp);

+                } while (ContinueArray(fieldTag, isPacked, holdLimit));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadSFixed64Array(uint fieldTag, string fieldName, ICollection<long> list)

+        {

+            bool isPacked;

+            int holdLimit;

+            if (BeginArray(fieldTag, out isPacked, out holdLimit))

+            {

+                long tmp = 0;

+                do

+                {

+                    ReadSFixed64(ref tmp);

+                    list.Add(tmp);

+                } while (ContinueArray(fieldTag, isPacked, holdLimit));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadDoubleArray(uint fieldTag, string fieldName, ICollection<double> list)

+        {

+            bool isPacked;

+            int holdLimit;

+            if (BeginArray(fieldTag, out isPacked, out holdLimit))

+            {

+                double tmp = 0;

+                do

+                {

+                    ReadDouble(ref tmp);

+                    list.Add(tmp);

+                } while (ContinueArray(fieldTag, isPacked, holdLimit));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadFloatArray(uint fieldTag, string fieldName, ICollection<float> list)

+        {

+            bool isPacked;

+            int holdLimit;

+            if (BeginArray(fieldTag, out isPacked, out holdLimit))

+            {

+                float tmp = 0;

+                do

+                {

+                    ReadFloat(ref tmp);

+                    list.Add(tmp);

+                } while (ContinueArray(fieldTag, isPacked, holdLimit));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadEnumArray(uint fieldTag, string fieldName, ICollection<IEnumLite> list,

+                                  out ICollection<object> unknown, IEnumLiteMap mapping)

+        {

+            unknown = null;

+            object unkval;

+            IEnumLite value = null;

+            WireFormat.WireType wformat = WireFormat.GetTagWireType(fieldTag);

+

+            // 2.3 allows packed form even if the field is not declared packed.

+            if (wformat == WireFormat.WireType.LengthDelimited)

+            {

+                int length = (int) (ReadRawVarint32() & int.MaxValue);

+                int limit = PushLimit(length);

+                while (!ReachedLimit)

+                {

+                    if (ReadEnum(ref value, out unkval, mapping))

+                    {

+                        list.Add(value);

+                    }

+                    else

+                    {

+                        if (unknown == null)

+                        {

+                            unknown = new List<object>();

+                        }

+                        unknown.Add(unkval);

+                    }

+                }

+                PopLimit(limit);

+            }

+            else

+            {

+                do

+                {

+                    if (ReadEnum(ref value, out unkval, mapping))

+                    {

+                        list.Add(value);

+                    }

+                    else

+                    {

+                        if (unknown == null)

+                        {

+                            unknown = new List<object>();

+                        }

+                        unknown.Add(unkval);

+                    }

+                } while (ContinueArray(fieldTag));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadEnumArray<T>(uint fieldTag, string fieldName, ICollection<T> list,

+                                     out ICollection<object> unknown)

+            where T : struct, IComparable, IFormattable

+        {

+            unknown = null;

+            object unkval;

+            T value = default(T);

+            WireFormat.WireType wformat = WireFormat.GetTagWireType(fieldTag);

+

+            // 2.3 allows packed form even if the field is not declared packed.

+            if (wformat == WireFormat.WireType.LengthDelimited)

+            {

+                int length = (int) (ReadRawVarint32() & int.MaxValue);

+                int limit = PushLimit(length);

+                while (!ReachedLimit)

+                {

+                    if (ReadEnum<T>(ref value, out unkval))

+                    {

+                        list.Add(value);

+                    }

+                    else

+                    {

+                        if (unknown == null)

+                        {

+                            unknown = new List<object>();

+                        }

+                        unknown.Add(unkval);

+                    }

+                }

+                PopLimit(limit);

+            }

+            else

+            {

+                do

+                {

+                    if (ReadEnum(ref value, out unkval))

+                    {

+                        list.Add(value);

+                    }

+                    else

+                    {

+                        if (unknown == null)

+                        {

+                            unknown = new List<object>();

+                        }

+                        unknown.Add(unkval);

+                    }

+                } while (ContinueArray(fieldTag));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void ReadMessageArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType,

+                                        ExtensionRegistry registry) where T : IMessageLite

+        {

+            do

+            {

+                IBuilderLite builder = messageType.WeakCreateBuilderForType();

+                ReadMessage(builder, registry);

+                list.Add((T) builder.WeakBuildPartial());

+            } while (ContinueArray(fieldTag));

+        }

+

+        [CLSCompliant(false)]

+        public void ReadGroupArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType,

+                                      ExtensionRegistry registry) where T : IMessageLite

+        {

+            do

+            {

+                IBuilderLite builder = messageType.WeakCreateBuilderForType();

+                ReadGroup(WireFormat.GetTagFieldNumber(fieldTag), builder, registry);

+                list.Add((T) builder.WeakBuildPartial());

+            } while (ContinueArray(fieldTag));

+        }

+

+        /// <summary>

+        /// Reads a field of any primitive type. Enums, groups and embedded

+        /// messages are not handled by this method.

+        /// </summary>

+        public bool ReadPrimitiveField(FieldType fieldType, ref object value)

+        {

+            switch (fieldType)

+            {

+                case FieldType.Double:

+                    {

+                        double tmp = 0;

+                        if (ReadDouble(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.Float:

+                    {

+                        float tmp = 0;

+                        if (ReadFloat(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.Int64:

+                    {

+                        long tmp = 0;

+                        if (ReadInt64(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.UInt64:

+                    {

+                        ulong tmp = 0;

+                        if (ReadUInt64(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.Int32:

+                    {

+                        int tmp = 0;

+                        if (ReadInt32(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.Fixed64:

+                    {

+                        ulong tmp = 0;

+                        if (ReadFixed64(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.Fixed32:

+                    {

+                        uint tmp = 0;

+                        if (ReadFixed32(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.Bool:

+                    {

+                        bool tmp = false;

+                        if (ReadBool(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.String:

+                    {

+                        string tmp = null;

+                        if (ReadString(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.Bytes:

+                    {

+                        ByteString tmp = null;

+                        if (ReadBytes(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.UInt32:

+                    {

+                        uint tmp = 0;

+                        if (ReadUInt32(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.SFixed32:

+                    {

+                        int tmp = 0;

+                        if (ReadSFixed32(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.SFixed64:

+                    {

+                        long tmp = 0;

+                        if (ReadSFixed64(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.SInt32:

+                    {

+                        int tmp = 0;

+                        if (ReadSInt32(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.SInt64:

+                    {

+                        long tmp = 0;

+                        if (ReadSInt64(ref tmp))

+                        {

+                            value = tmp;

+                            return true;

+                        }

+                        return false;

+                    }

+                case FieldType.Group:

+                    throw new ArgumentException("ReadPrimitiveField() cannot handle nested groups.");

+                case FieldType.Message:

+                    throw new ArgumentException("ReadPrimitiveField() cannot handle embedded messages.");

+                    // We don't handle enums because we don't know what to do if the

+                    // value is not recognized.

+                case FieldType.Enum:

+                    throw new ArgumentException("ReadPrimitiveField() cannot handle enums.");

+                default:

+                    throw new ArgumentOutOfRangeException("Invalid field type " + fieldType);

+            }

+        }

+

+        #endregion

+

+        #region Underlying reading primitives

+

+        /// <summary>

+        /// Same code as ReadRawVarint32, but read each byte individually, checking for

+        /// buffer overflow.

+        /// </summary>

+        private uint SlowReadRawVarint32()

+        {

+            int tmp = ReadRawByte();

+            if (tmp < 128)

+            {

+                return (uint) tmp;

+            }

+            int result = tmp & 0x7f;

+            if ((tmp = ReadRawByte()) < 128)

+            {

+                result |= tmp << 7;

+            }

+            else

+            {

+                result |= (tmp & 0x7f) << 7;

+                if ((tmp = ReadRawByte()) < 128)

+                {

+                    result |= tmp << 14;

+                }

+                else

+                {

+                    result |= (tmp & 0x7f) << 14;

+                    if ((tmp = ReadRawByte()) < 128)

+                    {

+                        result |= tmp << 21;

+                    }

+                    else

+                    {

+                        result |= (tmp & 0x7f) << 21;

+                        result |= (tmp = ReadRawByte()) << 28;

+                        if (tmp >= 128)

+                        {

+                            // Discard upper 32 bits.

+                            for (int i = 0; i < 5; i++)

+                            {

+                                if (ReadRawByte() < 128)

+                                {

+                                    return (uint) result;

+                                }

+                            }

+                            throw InvalidProtocolBufferException.MalformedVarint();

+                        }

+                    }

+                }

+            }

+            return (uint) result;

+        }

+

+        /// <summary>

+        /// Read a raw Varint from the stream.  If larger than 32 bits, discard the upper bits.

+        /// This method is optimised for the case where we've got lots of data in the buffer.

+        /// That means we can check the size just once, then just read directly from the buffer

+        /// without constant rechecking of the buffer length.

+        /// </summary>

+        [CLSCompliant(false)]

+        public uint ReadRawVarint32()

+        {

+            if (bufferPos + 5 > bufferSize)

+            {

+                return SlowReadRawVarint32();

+            }

+

+            int tmp = buffer[bufferPos++];

+            if (tmp < 128)

+            {

+                return (uint) tmp;

+            }

+            int result = tmp & 0x7f;

+            if ((tmp = buffer[bufferPos++]) < 128)

+            {

+                result |= tmp << 7;

+            }

+            else

+            {

+                result |= (tmp & 0x7f) << 7;

+                if ((tmp = buffer[bufferPos++]) < 128)

+                {

+                    result |= tmp << 14;

+                }

+                else

+                {

+                    result |= (tmp & 0x7f) << 14;

+                    if ((tmp = buffer[bufferPos++]) < 128)

+                    {

+                        result |= tmp << 21;

+                    }

+                    else

+                    {

+                        result |= (tmp & 0x7f) << 21;

+                        result |= (tmp = buffer[bufferPos++]) << 28;

+                        if (tmp >= 128)

+                        {

+                            // Discard upper 32 bits.

+                            // Note that this has to use ReadRawByte() as we only ensure we've

+                            // got at least 5 bytes at the start of the method. This lets us

+                            // use the fast path in more cases, and we rarely hit this section of code.

+                            for (int i = 0; i < 5; i++)

+                            {

+                                if (ReadRawByte() < 128)

+                                {

+                                    return (uint) result;

+                                }

+                            }

+                            throw InvalidProtocolBufferException.MalformedVarint();

+                        }

+                    }

+                }

+            }

+            return (uint) result;

+        }

+

+        /// <summary>

+        /// Reads a varint from the input one byte at a time, so that it does not

+        /// read any bytes after the end of the varint. If you simply wrapped the

+        /// stream in a CodedInputStream and used ReadRawVarint32(Stream)}

+        /// then you would probably end up reading past the end of the varint since

+        /// CodedInputStream buffers its input.

+        /// </summary>

+        /// <param name="input"></param>

+        /// <returns></returns>

+        [CLSCompliant(false)]

+        public static uint ReadRawVarint32(Stream input)

+        {

+            int result = 0;

+            int offset = 0;

+            for (; offset < 32; offset += 7)

+            {

+                int b = input.ReadByte();

+                if (b == -1)

+                {

+                    throw InvalidProtocolBufferException.TruncatedMessage();

+                }

+                result |= (b & 0x7f) << offset;

+                if ((b & 0x80) == 0)

+                {

+                    return (uint) result;

+                }

+            }

+            // Keep reading up to 64 bits.

+            for (; offset < 64; offset += 7)

+            {

+                int b = input.ReadByte();

+                if (b == -1)

+                {

+                    throw InvalidProtocolBufferException.TruncatedMessage();

+                }

+                if ((b & 0x80) == 0)

+                {

+                    return (uint) result;

+                }

+            }

+            throw InvalidProtocolBufferException.MalformedVarint();

+        }

+

+        /// <summary>

+        /// Read a raw varint from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        public ulong ReadRawVarint64()

+        {

+            int shift = 0;

+            ulong result = 0;

+            while (shift < 64)

+            {

+                byte b = ReadRawByte();

+                result |= (ulong) (b & 0x7F) << shift;

+                if ((b & 0x80) == 0)

+                {

+                    return result;

+                }

+                shift += 7;

+            }

+            throw InvalidProtocolBufferException.MalformedVarint();

+        }

+

+        /// <summary>

+        /// Read a 32-bit little-endian integer from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        public uint ReadRawLittleEndian32()

+        {

+            uint b1 = ReadRawByte();

+            uint b2 = ReadRawByte();

+            uint b3 = ReadRawByte();

+            uint b4 = ReadRawByte();

+            return b1 | (b2 << 8) | (b3 << 16) | (b4 << 24);

+        }

+

+        /// <summary>

+        /// Read a 64-bit little-endian integer from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        public ulong ReadRawLittleEndian64()

+        {

+            ulong b1 = ReadRawByte();

+            ulong b2 = ReadRawByte();

+            ulong b3 = ReadRawByte();

+            ulong b4 = ReadRawByte();

+            ulong b5 = ReadRawByte();

+            ulong b6 = ReadRawByte();

+            ulong b7 = ReadRawByte();

+            ulong b8 = ReadRawByte();

+            return b1 | (b2 << 8) | (b3 << 16) | (b4 << 24)

+                   | (b5 << 32) | (b6 << 40) | (b7 << 48) | (b8 << 56);

+        }

+

+        #endregion

+

+        /// <summary>

+        /// Decode a 32-bit value with ZigZag encoding.

+        /// </summary>

+        /// <remarks>

+        /// ZigZag encodes signed integers into values that can be efficiently

+        /// encoded with varint.  (Otherwise, negative values must be 

+        /// sign-extended to 64 bits to be varint encoded, thus always taking

+        /// 10 bytes on the wire.)

+        /// </remarks>

+        [CLSCompliant(false)]

+        public static int DecodeZigZag32(uint n)

+        {

+            return (int) (n >> 1) ^ -(int) (n & 1);

+        }

+

+        /// <summary>

+        /// Decode a 32-bit value with ZigZag encoding.

+        /// </summary>

+        /// <remarks>

+        /// ZigZag encodes signed integers into values that can be efficiently

+        /// encoded with varint.  (Otherwise, negative values must be 

+        /// sign-extended to 64 bits to be varint encoded, thus always taking

+        /// 10 bytes on the wire.)

+        /// </remarks>

+        [CLSCompliant(false)]

+        public static long DecodeZigZag64(ulong n)

+        {

+            return (long) (n >> 1) ^ -(long) (n & 1);

+        }

+

+        /// <summary>

+        /// Set the maximum message recursion depth.

+        /// </summary>

+        /// <remarks>

+        /// In order to prevent malicious

+        /// messages from causing stack overflows, CodedInputStream limits

+        /// how deeply messages may be nested.  The default limit is 64.

+        /// </remarks>

+        public int SetRecursionLimit(int limit)

+        {

+            if (limit < 0)

+            {

+                throw new ArgumentOutOfRangeException("Recursion limit cannot be negative: " + limit);

+            }

+            int oldLimit = recursionLimit;

+            recursionLimit = limit;

+            return oldLimit;

+        }

+

+        /// <summary>

+        /// Set the maximum message size.

+        /// </summary>

+        /// <remarks>

+        /// In order to prevent malicious messages from exhausting memory or

+        /// causing integer overflows, CodedInputStream limits how large a message may be.

+        /// The default limit is 64MB.  You should set this limit as small

+        /// as you can without harming your app's functionality.  Note that

+        /// size limits only apply when reading from an InputStream, not

+        /// when constructed around a raw byte array (nor with ByteString.NewCodedInput).

+        /// If you want to read several messages from a single CodedInputStream, you

+        /// can call ResetSizeCounter() after each message to avoid hitting the

+        /// size limit.

+        /// </remarks>

+        public int SetSizeLimit(int limit)

+        {

+            if (limit < 0)

+            {

+                throw new ArgumentOutOfRangeException("Size limit cannot be negative: " + limit);

+            }

+            int oldLimit = sizeLimit;

+            sizeLimit = limit;

+            return oldLimit;

+        }

+

+        #region Internal reading and buffer management

+

+        /// <summary>

+        /// Resets the current size counter to zero (see SetSizeLimit).

+        /// </summary>

+        public void ResetSizeCounter()

+        {

+            totalBytesRetired = 0;

+        }

+

+        /// <summary>

+        /// Sets currentLimit to (current position) + byteLimit. This is called

+        /// when descending into a length-delimited embedded message. The previous

+        /// limit is returned.

+        /// </summary>

+        /// <returns>The old limit.</returns>

+        public int PushLimit(int byteLimit)

+        {

+            if (byteLimit < 0)

+            {

+                throw InvalidProtocolBufferException.NegativeSize();

+            }

+            byteLimit += totalBytesRetired + bufferPos;

+            int oldLimit = currentLimit;

+            if (byteLimit > oldLimit)

+            {

+                throw InvalidProtocolBufferException.TruncatedMessage();

+            }

+            currentLimit = byteLimit;

+

+            RecomputeBufferSizeAfterLimit();

+

+            return oldLimit;

+        }

+

+        private void RecomputeBufferSizeAfterLimit()

+        {

+            bufferSize += bufferSizeAfterLimit;

+            int bufferEnd = totalBytesRetired + bufferSize;

+            if (bufferEnd > currentLimit)

+            {

+                // Limit is in current buffer.

+                bufferSizeAfterLimit = bufferEnd - currentLimit;

+                bufferSize -= bufferSizeAfterLimit;

+            }

+            else

+            {

+                bufferSizeAfterLimit = 0;

+            }

+        }

+

+        /// <summary>

+        /// Discards the current limit, returning the previous limit.

+        /// </summary>

+        public void PopLimit(int oldLimit)

+        {

+            currentLimit = oldLimit;

+            RecomputeBufferSizeAfterLimit();

+        }

+

+        /// <summary>

+        /// Returns whether or not all the data before the limit has been read.

+        /// </summary>

+        /// <returns></returns>

+        public bool ReachedLimit

+        {

+            get

+            {

+                if (currentLimit == int.MaxValue)

+                {

+                    return false;

+                }

+                int currentAbsolutePosition = totalBytesRetired + bufferPos;

+                return currentAbsolutePosition >= currentLimit;

+            }

+        }

+

+        /// <summary>

+        /// Returns true if the stream has reached the end of the input. This is the

+        /// case if either the end of the underlying input source has been reached or

+        /// the stream has reached a limit created using PushLimit.

+        /// </summary>

+        public bool IsAtEnd

+        {

+            get { return bufferPos == bufferSize && !RefillBuffer(false); }

+        }

+

+        /// <summary>

+        /// Called when buffer is empty to read more bytes from the

+        /// input.  If <paramref name="mustSucceed"/> is true, RefillBuffer() gurantees that

+        /// either there will be at least one byte in the buffer when it returns

+        /// or it will throw an exception.  If <paramref name="mustSucceed"/> is false,

+        /// RefillBuffer() returns false if no more bytes were available.

+        /// </summary>

+        /// <param name="mustSucceed"></param>

+        /// <returns></returns>

+        private bool RefillBuffer(bool mustSucceed)

+        {

+            if (bufferPos < bufferSize)

+            {

+                throw new InvalidOperationException("RefillBuffer() called when buffer wasn't empty.");

+            }

+

+            if (totalBytesRetired + bufferSize == currentLimit)

+            {

+                // Oops, we hit a limit.

+                if (mustSucceed)

+                {

+                    throw InvalidProtocolBufferException.TruncatedMessage();

+                }

+                else

+                {

+                    return false;

+                }

+            }

+

+            totalBytesRetired += bufferSize;

+

+            bufferPos = 0;

+            bufferSize = (input == null) ? 0 : input.Read(buffer, 0, buffer.Length);

+            if (bufferSize < 0)

+            {

+                throw new InvalidOperationException("Stream.Read returned a negative count");

+            }

+            if (bufferSize == 0)

+            {

+                if (mustSucceed)

+                {

+                    throw InvalidProtocolBufferException.TruncatedMessage();

+                }

+                else

+                {

+                    return false;

+                }

+            }

+            else

+            {

+                RecomputeBufferSizeAfterLimit();

+                int totalBytesRead =

+                    totalBytesRetired + bufferSize + bufferSizeAfterLimit;

+                if (totalBytesRead > sizeLimit || totalBytesRead < 0)

+                {

+                    throw InvalidProtocolBufferException.SizeLimitExceeded();

+                }

+                return true;

+            }

+        }

+

+        /// <summary>

+        /// Read one byte from the input.

+        /// </summary>

+        /// <exception cref="InvalidProtocolBufferException">

+        /// the end of the stream or the current limit was reached

+        /// </exception>

+        public byte ReadRawByte()

+        {

+            if (bufferPos == bufferSize)

+            {

+                RefillBuffer(true);

+            }

+            return buffer[bufferPos++];

+        }

+

+        /// <summary>

+        /// Read a fixed size of bytes from the input.

+        /// </summary>

+        /// <exception cref="InvalidProtocolBufferException">

+        /// the end of the stream or the current limit was reached

+        /// </exception>

+        public byte[] ReadRawBytes(int size)

+        {

+            if (size < 0)

+            {

+                throw InvalidProtocolBufferException.NegativeSize();

+            }

+

+            if (totalBytesRetired + bufferPos + size > currentLimit)

+            {

+                // Read to the end of the stream anyway.

+                SkipRawBytes(currentLimit - totalBytesRetired - bufferPos);

+                // Then fail.

+                throw InvalidProtocolBufferException.TruncatedMessage();

+            }

+

+            if (size <= bufferSize - bufferPos)

+            {

+                // We have all the bytes we need already.

+                byte[] bytes = new byte[size];

+                ByteArray.Copy(buffer, bufferPos, bytes, 0, size);

+                bufferPos += size;

+                return bytes;

+            }

+            else if (size < buffer.Length)

+            {

+                // Reading more bytes than are in the buffer, but not an excessive number

+                // of bytes.  We can safely allocate the resulting array ahead of time.

+

+                // First copy what we have.

+                byte[] bytes = new byte[size];

+                int pos = bufferSize - bufferPos;

+                ByteArray.Copy(buffer, bufferPos, bytes, 0, pos);

+                bufferPos = bufferSize;

+

+                // We want to use RefillBuffer() and then copy from the buffer into our

+                // byte array rather than reading directly into our byte array because

+                // the input may be unbuffered.

+                RefillBuffer(true);

+

+                while (size - pos > bufferSize)

+                {

+                    Buffer.BlockCopy(buffer, 0, bytes, pos, bufferSize);

+                    pos += bufferSize;

+                    bufferPos = bufferSize;

+                    RefillBuffer(true);

+                }

+

+                ByteArray.Copy(buffer, 0, bytes, pos, size - pos);

+                bufferPos = size - pos;

+

+                return bytes;

+            }

+            else

+            {

+                // The size is very large.  For security reasons, we can't allocate the

+                // entire byte array yet.  The size comes directly from the input, so a

+                // maliciously-crafted message could provide a bogus very large size in

+                // order to trick the app into allocating a lot of memory.  We avoid this

+                // by allocating and reading only a small chunk at a time, so that the

+                // malicious message must actually *be* extremely large to cause

+                // problems.  Meanwhile, we limit the allowed size of a message elsewhere.

+

+                // Remember the buffer markers since we'll have to copy the bytes out of

+                // it later.

+                int originalBufferPos = bufferPos;

+                int originalBufferSize = bufferSize;

+

+                // Mark the current buffer consumed.

+                totalBytesRetired += bufferSize;

+                bufferPos = 0;

+                bufferSize = 0;

+

+                // Read all the rest of the bytes we need.

+                int sizeLeft = size - (originalBufferSize - originalBufferPos);

+                List<byte[]> chunks = new List<byte[]>();

+

+                while (sizeLeft > 0)

+                {

+                    byte[] chunk = new byte[Math.Min(sizeLeft, buffer.Length)];

+                    int pos = 0;

+                    while (pos < chunk.Length)

+                    {

+                        int n = (input == null) ? -1 : input.Read(chunk, pos, chunk.Length - pos);

+                        if (n <= 0)

+                        {

+                            throw InvalidProtocolBufferException.TruncatedMessage();

+                        }

+                        totalBytesRetired += n;

+                        pos += n;

+                    }

+                    sizeLeft -= chunk.Length;

+                    chunks.Add(chunk);

+                }

+

+                // OK, got everything.  Now concatenate it all into one buffer.

+                byte[] bytes = new byte[size];

+

+                // Start by copying the leftover bytes from this.buffer.

+                int newPos = originalBufferSize - originalBufferPos;

+                ByteArray.Copy(buffer, originalBufferPos, bytes, 0, newPos);

+

+                // And now all the chunks.

+                foreach (byte[] chunk in chunks)

+                {

+                    Buffer.BlockCopy(chunk, 0, bytes, newPos, chunk.Length);

+                    newPos += chunk.Length;

+                }

+

+                // Done.

+                return bytes;

+            }

+        }

+

+        /// <summary>

+        /// Reads and discards a single field, given its tag value.

+        /// </summary>

+        /// <returns>false if the tag is an end-group tag, in which case

+        /// nothing is skipped. Otherwise, returns true.</returns>

+        [CLSCompliant(false)]

+        public bool SkipField()

+        {

+            uint tag = lastTag;

+            switch (WireFormat.GetTagWireType(tag))

+            {

+                case WireFormat.WireType.Varint:

+                    ReadRawVarint64();

+                    return true;

+                case WireFormat.WireType.Fixed64:

+                    ReadRawLittleEndian64();

+                    return true;

+                case WireFormat.WireType.LengthDelimited:

+                    SkipRawBytes((int) ReadRawVarint32());

+                    return true;

+                case WireFormat.WireType.StartGroup:

+                    SkipMessage();

+                    CheckLastTagWas(

+                        WireFormat.MakeTag(WireFormat.GetTagFieldNumber(tag),

+                                           WireFormat.WireType.EndGroup));

+                    return true;

+                case WireFormat.WireType.EndGroup:

+                    return false;

+                case WireFormat.WireType.Fixed32:

+                    ReadRawLittleEndian32();

+                    return true;

+                default:

+                    throw InvalidProtocolBufferException.InvalidWireType();

+            }

+        }

+

+        /// <summary>

+        /// Reads and discards an entire message.  This will read either until EOF

+        /// or until an endgroup tag, whichever comes first.

+        /// </summary>

+        public void SkipMessage()

+        {

+            uint tag;

+            string name;

+            while (ReadTag(out tag, out name))

+            {

+                if (!SkipField())

+                {

+                    return;

+                }

+            }

+        }

+

+        /// <summary>

+        /// Reads and discards <paramref name="size"/> bytes.

+        /// </summary>

+        /// <exception cref="InvalidProtocolBufferException">the end of the stream

+        /// or the current limit was reached</exception>

+        public void SkipRawBytes(int size)

+        {

+            if (size < 0)

+            {

+                throw InvalidProtocolBufferException.NegativeSize();

+            }

+

+            if (totalBytesRetired + bufferPos + size > currentLimit)

+            {

+                // Read to the end of the stream anyway.

+                SkipRawBytes(currentLimit - totalBytesRetired - bufferPos);

+                // Then fail.

+                throw InvalidProtocolBufferException.TruncatedMessage();

+            }

+

+            if (size <= bufferSize - bufferPos)

+            {

+                // We have all the bytes we need already.

+                bufferPos += size;

+            }

+            else

+            {

+                // Skipping more bytes than are in the buffer.  First skip what we have.

+                int pos = bufferSize - bufferPos;

+

+                // ROK 5/7/2013 Issue #54: should retire all bytes in buffer (bufferSize)

+                // totalBytesRetired += pos;

+                totalBytesRetired += bufferSize;

+                

+                bufferPos = 0;

+                bufferSize = 0;

+

+                // Then skip directly from the InputStream for the rest.

+                if (pos < size)

+                {

+                    if (input == null)

+                    {

+                        throw InvalidProtocolBufferException.TruncatedMessage();

+                    }

+                    SkipImpl(size - pos);

+                    totalBytesRetired += size - pos;

+                }

+            }

+        }

+

+        /// <summary>

+        /// Abstraction of skipping to cope with streams which can't really skip.

+        /// </summary>

+        private void SkipImpl(int amountToSkip)

+        {

+            if (input.CanSeek)

+            {

+                long previousPosition = input.Position;

+                input.Position += amountToSkip;

+                if (input.Position != previousPosition + amountToSkip)

+                {

+                    throw InvalidProtocolBufferException.TruncatedMessage();

+                }

+            }

+            else

+            {

+                byte[] skipBuffer = new byte[1024];

+                while (amountToSkip > 0)

+                {

+                    int bytesRead = input.Read(skipBuffer, 0, skipBuffer.Length);

+                    if (bytesRead <= 0)

+                    {

+                        throw InvalidProtocolBufferException.TruncatedMessage();

+                    }

+                    amountToSkip -= bytesRead;

+                }

+            }

+        }

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs b/csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs
new file mode 100644
index 0000000..ca6662a
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs
@@ -0,0 +1,653 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Globalization;

+using System.Text;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    // This part of CodedOutputStream provides all the static entry points that are used

+    // by generated code and internally to compute the size of messages prior to being

+    // written to an instance of CodedOutputStream.

+    public sealed partial class CodedOutputStream

+    {

+        private const int LittleEndian64Size = 8;

+        private const int LittleEndian32Size = 4;

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// double field, including the tag.

+        /// </summary>

+        public static int ComputeDoubleSize(int fieldNumber, double value)

+        {

+            return ComputeTagSize(fieldNumber) + LittleEndian64Size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// float field, including the tag.

+        /// </summary>

+        public static int ComputeFloatSize(int fieldNumber, float value)

+        {

+            return ComputeTagSize(fieldNumber) + LittleEndian32Size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// uint64 field, including the tag.

+        /// </summary>

+        [CLSCompliant(false)]

+        public static int ComputeUInt64Size(int fieldNumber, ulong value)

+        {

+            return ComputeTagSize(fieldNumber) + ComputeRawVarint64Size(value);

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// int64 field, including the tag.

+        /// </summary>

+        public static int ComputeInt64Size(int fieldNumber, long value)

+        {

+            return ComputeTagSize(fieldNumber) + ComputeRawVarint64Size((ulong) value);

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// int32 field, including the tag.

+        /// </summary>

+        public static int ComputeInt32Size(int fieldNumber, int value)

+        {

+            if (value >= 0)

+            {

+                return ComputeTagSize(fieldNumber) + ComputeRawVarint32Size((uint) value);

+            }

+            else

+            {

+                // Must sign-extend.

+                return ComputeTagSize(fieldNumber) + 10;

+            }

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// fixed64 field, including the tag.

+        /// </summary>

+        [CLSCompliant(false)]

+        public static int ComputeFixed64Size(int fieldNumber, ulong value)

+        {

+            return ComputeTagSize(fieldNumber) + LittleEndian64Size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// fixed32 field, including the tag.

+        /// </summary>

+        [CLSCompliant(false)]

+        public static int ComputeFixed32Size(int fieldNumber, uint value)

+        {

+            return ComputeTagSize(fieldNumber) + LittleEndian32Size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// bool field, including the tag.

+        /// </summary>

+        public static int ComputeBoolSize(int fieldNumber, bool value)

+        {

+            return ComputeTagSize(fieldNumber) + 1;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// string field, including the tag.

+        /// </summary>

+        public static int ComputeStringSize(int fieldNumber, String value)

+        {

+            int byteArraySize = Encoding.UTF8.GetByteCount(value);

+            return ComputeTagSize(fieldNumber) +

+                   ComputeRawVarint32Size((uint) byteArraySize) +

+                   byteArraySize;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// group field, including the tag.

+        /// </summary>

+        public static int ComputeGroupSize(int fieldNumber, IMessageLite value)

+        {

+            return ComputeTagSize(fieldNumber)*2 + value.SerializedSize;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// group field represented by an UnknownFieldSet, including the tag.

+        /// </summary>

+        [Obsolete]

+        public static int ComputeUnknownGroupSize(int fieldNumber,

+                                                  IMessageLite value)

+        {

+            return ComputeTagSize(fieldNumber)*2 + value.SerializedSize;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// embedded message field, including the tag.

+        /// </summary>

+        public static int ComputeMessageSize(int fieldNumber, IMessageLite value)

+        {

+            int size = value.SerializedSize;

+            return ComputeTagSize(fieldNumber) + ComputeRawVarint32Size((uint) size) + size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// bytes field, including the tag.

+        /// </summary>

+        public static int ComputeBytesSize(int fieldNumber, ByteString value)

+        {

+            return ComputeTagSize(fieldNumber) +

+                   ComputeRawVarint32Size((uint) value.Length) +

+                   value.Length;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// uint32 field, including the tag.

+        /// </summary>

+        [CLSCompliant(false)]

+        public static int ComputeUInt32Size(int fieldNumber, uint value)

+        {

+            return ComputeTagSize(fieldNumber) + ComputeRawVarint32Size(value);

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// enum field, including the tag. The caller is responsible for

+        /// converting the enum value to its numeric value.

+        /// </summary>

+        public static int ComputeEnumSize(int fieldNumber, int value)

+        {

+            return ComputeTagSize(fieldNumber) + ComputeEnumSizeNoTag(value);

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// sfixed32 field, including the tag.

+        /// </summary>

+        public static int ComputeSFixed32Size(int fieldNumber, int value)

+        {

+            return ComputeTagSize(fieldNumber) + LittleEndian32Size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// sfixed64 field, including the tag.

+        /// </summary>

+        public static int ComputeSFixed64Size(int fieldNumber, long value)

+        {

+            return ComputeTagSize(fieldNumber) + LittleEndian64Size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// sint32 field, including the tag.

+        /// </summary>

+        public static int ComputeSInt32Size(int fieldNumber, int value)

+        {

+            return ComputeTagSize(fieldNumber) + ComputeRawVarint32Size(EncodeZigZag32(value));

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// sint64 field, including the tag.

+        /// </summary>

+        public static int ComputeSInt64Size(int fieldNumber, long value)

+        {

+            return ComputeTagSize(fieldNumber) + ComputeRawVarint64Size(EncodeZigZag64(value));

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// double field, including the tag.

+        /// </summary>

+        public static int ComputeDoubleSizeNoTag(double value)

+        {

+            return LittleEndian64Size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// float field, including the tag.

+        /// </summary>

+        public static int ComputeFloatSizeNoTag(float value)

+        {

+            return LittleEndian32Size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// uint64 field, including the tag.

+        /// </summary>

+        [CLSCompliant(false)]

+        public static int ComputeUInt64SizeNoTag(ulong value)

+        {

+            return ComputeRawVarint64Size(value);

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// int64 field, including the tag.

+        /// </summary>

+        public static int ComputeInt64SizeNoTag(long value)

+        {

+            return ComputeRawVarint64Size((ulong) value);

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// int32 field, including the tag.

+        /// </summary>

+        public static int ComputeInt32SizeNoTag(int value)

+        {

+            if (value >= 0)

+            {

+                return ComputeRawVarint32Size((uint) value);

+            }

+            else

+            {

+                // Must sign-extend.

+                return 10;

+            }

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// fixed64 field, including the tag.

+        /// </summary>

+        [CLSCompliant(false)]

+        public static int ComputeFixed64SizeNoTag(ulong value)

+        {

+            return LittleEndian64Size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// fixed32 field, including the tag.

+        /// </summary>

+        [CLSCompliant(false)]

+        public static int ComputeFixed32SizeNoTag(uint value)

+        {

+            return LittleEndian32Size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// bool field, including the tag.

+        /// </summary>

+        public static int ComputeBoolSizeNoTag(bool value)

+        {

+            return 1;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// string field, including the tag.

+        /// </summary>

+        public static int ComputeStringSizeNoTag(String value)

+        {

+            int byteArraySize = Encoding.UTF8.GetByteCount(value);

+            return ComputeRawVarint32Size((uint) byteArraySize) +

+                   byteArraySize;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// group field, including the tag.

+        /// </summary>

+        public static int ComputeGroupSizeNoTag(IMessageLite value)

+        {

+            return value.SerializedSize;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// group field represented by an UnknownFieldSet, including the tag.

+        /// </summary>

+        [Obsolete]

+        public static int ComputeUnknownGroupSizeNoTag(IMessageLite value)

+        {

+            return value.SerializedSize;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// embedded message field, including the tag.

+        /// </summary>

+        public static int ComputeMessageSizeNoTag(IMessageLite value)

+        {

+            int size = value.SerializedSize;

+            return ComputeRawVarint32Size((uint) size) + size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// bytes field, including the tag.

+        /// </summary>

+        public static int ComputeBytesSizeNoTag(ByteString value)

+        {

+            return ComputeRawVarint32Size((uint) value.Length) +

+                   value.Length;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// uint32 field, including the tag.

+        /// </summary>

+        [CLSCompliant(false)]

+        public static int ComputeUInt32SizeNoTag(uint value)

+        {

+            return ComputeRawVarint32Size(value);

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// enum field, including the tag. The caller is responsible for

+        /// converting the enum value to its numeric value.

+        /// </summary>

+        public static int ComputeEnumSizeNoTag(int value)

+        {

+            return ComputeInt32SizeNoTag(value);

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// sfixed32 field, including the tag.

+        /// </summary>

+        public static int ComputeSFixed32SizeNoTag(int value)

+        {

+            return LittleEndian32Size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// sfixed64 field, including the tag.

+        /// </summary>

+        public static int ComputeSFixed64SizeNoTag(long value)

+        {

+            return LittleEndian64Size;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// sint32 field, including the tag.

+        /// </summary>

+        public static int ComputeSInt32SizeNoTag(int value)

+        {

+            return ComputeRawVarint32Size(EncodeZigZag32(value));

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// sint64 field, including the tag.

+        /// </summary>

+        public static int ComputeSInt64SizeNoTag(long value)

+        {

+            return ComputeRawVarint64Size(EncodeZigZag64(value));

+        }

+

+        /*

+     * Compute the number of bytes that would be needed to encode a

+     * MessageSet extension to the stream.  For historical reasons,

+     * the wire format differs from normal fields.

+     */

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// MessageSet extension to the stream. For historical reasons,

+        /// the wire format differs from normal fields.

+        /// </summary>

+        public static int ComputeMessageSetExtensionSize(int fieldNumber, IMessageLite value)

+        {

+            return ComputeTagSize(WireFormat.MessageSetField.Item)*2 +

+                   ComputeUInt32Size(WireFormat.MessageSetField.TypeID, (uint) fieldNumber) +

+                   ComputeMessageSize(WireFormat.MessageSetField.Message, value);

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode an

+        /// unparsed MessageSet extension field to the stream. For

+        /// historical reasons, the wire format differs from normal fields.

+        /// </summary>

+        public static int ComputeRawMessageSetExtensionSize(int fieldNumber, ByteString value)

+        {

+            return ComputeTagSize(WireFormat.MessageSetField.Item)*2 +

+                   ComputeUInt32Size(WireFormat.MessageSetField.TypeID, (uint) fieldNumber) +

+                   ComputeBytesSize(WireFormat.MessageSetField.Message, value);

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a varint.

+        /// </summary>

+        [CLSCompliant(false)]

+        public static int ComputeRawVarint32Size(uint value)

+        {

+            if ((value & (0xffffffff << 7)) == 0)

+            {

+                return 1;

+            }

+            if ((value & (0xffffffff << 14)) == 0)

+            {

+                return 2;

+            }

+            if ((value & (0xffffffff << 21)) == 0)

+            {

+                return 3;

+            }

+            if ((value & (0xffffffff << 28)) == 0)

+            {

+                return 4;

+            }

+            return 5;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a varint.

+        /// </summary>

+        [CLSCompliant(false)]

+        public static int ComputeRawVarint64Size(ulong value)

+        {

+            if ((value & (0xffffffffffffffffL << 7)) == 0)

+            {

+                return 1;

+            }

+            if ((value & (0xffffffffffffffffL << 14)) == 0)

+            {

+                return 2;

+            }

+            if ((value & (0xffffffffffffffffL << 21)) == 0)

+            {

+                return 3;

+            }

+            if ((value & (0xffffffffffffffffL << 28)) == 0)

+            {

+                return 4;

+            }

+            if ((value & (0xffffffffffffffffL << 35)) == 0)

+            {

+                return 5;

+            }

+            if ((value & (0xffffffffffffffffL << 42)) == 0)

+            {

+                return 6;

+            }

+            if ((value & (0xffffffffffffffffL << 49)) == 0)

+            {

+                return 7;

+            }

+            if ((value & (0xffffffffffffffffL << 56)) == 0)

+            {

+                return 8;

+            }

+            if ((value & (0xffffffffffffffffL << 63)) == 0)

+            {

+                return 9;

+            }

+            return 10;

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// field of arbitrary type, including the tag, to the stream.

+        /// </summary>

+        public static int ComputeFieldSize(FieldType fieldType, int fieldNumber, Object value)

+        {

+            switch (fieldType)

+            {

+                case FieldType.Double:

+                    return ComputeDoubleSize(fieldNumber, (double) value);

+                case FieldType.Float:

+                    return ComputeFloatSize(fieldNumber, (float) value);

+                case FieldType.Int64:

+                    return ComputeInt64Size(fieldNumber, (long) value);

+                case FieldType.UInt64:

+                    return ComputeUInt64Size(fieldNumber, (ulong) value);

+                case FieldType.Int32:

+                    return ComputeInt32Size(fieldNumber, (int) value);

+                case FieldType.Fixed64:

+                    return ComputeFixed64Size(fieldNumber, (ulong) value);

+                case FieldType.Fixed32:

+                    return ComputeFixed32Size(fieldNumber, (uint) value);

+                case FieldType.Bool:

+                    return ComputeBoolSize(fieldNumber, (bool) value);

+                case FieldType.String:

+                    return ComputeStringSize(fieldNumber, (string) value);

+                case FieldType.Group:

+                    return ComputeGroupSize(fieldNumber, (IMessageLite) value);

+                case FieldType.Message:

+                    return ComputeMessageSize(fieldNumber, (IMessageLite) value);

+                case FieldType.Bytes:

+                    return ComputeBytesSize(fieldNumber, (ByteString) value);

+                case FieldType.UInt32:

+                    return ComputeUInt32Size(fieldNumber, (uint) value);

+                case FieldType.SFixed32:

+                    return ComputeSFixed32Size(fieldNumber, (int) value);

+                case FieldType.SFixed64:

+                    return ComputeSFixed64Size(fieldNumber, (long) value);

+                case FieldType.SInt32:

+                    return ComputeSInt32Size(fieldNumber, (int) value);

+                case FieldType.SInt64:

+                    return ComputeSInt64Size(fieldNumber, (long) value);

+                case FieldType.Enum:

+                    if (value is Enum)

+                    {

+                        return ComputeEnumSize(fieldNumber, Convert.ToInt32(value));

+                    }

+                    else

+                    {

+                        return ComputeEnumSize(fieldNumber, ((IEnumLite) value).Number);

+                    }

+                default:

+                    throw new ArgumentOutOfRangeException("Invalid field type " + fieldType);

+            }

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a

+        /// field of arbitrary type, excluding the tag, to the stream.

+        /// </summary>

+        public static int ComputeFieldSizeNoTag(FieldType fieldType, Object value)

+        {

+            switch (fieldType)

+            {

+                case FieldType.Double:

+                    return ComputeDoubleSizeNoTag((double) value);

+                case FieldType.Float:

+                    return ComputeFloatSizeNoTag((float) value);

+                case FieldType.Int64:

+                    return ComputeInt64SizeNoTag((long) value);

+                case FieldType.UInt64:

+                    return ComputeUInt64SizeNoTag((ulong) value);

+                case FieldType.Int32:

+                    return ComputeInt32SizeNoTag((int) value);

+                case FieldType.Fixed64:

+                    return ComputeFixed64SizeNoTag((ulong) value);

+                case FieldType.Fixed32:

+                    return ComputeFixed32SizeNoTag((uint) value);

+                case FieldType.Bool:

+                    return ComputeBoolSizeNoTag((bool) value);

+                case FieldType.String:

+                    return ComputeStringSizeNoTag((string) value);

+                case FieldType.Group:

+                    return ComputeGroupSizeNoTag((IMessageLite) value);

+                case FieldType.Message:

+                    return ComputeMessageSizeNoTag((IMessageLite) value);

+                case FieldType.Bytes:

+                    return ComputeBytesSizeNoTag((ByteString) value);

+                case FieldType.UInt32:

+                    return ComputeUInt32SizeNoTag((uint) value);

+                case FieldType.SFixed32:

+                    return ComputeSFixed32SizeNoTag((int) value);

+                case FieldType.SFixed64:

+                    return ComputeSFixed64SizeNoTag((long) value);

+                case FieldType.SInt32:

+                    return ComputeSInt32SizeNoTag((int) value);

+                case FieldType.SInt64:

+                    return ComputeSInt64SizeNoTag((long) value);

+                case FieldType.Enum:

+                    if (value is Enum)

+                    {

+                        return ComputeEnumSizeNoTag(Convert.ToInt32(value));

+                    }

+                    else

+                    {

+                        return ComputeEnumSizeNoTag(((IEnumLite) value).Number);

+                    }

+                default:

+                    throw new ArgumentOutOfRangeException("Invalid field type " + fieldType);

+            }

+        }

+

+        /// <summary>

+        /// Compute the number of bytes that would be needed to encode a tag.

+        /// </summary>

+        public static int ComputeTagSize(int fieldNumber)

+        {

+            return ComputeRawVarint32Size(WireFormat.MakeTag(fieldNumber, 0));

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/CodedOutputStream.cs b/csharp/src/ProtocolBuffers/CodedOutputStream.cs
new file mode 100644
index 0000000..d267b75
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/CodedOutputStream.cs
@@ -0,0 +1,1341 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using System.IO;

+using System.Text;

+using Google.ProtocolBuffers.Collections;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Encodes and writes protocol message fields.

+    /// </summary>

+    /// <remarks>

+    /// This class contains two kinds of methods:  methods that write specific

+    /// protocol message constructs and field types (e.g. WriteTag and

+    /// WriteInt32) and methods that write low-level values (e.g.

+    /// WriteRawVarint32 and WriteRawBytes).  If you are writing encoded protocol

+    /// messages, you should use the former methods, but if you are writing some

+    /// other format of your own design, use the latter. The names of the former

+    /// methods are taken from the protocol buffer type names, not .NET types.

+    /// (Hence WriteFloat instead of WriteSingle, and WriteBool instead of WriteBoolean.)

+    /// </remarks>

+    public sealed partial class CodedOutputStream : ICodedOutputStream

+    {

+        /// <summary>

+        /// The buffer size used by CreateInstance(Stream).

+        /// </summary>

+        public static readonly int DefaultBufferSize = 4096;

+

+        private readonly byte[] buffer;

+        private readonly int limit;

+        private int position;

+        private readonly Stream output;

+

+        #region Construction

+

+        private CodedOutputStream(byte[] buffer, int offset, int length)

+        {

+            this.output = null;

+            this.buffer = buffer;

+            this.position = offset;

+            this.limit = offset + length;

+        }

+

+        private CodedOutputStream(Stream output, byte[] buffer)

+        {

+            this.output = output;

+            this.buffer = buffer;

+            this.position = 0;

+            this.limit = buffer.Length;

+        }

+

+        /// <summary>

+        /// Creates a new CodedOutputStream which write to the given stream.

+        /// </summary>

+        public static CodedOutputStream CreateInstance(Stream output)

+        {

+            return CreateInstance(output, DefaultBufferSize);

+        }

+

+        /// <summary>

+        /// Creates a new CodedOutputStream which write to the given stream and uses

+        /// the specified buffer size.

+        /// </summary>

+        public static CodedOutputStream CreateInstance(Stream output, int bufferSize)

+        {

+            return new CodedOutputStream(output, new byte[bufferSize]);

+        }

+

+        /// <summary>

+        /// Creates a new CodedOutputStream that writes directly to the given

+        /// byte array. If more bytes are written than fit in the array,

+        /// OutOfSpaceException will be thrown.

+        /// </summary>

+        public static CodedOutputStream CreateInstance(byte[] flatArray)

+        {

+            return CreateInstance(flatArray, 0, flatArray.Length);

+        }

+

+        /// <summary>

+        /// Creates a new CodedOutputStream that writes directly to the given

+        /// byte array slice. If more bytes are written than fit in the array,

+        /// OutOfSpaceException will be thrown.

+        /// </summary>

+        public static CodedOutputStream CreateInstance(byte[] flatArray, int offset, int length)

+        {

+            return new CodedOutputStream(flatArray, offset, length);

+        }

+

+        #endregion

+

+        /// <summary>

+        /// Returns the current position in the stream, or the position in the output buffer

+        /// </summary>

+        public long Position

+        {

+            get

+            {

+                if (output != null)

+                {

+                    return output.Position + position;

+                }

+                return position;

+            }

+        }

+

+        void ICodedOutputStream.WriteMessageStart() { }

+        void ICodedOutputStream.WriteMessageEnd() { Flush(); }

+

+        #region Writing of unknown fields

+

+        [Obsolete]

+        public void WriteUnknownGroup(int fieldNumber, IMessageLite value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.StartGroup);

+            value.WriteTo(this);

+            WriteTag(fieldNumber, WireFormat.WireType.EndGroup);

+        }

+

+        public void WriteUnknownBytes(int fieldNumber, ByteString value)

+        {

+            WriteBytes(fieldNumber, null /*not used*/, value);

+        }

+

+        [CLSCompliant(false)]

+        public void WriteUnknownField(int fieldNumber, WireFormat.WireType wireType, ulong value)

+        {

+            if (wireType == WireFormat.WireType.Varint)

+            {

+                WriteUInt64(fieldNumber, null /*not used*/, value);

+            }

+            else if (wireType == WireFormat.WireType.Fixed32)

+            {

+                WriteFixed32(fieldNumber, null /*not used*/, (uint) value);

+            }

+            else if (wireType == WireFormat.WireType.Fixed64)

+            {

+                WriteFixed64(fieldNumber, null /*not used*/, value);

+            }

+            else

+            {

+                throw InvalidProtocolBufferException.InvalidWireType();

+            }

+        }

+

+        #endregion

+

+        #region Writing of tags and fields

+

+        public void WriteField(FieldType fieldType, int fieldNumber, string fieldName, object value)

+        {

+            switch (fieldType)

+            {

+                case FieldType.String:

+                    WriteString(fieldNumber, fieldName, (string) value);

+                    break;

+                case FieldType.Message:

+                    WriteMessage(fieldNumber, fieldName, (IMessageLite) value);

+                    break;

+                case FieldType.Group:

+                    WriteGroup(fieldNumber, fieldName, (IMessageLite) value);

+                    break;

+                case FieldType.Bytes:

+                    WriteBytes(fieldNumber, fieldName, (ByteString) value);

+                    break;

+                case FieldType.Bool:

+                    WriteBool(fieldNumber, fieldName, (bool) value);

+                    break;

+                case FieldType.Enum:

+                    if (value is Enum)

+                    {

+                        WriteEnum(fieldNumber, fieldName, (int) value, null /*not used*/);

+                    }

+                    else

+                    {

+                        WriteEnum(fieldNumber, fieldName, ((IEnumLite) value).Number, null /*not used*/);

+                    }

+                    break;

+                case FieldType.Int32:

+                    WriteInt32(fieldNumber, fieldName, (int) value);

+                    break;

+                case FieldType.Int64:

+                    WriteInt64(fieldNumber, fieldName, (long) value);

+                    break;

+                case FieldType.UInt32:

+                    WriteUInt32(fieldNumber, fieldName, (uint) value);

+                    break;

+                case FieldType.UInt64:

+                    WriteUInt64(fieldNumber, fieldName, (ulong) value);

+                    break;

+                case FieldType.SInt32:

+                    WriteSInt32(fieldNumber, fieldName, (int) value);

+                    break;

+                case FieldType.SInt64:

+                    WriteSInt64(fieldNumber, fieldName, (long) value);

+                    break;

+                case FieldType.Fixed32:

+                    WriteFixed32(fieldNumber, fieldName, (uint) value);

+                    break;

+                case FieldType.Fixed64:

+                    WriteFixed64(fieldNumber, fieldName, (ulong) value);

+                    break;

+                case FieldType.SFixed32:

+                    WriteSFixed32(fieldNumber, fieldName, (int) value);

+                    break;

+                case FieldType.SFixed64:

+                    WriteSFixed64(fieldNumber, fieldName, (long) value);

+                    break;

+                case FieldType.Double:

+                    WriteDouble(fieldNumber, fieldName, (double) value);

+                    break;

+                case FieldType.Float:

+                    WriteFloat(fieldNumber, fieldName, (float) value);

+                    break;

+            }

+        }

+

+        /// <summary>

+        /// Writes a double field value, including tag, to the stream.

+        /// </summary>

+        public void WriteDouble(int fieldNumber, string fieldName, double value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Fixed64);

+            WriteDoubleNoTag(value);

+        }

+

+        /// <summary>

+        /// Writes a float field value, including tag, to the stream.

+        /// </summary>

+        public void WriteFloat(int fieldNumber, string fieldName, float value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Fixed32);

+            WriteFloatNoTag(value);

+        }

+

+        /// <summary>

+        /// Writes a uint64 field value, including tag, to the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        public void WriteUInt64(int fieldNumber, string fieldName, ulong value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Varint);

+            WriteRawVarint64(value);

+        }

+

+        /// <summary>

+        /// Writes an int64 field value, including tag, to the stream.

+        /// </summary>

+        public void WriteInt64(int fieldNumber, string fieldName, long value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Varint);

+            WriteRawVarint64((ulong) value);

+        }

+

+        /// <summary>

+        /// Writes an int32 field value, including tag, to the stream.

+        /// </summary>

+        public void WriteInt32(int fieldNumber, string fieldName, int value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Varint);

+            if (value >= 0)

+            {

+                WriteRawVarint32((uint) value);

+            }

+            else

+            {

+                // Must sign-extend.

+                WriteRawVarint64((ulong) value);

+            }

+        }

+

+        /// <summary>

+        /// Writes a fixed64 field value, including tag, to the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        public void WriteFixed64(int fieldNumber, string fieldName, ulong value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Fixed64);

+            WriteRawLittleEndian64(value);

+        }

+

+        /// <summary>

+        /// Writes a fixed32 field value, including tag, to the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        public void WriteFixed32(int fieldNumber, string fieldName, uint value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Fixed32);

+            WriteRawLittleEndian32(value);

+        }

+

+        /// <summary>

+        /// Writes a bool field value, including tag, to the stream.

+        /// </summary>

+        public void WriteBool(int fieldNumber, string fieldName, bool value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Varint);

+            WriteRawByte(value ? (byte) 1 : (byte) 0);

+        }

+

+        /// <summary>

+        /// Writes a string field value, including tag, to the stream.

+        /// </summary>

+        public void WriteString(int fieldNumber, string fieldName, string value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            // Optimise the case where we have enough space to write

+            // the string directly to the buffer, which should be common.

+            int length = Encoding.UTF8.GetByteCount(value);

+            WriteRawVarint32((uint) length);

+            if (limit - position >= length)

+            {

+                Encoding.UTF8.GetBytes(value, 0, value.Length, buffer, position);

+                position += length;

+            }

+            else

+            {

+                byte[] bytes = Encoding.UTF8.GetBytes(value);

+                WriteRawBytes(bytes);

+            }

+        }

+

+        /// <summary>

+        /// Writes a group field value, including tag, to the stream.

+        /// </summary>

+        public void WriteGroup(int fieldNumber, string fieldName, IMessageLite value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.StartGroup);

+            value.WriteTo(this);

+            WriteTag(fieldNumber, WireFormat.WireType.EndGroup);

+        }

+

+        public void WriteMessage(int fieldNumber, string fieldName, IMessageLite value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) value.SerializedSize);

+            value.WriteTo(this);

+        }

+

+        public void WriteBytes(int fieldNumber, string fieldName, ByteString value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) value.Length);

+            value.WriteRawBytesTo(this);

+        }

+

+        [CLSCompliant(false)]

+        public void WriteUInt32(int fieldNumber, string fieldName, uint value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Varint);

+            WriteRawVarint32(value);

+        }

+

+        public void WriteEnum(int fieldNumber, string fieldName, int value, object rawValue)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Varint);

+            WriteInt32NoTag(value);

+        }

+

+        public void WriteSFixed32(int fieldNumber, string fieldName, int value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Fixed32);

+            WriteRawLittleEndian32((uint) value);

+        }

+

+        public void WriteSFixed64(int fieldNumber, string fieldName, long value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Fixed64);

+            WriteRawLittleEndian64((ulong) value);

+        }

+

+        public void WriteSInt32(int fieldNumber, string fieldName, int value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Varint);

+            WriteRawVarint32(EncodeZigZag32(value));

+        }

+

+        public void WriteSInt64(int fieldNumber, string fieldName, long value)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.Varint);

+            WriteRawVarint64(EncodeZigZag64(value));

+        }

+

+        public void WriteMessageSetExtension(int fieldNumber, string fieldName, IMessageLite value)

+        {

+            WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.StartGroup);

+            WriteUInt32(WireFormat.MessageSetField.TypeID, "type_id", (uint) fieldNumber);

+            WriteMessage(WireFormat.MessageSetField.Message, "message", value);

+            WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.EndGroup);

+        }

+

+        public void WriteMessageSetExtension(int fieldNumber, string fieldName, ByteString value)

+        {

+            WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.StartGroup);

+            WriteUInt32(WireFormat.MessageSetField.TypeID, "type_id", (uint) fieldNumber);

+            WriteBytes(WireFormat.MessageSetField.Message, "message", value);

+            WriteTag(WireFormat.MessageSetField.Item, WireFormat.WireType.EndGroup);

+        }

+

+        #endregion

+

+        #region Writing of values without tags

+

+        public void WriteFieldNoTag(FieldType fieldType, object value)

+        {

+            switch (fieldType)

+            {

+                case FieldType.String:

+                    WriteStringNoTag((string) value);

+                    break;

+                case FieldType.Message:

+                    WriteMessageNoTag((IMessageLite) value);

+                    break;

+                case FieldType.Group:

+                    WriteGroupNoTag((IMessageLite) value);

+                    break;

+                case FieldType.Bytes:

+                    WriteBytesNoTag((ByteString) value);

+                    break;

+                case FieldType.Bool:

+                    WriteBoolNoTag((bool) value);

+                    break;

+                case FieldType.Enum:

+                    if (value is Enum)

+                    {

+                        WriteEnumNoTag((int) value);

+                    }

+                    else

+                    {

+                        WriteEnumNoTag(((IEnumLite) value).Number);

+                    }

+                    break;

+                case FieldType.Int32:

+                    WriteInt32NoTag((int) value);

+                    break;

+                case FieldType.Int64:

+                    WriteInt64NoTag((long) value);

+                    break;

+                case FieldType.UInt32:

+                    WriteUInt32NoTag((uint) value);

+                    break;

+                case FieldType.UInt64:

+                    WriteUInt64NoTag((ulong) value);

+                    break;

+                case FieldType.SInt32:

+                    WriteSInt32NoTag((int) value);

+                    break;

+                case FieldType.SInt64:

+                    WriteSInt64NoTag((long) value);

+                    break;

+                case FieldType.Fixed32:

+                    WriteFixed32NoTag((uint) value);

+                    break;

+                case FieldType.Fixed64:

+                    WriteFixed64NoTag((ulong) value);

+                    break;

+                case FieldType.SFixed32:

+                    WriteSFixed32NoTag((int) value);

+                    break;

+                case FieldType.SFixed64:

+                    WriteSFixed64NoTag((long) value);

+                    break;

+                case FieldType.Double:

+                    WriteDoubleNoTag((double) value);

+                    break;

+                case FieldType.Float:

+                    WriteFloatNoTag((float) value);

+                    break;

+            }

+        }

+

+        /// <summary>

+        /// Writes a double field value, including tag, to the stream.

+        /// </summary>

+        public void WriteDoubleNoTag(double value)

+        {

+            WriteRawLittleEndian64((ulong)FrameworkPortability.DoubleToInt64(value));

+        }

+

+        /// <summary>

+        /// Writes a float field value, without a tag, to the stream.

+        /// </summary>

+        public void WriteFloatNoTag(float value)

+        {

+            byte[] rawBytes = BitConverter.GetBytes(value);

+            if (!BitConverter.IsLittleEndian)

+            {

+                ByteArray.Reverse(rawBytes);

+            }

+

+            if (limit - position >= 4)

+            {

+                buffer[position++] = rawBytes[0];

+                buffer[position++] = rawBytes[1];

+                buffer[position++] = rawBytes[2];

+                buffer[position++] = rawBytes[3];

+            }

+            else

+            {

+                WriteRawBytes(rawBytes, 0, 4);

+            }

+        }

+

+        /// <summary>

+        /// Writes a uint64 field value, without a tag, to the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        public void WriteUInt64NoTag(ulong value)

+        {

+            WriteRawVarint64(value);

+        }

+

+        /// <summary>

+        /// Writes an int64 field value, without a tag, to the stream.

+        /// </summary>

+        public void WriteInt64NoTag(long value)

+        {

+            WriteRawVarint64((ulong) value);

+        }

+

+        /// <summary>

+        /// Writes an int32 field value, without a tag, to the stream.

+        /// </summary>

+        public void WriteInt32NoTag(int value)

+        {

+            if (value >= 0)

+            {

+                WriteRawVarint32((uint) value);

+            }

+            else

+            {

+                // Must sign-extend.

+                WriteRawVarint64((ulong) value);

+            }

+        }

+

+        /// <summary>

+        /// Writes a fixed64 field value, without a tag, to the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        public void WriteFixed64NoTag(ulong value)

+        {

+            WriteRawLittleEndian64(value);

+        }

+

+        /// <summary>

+        /// Writes a fixed32 field value, without a tag, to the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        public void WriteFixed32NoTag(uint value)

+        {

+            WriteRawLittleEndian32(value);

+        }

+

+        /// <summary>

+        /// Writes a bool field value, without a tag, to the stream.

+        /// </summary>

+        public void WriteBoolNoTag(bool value)

+        {

+            WriteRawByte(value ? (byte) 1 : (byte) 0);

+        }

+

+        /// <summary>

+        /// Writes a string field value, without a tag, to the stream.

+        /// </summary>

+        public void WriteStringNoTag(string value)

+        {

+            // Optimise the case where we have enough space to write

+            // the string directly to the buffer, which should be common.

+            int length = Encoding.UTF8.GetByteCount(value);

+            WriteRawVarint32((uint) length);

+            if (limit - position >= length)

+            {

+                Encoding.UTF8.GetBytes(value, 0, value.Length, buffer, position);

+                position += length;

+            }

+            else

+            {

+                byte[] bytes = Encoding.UTF8.GetBytes(value);

+                WriteRawBytes(bytes);

+            }

+        }

+

+        /// <summary>

+        /// Writes a group field value, without a tag, to the stream.

+        /// </summary>

+        public void WriteGroupNoTag(IMessageLite value)

+        {

+            value.WriteTo(this);

+        }

+

+        public void WriteMessageNoTag(IMessageLite value)

+        {

+            WriteRawVarint32((uint) value.SerializedSize);

+            value.WriteTo(this);

+        }

+

+        public void WriteBytesNoTag(ByteString value)

+        {

+            WriteRawVarint32((uint) value.Length);

+            value.WriteRawBytesTo(this);

+        }

+

+        [CLSCompliant(false)]

+        public void WriteUInt32NoTag(uint value)

+        {

+            WriteRawVarint32(value);

+        }

+

+        public void WriteEnumNoTag(int value)

+        {

+            WriteInt32NoTag(value);

+        }

+

+        public void WriteSFixed32NoTag(int value)

+        {

+            WriteRawLittleEndian32((uint) value);

+        }

+

+        public void WriteSFixed64NoTag(long value)

+        {

+            WriteRawLittleEndian64((ulong) value);

+        }

+

+        public void WriteSInt32NoTag(int value)

+        {

+            WriteRawVarint32(EncodeZigZag32(value));

+        }

+

+        public void WriteSInt64NoTag(long value)

+        {

+            WriteRawVarint64(EncodeZigZag64(value));

+        }

+

+        #endregion

+

+        #region Write array members

+

+        public void WriteArray(FieldType fieldType, int fieldNumber, string fieldName, IEnumerable list)

+        {

+            foreach (object element in list)

+            {

+                WriteField(fieldType, fieldNumber, fieldName, element);

+            }

+        }

+

+        public void WriteGroupArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)

+            where T : IMessageLite

+        {

+            foreach (IMessageLite value in list)

+            {

+                WriteGroup(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteMessageArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)

+            where T : IMessageLite

+        {

+            foreach (IMessageLite value in list)

+            {

+                WriteMessage(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteStringArray(int fieldNumber, string fieldName, IEnumerable<string> list)

+        {

+            foreach (var value in list)

+            {

+                WriteString(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteBytesArray(int fieldNumber, string fieldName, IEnumerable<ByteString> list)

+        {

+            foreach (var value in list)

+            {

+                WriteBytes(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteBoolArray(int fieldNumber, string fieldName, IEnumerable<bool> list)

+        {

+            foreach (var value in list)

+            {

+                WriteBool(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteInt32Array(int fieldNumber, string fieldName, IEnumerable<int> list)

+        {

+            foreach (var value in list)

+            {

+                WriteInt32(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteSInt32Array(int fieldNumber, string fieldName, IEnumerable<int> list)

+        {

+            foreach (var value in list)

+            {

+                WriteSInt32(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteUInt32Array(int fieldNumber, string fieldName, IEnumerable<uint> list)

+        {

+            foreach (var value in list)

+            {

+                WriteUInt32(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteFixed32Array(int fieldNumber, string fieldName, IEnumerable<uint> list)

+        {

+            foreach (var value in list)

+            {

+                WriteFixed32(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteSFixed32Array(int fieldNumber, string fieldName, IEnumerable<int> list)

+        {

+            foreach (var value in list)

+            {

+                WriteSFixed32(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteInt64Array(int fieldNumber, string fieldName, IEnumerable<long> list)

+        {

+            foreach (var value in list)

+            {

+                WriteInt64(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteSInt64Array(int fieldNumber, string fieldName, IEnumerable<long> list)

+        {

+            foreach (var value in list)

+            {

+                WriteSInt64(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteUInt64Array(int fieldNumber, string fieldName, IEnumerable<ulong> list)

+        {

+            foreach (var value in list)

+            {

+                WriteUInt64(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteFixed64Array(int fieldNumber, string fieldName, IEnumerable<ulong> list)

+        {

+            foreach (var value in list)

+            {

+                WriteFixed64(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteSFixed64Array(int fieldNumber, string fieldName, IEnumerable<long> list)

+        {

+            foreach (var value in list)

+            {

+                WriteSFixed64(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteDoubleArray(int fieldNumber, string fieldName, IEnumerable<double> list)

+        {

+            foreach (var value in list)

+            {

+                WriteDouble(fieldNumber, fieldName, value);

+            }

+        }

+

+        public void WriteFloatArray(int fieldNumber, string fieldName, IEnumerable<float> list)

+        {

+            foreach (var value in list)

+            {

+                WriteFloat(fieldNumber, fieldName, value);

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void WriteEnumArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)

+            where T : struct, IComparable, IFormattable

+        {

+            if (list is ICastArray)

+            {

+                foreach (int value in ((ICastArray) list).CastArray<int>())

+                {

+                    WriteEnum(fieldNumber, fieldName, value, null /*unused*/);

+                }

+            }

+            else

+            {

+                foreach (object value in list)

+                {

+                    WriteEnum(fieldNumber, fieldName, (int) value, null /*unused*/);

+                }

+            }

+        }

+

+        #endregion

+

+        #region Write packed array members

+

+        public void WritePackedArray(FieldType fieldType, int fieldNumber, string fieldName, IEnumerable list)

+        {

+            int calculatedSize = 0;

+            foreach (object element in list)

+            {

+                calculatedSize += ComputeFieldSizeNoTag(fieldType, element);

+            }

+

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+

+            foreach (object element in list)

+            {

+                WriteFieldNoTag(fieldType, element);

+            }

+        }

+

+        public void WritePackedGroupArray<T>(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<T> list)

+            where T : IMessageLite

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (IMessageLite value in list)

+            {

+                WriteGroupNoTag(value);

+            }

+        }

+

+        public void WritePackedMessageArray<T>(int fieldNumber, string fieldName, int calculatedSize,

+                                               IEnumerable<T> list)

+            where T : IMessageLite

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (IMessageLite value in list)

+            {

+                WriteMessageNoTag(value);

+            }

+        }

+

+        public void WritePackedStringArray(int fieldNumber, string fieldName, int calculatedSize,

+                                           IEnumerable<string> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteStringNoTag(value);

+            }

+        }

+

+        public void WritePackedBytesArray(int fieldNumber, string fieldName, int calculatedSize,

+                                          IEnumerable<ByteString> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteBytesNoTag(value);

+            }

+        }

+

+        public void WritePackedBoolArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<bool> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteBoolNoTag(value);

+            }

+        }

+

+        public void WritePackedInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<int> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteInt32NoTag(value);

+            }

+        }

+

+        public void WritePackedSInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<int> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteSInt32NoTag(value);

+            }

+        }

+

+        public void WritePackedUInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<uint> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteUInt32NoTag(value);

+            }

+        }

+

+        public void WritePackedFixed32Array(int fieldNumber, string fieldName, int calculatedSize,

+                                            IEnumerable<uint> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteFixed32NoTag(value);

+            }

+        }

+

+        public void WritePackedSFixed32Array(int fieldNumber, string fieldName, int calculatedSize,

+                                             IEnumerable<int> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteSFixed32NoTag(value);

+            }

+        }

+

+        public void WritePackedInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<long> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteInt64NoTag(value);

+            }

+        }

+

+        public void WritePackedSInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<long> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteSInt64NoTag(value);

+            }

+        }

+

+        public void WritePackedUInt64Array(int fieldNumber, string fieldName, int calculatedSize,

+                                           IEnumerable<ulong> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteUInt64NoTag(value);

+            }

+        }

+

+        public void WritePackedFixed64Array(int fieldNumber, string fieldName, int calculatedSize,

+                                            IEnumerable<ulong> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteFixed64NoTag(value);

+            }

+        }

+

+        public void WritePackedSFixed64Array(int fieldNumber, string fieldName, int calculatedSize,

+                                             IEnumerable<long> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteSFixed64NoTag(value);

+            }

+        }

+

+        public void WritePackedDoubleArray(int fieldNumber, string fieldName, int calculatedSize,

+                                           IEnumerable<double> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteDoubleNoTag(value);

+            }

+        }

+

+        public void WritePackedFloatArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<float> list)

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            foreach (var value in list)

+            {

+                WriteFloatNoTag(value);

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void WritePackedEnumArray<T>(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<T> list)

+            where T : struct, IComparable, IFormattable

+        {

+            WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);

+            WriteRawVarint32((uint) calculatedSize);

+            if (list is ICastArray)

+            {

+                foreach (int value in ((ICastArray) list).CastArray<int>())

+                {

+                    WriteEnumNoTag(value);

+                }

+            }

+            else

+            {

+                foreach (object value in list)

+                {

+                    WriteEnumNoTag((int) value);

+                }

+            }

+        }

+

+        #endregion

+

+        #region Underlying writing primitives

+

+        /// <summary>

+        /// Encodes and writes a tag.

+        /// </summary>

+        [CLSCompliant(false)]

+        public void WriteTag(int fieldNumber, WireFormat.WireType type)

+        {

+            WriteRawVarint32(WireFormat.MakeTag(fieldNumber, type));

+        }

+

+        /// <summary>

+        /// Writes a 32 bit value as a varint. The fast route is taken when

+        /// there's enough buffer space left to whizz through without checking

+        /// for each byte; otherwise, we resort to calling WriteRawByte each time.

+        /// </summary>

+        [CLSCompliant(false)]

+        public void WriteRawVarint32(uint value)

+        {

+            while (value > 127 && position < limit)

+            {

+                buffer[position++] = (byte) ((value & 0x7F) | 0x80);

+                value >>= 7;

+            }

+            while (value > 127)

+            {

+                WriteRawByte((byte) ((value & 0x7F) | 0x80));

+                value >>= 7;

+            }

+            if (position < limit)

+            {

+                buffer[position++] = (byte) value;

+            }

+            else

+            {

+                WriteRawByte((byte) value);

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void WriteRawVarint64(ulong value)

+        {

+            while (value > 127 && position < limit)

+            {

+                buffer[position++] = (byte) ((value & 0x7F) | 0x80);

+                value >>= 7;

+            }

+            while (value > 127)

+            {

+                WriteRawByte((byte) ((value & 0x7F) | 0x80));

+                value >>= 7;

+            }

+            if (position < limit)

+            {

+                buffer[position++] = (byte) value;

+            }

+            else

+            {

+                WriteRawByte((byte) value);

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void WriteRawLittleEndian32(uint value)

+        {

+            if (position + 4 > limit)

+            {

+                WriteRawByte((byte) value);

+                WriteRawByte((byte) (value >> 8));

+                WriteRawByte((byte) (value >> 16));

+                WriteRawByte((byte) (value >> 24));

+            }

+            else

+            {

+                buffer[position++] = ((byte) value);

+                buffer[position++] = ((byte) (value >> 8));

+                buffer[position++] = ((byte) (value >> 16));

+                buffer[position++] = ((byte) (value >> 24));

+            }

+        }

+

+        [CLSCompliant(false)]

+        public void WriteRawLittleEndian64(ulong value)

+        {

+            if (position + 8 > limit)

+            {

+                WriteRawByte((byte) value);

+                WriteRawByte((byte) (value >> 8));

+                WriteRawByte((byte) (value >> 16));

+                WriteRawByte((byte) (value >> 24));

+                WriteRawByte((byte) (value >> 32));

+                WriteRawByte((byte) (value >> 40));

+                WriteRawByte((byte) (value >> 48));

+                WriteRawByte((byte) (value >> 56));

+            }

+            else

+            {

+                buffer[position++] = ((byte) value);

+                buffer[position++] = ((byte) (value >> 8));

+                buffer[position++] = ((byte) (value >> 16));

+                buffer[position++] = ((byte) (value >> 24));

+                buffer[position++] = ((byte) (value >> 32));

+                buffer[position++] = ((byte) (value >> 40));

+                buffer[position++] = ((byte) (value >> 48));

+                buffer[position++] = ((byte) (value >> 56));

+            }

+        }

+

+        public void WriteRawByte(byte value)

+        {

+            if (position == limit)

+            {

+                RefreshBuffer();

+            }

+

+            buffer[position++] = value;

+        }

+

+        [CLSCompliant(false)]

+        public void WriteRawByte(uint value)

+        {

+            WriteRawByte((byte) value);

+        }

+

+        /// <summary>

+        /// Writes out an array of bytes.

+        /// </summary>

+        public void WriteRawBytes(byte[] value)

+        {

+            WriteRawBytes(value, 0, value.Length);

+        }

+

+        /// <summary>

+        /// Writes out part of an array of bytes.

+        /// </summary>

+        public void WriteRawBytes(byte[] value, int offset, int length)

+        {

+            if (limit - position >= length)

+            {

+                ByteArray.Copy(value, offset, buffer, position, length);

+                // We have room in the current buffer.

+                position += length;

+            }

+            else

+            {

+                // Write extends past current buffer.  Fill the rest of this buffer and

+                // flush.

+                int bytesWritten = limit - position;

+                ByteArray.Copy(value, offset, buffer, position, bytesWritten);

+                offset += bytesWritten;

+                length -= bytesWritten;

+                position = limit;

+                RefreshBuffer();

+

+                // Now deal with the rest.

+                // Since we have an output stream, this is our buffer

+                // and buffer offset == 0

+                if (length <= limit)

+                {

+                    // Fits in new buffer.

+                    ByteArray.Copy(value, offset, buffer, 0, length);

+                    position = length;

+                }

+                else

+                {

+                    // Write is very big.  Let's do it all at once.

+                    output.Write(value, offset, length);

+                }

+            }

+        }

+

+        #endregion

+

+        /// <summary>

+        /// Encode a 32-bit value with ZigZag encoding.

+        /// </summary>

+        /// <remarks>

+        /// ZigZag encodes signed integers into values that can be efficiently

+        /// encoded with varint.  (Otherwise, negative values must be 

+        /// sign-extended to 64 bits to be varint encoded, thus always taking

+        /// 10 bytes on the wire.)

+        /// </remarks>

+        [CLSCompliant(false)]

+        public static uint EncodeZigZag32(int n)

+        {

+            // Note:  the right-shift must be arithmetic

+            return (uint) ((n << 1) ^ (n >> 31));

+        }

+

+        /// <summary>

+        /// Encode a 64-bit value with ZigZag encoding.

+        /// </summary>

+        /// <remarks>

+        /// ZigZag encodes signed integers into values that can be efficiently

+        /// encoded with varint.  (Otherwise, negative values must be 

+        /// sign-extended to 64 bits to be varint encoded, thus always taking

+        /// 10 bytes on the wire.)

+        /// </remarks>

+        [CLSCompliant(false)]

+        public static ulong EncodeZigZag64(long n)

+        {

+            return (ulong) ((n << 1) ^ (n >> 63));

+        }

+

+        private void RefreshBuffer()

+        {

+            if (output == null)

+            {

+                // We're writing to a single buffer.

+                throw new OutOfSpaceException();

+            }

+

+            // Since we have an output stream, this is our buffer

+            // and buffer offset == 0

+            output.Write(buffer, 0, position);

+            position = 0;

+        }

+

+        /// <summary>

+        /// Indicates that a CodedOutputStream wrapping a flat byte array

+        /// ran out of space.

+        /// </summary>

+        public sealed class OutOfSpaceException : IOException

+        {

+            internal OutOfSpaceException()

+                : base("CodedOutputStream was writing to a flat byte array and ran out of space.")

+            {

+            }

+        }

+

+        public void Flush()

+        {

+            if (output != null)

+            {

+                RefreshBuffer();

+            }

+        }

+

+        /// <summary>

+        /// Verifies that SpaceLeft returns zero. It's common to create a byte array

+        /// that is exactly big enough to hold a message, then write to it with

+        /// a CodedOutputStream. Calling CheckNoSpaceLeft after writing verifies that

+        /// the message was actually as big as expected, which can help bugs.

+        /// </summary>

+        public void CheckNoSpaceLeft()

+        {

+            if (SpaceLeft != 0)

+            {

+                throw new InvalidOperationException("Did not write as much data as expected.");

+            }

+        }

+

+        /// <summary>

+        /// If writing to a flat array, returns the space left in the array. Otherwise,

+        /// throws an InvalidOperationException.

+        /// </summary>

+        public int SpaceLeft

+        {

+            get

+            {

+                if (output == null)

+                {

+                    return limit - position;

+                }

+                else

+                {

+                    throw new InvalidOperationException(

+                        "SpaceLeft can only be called on CodedOutputStreams that are " +

+                        "writing to a flat array.");

+                }

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Collections/Dictionaries.cs b/csharp/src/ProtocolBuffers/Collections/Dictionaries.cs
new file mode 100644
index 0000000..1f3791b
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Collections/Dictionaries.cs
@@ -0,0 +1,122 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Collections;

+using System.Collections.Generic;

+

+namespace Google.ProtocolBuffers.Collections

+{

+    /// <summary>

+    /// Utility class for dictionaries.

+    /// </summary>

+    public static class Dictionaries

+    {

+        /// <summary>

+        /// Compares two dictionaries for equality. Each value is compared with equality using Equals

+        /// for non-IEnumerable implementations, and using EnumerableEquals otherwise.

+        /// TODO(jonskeet): This is clearly pretty slow, and involves lots of boxing/unboxing...

+        /// </summary>

+        public static bool Equals<TKey, TValue>(IDictionary<TKey, TValue> left, IDictionary<TKey, TValue> right)

+        {

+            if (left.Count != right.Count)

+            {

+                return false;

+            }

+            foreach (KeyValuePair<TKey, TValue> leftEntry in left)

+            {

+                TValue rightValue;

+                if (!right.TryGetValue(leftEntry.Key, out rightValue))

+                {

+                    return false;

+                }

+

+                IEnumerable leftEnumerable = leftEntry.Value as IEnumerable;

+                IEnumerable rightEnumerable = rightValue as IEnumerable;

+                if (leftEnumerable == null || rightEnumerable == null)

+                {

+                    if (!Equals(leftEntry.Value, rightValue))

+                    {

+                        return false;

+                    }

+                }

+                else

+                {

+                    if (!Enumerables.Equals(leftEnumerable, rightEnumerable))

+                    {

+                        return false;

+                    }

+                }

+            }

+            return true;

+        }

+

+        public static IDictionary<TKey, TValue> AsReadOnly<TKey, TValue>(IDictionary<TKey, TValue> dictionary)

+        {

+            return dictionary.IsReadOnly ? dictionary : new ReadOnlyDictionary<TKey, TValue>(dictionary);

+        }

+

+        /// <summary>

+        /// Creates a hashcode for a dictionary by XORing the hashcodes of all the fields

+        /// and values. (By XORing, we avoid ordering issues.)

+        /// TODO(jonskeet): Currently XORs other stuff too, and assumes non-null values.

+        /// </summary>

+        public static int GetHashCode<TKey, TValue>(IDictionary<TKey, TValue> dictionary)

+        {

+            int ret = 31;

+            foreach (KeyValuePair<TKey, TValue> entry in dictionary)

+            {

+                int hash = entry.Key.GetHashCode() ^ GetDeepHashCode(entry.Value);

+                ret ^= hash;

+            }

+            return ret;

+        }

+

+        /// <summary>

+        /// Determines the hash of a value by either taking it directly or hashing all the elements

+        /// for IEnumerable implementations.

+        /// </summary>

+        private static int GetDeepHashCode(object value)

+        {

+            IEnumerable iterable = value as IEnumerable;

+            if (iterable == null)

+            {

+                return value.GetHashCode();

+            }

+            int hash = 29;

+            foreach (object element in iterable)

+            {

+                hash = hash*37 + element.GetHashCode();

+            }

+            return hash;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Collections/Enumerables.cs b/csharp/src/ProtocolBuffers/Collections/Enumerables.cs
new file mode 100644
index 0000000..7ad9a83
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Collections/Enumerables.cs
@@ -0,0 +1,74 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Collections;

+

+namespace Google.ProtocolBuffers.Collections

+{

+    /// <summary>

+    /// Utility class for IEnumerable (and potentially the generic version in the future).

+    /// </summary>

+    public static class Enumerables

+    {

+        public static bool Equals(IEnumerable left, IEnumerable right)

+        {

+            IEnumerator leftEnumerator = left.GetEnumerator();

+            try

+            {

+                foreach (object rightObject in right)

+                {

+                    if (!leftEnumerator.MoveNext())

+                    {

+                        return false;

+                    }

+                    if (!Equals(leftEnumerator.Current, rightObject))

+                    {

+                        return false;

+                    }

+                }

+                if (leftEnumerator.MoveNext())

+                {

+                    return false;

+                }

+            }

+            finally

+            {

+                IDisposable leftEnumeratorDisposable = leftEnumerator as IDisposable;

+                if (leftEnumeratorDisposable != null)

+                {

+                    leftEnumeratorDisposable.Dispose();

+                }

+            }

+            return true;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Collections/IPopsicleList.cs b/csharp/src/ProtocolBuffers/Collections/IPopsicleList.cs
new file mode 100644
index 0000000..a1a7581
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Collections/IPopsicleList.cs
@@ -0,0 +1,58 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System.Collections.Generic;

+

+namespace Google.ProtocolBuffers.Collections

+{

+    /// <summary>

+    /// A list which has an Add method which accepts an IEnumerable[T].

+    /// This allows whole collections to be added easily using collection initializers.

+    /// It causes a potential overload confusion if T : IEnumerable[T], but in

+    /// practice that won't happen in protocol buffers.

+    /// </summary>

+    /// <remarks>This is only currently implemented by PopsicleList, and it's likely

+    /// to stay that way - hence the name. More genuinely descriptive names are

+    /// horribly ugly. (At least, the ones the author could think of...)</remarks>

+    /// <typeparam name="T">The element type of the list</typeparam>

+    public interface IPopsicleList<T> : IList<T>

+    {

+        void Add(IEnumerable<T> collection);

+    }

+

+    /// <summary>

+    /// Used to efficiently cast the elements of enumerations

+    /// </summary>

+    internal interface ICastArray

+    {

+        IEnumerable<TItemType> CastArray<TItemType>();

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Collections/Lists.cs b/csharp/src/ProtocolBuffers/Collections/Lists.cs
new file mode 100644
index 0000000..a24e1d9
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Collections/Lists.cs
@@ -0,0 +1,110 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System.Collections.Generic;

+using System.Collections.ObjectModel;

+

+namespace Google.ProtocolBuffers.Collections

+{

+    /// <summary>

+    /// Utility non-generic class for calling into Lists{T} using type inference.

+    /// </summary>

+    public static class Lists

+    {

+        /// <summary>

+        /// Returns a read-only view of the specified list.

+        /// </summary>

+        public static IList<T> AsReadOnly<T>(IList<T> list)

+        {

+            return Lists<T>.AsReadOnly(list);

+        }

+

+        public static bool Equals<T>(IList<T> left, IList<T> right)

+        {

+            if (left == right)

+            {

+                return true;

+            }

+            if (left == null || right == null)

+            {

+                return false;

+            }

+            if (left.Count != right.Count)

+            {

+                return false;

+            }

+            IEqualityComparer<T> comparer = EqualityComparer<T>.Default;

+            for (int i = 0; i < left.Count; i++)

+            {

+                if (!comparer.Equals(left[i], right[i]))

+                {

+                    return false;

+                }

+            }

+            return true;

+        }

+

+        public static int GetHashCode<T>(IList<T> list)

+        {

+            int hash = 31;

+            foreach (T element in list)

+            {

+                hash = hash*29 + element.GetHashCode();

+            }

+            return hash;

+        }

+    }

+

+    /// <summary>

+    /// Utility class for dealing with lists.

+    /// </summary>

+    public static class Lists<T>

+    {

+        private static readonly ReadOnlyCollection<T> empty = new ReadOnlyCollection<T>(new T[0]);

+

+        /// <summary>

+        /// Returns an immutable empty list.

+        /// </summary>

+        public static ReadOnlyCollection<T> Empty

+        {

+            get { return empty; }

+        }

+

+        /// <summary>

+        /// Returns either the original reference if it's already read-only,

+        /// or a new ReadOnlyCollection wrapping the original list.

+        /// </summary>

+        public static IList<T> AsReadOnly(IList<T> list)

+        {

+            return list.IsReadOnly ? list : new ReadOnlyCollection<T>(list);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Collections/PopsicleList.cs b/csharp/src/ProtocolBuffers/Collections/PopsicleList.cs
new file mode 100644
index 0000000..3de97f8
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Collections/PopsicleList.cs
@@ -0,0 +1,208 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Collections;

+using System.Collections.Generic;

+

+namespace Google.ProtocolBuffers.Collections

+{

+    /// <summary>

+    /// Proxies calls to a <see cref="List{T}" />, but allows the list

+    /// to be made read-only (with the <see cref="MakeReadOnly" /> method), 

+    /// after which any modifying methods throw <see cref="NotSupportedException" />.

+    /// </summary>

+    public sealed class PopsicleList<T> : IPopsicleList<T>, ICastArray

+    {

+        private static readonly bool CheckForNull = default(T) == null;

+        private static readonly T[] EmptySet = new T[0];

+

+        private List<T> items;

+        private bool readOnly;

+

+        /// <summary>

+        /// Makes this list read-only ("freezes the popsicle"). From this

+        /// point on, mutating methods (Clear, Add etc) will throw a

+        /// NotSupportedException. There is no way of "defrosting" the list afterwards.

+        /// </summary>

+        public void MakeReadOnly()

+        {

+            readOnly = true;

+        }

+

+        public int IndexOf(T item)

+        {

+            return items == null ? -1 : items.IndexOf(item);

+        }

+

+        public void Insert(int index, T item)

+        {

+            ValidateModification();

+            if (CheckForNull)

+            {

+                ThrowHelper.ThrowIfNull(item);

+            }

+            items.Insert(index, item);

+        }

+

+        public void RemoveAt(int index)

+        {

+            ValidateModification();

+            items.RemoveAt(index);

+        }

+

+        public T this[int index]

+        {

+            get

+            {

+                if (items == null)

+                {

+                    throw new ArgumentOutOfRangeException();

+                }

+                return items[index];

+            }

+            set

+            {

+                ValidateModification();

+                if (CheckForNull)

+                {

+                    ThrowHelper.ThrowIfNull(value);

+                }

+                items[index] = value;

+            }

+        }

+

+        public void Add(T item)

+        {

+            ValidateModification();

+            if (CheckForNull)

+            {

+                ThrowHelper.ThrowIfNull(item);

+            }

+            items.Add(item);

+        }

+

+        public void Clear()

+        {

+            ValidateModification();

+            items.Clear();

+        }

+

+        public bool Contains(T item)

+        {

+            return items == null ? false : items.Contains(item);

+        }

+

+        public void CopyTo(T[] array, int arrayIndex)

+        {

+            if (items != null)

+            {

+                items.CopyTo(array, arrayIndex);

+            }

+        }

+

+        public int Count

+        {

+            get { return items == null ? 0 : items.Count; }

+        }

+

+        public bool IsReadOnly

+        {

+            get { return readOnly; }

+        }

+

+        public bool Remove(T item)

+        {

+            ValidateModification();

+            return items.Remove(item);

+        }

+

+        public IEnumerator<T> GetEnumerator()

+        {

+            IEnumerable<T> tenum = (IEnumerable<T>)items ?? EmptySet;

+            return tenum.GetEnumerator();

+        }

+

+        IEnumerator IEnumerable.GetEnumerator()

+        {

+            return GetEnumerator();

+        }

+

+        public void Add(IEnumerable<T> collection)

+        {

+            ValidateModification();

+            ThrowHelper.ThrowIfNull(collection);

+

+            if (!CheckForNull || collection is PopsicleList<T>)

+            {

+                items.AddRange(collection);

+            }

+            else

+            {

+                // Assumption, it's ok to enumerate collections more than once.

+                if (collection is ICollection<T>)

+                {

+                    ThrowHelper.ThrowIfAnyNull(collection);

+                    items.AddRange(collection);

+                }

+                else

+                {

+                    foreach (T item in collection)

+                    {

+                        ThrowHelper.ThrowIfNull(item);

+                        items.Add(item);

+                    }

+                }

+            }

+        }

+

+        private void ValidateModification()

+        {

+            if (readOnly)

+            {

+                throw new NotSupportedException("List is read-only");

+            }

+            if (items == null)

+            {

+                items = new List<T>();

+            }

+        }

+

+        IEnumerable<TItemType> ICastArray.CastArray<TItemType>()

+        {

+            if (items == null)

+            {

+                return PopsicleList<TItemType>.EmptySet;

+            }

+            return (TItemType[]) (object) items.ToArray();

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Collections/ReadOnlyDictionary.cs b/csharp/src/ProtocolBuffers/Collections/ReadOnlyDictionary.cs
new file mode 100644
index 0000000..b0bc55f
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Collections/ReadOnlyDictionary.cs
@@ -0,0 +1,146 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Collections;

+using System.Collections.Generic;

+

+namespace Google.ProtocolBuffers.Collections

+{

+    /// <summary>

+    /// Read-only wrapper around another dictionary.

+    /// </summary>

+    public sealed class ReadOnlyDictionary<TKey, TValue> : IDictionary<TKey, TValue>

+    {

+        private readonly IDictionary<TKey, TValue> wrapped;

+

+        public ReadOnlyDictionary(IDictionary<TKey, TValue> wrapped)

+        {

+            this.wrapped = wrapped;

+        }

+

+        public void Add(TKey key, TValue value)

+        {

+            throw new InvalidOperationException();

+        }

+

+        public bool ContainsKey(TKey key)

+        {

+            return wrapped.ContainsKey(key);

+        }

+

+        public ICollection<TKey> Keys

+        {

+            get { return wrapped.Keys; }

+        }

+

+        public bool Remove(TKey key)

+        {

+            throw new InvalidOperationException();

+        }

+

+        public bool TryGetValue(TKey key, out TValue value)

+        {

+            return wrapped.TryGetValue(key, out value);

+        }

+

+        public ICollection<TValue> Values

+        {

+            get { return wrapped.Values; }

+        }

+

+        public TValue this[TKey key]

+        {

+            get { return wrapped[key]; }

+            set { throw new InvalidOperationException(); }

+        }

+

+        public void Add(KeyValuePair<TKey, TValue> item)

+        {

+            throw new InvalidOperationException();

+        }

+

+        public void Clear()

+        {

+            throw new InvalidOperationException();

+        }

+

+        public bool Contains(KeyValuePair<TKey, TValue> item)

+        {

+            return wrapped.Contains(item);

+        }

+

+        public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)

+        {

+            wrapped.CopyTo(array, arrayIndex);

+        }

+

+        public int Count

+        {

+            get { return wrapped.Count; }

+        }

+

+        public bool IsReadOnly

+        {

+            get { return true; }

+        }

+

+        public bool Remove(KeyValuePair<TKey, TValue> item)

+        {

+            throw new InvalidOperationException();

+        }

+

+        public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()

+        {

+            return wrapped.GetEnumerator();

+        }

+

+        IEnumerator IEnumerable.GetEnumerator()

+        {

+            return ((IEnumerable) wrapped).GetEnumerator();

+        }

+

+        public override bool Equals(object obj)

+        {

+            return wrapped.Equals(obj);

+        }

+

+        public override int GetHashCode()

+        {

+            return wrapped.GetHashCode();

+        }

+

+        public override string ToString()

+        {

+            return wrapped.ToString();

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/CustomSerialization.cs b/csharp/src/ProtocolBuffers/CustomSerialization.cs
new file mode 100644
index 0000000..ae9fca2
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/CustomSerialization.cs
@@ -0,0 +1,201 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+/*

+ * This entire source file is not supported on some platform

+ */

+#if !NOSERIALIZABLE

+using System;

+using System.Security.Permissions;

+using System.Runtime.Serialization;

+using System.Security;

+

+namespace Google.ProtocolBuffers

+{

+    /* 

+     * Specialized handing of *all* message types.  Messages are serialized into a byte[] and stored

+     * into the SerializationInfo, and are then reconstituted by an IObjectReference class after

+     * deserialization.  IDeserializationCallback is supported on both the Builder and Message.

+     */

+    [Serializable]

+    partial class AbstractMessageLite<TMessage, TBuilder> : ISerializable

+    {

+        [SecurityCritical]

+        [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]

+        void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)

+        {

+            info.SetType(typeof(SerializationSurrogate));

+            info.AddValue("message", ToByteArray());

+            info.AddValue("initialized", IsInitialized);

+        }

+

+        [Serializable]

+        private sealed class SerializationSurrogate : IObjectReference, ISerializable

+        {

+            static readonly TBuilder TemplateInstance = (TBuilder)Activator.CreateInstance(typeof(TBuilder));

+            private readonly byte[] _message;

+            private readonly bool _initialized;

+

+            private SerializationSurrogate(SerializationInfo info, StreamingContext context)

+            {

+                _message = (byte[])info.GetValue("message", typeof(byte[]));

+                _initialized = info.GetBoolean("initialized");

+            }

+

+            [SecurityCritical]

+            [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]

+            object IObjectReference.GetRealObject(StreamingContext context)

+            {

+                ExtensionRegistry registry = context.Context as ExtensionRegistry;

+                TBuilder builder = TemplateInstance.DefaultInstanceForType.CreateBuilderForType();

+                builder.MergeFrom(_message, registry ?? ExtensionRegistry.Empty);

+

+                IDeserializationCallback callback = builder as IDeserializationCallback;

+                if(callback != null)

+                {

+                    callback.OnDeserialization(context);

+                }

+

+                TMessage message = _initialized ? builder.Build() : builder.BuildPartial();

+                callback = message as IDeserializationCallback;

+                if (callback != null)

+                {

+                    callback.OnDeserialization(context);

+                }

+

+                return message;

+            }

+

+            [SecurityCritical]

+            [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]

+            void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)

+            {

+                info.AddValue("message", _message);

+            }

+        }

+    }

+

+    [Serializable]

+    partial class AbstractBuilderLite<TMessage, TBuilder> : ISerializable

+    {

+        [SecurityCritical]

+        [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]

+        void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)

+        {

+            info.SetType(typeof(SerializationSurrogate));

+            info.AddValue("message", Clone().BuildPartial().ToByteArray());

+        }

+

+        [Serializable]

+        private sealed class SerializationSurrogate : IObjectReference, ISerializable

+        {

+            static readonly TBuilder TemplateInstance = (TBuilder)Activator.CreateInstance(typeof(TBuilder));

+            private readonly byte[] _message;

+

+            private SerializationSurrogate(SerializationInfo info, StreamingContext context)

+            {

+                _message = (byte[])info.GetValue("message", typeof(byte[]));

+            }

+

+            [SecurityCritical]

+            [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]

+            object IObjectReference.GetRealObject(StreamingContext context)

+            {

+                ExtensionRegistry registry = context.Context as ExtensionRegistry;

+                TBuilder builder = TemplateInstance.DefaultInstanceForType.CreateBuilderForType();

+                builder.MergeFrom(_message, registry ?? ExtensionRegistry.Empty);

+

+                IDeserializationCallback callback = builder as IDeserializationCallback;

+                if(callback != null)

+                {

+                    callback.OnDeserialization(context);

+                }

+

+                return builder;

+            }

+

+            [SecurityCritical]

+            [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]

+            void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)

+            {

+                info.AddValue("message", _message);

+            }

+        }

+    }

+

+    /*

+     * Spread some attribute love around, keeping this all here so we don't use conditional compliation 

+     * in every one of these classes.  If we introduce a new platform that also does not support this

+     * we can control it all from this source file.

+     */

+

+    [Serializable]

+    partial class GeneratedMessageLite<TMessage, TBuilder> { }

+

+    [Serializable]

+    partial class ExtendableMessageLite<TMessage, TBuilder> { }

+

+    [Serializable]

+    partial class AbstractMessage<TMessage, TBuilder> { }

+

+    [Serializable]

+    partial class GeneratedMessage<TMessage, TBuilder> { }

+

+    [Serializable]

+    partial class ExtendableMessage<TMessage, TBuilder> { }

+

+    [Serializable]

+    partial class GeneratedBuilderLite<TMessage, TBuilder> { }

+

+    [Serializable]

+    partial class ExtendableBuilderLite<TMessage, TBuilder> { }

+

+    [Serializable]

+    partial class AbstractBuilder<TMessage, TBuilder> { }

+

+    [Serializable]

+    partial class GeneratedBuilder<TMessage, TBuilder> { }

+

+    [Serializable]

+    partial class ExtendableBuilder<TMessage, TBuilder> { }

+

+    [Serializable]

+    partial class DynamicMessage 

+    {

+        [Serializable]

+        partial class Builder { }

+    }

+}

+#endif
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Delegates.cs b/csharp/src/ProtocolBuffers/Delegates.cs
new file mode 100644
index 0000000..3b62bc0
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Delegates.cs
@@ -0,0 +1,54 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.IO;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Delegate to return a stream when asked, used by MessageStreamIterator.

+    /// </summary>

+    public delegate Stream StreamProvider();

+

+    // These delegate declarations mirror the ones in .NET 3.5 for the sake of familiarity.

+    internal delegate TResult Func<TResult>();

+

+    internal delegate TResult Func<T, TResult>(T arg);

+

+    internal delegate TResult Func<T1, T2, TResult>(T1 arg1, T2 arg2);

+

+    internal delegate void Action<T1, T2>(T1 arg1, T2 arg2);

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs b/csharp/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs
new file mode 100644
index 0000000..9a77d6e
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/DescriptorProtos/CSharpOptions.cs
@@ -0,0 +1,1887 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.DescriptorProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class CSharpOptions {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+      registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFileOptions);

+      registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFieldOptions);

+      registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpServiceOptions);

+      registry.Add(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpMethodOptions);

+    }

+    #endregion

+    #region Extensions

+    public const int CSharpFileOptionsFieldNumber = 1000;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions> CSharpFileOptions;

+    public const int CSharpFieldOptionsFieldNumber = 1000;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions> CSharpFieldOptions;

+    public const int CsharpServiceOptionsFieldNumber = 1000;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions> CsharpServiceOptions;

+    public const int CsharpMethodOptionsFieldNumber = 1000;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions> CsharpMethodOptions;

+    #endregion

+    

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpFileOptions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.Builder> internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpFieldOptions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.Builder> internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpServiceOptions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.Builder> internal__static_google_protobuf_CSharpServiceOptions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_CSharpMethodOptions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.Builder> internal__static_google_protobuf_CSharpMethodOptions__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static CSharpOptions() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CiRnb29nbGUvcHJvdG9idWYvY3NoYXJwX29wdGlvbnMucHJvdG8SD2dvb2ds", 

+            "ZS5wcm90b2J1ZhogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG8i", 

+            "pwQKEUNTaGFycEZpbGVPcHRpb25zEhEKCW5hbWVzcGFjZRgBIAEoCRIaChJ1", 

+            "bWJyZWxsYV9jbGFzc25hbWUYAiABKAkSHAoOcHVibGljX2NsYXNzZXMYAyAB", 

+            "KAg6BHRydWUSFgoObXVsdGlwbGVfZmlsZXMYBCABKAgSFAoMbmVzdF9jbGFz", 

+            "c2VzGAUgASgIEhYKDmNvZGVfY29udHJhY3RzGAYgASgIEiQKHGV4cGFuZF9u", 

+            "YW1lc3BhY2VfZGlyZWN0b3JpZXMYByABKAgSHAoOY2xzX2NvbXBsaWFuY2UY", 

+            "CCABKAg6BHRydWUSHwoQYWRkX3NlcmlhbGl6YWJsZRgJIAEoCDoFZmFsc2US", 

+            "IwoVZ2VuZXJhdGVfcHJpdmF0ZV9jdG9yGAogASgIOgR0cnVlEhwKDmZpbGVf", 

+            "ZXh0ZW5zaW9uGN0BIAEoCToDLmNzEhsKEnVtYnJlbGxhX25hbWVzcGFjZRje", 

+            "ASABKAkSHAoQb3V0cHV0X2RpcmVjdG9yeRjfASABKAk6AS4SJgoWaWdub3Jl", 

+            "X2dvb2dsZV9wcm90b2J1ZhjgASABKAg6BWZhbHNlEkkKFnNlcnZpY2VfZ2Vu", 

+            "ZXJhdG9yX3R5cGUY4QEgASgOMiIuZ29vZ2xlLnByb3RvYnVmLkNTaGFycFNl", 

+            "cnZpY2VUeXBlOgROT05FEikKGWdlbmVyYXRlZF9jb2RlX2F0dHJpYnV0ZXMY", 

+            "4gEgASgIOgVmYWxzZSIrChJDU2hhcnBGaWVsZE9wdGlvbnMSFQoNcHJvcGVy", 

+            "dHlfbmFtZRgBIAEoCSIsChRDU2hhcnBTZXJ2aWNlT3B0aW9ucxIUCgxpbnRl", 

+            "cmZhY2VfaWQYASABKAkiKgoTQ1NoYXJwTWV0aG9kT3B0aW9ucxITCgtkaXNw", 

+            "YXRjaF9pZBgBIAEoBSpLChFDU2hhcnBTZXJ2aWNlVHlwZRIICgROT05FEAAS", 

+            "CwoHR0VORVJJQxABEg0KCUlOVEVSRkFDRRACEhAKDElSUENESVNQQVRDSBAD", 

+            "Ol4KE2NzaGFycF9maWxlX29wdGlvbnMSHC5nb29nbGUucHJvdG9idWYuRmls", 

+            "ZU9wdGlvbnMY6AcgASgLMiIuZ29vZ2xlLnByb3RvYnVmLkNTaGFycEZpbGVP", 

+            "cHRpb25zOmEKFGNzaGFycF9maWVsZF9vcHRpb25zEh0uZ29vZ2xlLnByb3Rv", 

+            "YnVmLkZpZWxkT3B0aW9ucxjoByABKAsyIy5nb29nbGUucHJvdG9idWYuQ1No", 

+            "YXJwRmllbGRPcHRpb25zOmcKFmNzaGFycF9zZXJ2aWNlX29wdGlvbnMSHy5n", 

+            "b29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMY6AcgASgLMiUuZ29vZ2xl", 

+            "LnByb3RvYnVmLkNTaGFycFNlcnZpY2VPcHRpb25zOmQKFWNzaGFycF9tZXRo", 

+            "b2Rfb3B0aW9ucxIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGOgH", 

+          "IAEoCzIkLmdvb2dsZS5wcm90b2J1Zi5DU2hhcnBNZXRob2RPcHRpb25z"));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_google_protobuf_CSharpFileOptions__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.Builder>(internal__static_google_protobuf_CSharpFileOptions__Descriptor,

+                new string[] { "Namespace", "UmbrellaClassname", "PublicClasses", "MultipleFiles", "NestClasses", "CodeContracts", "ExpandNamespaceDirectories", "ClsCompliance", "AddSerializable", "GeneratePrivateCtor", "FileExtension", "UmbrellaNamespace", "OutputDirectory", "IgnoreGoogleProtobuf", "ServiceGeneratorType", "GeneratedCodeAttributes", });

+        internal__static_google_protobuf_CSharpFieldOptions__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.Builder>(internal__static_google_protobuf_CSharpFieldOptions__Descriptor,

+                new string[] { "PropertyName", });

+        internal__static_google_protobuf_CSharpServiceOptions__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_google_protobuf_CSharpServiceOptions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.Builder>(internal__static_google_protobuf_CSharpServiceOptions__Descriptor,

+                new string[] { "InterfaceId", });

+        internal__static_google_protobuf_CSharpMethodOptions__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_google_protobuf_CSharpMethodOptions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions, global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.Builder>(internal__static_google_protobuf_CSharpMethodOptions__Descriptor,

+                new string[] { "DispatchId", });

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFileOptions = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions>.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[0]);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CSharpFieldOptions = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions>.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[1]);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpServiceOptions = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions>.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[2]);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.CsharpMethodOptions = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions>.CreateInstance(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor.Extensions[3]);

+        return null;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum CSharpServiceType {

+    NONE = 0,

+    GENERIC = 1,

+    INTERFACE = 2,

+    IRPCDISPATCH = 3,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class CSharpFileOptions : pb::GeneratedMessage<CSharpFileOptions, CSharpFileOptions.Builder> {

+    private CSharpFileOptions() { }

+    private static readonly CSharpFileOptions defaultInstance = new CSharpFileOptions().MakeReadOnly();

+    private static readonly string[] _cSharpFileOptionsFieldNames = new string[] { "add_serializable", "cls_compliance", "code_contracts", "expand_namespace_directories", "file_extension", "generate_private_ctor", "generated_code_attributes", "ignore_google_protobuf", "multiple_files", "namespace", "nest_classes", "output_directory", "public_classes", "service_generator_type", "umbrella_classname", "umbrella_namespace" };

+    private static readonly uint[] _cSharpFileOptionsFieldTags = new uint[] { 72, 64, 48, 56, 1770, 80, 1808, 1792, 32, 10, 40, 1786, 24, 1800, 18, 1778 };

+    public static CSharpFileOptions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override CSharpFileOptions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override CSharpFileOptions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFileOptions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<CSharpFileOptions, CSharpFileOptions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFileOptions__FieldAccessorTable; }

+    }

+    

+    public const int NamespaceFieldNumber = 1;

+    private bool hasNamespace;

+    private string namespace_ = "";

+    public bool HasNamespace {

+      get { return hasNamespace; }

+    }

+    public string Namespace {

+      get { return namespace_; }

+    }

+    

+    public const int UmbrellaClassnameFieldNumber = 2;

+    private bool hasUmbrellaClassname;

+    private string umbrellaClassname_ = "";

+    public bool HasUmbrellaClassname {

+      get { return hasUmbrellaClassname; }

+    }

+    public string UmbrellaClassname {

+      get { return umbrellaClassname_; }

+    }

+    

+    public const int PublicClassesFieldNumber = 3;

+    private bool hasPublicClasses;

+    private bool publicClasses_ = true;

+    public bool HasPublicClasses {

+      get { return hasPublicClasses; }

+    }

+    public bool PublicClasses {

+      get { return publicClasses_; }

+    }

+    

+    public const int MultipleFilesFieldNumber = 4;

+    private bool hasMultipleFiles;

+    private bool multipleFiles_;

+    public bool HasMultipleFiles {

+      get { return hasMultipleFiles; }

+    }

+    public bool MultipleFiles {

+      get { return multipleFiles_; }

+    }

+    

+    public const int NestClassesFieldNumber = 5;

+    private bool hasNestClasses;

+    private bool nestClasses_;

+    public bool HasNestClasses {

+      get { return hasNestClasses; }

+    }

+    public bool NestClasses {

+      get { return nestClasses_; }

+    }

+    

+    public const int CodeContractsFieldNumber = 6;

+    private bool hasCodeContracts;

+    private bool codeContracts_;

+    public bool HasCodeContracts {

+      get { return hasCodeContracts; }

+    }

+    public bool CodeContracts {

+      get { return codeContracts_; }

+    }

+    

+    public const int ExpandNamespaceDirectoriesFieldNumber = 7;

+    private bool hasExpandNamespaceDirectories;

+    private bool expandNamespaceDirectories_;

+    public bool HasExpandNamespaceDirectories {

+      get { return hasExpandNamespaceDirectories; }

+    }

+    public bool ExpandNamespaceDirectories {

+      get { return expandNamespaceDirectories_; }

+    }

+    

+    public const int ClsComplianceFieldNumber = 8;

+    private bool hasClsCompliance;

+    private bool clsCompliance_ = true;

+    public bool HasClsCompliance {

+      get { return hasClsCompliance; }

+    }

+    public bool ClsCompliance {

+      get { return clsCompliance_; }

+    }

+    

+    public const int AddSerializableFieldNumber = 9;

+    private bool hasAddSerializable;

+    private bool addSerializable_;

+    public bool HasAddSerializable {

+      get { return hasAddSerializable; }

+    }

+    public bool AddSerializable {

+      get { return addSerializable_; }

+    }

+    

+    public const int GeneratePrivateCtorFieldNumber = 10;

+    private bool hasGeneratePrivateCtor;

+    private bool generatePrivateCtor_ = true;

+    public bool HasGeneratePrivateCtor {

+      get { return hasGeneratePrivateCtor; }

+    }

+    public bool GeneratePrivateCtor {

+      get { return generatePrivateCtor_; }

+    }

+    

+    public const int FileExtensionFieldNumber = 221;

+    private bool hasFileExtension;

+    private string fileExtension_ = ".cs";

+    public bool HasFileExtension {

+      get { return hasFileExtension; }

+    }

+    public string FileExtension {

+      get { return fileExtension_; }

+    }

+    

+    public const int UmbrellaNamespaceFieldNumber = 222;

+    private bool hasUmbrellaNamespace;

+    private string umbrellaNamespace_ = "";

+    public bool HasUmbrellaNamespace {

+      get { return hasUmbrellaNamespace; }

+    }

+    public string UmbrellaNamespace {

+      get { return umbrellaNamespace_; }

+    }

+    

+    public const int OutputDirectoryFieldNumber = 223;

+    private bool hasOutputDirectory;

+    private string outputDirectory_ = ".";

+    public bool HasOutputDirectory {

+      get { return hasOutputDirectory; }

+    }

+    public string OutputDirectory {

+      get { return outputDirectory_; }

+    }

+    

+    public const int IgnoreGoogleProtobufFieldNumber = 224;

+    private bool hasIgnoreGoogleProtobuf;

+    private bool ignoreGoogleProtobuf_;

+    public bool HasIgnoreGoogleProtobuf {

+      get { return hasIgnoreGoogleProtobuf; }

+    }

+    public bool IgnoreGoogleProtobuf {

+      get { return ignoreGoogleProtobuf_; }

+    }

+    

+    public const int ServiceGeneratorTypeFieldNumber = 225;

+    private bool hasServiceGeneratorType;

+    private global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType serviceGeneratorType_ = global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType.NONE;

+    public bool HasServiceGeneratorType {

+      get { return hasServiceGeneratorType; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType ServiceGeneratorType {

+      get { return serviceGeneratorType_; }

+    }

+    

+    public const int GeneratedCodeAttributesFieldNumber = 226;

+    private bool hasGeneratedCodeAttributes;

+    private bool generatedCodeAttributes_;

+    public bool HasGeneratedCodeAttributes {

+      get { return hasGeneratedCodeAttributes; }

+    }

+    public bool GeneratedCodeAttributes {

+      get { return generatedCodeAttributes_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _cSharpFileOptionsFieldNames;

+      if (hasNamespace) {

+        output.WriteString(1, field_names[9], Namespace);

+      }

+      if (hasUmbrellaClassname) {

+        output.WriteString(2, field_names[14], UmbrellaClassname);

+      }

+      if (hasPublicClasses) {

+        output.WriteBool(3, field_names[12], PublicClasses);

+      }

+      if (hasMultipleFiles) {

+        output.WriteBool(4, field_names[8], MultipleFiles);

+      }

+      if (hasNestClasses) {

+        output.WriteBool(5, field_names[10], NestClasses);

+      }

+      if (hasCodeContracts) {

+        output.WriteBool(6, field_names[2], CodeContracts);

+      }

+      if (hasExpandNamespaceDirectories) {

+        output.WriteBool(7, field_names[3], ExpandNamespaceDirectories);

+      }

+      if (hasClsCompliance) {

+        output.WriteBool(8, field_names[1], ClsCompliance);

+      }

+      if (hasAddSerializable) {

+        output.WriteBool(9, field_names[0], AddSerializable);

+      }

+      if (hasGeneratePrivateCtor) {

+        output.WriteBool(10, field_names[5], GeneratePrivateCtor);

+      }

+      if (hasFileExtension) {

+        output.WriteString(221, field_names[4], FileExtension);

+      }

+      if (hasUmbrellaNamespace) {

+        output.WriteString(222, field_names[15], UmbrellaNamespace);

+      }

+      if (hasOutputDirectory) {

+        output.WriteString(223, field_names[11], OutputDirectory);

+      }

+      if (hasIgnoreGoogleProtobuf) {

+        output.WriteBool(224, field_names[7], IgnoreGoogleProtobuf);

+      }

+      if (hasServiceGeneratorType) {

+        output.WriteEnum(225, field_names[13], (int) ServiceGeneratorType, ServiceGeneratorType);

+      }

+      if (hasGeneratedCodeAttributes) {

+        output.WriteBool(226, field_names[6], GeneratedCodeAttributes);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasNamespace) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Namespace);

+      }

+      if (hasUmbrellaClassname) {

+        size += pb::CodedOutputStream.ComputeStringSize(2, UmbrellaClassname);

+      }

+      if (hasPublicClasses) {

+        size += pb::CodedOutputStream.ComputeBoolSize(3, PublicClasses);

+      }

+      if (hasMultipleFiles) {

+        size += pb::CodedOutputStream.ComputeBoolSize(4, MultipleFiles);

+      }

+      if (hasNestClasses) {

+        size += pb::CodedOutputStream.ComputeBoolSize(5, NestClasses);

+      }

+      if (hasCodeContracts) {

+        size += pb::CodedOutputStream.ComputeBoolSize(6, CodeContracts);

+      }

+      if (hasExpandNamespaceDirectories) {

+        size += pb::CodedOutputStream.ComputeBoolSize(7, ExpandNamespaceDirectories);

+      }

+      if (hasClsCompliance) {

+        size += pb::CodedOutputStream.ComputeBoolSize(8, ClsCompliance);

+      }

+      if (hasAddSerializable) {

+        size += pb::CodedOutputStream.ComputeBoolSize(9, AddSerializable);

+      }

+      if (hasGeneratePrivateCtor) {

+        size += pb::CodedOutputStream.ComputeBoolSize(10, GeneratePrivateCtor);

+      }

+      if (hasFileExtension) {

+        size += pb::CodedOutputStream.ComputeStringSize(221, FileExtension);

+      }

+      if (hasUmbrellaNamespace) {

+        size += pb::CodedOutputStream.ComputeStringSize(222, UmbrellaNamespace);

+      }

+      if (hasOutputDirectory) {

+        size += pb::CodedOutputStream.ComputeStringSize(223, OutputDirectory);

+      }

+      if (hasIgnoreGoogleProtobuf) {

+        size += pb::CodedOutputStream.ComputeBoolSize(224, IgnoreGoogleProtobuf);

+      }

+      if (hasServiceGeneratorType) {

+        size += pb::CodedOutputStream.ComputeEnumSize(225, (int) ServiceGeneratorType);

+      }

+      if (hasGeneratedCodeAttributes) {

+        size += pb::CodedOutputStream.ComputeBoolSize(226, GeneratedCodeAttributes);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static CSharpFileOptions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CSharpFileOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CSharpFileOptions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CSharpFileOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CSharpFileOptions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CSharpFileOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static CSharpFileOptions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static CSharpFileOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static CSharpFileOptions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CSharpFileOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private CSharpFileOptions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(CSharpFileOptions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<CSharpFileOptions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(CSharpFileOptions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private CSharpFileOptions result;

+      

+      private CSharpFileOptions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          CSharpFileOptions original = result;

+          result = new CSharpFileOptions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override CSharpFileOptions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.Descriptor; }

+      }

+      

+      public override CSharpFileOptions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.DefaultInstance; }

+      }

+      

+      public override CSharpFileOptions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is CSharpFileOptions) {

+          return MergeFrom((CSharpFileOptions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(CSharpFileOptions other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpFileOptions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasNamespace) {

+          Namespace = other.Namespace;

+        }

+        if (other.HasUmbrellaClassname) {

+          UmbrellaClassname = other.UmbrellaClassname;

+        }

+        if (other.HasPublicClasses) {

+          PublicClasses = other.PublicClasses;

+        }

+        if (other.HasMultipleFiles) {

+          MultipleFiles = other.MultipleFiles;

+        }

+        if (other.HasNestClasses) {

+          NestClasses = other.NestClasses;

+        }

+        if (other.HasCodeContracts) {

+          CodeContracts = other.CodeContracts;

+        }

+        if (other.HasExpandNamespaceDirectories) {

+          ExpandNamespaceDirectories = other.ExpandNamespaceDirectories;

+        }

+        if (other.HasClsCompliance) {

+          ClsCompliance = other.ClsCompliance;

+        }

+        if (other.HasAddSerializable) {

+          AddSerializable = other.AddSerializable;

+        }

+        if (other.HasGeneratePrivateCtor) {

+          GeneratePrivateCtor = other.GeneratePrivateCtor;

+        }

+        if (other.HasFileExtension) {

+          FileExtension = other.FileExtension;

+        }

+        if (other.HasUmbrellaNamespace) {

+          UmbrellaNamespace = other.UmbrellaNamespace;

+        }

+        if (other.HasOutputDirectory) {

+          OutputDirectory = other.OutputDirectory;

+        }

+        if (other.HasIgnoreGoogleProtobuf) {

+          IgnoreGoogleProtobuf = other.IgnoreGoogleProtobuf;

+        }

+        if (other.HasServiceGeneratorType) {

+          ServiceGeneratorType = other.ServiceGeneratorType;

+        }

+        if (other.HasGeneratedCodeAttributes) {

+          GeneratedCodeAttributes = other.GeneratedCodeAttributes;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_cSharpFileOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _cSharpFileOptionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasNamespace = input.ReadString(ref result.namespace_);

+              break;

+            }

+            case 18: {

+              result.hasUmbrellaClassname = input.ReadString(ref result.umbrellaClassname_);

+              break;

+            }

+            case 24: {

+              result.hasPublicClasses = input.ReadBool(ref result.publicClasses_);

+              break;

+            }

+            case 32: {

+              result.hasMultipleFiles = input.ReadBool(ref result.multipleFiles_);

+              break;

+            }

+            case 40: {

+              result.hasNestClasses = input.ReadBool(ref result.nestClasses_);

+              break;

+            }

+            case 48: {

+              result.hasCodeContracts = input.ReadBool(ref result.codeContracts_);

+              break;

+            }

+            case 56: {

+              result.hasExpandNamespaceDirectories = input.ReadBool(ref result.expandNamespaceDirectories_);

+              break;

+            }

+            case 64: {

+              result.hasClsCompliance = input.ReadBool(ref result.clsCompliance_);

+              break;

+            }

+            case 72: {

+              result.hasAddSerializable = input.ReadBool(ref result.addSerializable_);

+              break;

+            }

+            case 80: {

+              result.hasGeneratePrivateCtor = input.ReadBool(ref result.generatePrivateCtor_);

+              break;

+            }

+            case 1770: {

+              result.hasFileExtension = input.ReadString(ref result.fileExtension_);

+              break;

+            }

+            case 1778: {

+              result.hasUmbrellaNamespace = input.ReadString(ref result.umbrellaNamespace_);

+              break;

+            }

+            case 1786: {

+              result.hasOutputDirectory = input.ReadString(ref result.outputDirectory_);

+              break;

+            }

+            case 1792: {

+              result.hasIgnoreGoogleProtobuf = input.ReadBool(ref result.ignoreGoogleProtobuf_);

+              break;

+            }

+            case 1800: {

+              object unknown;

+              if(input.ReadEnum(ref result.serviceGeneratorType_, out unknown)) {

+                result.hasServiceGeneratorType = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(225, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 1808: {

+              result.hasGeneratedCodeAttributes = input.ReadBool(ref result.generatedCodeAttributes_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasNamespace {

+        get { return result.hasNamespace; }

+      }

+      public string Namespace {

+        get { return result.Namespace; }

+        set { SetNamespace(value); }

+      }

+      public Builder SetNamespace(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasNamespace = true;

+        result.namespace_ = value;

+        return this;

+      }

+      public Builder ClearNamespace() {

+        PrepareBuilder();

+        result.hasNamespace = false;

+        result.namespace_ = "";

+        return this;

+      }

+      

+      public bool HasUmbrellaClassname {

+        get { return result.hasUmbrellaClassname; }

+      }

+      public string UmbrellaClassname {

+        get { return result.UmbrellaClassname; }

+        set { SetUmbrellaClassname(value); }

+      }

+      public Builder SetUmbrellaClassname(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasUmbrellaClassname = true;

+        result.umbrellaClassname_ = value;

+        return this;

+      }

+      public Builder ClearUmbrellaClassname() {

+        PrepareBuilder();

+        result.hasUmbrellaClassname = false;

+        result.umbrellaClassname_ = "";

+        return this;

+      }

+      

+      public bool HasPublicClasses {

+        get { return result.hasPublicClasses; }

+      }

+      public bool PublicClasses {

+        get { return result.PublicClasses; }

+        set { SetPublicClasses(value); }

+      }

+      public Builder SetPublicClasses(bool value) {

+        PrepareBuilder();

+        result.hasPublicClasses = true;

+        result.publicClasses_ = value;

+        return this;

+      }

+      public Builder ClearPublicClasses() {

+        PrepareBuilder();

+        result.hasPublicClasses = false;

+        result.publicClasses_ = true;

+        return this;

+      }

+      

+      public bool HasMultipleFiles {

+        get { return result.hasMultipleFiles; }

+      }

+      public bool MultipleFiles {

+        get { return result.MultipleFiles; }

+        set { SetMultipleFiles(value); }

+      }

+      public Builder SetMultipleFiles(bool value) {

+        PrepareBuilder();

+        result.hasMultipleFiles = true;

+        result.multipleFiles_ = value;

+        return this;

+      }

+      public Builder ClearMultipleFiles() {

+        PrepareBuilder();

+        result.hasMultipleFiles = false;

+        result.multipleFiles_ = false;

+        return this;

+      }

+      

+      public bool HasNestClasses {

+        get { return result.hasNestClasses; }

+      }

+      public bool NestClasses {

+        get { return result.NestClasses; }

+        set { SetNestClasses(value); }

+      }

+      public Builder SetNestClasses(bool value) {

+        PrepareBuilder();

+        result.hasNestClasses = true;

+        result.nestClasses_ = value;

+        return this;

+      }

+      public Builder ClearNestClasses() {

+        PrepareBuilder();

+        result.hasNestClasses = false;

+        result.nestClasses_ = false;

+        return this;

+      }

+      

+      public bool HasCodeContracts {

+        get { return result.hasCodeContracts; }

+      }

+      public bool CodeContracts {

+        get { return result.CodeContracts; }

+        set { SetCodeContracts(value); }

+      }

+      public Builder SetCodeContracts(bool value) {

+        PrepareBuilder();

+        result.hasCodeContracts = true;

+        result.codeContracts_ = value;

+        return this;

+      }

+      public Builder ClearCodeContracts() {

+        PrepareBuilder();

+        result.hasCodeContracts = false;

+        result.codeContracts_ = false;

+        return this;

+      }

+      

+      public bool HasExpandNamespaceDirectories {

+        get { return result.hasExpandNamespaceDirectories; }

+      }

+      public bool ExpandNamespaceDirectories {

+        get { return result.ExpandNamespaceDirectories; }

+        set { SetExpandNamespaceDirectories(value); }

+      }

+      public Builder SetExpandNamespaceDirectories(bool value) {

+        PrepareBuilder();

+        result.hasExpandNamespaceDirectories = true;

+        result.expandNamespaceDirectories_ = value;

+        return this;

+      }

+      public Builder ClearExpandNamespaceDirectories() {

+        PrepareBuilder();

+        result.hasExpandNamespaceDirectories = false;

+        result.expandNamespaceDirectories_ = false;

+        return this;

+      }

+      

+      public bool HasClsCompliance {

+        get { return result.hasClsCompliance; }

+      }

+      public bool ClsCompliance {

+        get { return result.ClsCompliance; }

+        set { SetClsCompliance(value); }

+      }

+      public Builder SetClsCompliance(bool value) {

+        PrepareBuilder();

+        result.hasClsCompliance = true;

+        result.clsCompliance_ = value;

+        return this;

+      }

+      public Builder ClearClsCompliance() {

+        PrepareBuilder();

+        result.hasClsCompliance = false;

+        result.clsCompliance_ = true;

+        return this;

+      }

+      

+      public bool HasAddSerializable {

+        get { return result.hasAddSerializable; }

+      }

+      public bool AddSerializable {

+        get { return result.AddSerializable; }

+        set { SetAddSerializable(value); }

+      }

+      public Builder SetAddSerializable(bool value) {

+        PrepareBuilder();

+        result.hasAddSerializable = true;

+        result.addSerializable_ = value;

+        return this;

+      }

+      public Builder ClearAddSerializable() {

+        PrepareBuilder();

+        result.hasAddSerializable = false;

+        result.addSerializable_ = false;

+        return this;

+      }

+      

+      public bool HasGeneratePrivateCtor {

+        get { return result.hasGeneratePrivateCtor; }

+      }

+      public bool GeneratePrivateCtor {

+        get { return result.GeneratePrivateCtor; }

+        set { SetGeneratePrivateCtor(value); }

+      }

+      public Builder SetGeneratePrivateCtor(bool value) {

+        PrepareBuilder();

+        result.hasGeneratePrivateCtor = true;

+        result.generatePrivateCtor_ = value;

+        return this;

+      }

+      public Builder ClearGeneratePrivateCtor() {

+        PrepareBuilder();

+        result.hasGeneratePrivateCtor = false;

+        result.generatePrivateCtor_ = true;

+        return this;

+      }

+      

+      public bool HasFileExtension {

+        get { return result.hasFileExtension; }

+      }

+      public string FileExtension {

+        get { return result.FileExtension; }

+        set { SetFileExtension(value); }

+      }

+      public Builder SetFileExtension(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasFileExtension = true;

+        result.fileExtension_ = value;

+        return this;

+      }

+      public Builder ClearFileExtension() {

+        PrepareBuilder();

+        result.hasFileExtension = false;

+        result.fileExtension_ = ".cs";

+        return this;

+      }

+      

+      public bool HasUmbrellaNamespace {

+        get { return result.hasUmbrellaNamespace; }

+      }

+      public string UmbrellaNamespace {

+        get { return result.UmbrellaNamespace; }

+        set { SetUmbrellaNamespace(value); }

+      }

+      public Builder SetUmbrellaNamespace(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasUmbrellaNamespace = true;

+        result.umbrellaNamespace_ = value;

+        return this;

+      }

+      public Builder ClearUmbrellaNamespace() {

+        PrepareBuilder();

+        result.hasUmbrellaNamespace = false;

+        result.umbrellaNamespace_ = "";

+        return this;

+      }

+      

+      public bool HasOutputDirectory {

+        get { return result.hasOutputDirectory; }

+      }

+      public string OutputDirectory {

+        get { return result.OutputDirectory; }

+        set { SetOutputDirectory(value); }

+      }

+      public Builder SetOutputDirectory(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOutputDirectory = true;

+        result.outputDirectory_ = value;

+        return this;

+      }

+      public Builder ClearOutputDirectory() {

+        PrepareBuilder();

+        result.hasOutputDirectory = false;

+        result.outputDirectory_ = ".";

+        return this;

+      }

+      

+      public bool HasIgnoreGoogleProtobuf {

+        get { return result.hasIgnoreGoogleProtobuf; }

+      }

+      public bool IgnoreGoogleProtobuf {

+        get { return result.IgnoreGoogleProtobuf; }

+        set { SetIgnoreGoogleProtobuf(value); }

+      }

+      public Builder SetIgnoreGoogleProtobuf(bool value) {

+        PrepareBuilder();

+        result.hasIgnoreGoogleProtobuf = true;

+        result.ignoreGoogleProtobuf_ = value;

+        return this;

+      }

+      public Builder ClearIgnoreGoogleProtobuf() {

+        PrepareBuilder();

+        result.hasIgnoreGoogleProtobuf = false;

+        result.ignoreGoogleProtobuf_ = false;

+        return this;

+      }

+      

+      public bool HasServiceGeneratorType {

+       get { return result.hasServiceGeneratorType; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType ServiceGeneratorType {

+        get { return result.ServiceGeneratorType; }

+        set { SetServiceGeneratorType(value); }

+      }

+      public Builder SetServiceGeneratorType(global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType value) {

+        PrepareBuilder();

+        result.hasServiceGeneratorType = true;

+        result.serviceGeneratorType_ = value;

+        return this;

+      }

+      public Builder ClearServiceGeneratorType() {

+        PrepareBuilder();

+        result.hasServiceGeneratorType = false;

+        result.serviceGeneratorType_ = global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceType.NONE;

+        return this;

+      }

+      

+      public bool HasGeneratedCodeAttributes {

+        get { return result.hasGeneratedCodeAttributes; }

+      }

+      public bool GeneratedCodeAttributes {

+        get { return result.GeneratedCodeAttributes; }

+        set { SetGeneratedCodeAttributes(value); }

+      }

+      public Builder SetGeneratedCodeAttributes(bool value) {

+        PrepareBuilder();

+        result.hasGeneratedCodeAttributes = true;

+        result.generatedCodeAttributes_ = value;

+        return this;

+      }

+      public Builder ClearGeneratedCodeAttributes() {

+        PrepareBuilder();

+        result.hasGeneratedCodeAttributes = false;

+        result.generatedCodeAttributes_ = false;

+        return this;

+      }

+    }

+    static CSharpFileOptions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class CSharpFieldOptions : pb::GeneratedMessage<CSharpFieldOptions, CSharpFieldOptions.Builder> {

+    private CSharpFieldOptions() { }

+    private static readonly CSharpFieldOptions defaultInstance = new CSharpFieldOptions().MakeReadOnly();

+    private static readonly string[] _cSharpFieldOptionsFieldNames = new string[] { "property_name" };

+    private static readonly uint[] _cSharpFieldOptionsFieldTags = new uint[] { 10 };

+    public static CSharpFieldOptions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override CSharpFieldOptions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override CSharpFieldOptions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFieldOptions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<CSharpFieldOptions, CSharpFieldOptions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpFieldOptions__FieldAccessorTable; }

+    }

+    

+    public const int PropertyNameFieldNumber = 1;

+    private bool hasPropertyName;

+    private string propertyName_ = "";

+    public bool HasPropertyName {

+      get { return hasPropertyName; }

+    }

+    public string PropertyName {

+      get { return propertyName_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _cSharpFieldOptionsFieldNames;

+      if (hasPropertyName) {

+        output.WriteString(1, field_names[0], PropertyName);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasPropertyName) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, PropertyName);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static CSharpFieldOptions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CSharpFieldOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CSharpFieldOptions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CSharpFieldOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CSharpFieldOptions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CSharpFieldOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static CSharpFieldOptions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static CSharpFieldOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static CSharpFieldOptions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CSharpFieldOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private CSharpFieldOptions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(CSharpFieldOptions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<CSharpFieldOptions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(CSharpFieldOptions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private CSharpFieldOptions result;

+      

+      private CSharpFieldOptions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          CSharpFieldOptions original = result;

+          result = new CSharpFieldOptions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override CSharpFieldOptions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.Descriptor; }

+      }

+      

+      public override CSharpFieldOptions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.DefaultInstance; }

+      }

+      

+      public override CSharpFieldOptions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is CSharpFieldOptions) {

+          return MergeFrom((CSharpFieldOptions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(CSharpFieldOptions other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpFieldOptions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasPropertyName) {

+          PropertyName = other.PropertyName;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_cSharpFieldOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _cSharpFieldOptionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasPropertyName = input.ReadString(ref result.propertyName_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasPropertyName {

+        get { return result.hasPropertyName; }

+      }

+      public string PropertyName {

+        get { return result.PropertyName; }

+        set { SetPropertyName(value); }

+      }

+      public Builder SetPropertyName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasPropertyName = true;

+        result.propertyName_ = value;

+        return this;

+      }

+      public Builder ClearPropertyName() {

+        PrepareBuilder();

+        result.hasPropertyName = false;

+        result.propertyName_ = "";

+        return this;

+      }

+    }

+    static CSharpFieldOptions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class CSharpServiceOptions : pb::GeneratedMessage<CSharpServiceOptions, CSharpServiceOptions.Builder> {

+    private CSharpServiceOptions() { }

+    private static readonly CSharpServiceOptions defaultInstance = new CSharpServiceOptions().MakeReadOnly();

+    private static readonly string[] _cSharpServiceOptionsFieldNames = new string[] { "interface_id" };

+    private static readonly uint[] _cSharpServiceOptionsFieldTags = new uint[] { 10 };

+    public static CSharpServiceOptions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override CSharpServiceOptions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override CSharpServiceOptions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpServiceOptions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<CSharpServiceOptions, CSharpServiceOptions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpServiceOptions__FieldAccessorTable; }

+    }

+    

+    public const int InterfaceIdFieldNumber = 1;

+    private bool hasInterfaceId;

+    private string interfaceId_ = "";

+    public bool HasInterfaceId {

+      get { return hasInterfaceId; }

+    }

+    public string InterfaceId {

+      get { return interfaceId_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _cSharpServiceOptionsFieldNames;

+      if (hasInterfaceId) {

+        output.WriteString(1, field_names[0], InterfaceId);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasInterfaceId) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, InterfaceId);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static CSharpServiceOptions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CSharpServiceOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CSharpServiceOptions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CSharpServiceOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CSharpServiceOptions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CSharpServiceOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static CSharpServiceOptions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static CSharpServiceOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static CSharpServiceOptions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CSharpServiceOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private CSharpServiceOptions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(CSharpServiceOptions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<CSharpServiceOptions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(CSharpServiceOptions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private CSharpServiceOptions result;

+      

+      private CSharpServiceOptions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          CSharpServiceOptions original = result;

+          result = new CSharpServiceOptions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override CSharpServiceOptions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.Descriptor; }

+      }

+      

+      public override CSharpServiceOptions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.DefaultInstance; }

+      }

+      

+      public override CSharpServiceOptions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is CSharpServiceOptions) {

+          return MergeFrom((CSharpServiceOptions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(CSharpServiceOptions other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpServiceOptions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasInterfaceId) {

+          InterfaceId = other.InterfaceId;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_cSharpServiceOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _cSharpServiceOptionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasInterfaceId = input.ReadString(ref result.interfaceId_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasInterfaceId {

+        get { return result.hasInterfaceId; }

+      }

+      public string InterfaceId {

+        get { return result.InterfaceId; }

+        set { SetInterfaceId(value); }

+      }

+      public Builder SetInterfaceId(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasInterfaceId = true;

+        result.interfaceId_ = value;

+        return this;

+      }

+      public Builder ClearInterfaceId() {

+        PrepareBuilder();

+        result.hasInterfaceId = false;

+        result.interfaceId_ = "";

+        return this;

+      }

+    }

+    static CSharpServiceOptions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class CSharpMethodOptions : pb::GeneratedMessage<CSharpMethodOptions, CSharpMethodOptions.Builder> {

+    private CSharpMethodOptions() { }

+    private static readonly CSharpMethodOptions defaultInstance = new CSharpMethodOptions().MakeReadOnly();

+    private static readonly string[] _cSharpMethodOptionsFieldNames = new string[] { "dispatch_id" };

+    private static readonly uint[] _cSharpMethodOptionsFieldTags = new uint[] { 8 };

+    public static CSharpMethodOptions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override CSharpMethodOptions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override CSharpMethodOptions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpMethodOptions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<CSharpMethodOptions, CSharpMethodOptions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.internal__static_google_protobuf_CSharpMethodOptions__FieldAccessorTable; }

+    }

+    

+    public const int DispatchIdFieldNumber = 1;

+    private bool hasDispatchId;

+    private int dispatchId_;

+    public bool HasDispatchId {

+      get { return hasDispatchId; }

+    }

+    public int DispatchId {

+      get { return dispatchId_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _cSharpMethodOptionsFieldNames;

+      if (hasDispatchId) {

+        output.WriteInt32(1, field_names[0], DispatchId);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasDispatchId) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, DispatchId);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static CSharpMethodOptions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CSharpMethodOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CSharpMethodOptions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static CSharpMethodOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static CSharpMethodOptions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CSharpMethodOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static CSharpMethodOptions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static CSharpMethodOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static CSharpMethodOptions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static CSharpMethodOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private CSharpMethodOptions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(CSharpMethodOptions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<CSharpMethodOptions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(CSharpMethodOptions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private CSharpMethodOptions result;

+      

+      private CSharpMethodOptions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          CSharpMethodOptions original = result;

+          result = new CSharpMethodOptions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override CSharpMethodOptions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.Descriptor; }

+      }

+      

+      public override CSharpMethodOptions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.DefaultInstance; }

+      }

+      

+      public override CSharpMethodOptions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is CSharpMethodOptions) {

+          return MergeFrom((CSharpMethodOptions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(CSharpMethodOptions other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.CSharpMethodOptions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasDispatchId) {

+          DispatchId = other.DispatchId;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_cSharpMethodOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _cSharpMethodOptionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasDispatchId = input.ReadInt32(ref result.dispatchId_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasDispatchId {

+        get { return result.hasDispatchId; }

+      }

+      public int DispatchId {

+        get { return result.DispatchId; }

+        set { SetDispatchId(value); }

+      }

+      public Builder SetDispatchId(int value) {

+        PrepareBuilder();

+        result.hasDispatchId = true;

+        result.dispatchId_ = value;

+        return this;

+      }

+      public Builder ClearDispatchId() {

+        PrepareBuilder();

+        result.hasDispatchId = false;

+        result.dispatchId_ = 0;

+        return this;

+      }

+    }

+    static CSharpMethodOptions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs b/csharp/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs
new file mode 100644
index 0000000..c319c60
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/DescriptorProtos/DescriptorProtoFile.cs
@@ -0,0 +1,9110 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.DescriptorProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class DescriptorProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_FileDescriptorSet__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.Builder> internal__static_google_protobuf_FileDescriptorSet__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_FileDescriptorProto__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder> internal__static_google_protobuf_FileDescriptorProto__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_DescriptorProto__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder> internal__static_google_protobuf_DescriptorProto__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder> internal__static_google_protobuf_DescriptorProto_ExtensionRange__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_FieldDescriptorProto__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder> internal__static_google_protobuf_FieldDescriptorProto__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumDescriptorProto__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder> internal__static_google_protobuf_EnumDescriptorProto__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder> internal__static_google_protobuf_EnumValueDescriptorProto__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_ServiceDescriptorProto__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder> internal__static_google_protobuf_ServiceDescriptorProto__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_MethodDescriptorProto__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder> internal__static_google_protobuf_MethodDescriptorProto__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_FileOptions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileOptions, global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder> internal__static_google_protobuf_FileOptions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_MessageOptions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions, global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder> internal__static_google_protobuf_MessageOptions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_FieldOptions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder> internal__static_google_protobuf_FieldOptions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumOptions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions, global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder> internal__static_google_protobuf_EnumOptions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_EnumValueOptions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder> internal__static_google_protobuf_EnumValueOptions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_ServiceOptions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions, global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder> internal__static_google_protobuf_ServiceOptions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_MethodOptions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions, global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder> internal__static_google_protobuf_MethodOptions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_UninterpretedOption__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder> internal__static_google_protobuf_UninterpretedOption__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder> internal__static_google_protobuf_UninterpretedOption_NamePart__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_SourceCodeInfo__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder> internal__static_google_protobuf_SourceCodeInfo__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder> internal__static_google_protobuf_SourceCodeInfo_Location__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static DescriptorProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bxIPZ29vZ2xlLnBy", 

+            "b3RvYnVmIkcKEUZpbGVEZXNjcmlwdG9yU2V0EjIKBGZpbGUYASADKAsyJC5n", 

+            "b29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90byKXAwoTRmlsZURl", 

+            "c2NyaXB0b3JQcm90bxIMCgRuYW1lGAEgASgJEg8KB3BhY2thZ2UYAiABKAkS", 

+            "EgoKZGVwZW5kZW5jeRgDIAMoCRI2CgxtZXNzYWdlX3R5cGUYBCADKAsyIC5n", 

+            "b29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvEjcKCWVudW1fdHlwZRgF", 

+            "IAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvEjgK", 

+            "B3NlcnZpY2UYBiADKAsyJy5nb29nbGUucHJvdG9idWYuU2VydmljZURlc2Ny", 

+            "aXB0b3JQcm90bxI4CglleHRlbnNpb24YByADKAsyJS5nb29nbGUucHJvdG9i", 

+            "dWYuRmllbGREZXNjcmlwdG9yUHJvdG8SLQoHb3B0aW9ucxgIIAEoCzIcLmdv", 

+            "b2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9ucxI5ChBzb3VyY2VfY29kZV9pbmZv", 

+            "GAkgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvIqkDCg9E", 

+            "ZXNjcmlwdG9yUHJvdG8SDAoEbmFtZRgBIAEoCRI0CgVmaWVsZBgCIAMoCzIl", 

+            "Lmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90bxI4CglleHRl", 

+            "bnNpb24YBiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9y", 

+            "UHJvdG8SNQoLbmVzdGVkX3R5cGUYAyADKAsyIC5nb29nbGUucHJvdG9idWYu", 

+            "RGVzY3JpcHRvclByb3RvEjcKCWVudW1fdHlwZRgEIAMoCzIkLmdvb2dsZS5w", 

+            "cm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvEkgKD2V4dGVuc2lvbl9yYW5n", 

+            "ZRgFIAMoCzIvLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG8uRXh0", 

+            "ZW5zaW9uUmFuZ2USMAoHb3B0aW9ucxgHIAEoCzIfLmdvb2dsZS5wcm90b2J1", 

+            "Zi5NZXNzYWdlT3B0aW9ucxosCg5FeHRlbnNpb25SYW5nZRINCgVzdGFydBgB", 

+            "IAEoBRILCgNlbmQYAiABKAUilAUKFEZpZWxkRGVzY3JpcHRvclByb3RvEgwK", 

+            "BG5hbWUYASABKAkSDgoGbnVtYmVyGAMgASgFEjoKBWxhYmVsGAQgASgOMisu", 

+            "Z29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLkxhYmVsEjgK", 

+            "BHR5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9y", 

+            "UHJvdG8uVHlwZRIRCgl0eXBlX25hbWUYBiABKAkSEAoIZXh0ZW5kZWUYAiAB", 

+            "KAkSFQoNZGVmYXVsdF92YWx1ZRgHIAEoCRIuCgdvcHRpb25zGAggASgLMh0u", 

+            "Z29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucyK2AgoEVHlwZRIPCgtUWVBF", 

+            "X0RPVUJMRRABEg4KClRZUEVfRkxPQVQQAhIOCgpUWVBFX0lOVDY0EAMSDwoL", 

+            "VFlQRV9VSU5UNjQQBBIOCgpUWVBFX0lOVDMyEAUSEAoMVFlQRV9GSVhFRDY0", 

+            "EAYSEAoMVFlQRV9GSVhFRDMyEAcSDQoJVFlQRV9CT09MEAgSDwoLVFlQRV9T", 

+            "VFJJTkcQCRIOCgpUWVBFX0dST1VQEAoSEAoMVFlQRV9NRVNTQUdFEAsSDgoK", 

+            "VFlQRV9CWVRFUxAMEg8KC1RZUEVfVUlOVDMyEA0SDQoJVFlQRV9FTlVNEA4S", 

+            "EQoNVFlQRV9TRklYRUQzMhAPEhEKDVRZUEVfU0ZJWEVENjQQEBIPCgtUWVBF", 

+            "X1NJTlQzMhAREg8KC1RZUEVfU0lOVDY0EBIiQwoFTGFiZWwSEgoOTEFCRUxf", 

+            "T1BUSU9OQUwQARISCg5MQUJFTF9SRVFVSVJFRBACEhIKDkxBQkVMX1JFUEVB", 

+            "VEVEEAMijAEKE0VudW1EZXNjcmlwdG9yUHJvdG8SDAoEbmFtZRgBIAEoCRI4", 

+            "CgV2YWx1ZRgCIAMoCzIpLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVEZXNj", 

+            "cmlwdG9yUHJvdG8SLQoHb3B0aW9ucxgDIAEoCzIcLmdvb2dsZS5wcm90b2J1", 

+            "Zi5FbnVtT3B0aW9ucyJsChhFbnVtVmFsdWVEZXNjcmlwdG9yUHJvdG8SDAoE", 

+            "bmFtZRgBIAEoCRIOCgZudW1iZXIYAiABKAUSMgoHb3B0aW9ucxgDIAEoCzIh", 

+            "Lmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zIpABChZTZXJ2aWNl", 

+            "RGVzY3JpcHRvclByb3RvEgwKBG5hbWUYASABKAkSNgoGbWV0aG9kGAIgAygL", 

+            "MiYuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90bxIwCgdv", 

+            "cHRpb25zGAMgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25z", 

+            "In8KFU1ldGhvZERlc2NyaXB0b3JQcm90bxIMCgRuYW1lGAEgASgJEhIKCmlu", 

+            "cHV0X3R5cGUYAiABKAkSEwoLb3V0cHV0X3R5cGUYAyABKAkSLwoHb3B0aW9u", 

+            "cxgEIAEoCzIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zItUDCgtG", 

+            "aWxlT3B0aW9ucxIUCgxqYXZhX3BhY2thZ2UYASABKAkSHAoUamF2YV9vdXRl", 

+            "cl9jbGFzc25hbWUYCCABKAkSIgoTamF2YV9tdWx0aXBsZV9maWxlcxgKIAEo", 

+            "CDoFZmFsc2USLAodamF2YV9nZW5lcmF0ZV9lcXVhbHNfYW5kX2hhc2gYFCAB", 

+            "KAg6BWZhbHNlEkYKDG9wdGltaXplX2ZvchgJIAEoDjIpLmdvb2dsZS5wcm90", 

+            "b2J1Zi5GaWxlT3B0aW9ucy5PcHRpbWl6ZU1vZGU6BVNQRUVEEiIKE2NjX2dl", 

+            "bmVyaWNfc2VydmljZXMYECABKAg6BWZhbHNlEiQKFWphdmFfZ2VuZXJpY19z", 

+            "ZXJ2aWNlcxgRIAEoCDoFZmFsc2USIgoTcHlfZ2VuZXJpY19zZXJ2aWNlcxgS", 

+            "IAEoCDoFZmFsc2USQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQu", 

+            "Z29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24iOgoMT3B0aW1p", 

+            "emVNb2RlEgkKBVNQRUVEEAESDQoJQ09ERV9TSVpFEAISEAoMTElURV9SVU5U", 

+            "SU1FEAMqCQjoBxCAgICAAiK4AQoOTWVzc2FnZU9wdGlvbnMSJgoXbWVzc2Fn", 

+            "ZV9zZXRfd2lyZV9mb3JtYXQYASABKAg6BWZhbHNlEi4KH25vX3N0YW5kYXJk", 

+            "X2Rlc2NyaXB0b3JfYWNjZXNzb3IYAiABKAg6BWZhbHNlEkMKFHVuaW50ZXJw", 

+            "cmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVy", 

+            "cHJldGVkT3B0aW9uKgkI6AcQgICAgAIilAIKDEZpZWxkT3B0aW9ucxI6CgVj", 

+            "dHlwZRgBIAEoDjIjLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMuQ1R5", 

+            "cGU6BlNUUklORxIOCgZwYWNrZWQYAiABKAgSGQoKZGVwcmVjYXRlZBgDIAEo", 

+            "CDoFZmFsc2USHAoUZXhwZXJpbWVudGFsX21hcF9rZXkYCSABKAkSQwoUdW5p", 

+            "bnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVu", 

+            "aW50ZXJwcmV0ZWRPcHRpb24iLwoFQ1R5cGUSCgoGU1RSSU5HEAASCAoEQ09S", 

+            "RBABEhAKDFNUUklOR19QSUVDRRACKgkI6AcQgICAgAIiXQoLRW51bU9wdGlv", 

+            "bnMSQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnBy", 

+            "b3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiJiChBFbnVt", 

+            "VmFsdWVPcHRpb25zEkMKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIk", 

+            "Lmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uKgkI6AcQgICA", 

+            "gAIiYAoOU2VydmljZU9wdGlvbnMSQwoUdW5pbnRlcnByZXRlZF9vcHRpb24Y", 

+            "5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb24q", 

+            "CQjoBxCAgICAAiJfCg1NZXRob2RPcHRpb25zEkMKFHVuaW50ZXJwcmV0ZWRf", 

+            "b3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVk", 

+            "T3B0aW9uKgkI6AcQgICAgAIingIKE1VuaW50ZXJwcmV0ZWRPcHRpb24SOwoE", 

+            "bmFtZRgCIAMoCzItLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0", 

+            "aW9uLk5hbWVQYXJ0EhgKEGlkZW50aWZpZXJfdmFsdWUYAyABKAkSGgoScG9z", 

+            "aXRpdmVfaW50X3ZhbHVlGAQgASgEEhoKEm5lZ2F0aXZlX2ludF92YWx1ZRgF", 

+            "IAEoAxIUCgxkb3VibGVfdmFsdWUYBiABKAESFAoMc3RyaW5nX3ZhbHVlGAcg", 

+            "ASgMEhcKD2FnZ3JlZ2F0ZV92YWx1ZRgIIAEoCRozCghOYW1lUGFydBIRCglu", 

+            "YW1lX3BhcnQYASACKAkSFAoMaXNfZXh0ZW5zaW9uGAIgAigIInwKDlNvdXJj", 

+            "ZUNvZGVJbmZvEjoKCGxvY2F0aW9uGAEgAygLMiguZ29vZ2xlLnByb3RvYnVm", 

+            "LlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uGi4KCExvY2F0aW9uEhAKBHBhdGgY", 

+            "ASADKAVCAhABEhAKBHNwYW4YAiADKAVCAhABQikKE2NvbS5nb29nbGUucHJv", 

+          "dG9idWZCEERlc2NyaXB0b3JQcm90b3NIAQ=="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_google_protobuf_FileDescriptorSet__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_google_protobuf_FileDescriptorSet__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.Builder>(internal__static_google_protobuf_FileDescriptorSet__Descriptor,

+                new string[] { "File", });

+        internal__static_google_protobuf_FileDescriptorProto__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_google_protobuf_FileDescriptorProto__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder>(internal__static_google_protobuf_FileDescriptorProto__Descriptor,

+                new string[] { "Name", "Package", "Dependency", "MessageType", "EnumType", "Service", "Extension", "Options", "SourceCodeInfo", });

+        internal__static_google_protobuf_DescriptorProto__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_google_protobuf_DescriptorProto__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder>(internal__static_google_protobuf_DescriptorProto__Descriptor,

+                new string[] { "Name", "Field", "Extension", "NestedType", "EnumType", "ExtensionRange", "Options", });

+        internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor = internal__static_google_protobuf_DescriptorProto__Descriptor.NestedTypes[0];

+        internal__static_google_protobuf_DescriptorProto_ExtensionRange__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder>(internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor,

+                new string[] { "Start", "End", });

+        internal__static_google_protobuf_FieldDescriptorProto__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_google_protobuf_FieldDescriptorProto__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder>(internal__static_google_protobuf_FieldDescriptorProto__Descriptor,

+                new string[] { "Name", "Number", "Label", "Type", "TypeName", "Extendee", "DefaultValue", "Options", });

+        internal__static_google_protobuf_EnumDescriptorProto__Descriptor = Descriptor.MessageTypes[4];

+        internal__static_google_protobuf_EnumDescriptorProto__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder>(internal__static_google_protobuf_EnumDescriptorProto__Descriptor,

+                new string[] { "Name", "Value", "Options", });

+        internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor = Descriptor.MessageTypes[5];

+        internal__static_google_protobuf_EnumValueDescriptorProto__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder>(internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor,

+                new string[] { "Name", "Number", "Options", });

+        internal__static_google_protobuf_ServiceDescriptorProto__Descriptor = Descriptor.MessageTypes[6];

+        internal__static_google_protobuf_ServiceDescriptorProto__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder>(internal__static_google_protobuf_ServiceDescriptorProto__Descriptor,

+                new string[] { "Name", "Method", "Options", });

+        internal__static_google_protobuf_MethodDescriptorProto__Descriptor = Descriptor.MessageTypes[7];

+        internal__static_google_protobuf_MethodDescriptorProto__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder>(internal__static_google_protobuf_MethodDescriptorProto__Descriptor,

+                new string[] { "Name", "InputType", "OutputType", "Options", });

+        internal__static_google_protobuf_FileOptions__Descriptor = Descriptor.MessageTypes[8];

+        internal__static_google_protobuf_FileOptions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FileOptions, global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder>(internal__static_google_protobuf_FileOptions__Descriptor,

+                new string[] { "JavaPackage", "JavaOuterClassname", "JavaMultipleFiles", "JavaGenerateEqualsAndHash", "OptimizeFor", "CcGenericServices", "JavaGenericServices", "PyGenericServices", "UninterpretedOption", });

+        internal__static_google_protobuf_MessageOptions__Descriptor = Descriptor.MessageTypes[9];

+        internal__static_google_protobuf_MessageOptions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions, global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder>(internal__static_google_protobuf_MessageOptions__Descriptor,

+                new string[] { "MessageSetWireFormat", "NoStandardDescriptorAccessor", "UninterpretedOption", });

+        internal__static_google_protobuf_FieldOptions__Descriptor = Descriptor.MessageTypes[10];

+        internal__static_google_protobuf_FieldOptions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions, global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder>(internal__static_google_protobuf_FieldOptions__Descriptor,

+                new string[] { "Ctype", "Packed", "Deprecated", "ExperimentalMapKey", "UninterpretedOption", });

+        internal__static_google_protobuf_EnumOptions__Descriptor = Descriptor.MessageTypes[11];

+        internal__static_google_protobuf_EnumOptions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions, global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder>(internal__static_google_protobuf_EnumOptions__Descriptor,

+                new string[] { "UninterpretedOption", });

+        internal__static_google_protobuf_EnumValueOptions__Descriptor = Descriptor.MessageTypes[12];

+        internal__static_google_protobuf_EnumValueOptions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder>(internal__static_google_protobuf_EnumValueOptions__Descriptor,

+                new string[] { "UninterpretedOption", });

+        internal__static_google_protobuf_ServiceOptions__Descriptor = Descriptor.MessageTypes[13];

+        internal__static_google_protobuf_ServiceOptions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions, global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder>(internal__static_google_protobuf_ServiceOptions__Descriptor,

+                new string[] { "UninterpretedOption", });

+        internal__static_google_protobuf_MethodOptions__Descriptor = Descriptor.MessageTypes[14];

+        internal__static_google_protobuf_MethodOptions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions, global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder>(internal__static_google_protobuf_MethodOptions__Descriptor,

+                new string[] { "UninterpretedOption", });

+        internal__static_google_protobuf_UninterpretedOption__Descriptor = Descriptor.MessageTypes[15];

+        internal__static_google_protobuf_UninterpretedOption__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder>(internal__static_google_protobuf_UninterpretedOption__Descriptor,

+                new string[] { "Name", "IdentifierValue", "PositiveIntValue", "NegativeIntValue", "DoubleValue", "StringValue", "AggregateValue", });

+        internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor = internal__static_google_protobuf_UninterpretedOption__Descriptor.NestedTypes[0];

+        internal__static_google_protobuf_UninterpretedOption_NamePart__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder>(internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor,

+                new string[] { "NamePart_", "IsExtension", });

+        internal__static_google_protobuf_SourceCodeInfo__Descriptor = Descriptor.MessageTypes[16];

+        internal__static_google_protobuf_SourceCodeInfo__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder>(internal__static_google_protobuf_SourceCodeInfo__Descriptor,

+                new string[] { "Location", });

+        internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor = internal__static_google_protobuf_SourceCodeInfo__Descriptor.NestedTypes[0];

+        internal__static_google_protobuf_SourceCodeInfo_Location__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder>(internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor,

+                new string[] { "Path", "Span", });

+        return null;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class FileDescriptorSet : pb::GeneratedMessage<FileDescriptorSet, FileDescriptorSet.Builder> {

+    private FileDescriptorSet() { }

+    private static readonly FileDescriptorSet defaultInstance = new FileDescriptorSet().MakeReadOnly();

+    private static readonly string[] _fileDescriptorSetFieldNames = new string[] { "file" };

+    private static readonly uint[] _fileDescriptorSetFieldTags = new uint[] { 10 };

+    public static FileDescriptorSet DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override FileDescriptorSet DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override FileDescriptorSet ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorSet__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<FileDescriptorSet, FileDescriptorSet.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorSet__FieldAccessorTable; }

+    }

+    

+    public const int FileFieldNumber = 1;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> file_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> FileList {

+      get { return file_; }

+    }

+    public int FileCount {

+      get { return file_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto GetFile(int index) {

+      return file_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto element in FileList) {

+          if (!element.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _fileDescriptorSetFieldNames;

+      if (file_.Count > 0) {

+        output.WriteMessageArray(1, field_names[0], file_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto element in FileList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, element);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static FileDescriptorSet ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FileDescriptorSet ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FileDescriptorSet ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FileDescriptorSet ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FileDescriptorSet ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FileDescriptorSet ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static FileDescriptorSet ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static FileDescriptorSet ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static FileDescriptorSet ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FileDescriptorSet ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private FileDescriptorSet MakeReadOnly() {

+      file_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(FileDescriptorSet prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<FileDescriptorSet, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(FileDescriptorSet cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private FileDescriptorSet result;

+      

+      private FileDescriptorSet PrepareBuilder() {

+        if (resultIsReadOnly) {

+          FileDescriptorSet original = result;

+          result = new FileDescriptorSet();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override FileDescriptorSet MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.Descriptor; }

+      }

+      

+      public override FileDescriptorSet DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.DefaultInstance; }

+      }

+      

+      public override FileDescriptorSet BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is FileDescriptorSet) {

+          return MergeFrom((FileDescriptorSet) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(FileDescriptorSet other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorSet.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.file_.Count != 0) {

+          result.file_.Add(other.file_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_fileDescriptorSetFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _fileDescriptorSetFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              input.ReadMessageArray(tag, field_name, result.file_, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> FileList {

+        get { return PrepareBuilder().file_; }

+      }

+      public int FileCount {

+        get { return result.FileCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto GetFile(int index) {

+        return result.GetFile(index);

+      }

+      public Builder SetFile(int index, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.file_[index] = value;

+        return this;

+      }

+      public Builder SetFile(int index, global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.file_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddFile(global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.file_.Add(value);

+        return this;

+      }

+      public Builder AddFile(global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.file_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeFile(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto> values) {

+        PrepareBuilder();

+        result.file_.Add(values);

+        return this;

+      }

+      public Builder ClearFile() {

+        PrepareBuilder();

+        result.file_.Clear();

+        return this;

+      }

+    }

+    static FileDescriptorSet() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class FileDescriptorProto : pb::GeneratedMessage<FileDescriptorProto, FileDescriptorProto.Builder> {

+    private FileDescriptorProto() { }

+    private static readonly FileDescriptorProto defaultInstance = new FileDescriptorProto().MakeReadOnly();

+    private static readonly string[] _fileDescriptorProtoFieldNames = new string[] { "dependency", "enum_type", "extension", "message_type", "name", "options", "package", "service", "source_code_info" };

+    private static readonly uint[] _fileDescriptorProtoFieldTags = new uint[] { 26, 42, 58, 34, 10, 66, 18, 50, 74 };

+    public static FileDescriptorProto DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override FileDescriptorProto DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override FileDescriptorProto ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorProto__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<FileDescriptorProto, FileDescriptorProto.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileDescriptorProto__FieldAccessorTable; }

+    }

+    

+    public const int NameFieldNumber = 1;

+    private bool hasName;

+    private string name_ = "";

+    public bool HasName {

+      get { return hasName; }

+    }

+    public string Name {

+      get { return name_; }

+    }

+    

+    public const int PackageFieldNumber = 2;

+    private bool hasPackage;

+    private string package_ = "";

+    public bool HasPackage {

+      get { return hasPackage; }

+    }

+    public string Package {

+      get { return package_; }

+    }

+    

+    public const int DependencyFieldNumber = 3;

+    private pbc::PopsicleList<string> dependency_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> DependencyList {

+      get { return pbc::Lists.AsReadOnly(dependency_); }

+    }

+    public int DependencyCount {

+      get { return dependency_.Count; }

+    }

+    public string GetDependency(int index) {

+      return dependency_[index];

+    }

+    

+    public const int MessageTypeFieldNumber = 4;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> messageType_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> MessageTypeList {

+      get { return messageType_; }

+    }

+    public int MessageTypeCount {

+      get { return messageType_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetMessageType(int index) {

+      return messageType_[index];

+    }

+    

+    public const int EnumTypeFieldNumber = 5;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> enumType_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> EnumTypeList {

+      get { return enumType_; }

+    }

+    public int EnumTypeCount {

+      get { return enumType_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) {

+      return enumType_[index];

+    }

+    

+    public const int ServiceFieldNumber = 6;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto> service_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto> ServiceList {

+      get { return service_; }

+    }

+    public int ServiceCount {

+      get { return service_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto GetService(int index) {

+      return service_[index];

+    }

+    

+    public const int ExtensionFieldNumber = 7;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> extension_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> ExtensionList {

+      get { return extension_; }

+    }

+    public int ExtensionCount {

+      get { return extension_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) {

+      return extension_[index];

+    }

+    

+    public const int OptionsFieldNumber = 8;

+    private bool hasOptions;

+    private global::Google.ProtocolBuffers.DescriptorProtos.FileOptions options_;

+    public bool HasOptions {

+      get { return hasOptions; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions Options {

+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance; }

+    }

+    

+    public const int SourceCodeInfoFieldNumber = 9;

+    private bool hasSourceCodeInfo;

+    private global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo sourceCodeInfo_;

+    public bool HasSourceCodeInfo {

+      get { return hasSourceCodeInfo; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo SourceCodeInfo {

+      get { return sourceCodeInfo_ ?? global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in MessageTypeList) {

+          if (!element.IsInitialized) return false;

+        }

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) {

+          if (!element.IsInitialized) return false;

+        }

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto element in ServiceList) {

+          if (!element.IsInitialized) return false;

+        }

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) {

+          if (!element.IsInitialized) return false;

+        }

+        if (HasOptions) {

+          if (!Options.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _fileDescriptorProtoFieldNames;

+      if (hasName) {

+        output.WriteString(1, field_names[4], Name);

+      }

+      if (hasPackage) {

+        output.WriteString(2, field_names[6], Package);

+      }

+      if (dependency_.Count > 0) {

+        output.WriteStringArray(3, field_names[0], dependency_);

+      }

+      if (messageType_.Count > 0) {

+        output.WriteMessageArray(4, field_names[3], messageType_);

+      }

+      if (enumType_.Count > 0) {

+        output.WriteMessageArray(5, field_names[1], enumType_);

+      }

+      if (service_.Count > 0) {

+        output.WriteMessageArray(6, field_names[7], service_);

+      }

+      if (extension_.Count > 0) {

+        output.WriteMessageArray(7, field_names[2], extension_);

+      }

+      if (hasOptions) {

+        output.WriteMessage(8, field_names[5], Options);

+      }

+      if (hasSourceCodeInfo) {

+        output.WriteMessage(9, field_names[8], SourceCodeInfo);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasName) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Name);

+      }

+      if (hasPackage) {

+        size += pb::CodedOutputStream.ComputeStringSize(2, Package);

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in DependencyList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * dependency_.Count;

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in MessageTypeList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(4, element);

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(5, element);

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto element in ServiceList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(6, element);

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(7, element);

+      }

+      if (hasOptions) {

+        size += pb::CodedOutputStream.ComputeMessageSize(8, Options);

+      }

+      if (hasSourceCodeInfo) {

+        size += pb::CodedOutputStream.ComputeMessageSize(9, SourceCodeInfo);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static FileDescriptorProto ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FileDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FileDescriptorProto ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FileDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FileDescriptorProto ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FileDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static FileDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static FileDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static FileDescriptorProto ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FileDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private FileDescriptorProto MakeReadOnly() {

+      dependency_.MakeReadOnly();

+      messageType_.MakeReadOnly();

+      enumType_.MakeReadOnly();

+      service_.MakeReadOnly();

+      extension_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(FileDescriptorProto prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<FileDescriptorProto, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(FileDescriptorProto cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private FileDescriptorProto result;

+      

+      private FileDescriptorProto PrepareBuilder() {

+        if (resultIsReadOnly) {

+          FileDescriptorProto original = result;

+          result = new FileDescriptorProto();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override FileDescriptorProto MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.Descriptor; }

+      }

+      

+      public override FileDescriptorProto DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.DefaultInstance; }

+      }

+      

+      public override FileDescriptorProto BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is FileDescriptorProto) {

+          return MergeFrom((FileDescriptorProto) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(FileDescriptorProto other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FileDescriptorProto.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasName) {

+          Name = other.Name;

+        }

+        if (other.HasPackage) {

+          Package = other.Package;

+        }

+        if (other.dependency_.Count != 0) {

+          result.dependency_.Add(other.dependency_);

+        }

+        if (other.messageType_.Count != 0) {

+          result.messageType_.Add(other.messageType_);

+        }

+        if (other.enumType_.Count != 0) {

+          result.enumType_.Add(other.enumType_);

+        }

+        if (other.service_.Count != 0) {

+          result.service_.Add(other.service_);

+        }

+        if (other.extension_.Count != 0) {

+          result.extension_.Add(other.extension_);

+        }

+        if (other.HasOptions) {

+          MergeOptions(other.Options);

+        }

+        if (other.HasSourceCodeInfo) {

+          MergeSourceCodeInfo(other.SourceCodeInfo);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_fileDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _fileDescriptorProtoFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasName = input.ReadString(ref result.name_);

+              break;

+            }

+            case 18: {

+              result.hasPackage = input.ReadString(ref result.package_);

+              break;

+            }

+            case 26: {

+              input.ReadStringArray(tag, field_name, result.dependency_);

+              break;

+            }

+            case 34: {

+              input.ReadMessageArray(tag, field_name, result.messageType_, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 42: {

+              input.ReadMessageArray(tag, field_name, result.enumType_, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 50: {

+              input.ReadMessageArray(tag, field_name, result.service_, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 58: {

+              input.ReadMessageArray(tag, field_name, result.extension_, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 66: {

+              global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder();

+              if (result.hasOptions) {

+                subBuilder.MergeFrom(Options);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Options = subBuilder.BuildPartial();

+              break;

+            }

+            case 74: {

+              global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.CreateBuilder();

+              if (result.hasSourceCodeInfo) {

+                subBuilder.MergeFrom(SourceCodeInfo);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              SourceCodeInfo = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasName {

+        get { return result.hasName; }

+      }

+      public string Name {

+        get { return result.Name; }

+        set { SetName(value); }

+      }

+      public Builder SetName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasName = true;

+        result.name_ = value;

+        return this;

+      }

+      public Builder ClearName() {

+        PrepareBuilder();

+        result.hasName = false;

+        result.name_ = "";

+        return this;

+      }

+      

+      public bool HasPackage {

+        get { return result.hasPackage; }

+      }

+      public string Package {

+        get { return result.Package; }

+        set { SetPackage(value); }

+      }

+      public Builder SetPackage(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasPackage = true;

+        result.package_ = value;

+        return this;

+      }

+      public Builder ClearPackage() {

+        PrepareBuilder();

+        result.hasPackage = false;

+        result.package_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> DependencyList {

+        get { return PrepareBuilder().dependency_; }

+      }

+      public int DependencyCount {

+        get { return result.DependencyCount; }

+      }

+      public string GetDependency(int index) {

+        return result.GetDependency(index);

+      }

+      public Builder SetDependency(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.dependency_[index] = value;

+        return this;

+      }

+      public Builder AddDependency(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.dependency_.Add(value);

+        return this;

+      }

+      public Builder AddRangeDependency(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.dependency_.Add(values);

+        return this;

+      }

+      public Builder ClearDependency() {

+        PrepareBuilder();

+        result.dependency_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> MessageTypeList {

+        get { return PrepareBuilder().messageType_; }

+      }

+      public int MessageTypeCount {

+        get { return result.MessageTypeCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetMessageType(int index) {

+        return result.GetMessageType(index);

+      }

+      public Builder SetMessageType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.messageType_[index] = value;

+        return this;

+      }

+      public Builder SetMessageType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.messageType_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddMessageType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.messageType_.Add(value);

+        return this;

+      }

+      public Builder AddMessageType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.messageType_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeMessageType(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> values) {

+        PrepareBuilder();

+        result.messageType_.Add(values);

+        return this;

+      }

+      public Builder ClearMessageType() {

+        PrepareBuilder();

+        result.messageType_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> EnumTypeList {

+        get { return PrepareBuilder().enumType_; }

+      }

+      public int EnumTypeCount {

+        get { return result.EnumTypeCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) {

+        return result.GetEnumType(index);

+      }

+      public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.enumType_[index] = value;

+        return this;

+      }

+      public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.enumType_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.enumType_.Add(value);

+        return this;

+      }

+      public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.enumType_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeEnumType(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> values) {

+        PrepareBuilder();

+        result.enumType_.Add(values);

+        return this;

+      }

+      public Builder ClearEnumType() {

+        PrepareBuilder();

+        result.enumType_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto> ServiceList {

+        get { return PrepareBuilder().service_; }

+      }

+      public int ServiceCount {

+        get { return result.ServiceCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto GetService(int index) {

+        return result.GetService(index);

+      }

+      public Builder SetService(int index, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.service_[index] = value;

+        return this;

+      }

+      public Builder SetService(int index, global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.service_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddService(global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.service_.Add(value);

+        return this;

+      }

+      public Builder AddService(global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.service_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeService(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto> values) {

+        PrepareBuilder();

+        result.service_.Add(values);

+        return this;

+      }

+      public Builder ClearService() {

+        PrepareBuilder();

+        result.service_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> ExtensionList {

+        get { return PrepareBuilder().extension_; }

+      }

+      public int ExtensionCount {

+        get { return result.ExtensionCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) {

+        return result.GetExtension(index);

+      }

+      public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.extension_[index] = value;

+        return this;

+      }

+      public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.extension_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.extension_.Add(value);

+        return this;

+      }

+      public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.extension_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeExtension(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> values) {

+        PrepareBuilder();

+        result.extension_.Add(values);

+        return this;

+      }

+      public Builder ClearExtension() {

+        PrepareBuilder();

+        result.extension_.Clear();

+        return this;

+      }

+      

+      public bool HasOptions {

+       get { return result.hasOptions; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions Options {

+        get { return result.Options; }

+        set { SetOptions(value); }

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = value;

+        return this;

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptions &&

+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance) {

+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();

+        } else {

+          result.options_ = value;

+        }

+        result.hasOptions = true;

+        return this;

+      }

+      public Builder ClearOptions() {

+        PrepareBuilder();

+        result.hasOptions = false;

+        result.options_ = null;

+        return this;

+      }

+      

+      public bool HasSourceCodeInfo {

+       get { return result.hasSourceCodeInfo; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo SourceCodeInfo {

+        get { return result.SourceCodeInfo; }

+        set { SetSourceCodeInfo(value); }

+      }

+      public Builder SetSourceCodeInfo(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasSourceCodeInfo = true;

+        result.sourceCodeInfo_ = value;

+        return this;

+      }

+      public Builder SetSourceCodeInfo(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasSourceCodeInfo = true;

+        result.sourceCodeInfo_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeSourceCodeInfo(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasSourceCodeInfo &&

+            result.sourceCodeInfo_ != global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance) {

+            result.sourceCodeInfo_ = global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.CreateBuilder(result.sourceCodeInfo_).MergeFrom(value).BuildPartial();

+        } else {

+          result.sourceCodeInfo_ = value;

+        }

+        result.hasSourceCodeInfo = true;

+        return this;

+      }

+      public Builder ClearSourceCodeInfo() {

+        PrepareBuilder();

+        result.hasSourceCodeInfo = false;

+        result.sourceCodeInfo_ = null;

+        return this;

+      }

+    }

+    static FileDescriptorProto() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class DescriptorProto : pb::GeneratedMessage<DescriptorProto, DescriptorProto.Builder> {

+    private DescriptorProto() { }

+    private static readonly DescriptorProto defaultInstance = new DescriptorProto().MakeReadOnly();

+    private static readonly string[] _descriptorProtoFieldNames = new string[] { "enum_type", "extension", "extension_range", "field", "name", "nested_type", "options" };

+    private static readonly uint[] _descriptorProtoFieldTags = new uint[] { 34, 50, 42, 18, 10, 26, 58 };

+    public static DescriptorProto DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override DescriptorProto DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override DescriptorProto ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<DescriptorProto, DescriptorProto.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class ExtensionRange : pb::GeneratedMessage<ExtensionRange, ExtensionRange.Builder> {

+        private ExtensionRange() { }

+        private static readonly ExtensionRange defaultInstance = new ExtensionRange().MakeReadOnly();

+        private static readonly string[] _extensionRangeFieldNames = new string[] { "end", "start" };

+        private static readonly uint[] _extensionRangeFieldTags = new uint[] { 16, 8 };

+        public static ExtensionRange DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override ExtensionRange DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override ExtensionRange ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto_ExtensionRange__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<ExtensionRange, ExtensionRange.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_DescriptorProto_ExtensionRange__FieldAccessorTable; }

+        }

+        

+        public const int StartFieldNumber = 1;

+        private bool hasStart;

+        private int start_;

+        public bool HasStart {

+          get { return hasStart; }

+        }

+        public int Start {

+          get { return start_; }

+        }

+        

+        public const int EndFieldNumber = 2;

+        private bool hasEnd;

+        private int end_;

+        public bool HasEnd {

+          get { return hasEnd; }

+        }

+        public int End {

+          get { return end_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _extensionRangeFieldNames;

+          if (hasStart) {

+            output.WriteInt32(1, field_names[1], Start);

+          }

+          if (hasEnd) {

+            output.WriteInt32(2, field_names[0], End);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasStart) {

+            size += pb::CodedOutputStream.ComputeInt32Size(1, Start);

+          }

+          if (hasEnd) {

+            size += pb::CodedOutputStream.ComputeInt32Size(2, End);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static ExtensionRange ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static ExtensionRange ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static ExtensionRange ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static ExtensionRange ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static ExtensionRange ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static ExtensionRange ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static ExtensionRange ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static ExtensionRange ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static ExtensionRange ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static ExtensionRange ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private ExtensionRange MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(ExtensionRange prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<ExtensionRange, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(ExtensionRange cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private ExtensionRange result;

+          

+          private ExtensionRange PrepareBuilder() {

+            if (resultIsReadOnly) {

+              ExtensionRange original = result;

+              result = new ExtensionRange();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override ExtensionRange MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Descriptor; }

+          }

+          

+          public override ExtensionRange DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.DefaultInstance; }

+          }

+          

+          public override ExtensionRange BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is ExtensionRange) {

+              return MergeFrom((ExtensionRange) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(ExtensionRange other) {

+            if (other == global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasStart) {

+              Start = other.Start;

+            }

+            if (other.HasEnd) {

+              End = other.End;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_extensionRangeFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _extensionRangeFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 8: {

+                  result.hasStart = input.ReadInt32(ref result.start_);

+                  break;

+                }

+                case 16: {

+                  result.hasEnd = input.ReadInt32(ref result.end_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasStart {

+            get { return result.hasStart; }

+          }

+          public int Start {

+            get { return result.Start; }

+            set { SetStart(value); }

+          }

+          public Builder SetStart(int value) {

+            PrepareBuilder();

+            result.hasStart = true;

+            result.start_ = value;

+            return this;

+          }

+          public Builder ClearStart() {

+            PrepareBuilder();

+            result.hasStart = false;

+            result.start_ = 0;

+            return this;

+          }

+          

+          public bool HasEnd {

+            get { return result.hasEnd; }

+          }

+          public int End {

+            get { return result.End; }

+            set { SetEnd(value); }

+          }

+          public Builder SetEnd(int value) {

+            PrepareBuilder();

+            result.hasEnd = true;

+            result.end_ = value;

+            return this;

+          }

+          public Builder ClearEnd() {

+            PrepareBuilder();

+            result.hasEnd = false;

+            result.end_ = 0;

+            return this;

+          }

+        }

+        static ExtensionRange() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int NameFieldNumber = 1;

+    private bool hasName;

+    private string name_ = "";

+    public bool HasName {

+      get { return hasName; }

+    }

+    public string Name {

+      get { return name_; }

+    }

+    

+    public const int FieldFieldNumber = 2;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> field_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> FieldList {

+      get { return field_; }

+    }

+    public int FieldCount {

+      get { return field_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetField(int index) {

+      return field_[index];

+    }

+    

+    public const int ExtensionFieldNumber = 6;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> extension_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> ExtensionList {

+      get { return extension_; }

+    }

+    public int ExtensionCount {

+      get { return extension_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) {

+      return extension_[index];

+    }

+    

+    public const int NestedTypeFieldNumber = 3;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> nestedType_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> NestedTypeList {

+      get { return nestedType_; }

+    }

+    public int NestedTypeCount {

+      get { return nestedType_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetNestedType(int index) {

+      return nestedType_[index];

+    }

+    

+    public const int EnumTypeFieldNumber = 4;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> enumType_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> EnumTypeList {

+      get { return enumType_; }

+    }

+    public int EnumTypeCount {

+      get { return enumType_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) {

+      return enumType_[index];

+    }

+    

+    public const int ExtensionRangeFieldNumber = 5;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange> extensionRange_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange> ExtensionRangeList {

+      get { return extensionRange_; }

+    }

+    public int ExtensionRangeCount {

+      get { return extensionRange_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange GetExtensionRange(int index) {

+      return extensionRange_[index];

+    }

+    

+    public const int OptionsFieldNumber = 7;

+    private bool hasOptions;

+    private global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions options_;

+    public bool HasOptions {

+      get { return hasOptions; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions Options {

+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in FieldList) {

+          if (!element.IsInitialized) return false;

+        }

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) {

+          if (!element.IsInitialized) return false;

+        }

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in NestedTypeList) {

+          if (!element.IsInitialized) return false;

+        }

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) {

+          if (!element.IsInitialized) return false;

+        }

+        if (HasOptions) {

+          if (!Options.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _descriptorProtoFieldNames;

+      if (hasName) {

+        output.WriteString(1, field_names[4], Name);

+      }

+      if (field_.Count > 0) {

+        output.WriteMessageArray(2, field_names[3], field_);

+      }

+      if (nestedType_.Count > 0) {

+        output.WriteMessageArray(3, field_names[5], nestedType_);

+      }

+      if (enumType_.Count > 0) {

+        output.WriteMessageArray(4, field_names[0], enumType_);

+      }

+      if (extensionRange_.Count > 0) {

+        output.WriteMessageArray(5, field_names[2], extensionRange_);

+      }

+      if (extension_.Count > 0) {

+        output.WriteMessageArray(6, field_names[1], extension_);

+      }

+      if (hasOptions) {

+        output.WriteMessage(7, field_names[6], Options);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasName) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Name);

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in FieldList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2, element);

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto element in ExtensionList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(6, element);

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto element in NestedTypeList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(3, element);

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto element in EnumTypeList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(4, element);

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange element in ExtensionRangeList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(5, element);

+      }

+      if (hasOptions) {

+        size += pb::CodedOutputStream.ComputeMessageSize(7, Options);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static DescriptorProto ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static DescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static DescriptorProto ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static DescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static DescriptorProto ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static DescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static DescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static DescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static DescriptorProto ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static DescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private DescriptorProto MakeReadOnly() {

+      field_.MakeReadOnly();

+      extension_.MakeReadOnly();

+      nestedType_.MakeReadOnly();

+      enumType_.MakeReadOnly();

+      extensionRange_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(DescriptorProto prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<DescriptorProto, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(DescriptorProto cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private DescriptorProto result;

+      

+      private DescriptorProto PrepareBuilder() {

+        if (resultIsReadOnly) {

+          DescriptorProto original = result;

+          result = new DescriptorProto();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override DescriptorProto MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Descriptor; }

+      }

+      

+      public override DescriptorProto DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance; }

+      }

+      

+      public override DescriptorProto BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is DescriptorProto) {

+          return MergeFrom((DescriptorProto) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(DescriptorProto other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasName) {

+          Name = other.Name;

+        }

+        if (other.field_.Count != 0) {

+          result.field_.Add(other.field_);

+        }

+        if (other.extension_.Count != 0) {

+          result.extension_.Add(other.extension_);

+        }

+        if (other.nestedType_.Count != 0) {

+          result.nestedType_.Add(other.nestedType_);

+        }

+        if (other.enumType_.Count != 0) {

+          result.enumType_.Add(other.enumType_);

+        }

+        if (other.extensionRange_.Count != 0) {

+          result.extensionRange_.Add(other.extensionRange_);

+        }

+        if (other.HasOptions) {

+          MergeOptions(other.Options);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_descriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _descriptorProtoFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasName = input.ReadString(ref result.name_);

+              break;

+            }

+            case 18: {

+              input.ReadMessageArray(tag, field_name, result.field_, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 26: {

+              input.ReadMessageArray(tag, field_name, result.nestedType_, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 34: {

+              input.ReadMessageArray(tag, field_name, result.enumType_, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 42: {

+              input.ReadMessageArray(tag, field_name, result.extensionRange_, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 50: {

+              input.ReadMessageArray(tag, field_name, result.extension_, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 58: {

+              global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.CreateBuilder();

+              if (result.hasOptions) {

+                subBuilder.MergeFrom(Options);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Options = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasName {

+        get { return result.hasName; }

+      }

+      public string Name {

+        get { return result.Name; }

+        set { SetName(value); }

+      }

+      public Builder SetName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasName = true;

+        result.name_ = value;

+        return this;

+      }

+      public Builder ClearName() {

+        PrepareBuilder();

+        result.hasName = false;

+        result.name_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> FieldList {

+        get { return PrepareBuilder().field_; }

+      }

+      public int FieldCount {

+        get { return result.FieldCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetField(int index) {

+        return result.GetField(index);

+      }

+      public Builder SetField(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field_[index] = value;

+        return this;

+      }

+      public Builder SetField(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.field_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddField(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.field_.Add(value);

+        return this;

+      }

+      public Builder AddField(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.field_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeField(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> values) {

+        PrepareBuilder();

+        result.field_.Add(values);

+        return this;

+      }

+      public Builder ClearField() {

+        PrepareBuilder();

+        result.field_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> ExtensionList {

+        get { return PrepareBuilder().extension_; }

+      }

+      public int ExtensionCount {

+        get { return result.ExtensionCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto GetExtension(int index) {

+        return result.GetExtension(index);

+      }

+      public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.extension_[index] = value;

+        return this;

+      }

+      public Builder SetExtension(int index, global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.extension_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.extension_.Add(value);

+        return this;

+      }

+      public Builder AddExtension(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.extension_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeExtension(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto> values) {

+        PrepareBuilder();

+        result.extension_.Add(values);

+        return this;

+      }

+      public Builder ClearExtension() {

+        PrepareBuilder();

+        result.extension_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> NestedTypeList {

+        get { return PrepareBuilder().nestedType_; }

+      }

+      public int NestedTypeCount {

+        get { return result.NestedTypeCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto GetNestedType(int index) {

+        return result.GetNestedType(index);

+      }

+      public Builder SetNestedType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.nestedType_[index] = value;

+        return this;

+      }

+      public Builder SetNestedType(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.nestedType_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddNestedType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.nestedType_.Add(value);

+        return this;

+      }

+      public Builder AddNestedType(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.nestedType_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeNestedType(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto> values) {

+        PrepareBuilder();

+        result.nestedType_.Add(values);

+        return this;

+      }

+      public Builder ClearNestedType() {

+        PrepareBuilder();

+        result.nestedType_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> EnumTypeList {

+        get { return PrepareBuilder().enumType_; }

+      }

+      public int EnumTypeCount {

+        get { return result.EnumTypeCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto GetEnumType(int index) {

+        return result.GetEnumType(index);

+      }

+      public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.enumType_[index] = value;

+        return this;

+      }

+      public Builder SetEnumType(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.enumType_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.enumType_.Add(value);

+        return this;

+      }

+      public Builder AddEnumType(global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.enumType_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeEnumType(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto> values) {

+        PrepareBuilder();

+        result.enumType_.Add(values);

+        return this;

+      }

+      public Builder ClearEnumType() {

+        PrepareBuilder();

+        result.enumType_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange> ExtensionRangeList {

+        get { return PrepareBuilder().extensionRange_; }

+      }

+      public int ExtensionRangeCount {

+        get { return result.ExtensionRangeCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange GetExtensionRange(int index) {

+        return result.GetExtensionRange(index);

+      }

+      public Builder SetExtensionRange(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.extensionRange_[index] = value;

+        return this;

+      }

+      public Builder SetExtensionRange(int index, global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.extensionRange_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddExtensionRange(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.extensionRange_.Add(value);

+        return this;

+      }

+      public Builder AddExtensionRange(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.extensionRange_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeExtensionRange(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProto.Types.ExtensionRange> values) {

+        PrepareBuilder();

+        result.extensionRange_.Add(values);

+        return this;

+      }

+      public Builder ClearExtensionRange() {

+        PrepareBuilder();

+        result.extensionRange_.Clear();

+        return this;

+      }

+      

+      public bool HasOptions {

+       get { return result.hasOptions; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions Options {

+        get { return result.Options; }

+        set { SetOptions(value); }

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = value;

+        return this;

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptions &&

+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance) {

+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();

+        } else {

+          result.options_ = value;

+        }

+        result.hasOptions = true;

+        return this;

+      }

+      public Builder ClearOptions() {

+        PrepareBuilder();

+        result.hasOptions = false;

+        result.options_ = null;

+        return this;

+      }

+    }

+    static DescriptorProto() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class FieldDescriptorProto : pb::GeneratedMessage<FieldDescriptorProto, FieldDescriptorProto.Builder> {

+    private FieldDescriptorProto() { }

+    private static readonly FieldDescriptorProto defaultInstance = new FieldDescriptorProto().MakeReadOnly();

+    private static readonly string[] _fieldDescriptorProtoFieldNames = new string[] { "default_value", "extendee", "label", "name", "number", "options", "type", "type_name" };

+    private static readonly uint[] _fieldDescriptorProtoFieldTags = new uint[] { 58, 18, 32, 10, 24, 66, 40, 50 };

+    public static FieldDescriptorProto DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override FieldDescriptorProto DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override FieldDescriptorProto ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldDescriptorProto__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<FieldDescriptorProto, FieldDescriptorProto.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldDescriptorProto__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum Type {

+        TYPE_DOUBLE = 1,

+        TYPE_FLOAT = 2,

+        TYPE_INT64 = 3,

+        TYPE_UINT64 = 4,

+        TYPE_INT32 = 5,

+        TYPE_FIXED64 = 6,

+        TYPE_FIXED32 = 7,

+        TYPE_BOOL = 8,

+        TYPE_STRING = 9,

+        TYPE_GROUP = 10,

+        TYPE_MESSAGE = 11,

+        TYPE_BYTES = 12,

+        TYPE_UINT32 = 13,

+        TYPE_ENUM = 14,

+        TYPE_SFIXED32 = 15,

+        TYPE_SFIXED64 = 16,

+        TYPE_SINT32 = 17,

+        TYPE_SINT64 = 18,

+      }

+      

+      public enum Label {

+        LABEL_OPTIONAL = 1,

+        LABEL_REQUIRED = 2,

+        LABEL_REPEATED = 3,

+      }

+      

+    }

+    #endregion

+    

+    public const int NameFieldNumber = 1;

+    private bool hasName;

+    private string name_ = "";

+    public bool HasName {

+      get { return hasName; }

+    }

+    public string Name {

+      get { return name_; }

+    }

+    

+    public const int NumberFieldNumber = 3;

+    private bool hasNumber;

+    private int number_;

+    public bool HasNumber {

+      get { return hasNumber; }

+    }

+    public int Number {

+      get { return number_; }

+    }

+    

+    public const int LabelFieldNumber = 4;

+    private bool hasLabel;

+    private global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label label_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label.LABEL_OPTIONAL;

+    public bool HasLabel {

+      get { return hasLabel; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label Label {

+      get { return label_; }

+    }

+    

+    public const int TypeFieldNumber = 5;

+    private bool hasType;

+    private global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type type_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type.TYPE_DOUBLE;

+    public bool HasType {

+      get { return hasType; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type Type {

+      get { return type_; }

+    }

+    

+    public const int TypeNameFieldNumber = 6;

+    private bool hasTypeName;

+    private string typeName_ = "";

+    public bool HasTypeName {

+      get { return hasTypeName; }

+    }

+    public string TypeName {

+      get { return typeName_; }

+    }

+    

+    public const int ExtendeeFieldNumber = 2;

+    private bool hasExtendee;

+    private string extendee_ = "";

+    public bool HasExtendee {

+      get { return hasExtendee; }

+    }

+    public string Extendee {

+      get { return extendee_; }

+    }

+    

+    public const int DefaultValueFieldNumber = 7;

+    private bool hasDefaultValue;

+    private string defaultValue_ = "";

+    public bool HasDefaultValue {

+      get { return hasDefaultValue; }

+    }

+    public string DefaultValue {

+      get { return defaultValue_; }

+    }

+    

+    public const int OptionsFieldNumber = 8;

+    private bool hasOptions;

+    private global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions options_;

+    public bool HasOptions {

+      get { return hasOptions; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions Options {

+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (HasOptions) {

+          if (!Options.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _fieldDescriptorProtoFieldNames;

+      if (hasName) {

+        output.WriteString(1, field_names[3], Name);

+      }

+      if (hasExtendee) {

+        output.WriteString(2, field_names[1], Extendee);

+      }

+      if (hasNumber) {

+        output.WriteInt32(3, field_names[4], Number);

+      }

+      if (hasLabel) {

+        output.WriteEnum(4, field_names[2], (int) Label, Label);

+      }

+      if (hasType) {

+        output.WriteEnum(5, field_names[6], (int) Type, Type);

+      }

+      if (hasTypeName) {

+        output.WriteString(6, field_names[7], TypeName);

+      }

+      if (hasDefaultValue) {

+        output.WriteString(7, field_names[0], DefaultValue);

+      }

+      if (hasOptions) {

+        output.WriteMessage(8, field_names[5], Options);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasName) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Name);

+      }

+      if (hasNumber) {

+        size += pb::CodedOutputStream.ComputeInt32Size(3, Number);

+      }

+      if (hasLabel) {

+        size += pb::CodedOutputStream.ComputeEnumSize(4, (int) Label);

+      }

+      if (hasType) {

+        size += pb::CodedOutputStream.ComputeEnumSize(5, (int) Type);

+      }

+      if (hasTypeName) {

+        size += pb::CodedOutputStream.ComputeStringSize(6, TypeName);

+      }

+      if (hasExtendee) {

+        size += pb::CodedOutputStream.ComputeStringSize(2, Extendee);

+      }

+      if (hasDefaultValue) {

+        size += pb::CodedOutputStream.ComputeStringSize(7, DefaultValue);

+      }

+      if (hasOptions) {

+        size += pb::CodedOutputStream.ComputeMessageSize(8, Options);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static FieldDescriptorProto ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FieldDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FieldDescriptorProto ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FieldDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FieldDescriptorProto ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FieldDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static FieldDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static FieldDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static FieldDescriptorProto ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FieldDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private FieldDescriptorProto MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(FieldDescriptorProto prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<FieldDescriptorProto, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(FieldDescriptorProto cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private FieldDescriptorProto result;

+      

+      private FieldDescriptorProto PrepareBuilder() {

+        if (resultIsReadOnly) {

+          FieldDescriptorProto original = result;

+          result = new FieldDescriptorProto();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override FieldDescriptorProto MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Descriptor; }

+      }

+      

+      public override FieldDescriptorProto DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance; }

+      }

+      

+      public override FieldDescriptorProto BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is FieldDescriptorProto) {

+          return MergeFrom((FieldDescriptorProto) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(FieldDescriptorProto other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasName) {

+          Name = other.Name;

+        }

+        if (other.HasNumber) {

+          Number = other.Number;

+        }

+        if (other.HasLabel) {

+          Label = other.Label;

+        }

+        if (other.HasType) {

+          Type = other.Type;

+        }

+        if (other.HasTypeName) {

+          TypeName = other.TypeName;

+        }

+        if (other.HasExtendee) {

+          Extendee = other.Extendee;

+        }

+        if (other.HasDefaultValue) {

+          DefaultValue = other.DefaultValue;

+        }

+        if (other.HasOptions) {

+          MergeOptions(other.Options);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_fieldDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _fieldDescriptorProtoFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasName = input.ReadString(ref result.name_);

+              break;

+            }

+            case 18: {

+              result.hasExtendee = input.ReadString(ref result.extendee_);

+              break;

+            }

+            case 24: {

+              result.hasNumber = input.ReadInt32(ref result.number_);

+              break;

+            }

+            case 32: {

+              object unknown;

+              if(input.ReadEnum(ref result.label_, out unknown)) {

+                result.hasLabel = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(4, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 40: {

+              object unknown;

+              if(input.ReadEnum(ref result.type_, out unknown)) {

+                result.hasType = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(5, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 50: {

+              result.hasTypeName = input.ReadString(ref result.typeName_);

+              break;

+            }

+            case 58: {

+              result.hasDefaultValue = input.ReadString(ref result.defaultValue_);

+              break;

+            }

+            case 66: {

+              global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.CreateBuilder();

+              if (result.hasOptions) {

+                subBuilder.MergeFrom(Options);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Options = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasName {

+        get { return result.hasName; }

+      }

+      public string Name {

+        get { return result.Name; }

+        set { SetName(value); }

+      }

+      public Builder SetName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasName = true;

+        result.name_ = value;

+        return this;

+      }

+      public Builder ClearName() {

+        PrepareBuilder();

+        result.hasName = false;

+        result.name_ = "";

+        return this;

+      }

+      

+      public bool HasNumber {

+        get { return result.hasNumber; }

+      }

+      public int Number {

+        get { return result.Number; }

+        set { SetNumber(value); }

+      }

+      public Builder SetNumber(int value) {

+        PrepareBuilder();

+        result.hasNumber = true;

+        result.number_ = value;

+        return this;

+      }

+      public Builder ClearNumber() {

+        PrepareBuilder();

+        result.hasNumber = false;

+        result.number_ = 0;

+        return this;

+      }

+      

+      public bool HasLabel {

+       get { return result.hasLabel; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label Label {

+        get { return result.Label; }

+        set { SetLabel(value); }

+      }

+      public Builder SetLabel(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label value) {

+        PrepareBuilder();

+        result.hasLabel = true;

+        result.label_ = value;

+        return this;

+      }

+      public Builder ClearLabel() {

+        PrepareBuilder();

+        result.hasLabel = false;

+        result.label_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Label.LABEL_OPTIONAL;

+        return this;

+      }

+      

+      public bool HasType {

+       get { return result.hasType; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type Type {

+        get { return result.Type; }

+        set { SetType(value); }

+      }

+      public Builder SetType(global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type value) {

+        PrepareBuilder();

+        result.hasType = true;

+        result.type_ = value;

+        return this;

+      }

+      public Builder ClearType() {

+        PrepareBuilder();

+        result.hasType = false;

+        result.type_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldDescriptorProto.Types.Type.TYPE_DOUBLE;

+        return this;

+      }

+      

+      public bool HasTypeName {

+        get { return result.hasTypeName; }

+      }

+      public string TypeName {

+        get { return result.TypeName; }

+        set { SetTypeName(value); }

+      }

+      public Builder SetTypeName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasTypeName = true;

+        result.typeName_ = value;

+        return this;

+      }

+      public Builder ClearTypeName() {

+        PrepareBuilder();

+        result.hasTypeName = false;

+        result.typeName_ = "";

+        return this;

+      }

+      

+      public bool HasExtendee {

+        get { return result.hasExtendee; }

+      }

+      public string Extendee {

+        get { return result.Extendee; }

+        set { SetExtendee(value); }

+      }

+      public Builder SetExtendee(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasExtendee = true;

+        result.extendee_ = value;

+        return this;

+      }

+      public Builder ClearExtendee() {

+        PrepareBuilder();

+        result.hasExtendee = false;

+        result.extendee_ = "";

+        return this;

+      }

+      

+      public bool HasDefaultValue {

+        get { return result.hasDefaultValue; }

+      }

+      public string DefaultValue {

+        get { return result.DefaultValue; }

+        set { SetDefaultValue(value); }

+      }

+      public Builder SetDefaultValue(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultValue = true;

+        result.defaultValue_ = value;

+        return this;

+      }

+      public Builder ClearDefaultValue() {

+        PrepareBuilder();

+        result.hasDefaultValue = false;

+        result.defaultValue_ = "";

+        return this;

+      }

+      

+      public bool HasOptions {

+       get { return result.hasOptions; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions Options {

+        get { return result.Options; }

+        set { SetOptions(value); }

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = value;

+        return this;

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptions &&

+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance) {

+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();

+        } else {

+          result.options_ = value;

+        }

+        result.hasOptions = true;

+        return this;

+      }

+      public Builder ClearOptions() {

+        PrepareBuilder();

+        result.hasOptions = false;

+        result.options_ = null;

+        return this;

+      }

+    }

+    static FieldDescriptorProto() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class EnumDescriptorProto : pb::GeneratedMessage<EnumDescriptorProto, EnumDescriptorProto.Builder> {

+    private EnumDescriptorProto() { }

+    private static readonly EnumDescriptorProto defaultInstance = new EnumDescriptorProto().MakeReadOnly();

+    private static readonly string[] _enumDescriptorProtoFieldNames = new string[] { "name", "options", "value" };

+    private static readonly uint[] _enumDescriptorProtoFieldTags = new uint[] { 10, 26, 18 };

+    public static EnumDescriptorProto DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override EnumDescriptorProto DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override EnumDescriptorProto ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumDescriptorProto__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<EnumDescriptorProto, EnumDescriptorProto.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumDescriptorProto__FieldAccessorTable; }

+    }

+    

+    public const int NameFieldNumber = 1;

+    private bool hasName;

+    private string name_ = "";

+    public bool HasName {

+      get { return hasName; }

+    }

+    public string Name {

+      get { return name_; }

+    }

+    

+    public const int ValueFieldNumber = 2;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto> value_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto> ValueList {

+      get { return value_; }

+    }

+    public int ValueCount {

+      get { return value_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto GetValue(int index) {

+      return value_[index];

+    }

+    

+    public const int OptionsFieldNumber = 3;

+    private bool hasOptions;

+    private global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions options_;

+    public bool HasOptions {

+      get { return hasOptions; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions Options {

+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto element in ValueList) {

+          if (!element.IsInitialized) return false;

+        }

+        if (HasOptions) {

+          if (!Options.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _enumDescriptorProtoFieldNames;

+      if (hasName) {

+        output.WriteString(1, field_names[0], Name);

+      }

+      if (value_.Count > 0) {

+        output.WriteMessageArray(2, field_names[2], value_);

+      }

+      if (hasOptions) {

+        output.WriteMessage(3, field_names[1], Options);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasName) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Name);

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto element in ValueList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2, element);

+      }

+      if (hasOptions) {

+        size += pb::CodedOutputStream.ComputeMessageSize(3, Options);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static EnumDescriptorProto ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static EnumDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static EnumDescriptorProto ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static EnumDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static EnumDescriptorProto ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static EnumDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static EnumDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static EnumDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static EnumDescriptorProto ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static EnumDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private EnumDescriptorProto MakeReadOnly() {

+      value_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(EnumDescriptorProto prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<EnumDescriptorProto, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(EnumDescriptorProto cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private EnumDescriptorProto result;

+      

+      private EnumDescriptorProto PrepareBuilder() {

+        if (resultIsReadOnly) {

+          EnumDescriptorProto original = result;

+          result = new EnumDescriptorProto();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override EnumDescriptorProto MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.Descriptor; }

+      }

+      

+      public override EnumDescriptorProto DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance; }

+      }

+      

+      public override EnumDescriptorProto BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is EnumDescriptorProto) {

+          return MergeFrom((EnumDescriptorProto) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(EnumDescriptorProto other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumDescriptorProto.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasName) {

+          Name = other.Name;

+        }

+        if (other.value_.Count != 0) {

+          result.value_.Add(other.value_);

+        }

+        if (other.HasOptions) {

+          MergeOptions(other.Options);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_enumDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _enumDescriptorProtoFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasName = input.ReadString(ref result.name_);

+              break;

+            }

+            case 18: {

+              input.ReadMessageArray(tag, field_name, result.value_, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 26: {

+              global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.CreateBuilder();

+              if (result.hasOptions) {

+                subBuilder.MergeFrom(Options);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Options = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasName {

+        get { return result.hasName; }

+      }

+      public string Name {

+        get { return result.Name; }

+        set { SetName(value); }

+      }

+      public Builder SetName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasName = true;

+        result.name_ = value;

+        return this;

+      }

+      public Builder ClearName() {

+        PrepareBuilder();

+        result.hasName = false;

+        result.name_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto> ValueList {

+        get { return PrepareBuilder().value_; }

+      }

+      public int ValueCount {

+        get { return result.ValueCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto GetValue(int index) {

+        return result.GetValue(index);

+      }

+      public Builder SetValue(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.value_[index] = value;

+        return this;

+      }

+      public Builder SetValue(int index, global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.value_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddValue(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.value_.Add(value);

+        return this;

+      }

+      public Builder AddValue(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.value_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeValue(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto> values) {

+        PrepareBuilder();

+        result.value_.Add(values);

+        return this;

+      }

+      public Builder ClearValue() {

+        PrepareBuilder();

+        result.value_.Clear();

+        return this;

+      }

+      

+      public bool HasOptions {

+       get { return result.hasOptions; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions Options {

+        get { return result.Options; }

+        set { SetOptions(value); }

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = value;

+        return this;

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptions &&

+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance) {

+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();

+        } else {

+          result.options_ = value;

+        }

+        result.hasOptions = true;

+        return this;

+      }

+      public Builder ClearOptions() {

+        PrepareBuilder();

+        result.hasOptions = false;

+        result.options_ = null;

+        return this;

+      }

+    }

+    static EnumDescriptorProto() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class EnumValueDescriptorProto : pb::GeneratedMessage<EnumValueDescriptorProto, EnumValueDescriptorProto.Builder> {

+    private EnumValueDescriptorProto() { }

+    private static readonly EnumValueDescriptorProto defaultInstance = new EnumValueDescriptorProto().MakeReadOnly();

+    private static readonly string[] _enumValueDescriptorProtoFieldNames = new string[] { "name", "number", "options" };

+    private static readonly uint[] _enumValueDescriptorProtoFieldTags = new uint[] { 10, 16, 26 };

+    public static EnumValueDescriptorProto DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override EnumValueDescriptorProto DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override EnumValueDescriptorProto ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueDescriptorProto__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<EnumValueDescriptorProto, EnumValueDescriptorProto.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueDescriptorProto__FieldAccessorTable; }

+    }

+    

+    public const int NameFieldNumber = 1;

+    private bool hasName;

+    private string name_ = "";

+    public bool HasName {

+      get { return hasName; }

+    }

+    public string Name {

+      get { return name_; }

+    }

+    

+    public const int NumberFieldNumber = 2;

+    private bool hasNumber;

+    private int number_;

+    public bool HasNumber {

+      get { return hasNumber; }

+    }

+    public int Number {

+      get { return number_; }

+    }

+    

+    public const int OptionsFieldNumber = 3;

+    private bool hasOptions;

+    private global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions options_;

+    public bool HasOptions {

+      get { return hasOptions; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions Options {

+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (HasOptions) {

+          if (!Options.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _enumValueDescriptorProtoFieldNames;

+      if (hasName) {

+        output.WriteString(1, field_names[0], Name);

+      }

+      if (hasNumber) {

+        output.WriteInt32(2, field_names[1], Number);

+      }

+      if (hasOptions) {

+        output.WriteMessage(3, field_names[2], Options);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasName) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Name);

+      }

+      if (hasNumber) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, Number);

+      }

+      if (hasOptions) {

+        size += pb::CodedOutputStream.ComputeMessageSize(3, Options);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static EnumValueDescriptorProto ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static EnumValueDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static EnumValueDescriptorProto ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static EnumValueDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static EnumValueDescriptorProto ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static EnumValueDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static EnumValueDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static EnumValueDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static EnumValueDescriptorProto ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static EnumValueDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private EnumValueDescriptorProto MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(EnumValueDescriptorProto prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<EnumValueDescriptorProto, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(EnumValueDescriptorProto cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private EnumValueDescriptorProto result;

+      

+      private EnumValueDescriptorProto PrepareBuilder() {

+        if (resultIsReadOnly) {

+          EnumValueDescriptorProto original = result;

+          result = new EnumValueDescriptorProto();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override EnumValueDescriptorProto MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.Descriptor; }

+      }

+      

+      public override EnumValueDescriptorProto DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.DefaultInstance; }

+      }

+      

+      public override EnumValueDescriptorProto BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is EnumValueDescriptorProto) {

+          return MergeFrom((EnumValueDescriptorProto) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(EnumValueDescriptorProto other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumValueDescriptorProto.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasName) {

+          Name = other.Name;

+        }

+        if (other.HasNumber) {

+          Number = other.Number;

+        }

+        if (other.HasOptions) {

+          MergeOptions(other.Options);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_enumValueDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _enumValueDescriptorProtoFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasName = input.ReadString(ref result.name_);

+              break;

+            }

+            case 16: {

+              result.hasNumber = input.ReadInt32(ref result.number_);

+              break;

+            }

+            case 26: {

+              global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.CreateBuilder();

+              if (result.hasOptions) {

+                subBuilder.MergeFrom(Options);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Options = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasName {

+        get { return result.hasName; }

+      }

+      public string Name {

+        get { return result.Name; }

+        set { SetName(value); }

+      }

+      public Builder SetName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasName = true;

+        result.name_ = value;

+        return this;

+      }

+      public Builder ClearName() {

+        PrepareBuilder();

+        result.hasName = false;

+        result.name_ = "";

+        return this;

+      }

+      

+      public bool HasNumber {

+        get { return result.hasNumber; }

+      }

+      public int Number {

+        get { return result.Number; }

+        set { SetNumber(value); }

+      }

+      public Builder SetNumber(int value) {

+        PrepareBuilder();

+        result.hasNumber = true;

+        result.number_ = value;

+        return this;

+      }

+      public Builder ClearNumber() {

+        PrepareBuilder();

+        result.hasNumber = false;

+        result.number_ = 0;

+        return this;

+      }

+      

+      public bool HasOptions {

+       get { return result.hasOptions; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions Options {

+        get { return result.Options; }

+        set { SetOptions(value); }

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = value;

+        return this;

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptions &&

+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance) {

+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();

+        } else {

+          result.options_ = value;

+        }

+        result.hasOptions = true;

+        return this;

+      }

+      public Builder ClearOptions() {

+        PrepareBuilder();

+        result.hasOptions = false;

+        result.options_ = null;

+        return this;

+      }

+    }

+    static EnumValueDescriptorProto() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ServiceDescriptorProto : pb::GeneratedMessage<ServiceDescriptorProto, ServiceDescriptorProto.Builder> {

+    private ServiceDescriptorProto() { }

+    private static readonly ServiceDescriptorProto defaultInstance = new ServiceDescriptorProto().MakeReadOnly();

+    private static readonly string[] _serviceDescriptorProtoFieldNames = new string[] { "method", "name", "options" };

+    private static readonly uint[] _serviceDescriptorProtoFieldTags = new uint[] { 18, 10, 26 };

+    public static ServiceDescriptorProto DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ServiceDescriptorProto DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ServiceDescriptorProto ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceDescriptorProto__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<ServiceDescriptorProto, ServiceDescriptorProto.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceDescriptorProto__FieldAccessorTable; }

+    }

+    

+    public const int NameFieldNumber = 1;

+    private bool hasName;

+    private string name_ = "";

+    public bool HasName {

+      get { return hasName; }

+    }

+    public string Name {

+      get { return name_; }

+    }

+    

+    public const int MethodFieldNumber = 2;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto> method_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto> MethodList {

+      get { return method_; }

+    }

+    public int MethodCount {

+      get { return method_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto GetMethod(int index) {

+      return method_[index];

+    }

+    

+    public const int OptionsFieldNumber = 3;

+    private bool hasOptions;

+    private global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions options_;

+    public bool HasOptions {

+      get { return hasOptions; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions Options {

+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto element in MethodList) {

+          if (!element.IsInitialized) return false;

+        }

+        if (HasOptions) {

+          if (!Options.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _serviceDescriptorProtoFieldNames;

+      if (hasName) {

+        output.WriteString(1, field_names[1], Name);

+      }

+      if (method_.Count > 0) {

+        output.WriteMessageArray(2, field_names[0], method_);

+      }

+      if (hasOptions) {

+        output.WriteMessage(3, field_names[2], Options);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasName) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Name);

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto element in MethodList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2, element);

+      }

+      if (hasOptions) {

+        size += pb::CodedOutputStream.ComputeMessageSize(3, Options);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static ServiceDescriptorProto ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ServiceDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ServiceDescriptorProto ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ServiceDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ServiceDescriptorProto ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ServiceDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ServiceDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ServiceDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ServiceDescriptorProto ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ServiceDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ServiceDescriptorProto MakeReadOnly() {

+      method_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ServiceDescriptorProto prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<ServiceDescriptorProto, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ServiceDescriptorProto cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ServiceDescriptorProto result;

+      

+      private ServiceDescriptorProto PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ServiceDescriptorProto original = result;

+          result = new ServiceDescriptorProto();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ServiceDescriptorProto MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.Descriptor; }

+      }

+      

+      public override ServiceDescriptorProto DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.DefaultInstance; }

+      }

+      

+      public override ServiceDescriptorProto BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is ServiceDescriptorProto) {

+          return MergeFrom((ServiceDescriptorProto) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ServiceDescriptorProto other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.ServiceDescriptorProto.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasName) {

+          Name = other.Name;

+        }

+        if (other.method_.Count != 0) {

+          result.method_.Add(other.method_);

+        }

+        if (other.HasOptions) {

+          MergeOptions(other.Options);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_serviceDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _serviceDescriptorProtoFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasName = input.ReadString(ref result.name_);

+              break;

+            }

+            case 18: {

+              input.ReadMessageArray(tag, field_name, result.method_, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 26: {

+              global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.CreateBuilder();

+              if (result.hasOptions) {

+                subBuilder.MergeFrom(Options);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Options = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasName {

+        get { return result.hasName; }

+      }

+      public string Name {

+        get { return result.Name; }

+        set { SetName(value); }

+      }

+      public Builder SetName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasName = true;

+        result.name_ = value;

+        return this;

+      }

+      public Builder ClearName() {

+        PrepareBuilder();

+        result.hasName = false;

+        result.name_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto> MethodList {

+        get { return PrepareBuilder().method_; }

+      }

+      public int MethodCount {

+        get { return result.MethodCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto GetMethod(int index) {

+        return result.GetMethod(index);

+      }

+      public Builder SetMethod(int index, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.method_[index] = value;

+        return this;

+      }

+      public Builder SetMethod(int index, global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.method_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddMethod(global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.method_.Add(value);

+        return this;

+      }

+      public Builder AddMethod(global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.method_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeMethod(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto> values) {

+        PrepareBuilder();

+        result.method_.Add(values);

+        return this;

+      }

+      public Builder ClearMethod() {

+        PrepareBuilder();

+        result.method_.Clear();

+        return this;

+      }

+      

+      public bool HasOptions {

+       get { return result.hasOptions; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions Options {

+        get { return result.Options; }

+        set { SetOptions(value); }

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = value;

+        return this;

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptions &&

+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance) {

+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();

+        } else {

+          result.options_ = value;

+        }

+        result.hasOptions = true;

+        return this;

+      }

+      public Builder ClearOptions() {

+        PrepareBuilder();

+        result.hasOptions = false;

+        result.options_ = null;

+        return this;

+      }

+    }

+    static ServiceDescriptorProto() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class MethodDescriptorProto : pb::GeneratedMessage<MethodDescriptorProto, MethodDescriptorProto.Builder> {

+    private MethodDescriptorProto() { }

+    private static readonly MethodDescriptorProto defaultInstance = new MethodDescriptorProto().MakeReadOnly();

+    private static readonly string[] _methodDescriptorProtoFieldNames = new string[] { "input_type", "name", "options", "output_type" };

+    private static readonly uint[] _methodDescriptorProtoFieldTags = new uint[] { 18, 10, 34, 26 };

+    public static MethodDescriptorProto DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override MethodDescriptorProto DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override MethodDescriptorProto ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodDescriptorProto__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<MethodDescriptorProto, MethodDescriptorProto.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodDescriptorProto__FieldAccessorTable; }

+    }

+    

+    public const int NameFieldNumber = 1;

+    private bool hasName;

+    private string name_ = "";

+    public bool HasName {

+      get { return hasName; }

+    }

+    public string Name {

+      get { return name_; }

+    }

+    

+    public const int InputTypeFieldNumber = 2;

+    private bool hasInputType;

+    private string inputType_ = "";

+    public bool HasInputType {

+      get { return hasInputType; }

+    }

+    public string InputType {

+      get { return inputType_; }

+    }

+    

+    public const int OutputTypeFieldNumber = 3;

+    private bool hasOutputType;

+    private string outputType_ = "";

+    public bool HasOutputType {

+      get { return hasOutputType; }

+    }

+    public string OutputType {

+      get { return outputType_; }

+    }

+    

+    public const int OptionsFieldNumber = 4;

+    private bool hasOptions;

+    private global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions options_;

+    public bool HasOptions {

+      get { return hasOptions; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions Options {

+      get { return options_ ?? global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (HasOptions) {

+          if (!Options.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _methodDescriptorProtoFieldNames;

+      if (hasName) {

+        output.WriteString(1, field_names[1], Name);

+      }

+      if (hasInputType) {

+        output.WriteString(2, field_names[0], InputType);

+      }

+      if (hasOutputType) {

+        output.WriteString(3, field_names[3], OutputType);

+      }

+      if (hasOptions) {

+        output.WriteMessage(4, field_names[2], Options);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasName) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Name);

+      }

+      if (hasInputType) {

+        size += pb::CodedOutputStream.ComputeStringSize(2, InputType);

+      }

+      if (hasOutputType) {

+        size += pb::CodedOutputStream.ComputeStringSize(3, OutputType);

+      }

+      if (hasOptions) {

+        size += pb::CodedOutputStream.ComputeMessageSize(4, Options);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static MethodDescriptorProto ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static MethodDescriptorProto ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static MethodDescriptorProto ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static MethodDescriptorProto ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static MethodDescriptorProto ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static MethodDescriptorProto ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static MethodDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static MethodDescriptorProto ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static MethodDescriptorProto ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static MethodDescriptorProto ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private MethodDescriptorProto MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(MethodDescriptorProto prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<MethodDescriptorProto, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(MethodDescriptorProto cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private MethodDescriptorProto result;

+      

+      private MethodDescriptorProto PrepareBuilder() {

+        if (resultIsReadOnly) {

+          MethodDescriptorProto original = result;

+          result = new MethodDescriptorProto();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override MethodDescriptorProto MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.Descriptor; }

+      }

+      

+      public override MethodDescriptorProto DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.DefaultInstance; }

+      }

+      

+      public override MethodDescriptorProto BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is MethodDescriptorProto) {

+          return MergeFrom((MethodDescriptorProto) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(MethodDescriptorProto other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.MethodDescriptorProto.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasName) {

+          Name = other.Name;

+        }

+        if (other.HasInputType) {

+          InputType = other.InputType;

+        }

+        if (other.HasOutputType) {

+          OutputType = other.OutputType;

+        }

+        if (other.HasOptions) {

+          MergeOptions(other.Options);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_methodDescriptorProtoFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _methodDescriptorProtoFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasName = input.ReadString(ref result.name_);

+              break;

+            }

+            case 18: {

+              result.hasInputType = input.ReadString(ref result.inputType_);

+              break;

+            }

+            case 26: {

+              result.hasOutputType = input.ReadString(ref result.outputType_);

+              break;

+            }

+            case 34: {

+              global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder subBuilder = global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.CreateBuilder();

+              if (result.hasOptions) {

+                subBuilder.MergeFrom(Options);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Options = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasName {

+        get { return result.hasName; }

+      }

+      public string Name {

+        get { return result.Name; }

+        set { SetName(value); }

+      }

+      public Builder SetName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasName = true;

+        result.name_ = value;

+        return this;

+      }

+      public Builder ClearName() {

+        PrepareBuilder();

+        result.hasName = false;

+        result.name_ = "";

+        return this;

+      }

+      

+      public bool HasInputType {

+        get { return result.hasInputType; }

+      }

+      public string InputType {

+        get { return result.InputType; }

+        set { SetInputType(value); }

+      }

+      public Builder SetInputType(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasInputType = true;

+        result.inputType_ = value;

+        return this;

+      }

+      public Builder ClearInputType() {

+        PrepareBuilder();

+        result.hasInputType = false;

+        result.inputType_ = "";

+        return this;

+      }

+      

+      public bool HasOutputType {

+        get { return result.hasOutputType; }

+      }

+      public string OutputType {

+        get { return result.OutputType; }

+        set { SetOutputType(value); }

+      }

+      public Builder SetOutputType(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOutputType = true;

+        result.outputType_ = value;

+        return this;

+      }

+      public Builder ClearOutputType() {

+        PrepareBuilder();

+        result.hasOutputType = false;

+        result.outputType_ = "";

+        return this;

+      }

+      

+      public bool HasOptions {

+       get { return result.hasOptions; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions Options {

+        get { return result.Options; }

+        set { SetOptions(value); }

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = value;

+        return this;

+      }

+      public Builder SetOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptions = true;

+        result.options_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptions(global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptions &&

+            result.options_ != global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance) {

+            result.options_ = global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.CreateBuilder(result.options_).MergeFrom(value).BuildPartial();

+        } else {

+          result.options_ = value;

+        }

+        result.hasOptions = true;

+        return this;

+      }

+      public Builder ClearOptions() {

+        PrepareBuilder();

+        result.hasOptions = false;

+        result.options_ = null;

+        return this;

+      }

+    }

+    static MethodDescriptorProto() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class FileOptions : pb::ExtendableMessage<FileOptions, FileOptions.Builder> {

+    private FileOptions() { }

+    private static readonly FileOptions defaultInstance = new FileOptions().MakeReadOnly();

+    private static readonly string[] _fileOptionsFieldNames = new string[] { "cc_generic_services", "java_generate_equals_and_hash", "java_generic_services", "java_multiple_files", "java_outer_classname", "java_package", "optimize_for", "py_generic_services", "uninterpreted_option" };

+    private static readonly uint[] _fileOptionsFieldTags = new uint[] { 128, 160, 136, 80, 66, 10, 72, 144, 7994 };

+    public static FileOptions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override FileOptions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override FileOptions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileOptions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<FileOptions, FileOptions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FileOptions__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum OptimizeMode {

+        SPEED = 1,

+        CODE_SIZE = 2,

+        LITE_RUNTIME = 3,

+      }

+      

+    }

+    #endregion

+    

+    public const int JavaPackageFieldNumber = 1;

+    private bool hasJavaPackage;

+    private string javaPackage_ = "";

+    public bool HasJavaPackage {

+      get { return hasJavaPackage; }

+    }

+    public string JavaPackage {

+      get { return javaPackage_; }

+    }

+    

+    public const int JavaOuterClassnameFieldNumber = 8;

+    private bool hasJavaOuterClassname;

+    private string javaOuterClassname_ = "";

+    public bool HasJavaOuterClassname {

+      get { return hasJavaOuterClassname; }

+    }

+    public string JavaOuterClassname {

+      get { return javaOuterClassname_; }

+    }

+    

+    public const int JavaMultipleFilesFieldNumber = 10;

+    private bool hasJavaMultipleFiles;

+    private bool javaMultipleFiles_;

+    public bool HasJavaMultipleFiles {

+      get { return hasJavaMultipleFiles; }

+    }

+    public bool JavaMultipleFiles {

+      get { return javaMultipleFiles_; }

+    }

+    

+    public const int JavaGenerateEqualsAndHashFieldNumber = 20;

+    private bool hasJavaGenerateEqualsAndHash;

+    private bool javaGenerateEqualsAndHash_;

+    public bool HasJavaGenerateEqualsAndHash {

+      get { return hasJavaGenerateEqualsAndHash; }

+    }

+    public bool JavaGenerateEqualsAndHash {

+      get { return javaGenerateEqualsAndHash_; }

+    }

+    

+    public const int OptimizeForFieldNumber = 9;

+    private bool hasOptimizeFor;

+    private global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode optimizeFor_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode.SPEED;

+    public bool HasOptimizeFor {

+      get { return hasOptimizeFor; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode OptimizeFor {

+      get { return optimizeFor_; }

+    }

+    

+    public const int CcGenericServicesFieldNumber = 16;

+    private bool hasCcGenericServices;

+    private bool ccGenericServices_;

+    public bool HasCcGenericServices {

+      get { return hasCcGenericServices; }

+    }

+    public bool CcGenericServices {

+      get { return ccGenericServices_; }

+    }

+    

+    public const int JavaGenericServicesFieldNumber = 17;

+    private bool hasJavaGenericServices;

+    private bool javaGenericServices_;

+    public bool HasJavaGenericServices {

+      get { return hasJavaGenericServices; }

+    }

+    public bool JavaGenericServices {

+      get { return javaGenericServices_; }

+    }

+    

+    public const int PyGenericServicesFieldNumber = 18;

+    private bool hasPyGenericServices;

+    private bool pyGenericServices_;

+    public bool HasPyGenericServices {

+      get { return hasPyGenericServices; }

+    }

+    public bool PyGenericServices {

+      get { return pyGenericServices_; }

+    }

+    

+    public const int UninterpretedOptionFieldNumber = 999;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+      get { return uninterpretedOption_; }

+    }

+    public int UninterpretedOptionCount {

+      get { return uninterpretedOption_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+      return uninterpretedOption_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+          if (!element.IsInitialized) return false;

+        }

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _fileOptionsFieldNames;

+      pb::ExtendableMessage<FileOptions, FileOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (hasJavaPackage) {

+        output.WriteString(1, field_names[5], JavaPackage);

+      }

+      if (hasJavaOuterClassname) {

+        output.WriteString(8, field_names[4], JavaOuterClassname);

+      }

+      if (hasOptimizeFor) {

+        output.WriteEnum(9, field_names[6], (int) OptimizeFor, OptimizeFor);

+      }

+      if (hasJavaMultipleFiles) {

+        output.WriteBool(10, field_names[3], JavaMultipleFiles);

+      }

+      if (hasCcGenericServices) {

+        output.WriteBool(16, field_names[0], CcGenericServices);

+      }

+      if (hasJavaGenericServices) {

+        output.WriteBool(17, field_names[2], JavaGenericServices);

+      }

+      if (hasPyGenericServices) {

+        output.WriteBool(18, field_names[7], PyGenericServices);

+      }

+      if (hasJavaGenerateEqualsAndHash) {

+        output.WriteBool(20, field_names[1], JavaGenerateEqualsAndHash);

+      }

+      if (uninterpretedOption_.Count > 0) {

+        output.WriteMessageArray(999, field_names[8], uninterpretedOption_);

+      }

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasJavaPackage) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, JavaPackage);

+      }

+      if (hasJavaOuterClassname) {

+        size += pb::CodedOutputStream.ComputeStringSize(8, JavaOuterClassname);

+      }

+      if (hasJavaMultipleFiles) {

+        size += pb::CodedOutputStream.ComputeBoolSize(10, JavaMultipleFiles);

+      }

+      if (hasJavaGenerateEqualsAndHash) {

+        size += pb::CodedOutputStream.ComputeBoolSize(20, JavaGenerateEqualsAndHash);

+      }

+      if (hasOptimizeFor) {

+        size += pb::CodedOutputStream.ComputeEnumSize(9, (int) OptimizeFor);

+      }

+      if (hasCcGenericServices) {

+        size += pb::CodedOutputStream.ComputeBoolSize(16, CcGenericServices);

+      }

+      if (hasJavaGenericServices) {

+        size += pb::CodedOutputStream.ComputeBoolSize(17, JavaGenericServices);

+      }

+      if (hasPyGenericServices) {

+        size += pb::CodedOutputStream.ComputeBoolSize(18, PyGenericServices);

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(999, element);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static FileOptions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FileOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FileOptions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FileOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FileOptions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FileOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static FileOptions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static FileOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static FileOptions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FileOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private FileOptions MakeReadOnly() {

+      uninterpretedOption_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(FileOptions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<FileOptions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(FileOptions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private FileOptions result;

+      

+      private FileOptions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          FileOptions original = result;

+          result = new FileOptions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override FileOptions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Descriptor; }

+      }

+      

+      public override FileOptions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance; }

+      }

+      

+      public override FileOptions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is FileOptions) {

+          return MergeFrom((FileOptions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(FileOptions other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasJavaPackage) {

+          JavaPackage = other.JavaPackage;

+        }

+        if (other.HasJavaOuterClassname) {

+          JavaOuterClassname = other.JavaOuterClassname;

+        }

+        if (other.HasJavaMultipleFiles) {

+          JavaMultipleFiles = other.JavaMultipleFiles;

+        }

+        if (other.HasJavaGenerateEqualsAndHash) {

+          JavaGenerateEqualsAndHash = other.JavaGenerateEqualsAndHash;

+        }

+        if (other.HasOptimizeFor) {

+          OptimizeFor = other.OptimizeFor;

+        }

+        if (other.HasCcGenericServices) {

+          CcGenericServices = other.CcGenericServices;

+        }

+        if (other.HasJavaGenericServices) {

+          JavaGenericServices = other.JavaGenericServices;

+        }

+        if (other.HasPyGenericServices) {

+          PyGenericServices = other.PyGenericServices;

+        }

+        if (other.uninterpretedOption_.Count != 0) {

+          result.uninterpretedOption_.Add(other.uninterpretedOption_);

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_fileOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _fileOptionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasJavaPackage = input.ReadString(ref result.javaPackage_);

+              break;

+            }

+            case 66: {

+              result.hasJavaOuterClassname = input.ReadString(ref result.javaOuterClassname_);

+              break;

+            }

+            case 72: {

+              object unknown;

+              if(input.ReadEnum(ref result.optimizeFor_, out unknown)) {

+                result.hasOptimizeFor = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(9, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 80: {

+              result.hasJavaMultipleFiles = input.ReadBool(ref result.javaMultipleFiles_);

+              break;

+            }

+            case 128: {

+              result.hasCcGenericServices = input.ReadBool(ref result.ccGenericServices_);

+              break;

+            }

+            case 136: {

+              result.hasJavaGenericServices = input.ReadBool(ref result.javaGenericServices_);

+              break;

+            }

+            case 144: {

+              result.hasPyGenericServices = input.ReadBool(ref result.pyGenericServices_);

+              break;

+            }

+            case 160: {

+              result.hasJavaGenerateEqualsAndHash = input.ReadBool(ref result.javaGenerateEqualsAndHash_);

+              break;

+            }

+            case 7994: {

+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasJavaPackage {

+        get { return result.hasJavaPackage; }

+      }

+      public string JavaPackage {

+        get { return result.JavaPackage; }

+        set { SetJavaPackage(value); }

+      }

+      public Builder SetJavaPackage(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasJavaPackage = true;

+        result.javaPackage_ = value;

+        return this;

+      }

+      public Builder ClearJavaPackage() {

+        PrepareBuilder();

+        result.hasJavaPackage = false;

+        result.javaPackage_ = "";

+        return this;

+      }

+      

+      public bool HasJavaOuterClassname {

+        get { return result.hasJavaOuterClassname; }

+      }

+      public string JavaOuterClassname {

+        get { return result.JavaOuterClassname; }

+        set { SetJavaOuterClassname(value); }

+      }

+      public Builder SetJavaOuterClassname(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasJavaOuterClassname = true;

+        result.javaOuterClassname_ = value;

+        return this;

+      }

+      public Builder ClearJavaOuterClassname() {

+        PrepareBuilder();

+        result.hasJavaOuterClassname = false;

+        result.javaOuterClassname_ = "";

+        return this;

+      }

+      

+      public bool HasJavaMultipleFiles {

+        get { return result.hasJavaMultipleFiles; }

+      }

+      public bool JavaMultipleFiles {

+        get { return result.JavaMultipleFiles; }

+        set { SetJavaMultipleFiles(value); }

+      }

+      public Builder SetJavaMultipleFiles(bool value) {

+        PrepareBuilder();

+        result.hasJavaMultipleFiles = true;

+        result.javaMultipleFiles_ = value;

+        return this;

+      }

+      public Builder ClearJavaMultipleFiles() {

+        PrepareBuilder();

+        result.hasJavaMultipleFiles = false;

+        result.javaMultipleFiles_ = false;

+        return this;

+      }

+      

+      public bool HasJavaGenerateEqualsAndHash {

+        get { return result.hasJavaGenerateEqualsAndHash; }

+      }

+      public bool JavaGenerateEqualsAndHash {

+        get { return result.JavaGenerateEqualsAndHash; }

+        set { SetJavaGenerateEqualsAndHash(value); }

+      }

+      public Builder SetJavaGenerateEqualsAndHash(bool value) {

+        PrepareBuilder();

+        result.hasJavaGenerateEqualsAndHash = true;

+        result.javaGenerateEqualsAndHash_ = value;

+        return this;

+      }

+      public Builder ClearJavaGenerateEqualsAndHash() {

+        PrepareBuilder();

+        result.hasJavaGenerateEqualsAndHash = false;

+        result.javaGenerateEqualsAndHash_ = false;

+        return this;

+      }

+      

+      public bool HasOptimizeFor {

+       get { return result.hasOptimizeFor; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode OptimizeFor {

+        get { return result.OptimizeFor; }

+        set { SetOptimizeFor(value); }

+      }

+      public Builder SetOptimizeFor(global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode value) {

+        PrepareBuilder();

+        result.hasOptimizeFor = true;

+        result.optimizeFor_ = value;

+        return this;

+      }

+      public Builder ClearOptimizeFor() {

+        PrepareBuilder();

+        result.hasOptimizeFor = false;

+        result.optimizeFor_ = global::Google.ProtocolBuffers.DescriptorProtos.FileOptions.Types.OptimizeMode.SPEED;

+        return this;

+      }

+      

+      public bool HasCcGenericServices {

+        get { return result.hasCcGenericServices; }

+      }

+      public bool CcGenericServices {

+        get { return result.CcGenericServices; }

+        set { SetCcGenericServices(value); }

+      }

+      public Builder SetCcGenericServices(bool value) {

+        PrepareBuilder();

+        result.hasCcGenericServices = true;

+        result.ccGenericServices_ = value;

+        return this;

+      }

+      public Builder ClearCcGenericServices() {

+        PrepareBuilder();

+        result.hasCcGenericServices = false;

+        result.ccGenericServices_ = false;

+        return this;

+      }

+      

+      public bool HasJavaGenericServices {

+        get { return result.hasJavaGenericServices; }

+      }

+      public bool JavaGenericServices {

+        get { return result.JavaGenericServices; }

+        set { SetJavaGenericServices(value); }

+      }

+      public Builder SetJavaGenericServices(bool value) {

+        PrepareBuilder();

+        result.hasJavaGenericServices = true;

+        result.javaGenericServices_ = value;

+        return this;

+      }

+      public Builder ClearJavaGenericServices() {

+        PrepareBuilder();

+        result.hasJavaGenericServices = false;

+        result.javaGenericServices_ = false;

+        return this;

+      }

+      

+      public bool HasPyGenericServices {

+        get { return result.hasPyGenericServices; }

+      }

+      public bool PyGenericServices {

+        get { return result.PyGenericServices; }

+        set { SetPyGenericServices(value); }

+      }

+      public Builder SetPyGenericServices(bool value) {

+        PrepareBuilder();

+        result.hasPyGenericServices = true;

+        result.pyGenericServices_ = value;

+        return this;

+      }

+      public Builder ClearPyGenericServices() {

+        PrepareBuilder();

+        result.hasPyGenericServices = false;

+        result.pyGenericServices_ = false;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+        get { return PrepareBuilder().uninterpretedOption_; }

+      }

+      public int UninterpretedOptionCount {

+        get { return result.UninterpretedOptionCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+        return result.GetUninterpretedOption(index);

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = value;

+        return this;

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(value);

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(values);

+        return this;

+      }

+      public Builder ClearUninterpretedOption() {

+        PrepareBuilder();

+        result.uninterpretedOption_.Clear();

+        return this;

+      }

+    }

+    static FileOptions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class MessageOptions : pb::ExtendableMessage<MessageOptions, MessageOptions.Builder> {

+    private MessageOptions() { }

+    private static readonly MessageOptions defaultInstance = new MessageOptions().MakeReadOnly();

+    private static readonly string[] _messageOptionsFieldNames = new string[] { "message_set_wire_format", "no_standard_descriptor_accessor", "uninterpreted_option" };

+    private static readonly uint[] _messageOptionsFieldTags = new uint[] { 8, 16, 7994 };

+    public static MessageOptions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override MessageOptions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override MessageOptions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MessageOptions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<MessageOptions, MessageOptions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MessageOptions__FieldAccessorTable; }

+    }

+    

+    public const int MessageSetWireFormatFieldNumber = 1;

+    private bool hasMessageSetWireFormat;

+    private bool messageSetWireFormat_;

+    public bool HasMessageSetWireFormat {

+      get { return hasMessageSetWireFormat; }

+    }

+    public bool MessageSetWireFormat {

+      get { return messageSetWireFormat_; }

+    }

+    

+    public const int NoStandardDescriptorAccessorFieldNumber = 2;

+    private bool hasNoStandardDescriptorAccessor;

+    private bool noStandardDescriptorAccessor_;

+    public bool HasNoStandardDescriptorAccessor {

+      get { return hasNoStandardDescriptorAccessor; }

+    }

+    public bool NoStandardDescriptorAccessor {

+      get { return noStandardDescriptorAccessor_; }

+    }

+    

+    public const int UninterpretedOptionFieldNumber = 999;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+      get { return uninterpretedOption_; }

+    }

+    public int UninterpretedOptionCount {

+      get { return uninterpretedOption_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+      return uninterpretedOption_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+          if (!element.IsInitialized) return false;

+        }

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _messageOptionsFieldNames;

+      pb::ExtendableMessage<MessageOptions, MessageOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (hasMessageSetWireFormat) {

+        output.WriteBool(1, field_names[0], MessageSetWireFormat);

+      }

+      if (hasNoStandardDescriptorAccessor) {

+        output.WriteBool(2, field_names[1], NoStandardDescriptorAccessor);

+      }

+      if (uninterpretedOption_.Count > 0) {

+        output.WriteMessageArray(999, field_names[2], uninterpretedOption_);

+      }

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasMessageSetWireFormat) {

+        size += pb::CodedOutputStream.ComputeBoolSize(1, MessageSetWireFormat);

+      }

+      if (hasNoStandardDescriptorAccessor) {

+        size += pb::CodedOutputStream.ComputeBoolSize(2, NoStandardDescriptorAccessor);

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(999, element);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static MessageOptions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static MessageOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static MessageOptions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static MessageOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static MessageOptions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static MessageOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static MessageOptions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static MessageOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static MessageOptions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static MessageOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private MessageOptions MakeReadOnly() {

+      uninterpretedOption_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(MessageOptions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<MessageOptions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(MessageOptions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private MessageOptions result;

+      

+      private MessageOptions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          MessageOptions original = result;

+          result = new MessageOptions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override MessageOptions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.Descriptor; }

+      }

+      

+      public override MessageOptions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance; }

+      }

+      

+      public override MessageOptions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is MessageOptions) {

+          return MergeFrom((MessageOptions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(MessageOptions other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.MessageOptions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasMessageSetWireFormat) {

+          MessageSetWireFormat = other.MessageSetWireFormat;

+        }

+        if (other.HasNoStandardDescriptorAccessor) {

+          NoStandardDescriptorAccessor = other.NoStandardDescriptorAccessor;

+        }

+        if (other.uninterpretedOption_.Count != 0) {

+          result.uninterpretedOption_.Add(other.uninterpretedOption_);

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_messageOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _messageOptionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasMessageSetWireFormat = input.ReadBool(ref result.messageSetWireFormat_);

+              break;

+            }

+            case 16: {

+              result.hasNoStandardDescriptorAccessor = input.ReadBool(ref result.noStandardDescriptorAccessor_);

+              break;

+            }

+            case 7994: {

+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasMessageSetWireFormat {

+        get { return result.hasMessageSetWireFormat; }

+      }

+      public bool MessageSetWireFormat {

+        get { return result.MessageSetWireFormat; }

+        set { SetMessageSetWireFormat(value); }

+      }

+      public Builder SetMessageSetWireFormat(bool value) {

+        PrepareBuilder();

+        result.hasMessageSetWireFormat = true;

+        result.messageSetWireFormat_ = value;

+        return this;

+      }

+      public Builder ClearMessageSetWireFormat() {

+        PrepareBuilder();

+        result.hasMessageSetWireFormat = false;

+        result.messageSetWireFormat_ = false;

+        return this;

+      }

+      

+      public bool HasNoStandardDescriptorAccessor {

+        get { return result.hasNoStandardDescriptorAccessor; }

+      }

+      public bool NoStandardDescriptorAccessor {

+        get { return result.NoStandardDescriptorAccessor; }

+        set { SetNoStandardDescriptorAccessor(value); }

+      }

+      public Builder SetNoStandardDescriptorAccessor(bool value) {

+        PrepareBuilder();

+        result.hasNoStandardDescriptorAccessor = true;

+        result.noStandardDescriptorAccessor_ = value;

+        return this;

+      }

+      public Builder ClearNoStandardDescriptorAccessor() {

+        PrepareBuilder();

+        result.hasNoStandardDescriptorAccessor = false;

+        result.noStandardDescriptorAccessor_ = false;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+        get { return PrepareBuilder().uninterpretedOption_; }

+      }

+      public int UninterpretedOptionCount {

+        get { return result.UninterpretedOptionCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+        return result.GetUninterpretedOption(index);

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = value;

+        return this;

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(value);

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(values);

+        return this;

+      }

+      public Builder ClearUninterpretedOption() {

+        PrepareBuilder();

+        result.uninterpretedOption_.Clear();

+        return this;

+      }

+    }

+    static MessageOptions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class FieldOptions : pb::ExtendableMessage<FieldOptions, FieldOptions.Builder> {

+    private FieldOptions() { }

+    private static readonly FieldOptions defaultInstance = new FieldOptions().MakeReadOnly();

+    private static readonly string[] _fieldOptionsFieldNames = new string[] { "ctype", "deprecated", "experimental_map_key", "packed", "uninterpreted_option" };

+    private static readonly uint[] _fieldOptionsFieldTags = new uint[] { 8, 24, 74, 16, 7994 };

+    public static FieldOptions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override FieldOptions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override FieldOptions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldOptions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<FieldOptions, FieldOptions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_FieldOptions__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum CType {

+        STRING = 0,

+        CORD = 1,

+        STRING_PIECE = 2,

+      }

+      

+    }

+    #endregion

+    

+    public const int CtypeFieldNumber = 1;

+    private bool hasCtype;

+    private global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType ctype_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType.STRING;

+    public bool HasCtype {

+      get { return hasCtype; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType Ctype {

+      get { return ctype_; }

+    }

+    

+    public const int PackedFieldNumber = 2;

+    private bool hasPacked;

+    private bool packed_;

+    public bool HasPacked {

+      get { return hasPacked; }

+    }

+    public bool Packed {

+      get { return packed_; }

+    }

+    

+    public const int DeprecatedFieldNumber = 3;

+    private bool hasDeprecated;

+    private bool deprecated_;

+    public bool HasDeprecated {

+      get { return hasDeprecated; }

+    }

+    public bool Deprecated {

+      get { return deprecated_; }

+    }

+    

+    public const int ExperimentalMapKeyFieldNumber = 9;

+    private bool hasExperimentalMapKey;

+    private string experimentalMapKey_ = "";

+    public bool HasExperimentalMapKey {

+      get { return hasExperimentalMapKey; }

+    }

+    public string ExperimentalMapKey {

+      get { return experimentalMapKey_; }

+    }

+    

+    public const int UninterpretedOptionFieldNumber = 999;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+      get { return uninterpretedOption_; }

+    }

+    public int UninterpretedOptionCount {

+      get { return uninterpretedOption_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+      return uninterpretedOption_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+          if (!element.IsInitialized) return false;

+        }

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _fieldOptionsFieldNames;

+      pb::ExtendableMessage<FieldOptions, FieldOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (hasCtype) {

+        output.WriteEnum(1, field_names[0], (int) Ctype, Ctype);

+      }

+      if (hasPacked) {

+        output.WriteBool(2, field_names[3], Packed);

+      }

+      if (hasDeprecated) {

+        output.WriteBool(3, field_names[1], Deprecated);

+      }

+      if (hasExperimentalMapKey) {

+        output.WriteString(9, field_names[2], ExperimentalMapKey);

+      }

+      if (uninterpretedOption_.Count > 0) {

+        output.WriteMessageArray(999, field_names[4], uninterpretedOption_);

+      }

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasCtype) {

+        size += pb::CodedOutputStream.ComputeEnumSize(1, (int) Ctype);

+      }

+      if (hasPacked) {

+        size += pb::CodedOutputStream.ComputeBoolSize(2, Packed);

+      }

+      if (hasDeprecated) {

+        size += pb::CodedOutputStream.ComputeBoolSize(3, Deprecated);

+      }

+      if (hasExperimentalMapKey) {

+        size += pb::CodedOutputStream.ComputeStringSize(9, ExperimentalMapKey);

+      }

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(999, element);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static FieldOptions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FieldOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FieldOptions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FieldOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FieldOptions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FieldOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static FieldOptions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static FieldOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static FieldOptions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FieldOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private FieldOptions MakeReadOnly() {

+      uninterpretedOption_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(FieldOptions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<FieldOptions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(FieldOptions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private FieldOptions result;

+      

+      private FieldOptions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          FieldOptions original = result;

+          result = new FieldOptions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override FieldOptions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Descriptor; }

+      }

+      

+      public override FieldOptions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance; }

+      }

+      

+      public override FieldOptions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is FieldOptions) {

+          return MergeFrom((FieldOptions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(FieldOptions other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasCtype) {

+          Ctype = other.Ctype;

+        }

+        if (other.HasPacked) {

+          Packed = other.Packed;

+        }

+        if (other.HasDeprecated) {

+          Deprecated = other.Deprecated;

+        }

+        if (other.HasExperimentalMapKey) {

+          ExperimentalMapKey = other.ExperimentalMapKey;

+        }

+        if (other.uninterpretedOption_.Count != 0) {

+          result.uninterpretedOption_.Add(other.uninterpretedOption_);

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_fieldOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _fieldOptionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              object unknown;

+              if(input.ReadEnum(ref result.ctype_, out unknown)) {

+                result.hasCtype = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(1, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 16: {

+              result.hasPacked = input.ReadBool(ref result.packed_);

+              break;

+            }

+            case 24: {

+              result.hasDeprecated = input.ReadBool(ref result.deprecated_);

+              break;

+            }

+            case 74: {

+              result.hasExperimentalMapKey = input.ReadString(ref result.experimentalMapKey_);

+              break;

+            }

+            case 7994: {

+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasCtype {

+       get { return result.hasCtype; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType Ctype {

+        get { return result.Ctype; }

+        set { SetCtype(value); }

+      }

+      public Builder SetCtype(global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType value) {

+        PrepareBuilder();

+        result.hasCtype = true;

+        result.ctype_ = value;

+        return this;

+      }

+      public Builder ClearCtype() {

+        PrepareBuilder();

+        result.hasCtype = false;

+        result.ctype_ = global::Google.ProtocolBuffers.DescriptorProtos.FieldOptions.Types.CType.STRING;

+        return this;

+      }

+      

+      public bool HasPacked {

+        get { return result.hasPacked; }

+      }

+      public bool Packed {

+        get { return result.Packed; }

+        set { SetPacked(value); }

+      }

+      public Builder SetPacked(bool value) {

+        PrepareBuilder();

+        result.hasPacked = true;

+        result.packed_ = value;

+        return this;

+      }

+      public Builder ClearPacked() {

+        PrepareBuilder();

+        result.hasPacked = false;

+        result.packed_ = false;

+        return this;

+      }

+      

+      public bool HasDeprecated {

+        get { return result.hasDeprecated; }

+      }

+      public bool Deprecated {

+        get { return result.Deprecated; }

+        set { SetDeprecated(value); }

+      }

+      public Builder SetDeprecated(bool value) {

+        PrepareBuilder();

+        result.hasDeprecated = true;

+        result.deprecated_ = value;

+        return this;

+      }

+      public Builder ClearDeprecated() {

+        PrepareBuilder();

+        result.hasDeprecated = false;

+        result.deprecated_ = false;

+        return this;

+      }

+      

+      public bool HasExperimentalMapKey {

+        get { return result.hasExperimentalMapKey; }

+      }

+      public string ExperimentalMapKey {

+        get { return result.ExperimentalMapKey; }

+        set { SetExperimentalMapKey(value); }

+      }

+      public Builder SetExperimentalMapKey(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasExperimentalMapKey = true;

+        result.experimentalMapKey_ = value;

+        return this;

+      }

+      public Builder ClearExperimentalMapKey() {

+        PrepareBuilder();

+        result.hasExperimentalMapKey = false;

+        result.experimentalMapKey_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+        get { return PrepareBuilder().uninterpretedOption_; }

+      }

+      public int UninterpretedOptionCount {

+        get { return result.UninterpretedOptionCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+        return result.GetUninterpretedOption(index);

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = value;

+        return this;

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(value);

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(values);

+        return this;

+      }

+      public Builder ClearUninterpretedOption() {

+        PrepareBuilder();

+        result.uninterpretedOption_.Clear();

+        return this;

+      }

+    }

+    static FieldOptions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class EnumOptions : pb::ExtendableMessage<EnumOptions, EnumOptions.Builder> {

+    private EnumOptions() { }

+    private static readonly EnumOptions defaultInstance = new EnumOptions().MakeReadOnly();

+    private static readonly string[] _enumOptionsFieldNames = new string[] { "uninterpreted_option" };

+    private static readonly uint[] _enumOptionsFieldTags = new uint[] { 7994 };

+    public static EnumOptions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override EnumOptions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override EnumOptions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumOptions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<EnumOptions, EnumOptions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumOptions__FieldAccessorTable; }

+    }

+    

+    public const int UninterpretedOptionFieldNumber = 999;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+      get { return uninterpretedOption_; }

+    }

+    public int UninterpretedOptionCount {

+      get { return uninterpretedOption_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+      return uninterpretedOption_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+          if (!element.IsInitialized) return false;

+        }

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _enumOptionsFieldNames;

+      pb::ExtendableMessage<EnumOptions, EnumOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (uninterpretedOption_.Count > 0) {

+        output.WriteMessageArray(999, field_names[0], uninterpretedOption_);

+      }

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(999, element);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static EnumOptions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static EnumOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static EnumOptions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static EnumOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static EnumOptions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static EnumOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static EnumOptions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static EnumOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static EnumOptions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static EnumOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private EnumOptions MakeReadOnly() {

+      uninterpretedOption_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(EnumOptions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<EnumOptions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(EnumOptions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private EnumOptions result;

+      

+      private EnumOptions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          EnumOptions original = result;

+          result = new EnumOptions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override EnumOptions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.Descriptor; }

+      }

+      

+      public override EnumOptions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance; }

+      }

+      

+      public override EnumOptions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is EnumOptions) {

+          return MergeFrom((EnumOptions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(EnumOptions other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumOptions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.uninterpretedOption_.Count != 0) {

+          result.uninterpretedOption_.Add(other.uninterpretedOption_);

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_enumOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _enumOptionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 7994: {

+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+        get { return PrepareBuilder().uninterpretedOption_; }

+      }

+      public int UninterpretedOptionCount {

+        get { return result.UninterpretedOptionCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+        return result.GetUninterpretedOption(index);

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = value;

+        return this;

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(value);

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(values);

+        return this;

+      }

+      public Builder ClearUninterpretedOption() {

+        PrepareBuilder();

+        result.uninterpretedOption_.Clear();

+        return this;

+      }

+    }

+    static EnumOptions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class EnumValueOptions : pb::ExtendableMessage<EnumValueOptions, EnumValueOptions.Builder> {

+    private EnumValueOptions() { }

+    private static readonly EnumValueOptions defaultInstance = new EnumValueOptions().MakeReadOnly();

+    private static readonly string[] _enumValueOptionsFieldNames = new string[] { "uninterpreted_option" };

+    private static readonly uint[] _enumValueOptionsFieldTags = new uint[] { 7994 };

+    public static EnumValueOptions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override EnumValueOptions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override EnumValueOptions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueOptions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<EnumValueOptions, EnumValueOptions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_EnumValueOptions__FieldAccessorTable; }

+    }

+    

+    public const int UninterpretedOptionFieldNumber = 999;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+      get { return uninterpretedOption_; }

+    }

+    public int UninterpretedOptionCount {

+      get { return uninterpretedOption_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+      return uninterpretedOption_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+          if (!element.IsInitialized) return false;

+        }

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _enumValueOptionsFieldNames;

+      pb::ExtendableMessage<EnumValueOptions, EnumValueOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (uninterpretedOption_.Count > 0) {

+        output.WriteMessageArray(999, field_names[0], uninterpretedOption_);

+      }

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(999, element);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static EnumValueOptions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static EnumValueOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static EnumValueOptions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static EnumValueOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static EnumValueOptions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static EnumValueOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static EnumValueOptions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static EnumValueOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static EnumValueOptions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static EnumValueOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private EnumValueOptions MakeReadOnly() {

+      uninterpretedOption_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(EnumValueOptions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<EnumValueOptions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(EnumValueOptions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private EnumValueOptions result;

+      

+      private EnumValueOptions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          EnumValueOptions original = result;

+          result = new EnumValueOptions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override EnumValueOptions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.Descriptor; }

+      }

+      

+      public override EnumValueOptions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance; }

+      }

+      

+      public override EnumValueOptions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is EnumValueOptions) {

+          return MergeFrom((EnumValueOptions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(EnumValueOptions other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.EnumValueOptions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.uninterpretedOption_.Count != 0) {

+          result.uninterpretedOption_.Add(other.uninterpretedOption_);

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_enumValueOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _enumValueOptionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 7994: {

+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+        get { return PrepareBuilder().uninterpretedOption_; }

+      }

+      public int UninterpretedOptionCount {

+        get { return result.UninterpretedOptionCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+        return result.GetUninterpretedOption(index);

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = value;

+        return this;

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(value);

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(values);

+        return this;

+      }

+      public Builder ClearUninterpretedOption() {

+        PrepareBuilder();

+        result.uninterpretedOption_.Clear();

+        return this;

+      }

+    }

+    static EnumValueOptions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ServiceOptions : pb::ExtendableMessage<ServiceOptions, ServiceOptions.Builder> {

+    private ServiceOptions() { }

+    private static readonly ServiceOptions defaultInstance = new ServiceOptions().MakeReadOnly();

+    private static readonly string[] _serviceOptionsFieldNames = new string[] { "uninterpreted_option" };

+    private static readonly uint[] _serviceOptionsFieldTags = new uint[] { 7994 };

+    public static ServiceOptions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ServiceOptions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ServiceOptions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceOptions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<ServiceOptions, ServiceOptions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_ServiceOptions__FieldAccessorTable; }

+    }

+    

+    public const int UninterpretedOptionFieldNumber = 999;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+      get { return uninterpretedOption_; }

+    }

+    public int UninterpretedOptionCount {

+      get { return uninterpretedOption_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+      return uninterpretedOption_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+          if (!element.IsInitialized) return false;

+        }

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _serviceOptionsFieldNames;

+      pb::ExtendableMessage<ServiceOptions, ServiceOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (uninterpretedOption_.Count > 0) {

+        output.WriteMessageArray(999, field_names[0], uninterpretedOption_);

+      }

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(999, element);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static ServiceOptions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ServiceOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ServiceOptions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ServiceOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ServiceOptions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ServiceOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ServiceOptions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ServiceOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ServiceOptions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ServiceOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ServiceOptions MakeReadOnly() {

+      uninterpretedOption_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ServiceOptions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<ServiceOptions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ServiceOptions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ServiceOptions result;

+      

+      private ServiceOptions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ServiceOptions original = result;

+          result = new ServiceOptions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ServiceOptions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.Descriptor; }

+      }

+      

+      public override ServiceOptions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance; }

+      }

+      

+      public override ServiceOptions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is ServiceOptions) {

+          return MergeFrom((ServiceOptions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ServiceOptions other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.ServiceOptions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.uninterpretedOption_.Count != 0) {

+          result.uninterpretedOption_.Add(other.uninterpretedOption_);

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_serviceOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _serviceOptionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 7994: {

+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+        get { return PrepareBuilder().uninterpretedOption_; }

+      }

+      public int UninterpretedOptionCount {

+        get { return result.UninterpretedOptionCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+        return result.GetUninterpretedOption(index);

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = value;

+        return this;

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(value);

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(values);

+        return this;

+      }

+      public Builder ClearUninterpretedOption() {

+        PrepareBuilder();

+        result.uninterpretedOption_.Clear();

+        return this;

+      }

+    }

+    static ServiceOptions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class MethodOptions : pb::ExtendableMessage<MethodOptions, MethodOptions.Builder> {

+    private MethodOptions() { }

+    private static readonly MethodOptions defaultInstance = new MethodOptions().MakeReadOnly();

+    private static readonly string[] _methodOptionsFieldNames = new string[] { "uninterpreted_option" };

+    private static readonly uint[] _methodOptionsFieldTags = new uint[] { 7994 };

+    public static MethodOptions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override MethodOptions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override MethodOptions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodOptions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<MethodOptions, MethodOptions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_MethodOptions__FieldAccessorTable; }

+    }

+    

+    public const int UninterpretedOptionFieldNumber = 999;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> uninterpretedOption_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+      get { return uninterpretedOption_; }

+    }

+    public int UninterpretedOptionCount {

+      get { return uninterpretedOption_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+      return uninterpretedOption_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+          if (!element.IsInitialized) return false;

+        }

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _methodOptionsFieldNames;

+      pb::ExtendableMessage<MethodOptions, MethodOptions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (uninterpretedOption_.Count > 0) {

+        output.WriteMessageArray(999, field_names[0], uninterpretedOption_);

+      }

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption element in UninterpretedOptionList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(999, element);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static MethodOptions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static MethodOptions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static MethodOptions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static MethodOptions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static MethodOptions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static MethodOptions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static MethodOptions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static MethodOptions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static MethodOptions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static MethodOptions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private MethodOptions MakeReadOnly() {

+      uninterpretedOption_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(MethodOptions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<MethodOptions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(MethodOptions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private MethodOptions result;

+      

+      private MethodOptions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          MethodOptions original = result;

+          result = new MethodOptions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override MethodOptions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.Descriptor; }

+      }

+      

+      public override MethodOptions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance; }

+      }

+      

+      public override MethodOptions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is MethodOptions) {

+          return MergeFrom((MethodOptions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(MethodOptions other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.MethodOptions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.uninterpretedOption_.Count != 0) {

+          result.uninterpretedOption_.Add(other.uninterpretedOption_);

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_methodOptionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _methodOptionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 7994: {

+              input.ReadMessageArray(tag, field_name, result.uninterpretedOption_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> UninterpretedOptionList {

+        get { return PrepareBuilder().uninterpretedOption_; }

+      }

+      public int UninterpretedOptionCount {

+        get { return result.UninterpretedOptionCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption GetUninterpretedOption(int index) {

+        return result.GetUninterpretedOption(index);

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = value;

+        return this;

+      }

+      public Builder SetUninterpretedOption(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(value);

+        return this;

+      }

+      public Builder AddUninterpretedOption(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeUninterpretedOption(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption> values) {

+        PrepareBuilder();

+        result.uninterpretedOption_.Add(values);

+        return this;

+      }

+      public Builder ClearUninterpretedOption() {

+        PrepareBuilder();

+        result.uninterpretedOption_.Clear();

+        return this;

+      }

+    }

+    static MethodOptions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class UninterpretedOption : pb::GeneratedMessage<UninterpretedOption, UninterpretedOption.Builder> {

+    private UninterpretedOption() { }

+    private static readonly UninterpretedOption defaultInstance = new UninterpretedOption().MakeReadOnly();

+    private static readonly string[] _uninterpretedOptionFieldNames = new string[] { "aggregate_value", "double_value", "identifier_value", "name", "negative_int_value", "positive_int_value", "string_value" };

+    private static readonly uint[] _uninterpretedOptionFieldTags = new uint[] { 66, 49, 26, 18, 40, 32, 58 };

+    public static UninterpretedOption DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override UninterpretedOption DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override UninterpretedOption ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<UninterpretedOption, UninterpretedOption.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class NamePart : pb::GeneratedMessage<NamePart, NamePart.Builder> {

+        private NamePart() { }

+        private static readonly NamePart defaultInstance = new NamePart().MakeReadOnly();

+        private static readonly string[] _namePartFieldNames = new string[] { "is_extension", "name_part" };

+        private static readonly uint[] _namePartFieldTags = new uint[] { 16, 10 };

+        public static NamePart DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override NamePart DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override NamePart ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption_NamePart__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<NamePart, NamePart.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_UninterpretedOption_NamePart__FieldAccessorTable; }

+        }

+        

+        public const int NamePart_FieldNumber = 1;

+        private bool hasNamePart_;

+        private string namePart_ = "";

+        public bool HasNamePart_ {

+          get { return hasNamePart_; }

+        }

+        public string NamePart_ {

+          get { return namePart_; }

+        }

+        

+        public const int IsExtensionFieldNumber = 2;

+        private bool hasIsExtension;

+        private bool isExtension_;

+        public bool HasIsExtension {

+          get { return hasIsExtension; }

+        }

+        public bool IsExtension {

+          get { return isExtension_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            if (!hasNamePart_) return false;

+            if (!hasIsExtension) return false;

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _namePartFieldNames;

+          if (hasNamePart_) {

+            output.WriteString(1, field_names[1], NamePart_);

+          }

+          if (hasIsExtension) {

+            output.WriteBool(2, field_names[0], IsExtension);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasNamePart_) {

+            size += pb::CodedOutputStream.ComputeStringSize(1, NamePart_);

+          }

+          if (hasIsExtension) {

+            size += pb::CodedOutputStream.ComputeBoolSize(2, IsExtension);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static NamePart ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NamePart ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NamePart ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NamePart ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NamePart ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NamePart ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static NamePart ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static NamePart ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static NamePart ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NamePart ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private NamePart MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(NamePart prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<NamePart, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(NamePart cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private NamePart result;

+          

+          private NamePart PrepareBuilder() {

+            if (resultIsReadOnly) {

+              NamePart original = result;

+              result = new NamePart();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override NamePart MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Descriptor; }

+          }

+          

+          public override NamePart DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.DefaultInstance; }

+          }

+          

+          public override NamePart BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is NamePart) {

+              return MergeFrom((NamePart) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(NamePart other) {

+            if (other == global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasNamePart_) {

+              NamePart_ = other.NamePart_;

+            }

+            if (other.HasIsExtension) {

+              IsExtension = other.IsExtension;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_namePartFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _namePartFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 10: {

+                  result.hasNamePart_ = input.ReadString(ref result.namePart_);

+                  break;

+                }

+                case 16: {

+                  result.hasIsExtension = input.ReadBool(ref result.isExtension_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasNamePart_ {

+            get { return result.hasNamePart_; }

+          }

+          public string NamePart_ {

+            get { return result.NamePart_; }

+            set { SetNamePart_(value); }

+          }

+          public Builder SetNamePart_(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasNamePart_ = true;

+            result.namePart_ = value;

+            return this;

+          }

+          public Builder ClearNamePart_() {

+            PrepareBuilder();

+            result.hasNamePart_ = false;

+            result.namePart_ = "";

+            return this;

+          }

+          

+          public bool HasIsExtension {

+            get { return result.hasIsExtension; }

+          }

+          public bool IsExtension {

+            get { return result.IsExtension; }

+            set { SetIsExtension(value); }

+          }

+          public Builder SetIsExtension(bool value) {

+            PrepareBuilder();

+            result.hasIsExtension = true;

+            result.isExtension_ = value;

+            return this;

+          }

+          public Builder ClearIsExtension() {

+            PrepareBuilder();

+            result.hasIsExtension = false;

+            result.isExtension_ = false;

+            return this;

+          }

+        }

+        static NamePart() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int NameFieldNumber = 2;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart> name_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart> NameList {

+      get { return name_; }

+    }

+    public int NameCount {

+      get { return name_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart GetName(int index) {

+      return name_[index];

+    }

+    

+    public const int IdentifierValueFieldNumber = 3;

+    private bool hasIdentifierValue;

+    private string identifierValue_ = "";

+    public bool HasIdentifierValue {

+      get { return hasIdentifierValue; }

+    }

+    public string IdentifierValue {

+      get { return identifierValue_; }

+    }

+    

+    public const int PositiveIntValueFieldNumber = 4;

+    private bool hasPositiveIntValue;

+    private ulong positiveIntValue_;

+    public bool HasPositiveIntValue {

+      get { return hasPositiveIntValue; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong PositiveIntValue {

+      get { return positiveIntValue_; }

+    }

+    

+    public const int NegativeIntValueFieldNumber = 5;

+    private bool hasNegativeIntValue;

+    private long negativeIntValue_;

+    public bool HasNegativeIntValue {

+      get { return hasNegativeIntValue; }

+    }

+    public long NegativeIntValue {

+      get { return negativeIntValue_; }

+    }

+    

+    public const int DoubleValueFieldNumber = 6;

+    private bool hasDoubleValue;

+    private double doubleValue_;

+    public bool HasDoubleValue {

+      get { return hasDoubleValue; }

+    }

+    public double DoubleValue {

+      get { return doubleValue_; }

+    }

+    

+    public const int StringValueFieldNumber = 7;

+    private bool hasStringValue;

+    private pb::ByteString stringValue_ = pb::ByteString.Empty;

+    public bool HasStringValue {

+      get { return hasStringValue; }

+    }

+    public pb::ByteString StringValue {

+      get { return stringValue_; }

+    }

+    

+    public const int AggregateValueFieldNumber = 8;

+    private bool hasAggregateValue;

+    private string aggregateValue_ = "";

+    public bool HasAggregateValue {

+      get { return hasAggregateValue; }

+    }

+    public string AggregateValue {

+      get { return aggregateValue_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart element in NameList) {

+          if (!element.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _uninterpretedOptionFieldNames;

+      if (name_.Count > 0) {

+        output.WriteMessageArray(2, field_names[3], name_);

+      }

+      if (hasIdentifierValue) {

+        output.WriteString(3, field_names[2], IdentifierValue);

+      }

+      if (hasPositiveIntValue) {

+        output.WriteUInt64(4, field_names[5], PositiveIntValue);

+      }

+      if (hasNegativeIntValue) {

+        output.WriteInt64(5, field_names[4], NegativeIntValue);

+      }

+      if (hasDoubleValue) {

+        output.WriteDouble(6, field_names[1], DoubleValue);

+      }

+      if (hasStringValue) {

+        output.WriteBytes(7, field_names[6], StringValue);

+      }

+      if (hasAggregateValue) {

+        output.WriteString(8, field_names[0], AggregateValue);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart element in NameList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2, element);

+      }

+      if (hasIdentifierValue) {

+        size += pb::CodedOutputStream.ComputeStringSize(3, IdentifierValue);

+      }

+      if (hasPositiveIntValue) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(4, PositiveIntValue);

+      }

+      if (hasNegativeIntValue) {

+        size += pb::CodedOutputStream.ComputeInt64Size(5, NegativeIntValue);

+      }

+      if (hasDoubleValue) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(6, DoubleValue);

+      }

+      if (hasStringValue) {

+        size += pb::CodedOutputStream.ComputeBytesSize(7, StringValue);

+      }

+      if (hasAggregateValue) {

+        size += pb::CodedOutputStream.ComputeStringSize(8, AggregateValue);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static UninterpretedOption ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static UninterpretedOption ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static UninterpretedOption ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static UninterpretedOption ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static UninterpretedOption ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static UninterpretedOption ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static UninterpretedOption ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static UninterpretedOption ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static UninterpretedOption ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static UninterpretedOption ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private UninterpretedOption MakeReadOnly() {

+      name_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(UninterpretedOption prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<UninterpretedOption, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(UninterpretedOption cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private UninterpretedOption result;

+      

+      private UninterpretedOption PrepareBuilder() {

+        if (resultIsReadOnly) {

+          UninterpretedOption original = result;

+          result = new UninterpretedOption();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override UninterpretedOption MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Descriptor; }

+      }

+      

+      public override UninterpretedOption DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance; }

+      }

+      

+      public override UninterpretedOption BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is UninterpretedOption) {

+          return MergeFrom((UninterpretedOption) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(UninterpretedOption other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.name_.Count != 0) {

+          result.name_.Add(other.name_);

+        }

+        if (other.HasIdentifierValue) {

+          IdentifierValue = other.IdentifierValue;

+        }

+        if (other.HasPositiveIntValue) {

+          PositiveIntValue = other.PositiveIntValue;

+        }

+        if (other.HasNegativeIntValue) {

+          NegativeIntValue = other.NegativeIntValue;

+        }

+        if (other.HasDoubleValue) {

+          DoubleValue = other.DoubleValue;

+        }

+        if (other.HasStringValue) {

+          StringValue = other.StringValue;

+        }

+        if (other.HasAggregateValue) {

+          AggregateValue = other.AggregateValue;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_uninterpretedOptionFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _uninterpretedOptionFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 18: {

+              input.ReadMessageArray(tag, field_name, result.name_, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 26: {

+              result.hasIdentifierValue = input.ReadString(ref result.identifierValue_);

+              break;

+            }

+            case 32: {

+              result.hasPositiveIntValue = input.ReadUInt64(ref result.positiveIntValue_);

+              break;

+            }

+            case 40: {

+              result.hasNegativeIntValue = input.ReadInt64(ref result.negativeIntValue_);

+              break;

+            }

+            case 49: {

+              result.hasDoubleValue = input.ReadDouble(ref result.doubleValue_);

+              break;

+            }

+            case 58: {

+              result.hasStringValue = input.ReadBytes(ref result.stringValue_);

+              break;

+            }

+            case 66: {

+              result.hasAggregateValue = input.ReadString(ref result.aggregateValue_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart> NameList {

+        get { return PrepareBuilder().name_; }

+      }

+      public int NameCount {

+        get { return result.NameCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart GetName(int index) {

+        return result.GetName(index);

+      }

+      public Builder SetName(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.name_[index] = value;

+        return this;

+      }

+      public Builder SetName(int index, global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.name_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddName(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.name_.Add(value);

+        return this;

+      }

+      public Builder AddName(global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.name_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeName(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.UninterpretedOption.Types.NamePart> values) {

+        PrepareBuilder();

+        result.name_.Add(values);

+        return this;

+      }

+      public Builder ClearName() {

+        PrepareBuilder();

+        result.name_.Clear();

+        return this;

+      }

+      

+      public bool HasIdentifierValue {

+        get { return result.hasIdentifierValue; }

+      }

+      public string IdentifierValue {

+        get { return result.IdentifierValue; }

+        set { SetIdentifierValue(value); }

+      }

+      public Builder SetIdentifierValue(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasIdentifierValue = true;

+        result.identifierValue_ = value;

+        return this;

+      }

+      public Builder ClearIdentifierValue() {

+        PrepareBuilder();

+        result.hasIdentifierValue = false;

+        result.identifierValue_ = "";

+        return this;

+      }

+      

+      public bool HasPositiveIntValue {

+        get { return result.hasPositiveIntValue; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong PositiveIntValue {

+        get { return result.PositiveIntValue; }

+        set { SetPositiveIntValue(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPositiveIntValue(ulong value) {

+        PrepareBuilder();

+        result.hasPositiveIntValue = true;

+        result.positiveIntValue_ = value;

+        return this;

+      }

+      public Builder ClearPositiveIntValue() {

+        PrepareBuilder();

+        result.hasPositiveIntValue = false;

+        result.positiveIntValue_ = 0UL;

+        return this;

+      }

+      

+      public bool HasNegativeIntValue {

+        get { return result.hasNegativeIntValue; }

+      }

+      public long NegativeIntValue {

+        get { return result.NegativeIntValue; }

+        set { SetNegativeIntValue(value); }

+      }

+      public Builder SetNegativeIntValue(long value) {

+        PrepareBuilder();

+        result.hasNegativeIntValue = true;

+        result.negativeIntValue_ = value;

+        return this;

+      }

+      public Builder ClearNegativeIntValue() {

+        PrepareBuilder();

+        result.hasNegativeIntValue = false;

+        result.negativeIntValue_ = 0L;

+        return this;

+      }

+      

+      public bool HasDoubleValue {

+        get { return result.hasDoubleValue; }

+      }

+      public double DoubleValue {

+        get { return result.DoubleValue; }

+        set { SetDoubleValue(value); }

+      }

+      public Builder SetDoubleValue(double value) {

+        PrepareBuilder();

+        result.hasDoubleValue = true;

+        result.doubleValue_ = value;

+        return this;

+      }

+      public Builder ClearDoubleValue() {

+        PrepareBuilder();

+        result.hasDoubleValue = false;

+        result.doubleValue_ = 0D;

+        return this;

+      }

+      

+      public bool HasStringValue {

+        get { return result.hasStringValue; }

+      }

+      public pb::ByteString StringValue {

+        get { return result.StringValue; }

+        set { SetStringValue(value); }

+      }

+      public Builder SetStringValue(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasStringValue = true;

+        result.stringValue_ = value;

+        return this;

+      }

+      public Builder ClearStringValue() {

+        PrepareBuilder();

+        result.hasStringValue = false;

+        result.stringValue_ = pb::ByteString.Empty;

+        return this;

+      }

+      

+      public bool HasAggregateValue {

+        get { return result.hasAggregateValue; }

+      }

+      public string AggregateValue {

+        get { return result.AggregateValue; }

+        set { SetAggregateValue(value); }

+      }

+      public Builder SetAggregateValue(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasAggregateValue = true;

+        result.aggregateValue_ = value;

+        return this;

+      }

+      public Builder ClearAggregateValue() {

+        PrepareBuilder();

+        result.hasAggregateValue = false;

+        result.aggregateValue_ = "";

+        return this;

+      }

+    }

+    static UninterpretedOption() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SourceCodeInfo : pb::GeneratedMessage<SourceCodeInfo, SourceCodeInfo.Builder> {

+    private SourceCodeInfo() { }

+    private static readonly SourceCodeInfo defaultInstance = new SourceCodeInfo().MakeReadOnly();

+    private static readonly string[] _sourceCodeInfoFieldNames = new string[] { "location" };

+    private static readonly uint[] _sourceCodeInfoFieldTags = new uint[] { 10 };

+    public static SourceCodeInfo DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SourceCodeInfo DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SourceCodeInfo ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SourceCodeInfo, SourceCodeInfo.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Location : pb::GeneratedMessage<Location, Location.Builder> {

+        private Location() { }

+        private static readonly Location defaultInstance = new Location().MakeReadOnly();

+        private static readonly string[] _locationFieldNames = new string[] { "path", "span" };

+        private static readonly uint[] _locationFieldTags = new uint[] { 10, 18 };

+        public static Location DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Location DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Location ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo_Location__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Location, Location.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.internal__static_google_protobuf_SourceCodeInfo_Location__FieldAccessorTable; }

+        }

+        

+        public const int PathFieldNumber = 1;

+        private int pathMemoizedSerializedSize;

+        private pbc::PopsicleList<int> path_ = new pbc::PopsicleList<int>();

+        public scg::IList<int> PathList {

+          get { return pbc::Lists.AsReadOnly(path_); }

+        }

+        public int PathCount {

+          get { return path_.Count; }

+        }

+        public int GetPath(int index) {

+          return path_[index];

+        }

+        

+        public const int SpanFieldNumber = 2;

+        private int spanMemoizedSerializedSize;

+        private pbc::PopsicleList<int> span_ = new pbc::PopsicleList<int>();

+        public scg::IList<int> SpanList {

+          get { return pbc::Lists.AsReadOnly(span_); }

+        }

+        public int SpanCount {

+          get { return span_.Count; }

+        }

+        public int GetSpan(int index) {

+          return span_[index];

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _locationFieldNames;

+          if (path_.Count > 0) {

+            output.WritePackedInt32Array(1, field_names[0], pathMemoizedSerializedSize, path_);

+          }

+          if (span_.Count > 0) {

+            output.WritePackedInt32Array(2, field_names[1], spanMemoizedSerializedSize, span_);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          {

+            int dataSize = 0;

+            foreach (int element in PathList) {

+              dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+            }

+            size += dataSize;

+            if (path_.Count != 0) {

+              size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+            }

+            pathMemoizedSerializedSize = dataSize;

+          }

+          {

+            int dataSize = 0;

+            foreach (int element in SpanList) {

+              dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+            }

+            size += dataSize;

+            if (span_.Count != 0) {

+              size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+            }

+            spanMemoizedSerializedSize = dataSize;

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static Location ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Location ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Location ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Location ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Location ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Location ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Location ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Location ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Location ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Location ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Location MakeReadOnly() {

+          path_.MakeReadOnly();

+          span_.MakeReadOnly();

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Location prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Location, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Location cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Location result;

+          

+          private Location PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Location original = result;

+              result = new Location();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Location MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Descriptor; }

+          }

+          

+          public override Location DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.DefaultInstance; }

+          }

+          

+          public override Location BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is Location) {

+              return MergeFrom((Location) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(Location other) {

+            if (other == global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.path_.Count != 0) {

+              result.path_.Add(other.path_);

+            }

+            if (other.span_.Count != 0) {

+              result.span_.Add(other.span_);

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_locationFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _locationFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 10:

+                case 8: {

+                  input.ReadInt32Array(tag, field_name, result.path_);

+                  break;

+                }

+                case 18:

+                case 16: {

+                  input.ReadInt32Array(tag, field_name, result.span_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public pbc::IPopsicleList<int> PathList {

+            get { return PrepareBuilder().path_; }

+          }

+          public int PathCount {

+            get { return result.PathCount; }

+          }

+          public int GetPath(int index) {

+            return result.GetPath(index);

+          }

+          public Builder SetPath(int index, int value) {

+            PrepareBuilder();

+            result.path_[index] = value;

+            return this;

+          }

+          public Builder AddPath(int value) {

+            PrepareBuilder();

+            result.path_.Add(value);

+            return this;

+          }

+          public Builder AddRangePath(scg::IEnumerable<int> values) {

+            PrepareBuilder();

+            result.path_.Add(values);

+            return this;

+          }

+          public Builder ClearPath() {

+            PrepareBuilder();

+            result.path_.Clear();

+            return this;

+          }

+          

+          public pbc::IPopsicleList<int> SpanList {

+            get { return PrepareBuilder().span_; }

+          }

+          public int SpanCount {

+            get { return result.SpanCount; }

+          }

+          public int GetSpan(int index) {

+            return result.GetSpan(index);

+          }

+          public Builder SetSpan(int index, int value) {

+            PrepareBuilder();

+            result.span_[index] = value;

+            return this;

+          }

+          public Builder AddSpan(int value) {

+            PrepareBuilder();

+            result.span_.Add(value);

+            return this;

+          }

+          public Builder AddRangeSpan(scg::IEnumerable<int> values) {

+            PrepareBuilder();

+            result.span_.Add(values);

+            return this;

+          }

+          public Builder ClearSpan() {

+            PrepareBuilder();

+            result.span_.Clear();

+            return this;

+          }

+        }

+        static Location() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int LocationFieldNumber = 1;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location> location_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location>();

+    public scg::IList<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location> LocationList {

+      get { return location_; }

+    }

+    public int LocationCount {

+      get { return location_.Count; }

+    }

+    public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location GetLocation(int index) {

+      return location_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _sourceCodeInfoFieldNames;

+      if (location_.Count > 0) {

+        output.WriteMessageArray(1, field_names[0], location_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      foreach (global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location element in LocationList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, element);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SourceCodeInfo ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SourceCodeInfo ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SourceCodeInfo ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SourceCodeInfo ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SourceCodeInfo ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SourceCodeInfo ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SourceCodeInfo ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SourceCodeInfo ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SourceCodeInfo ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SourceCodeInfo ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SourceCodeInfo MakeReadOnly() {

+      location_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SourceCodeInfo prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SourceCodeInfo, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SourceCodeInfo cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SourceCodeInfo result;

+      

+      private SourceCodeInfo PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SourceCodeInfo original = result;

+          result = new SourceCodeInfo();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SourceCodeInfo MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Descriptor; }

+      }

+      

+      public override SourceCodeInfo DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance; }

+      }

+      

+      public override SourceCodeInfo BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SourceCodeInfo) {

+          return MergeFrom((SourceCodeInfo) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SourceCodeInfo other) {

+        if (other == global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.location_.Count != 0) {

+          result.location_.Add(other.location_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_sourceCodeInfoFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _sourceCodeInfoFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              input.ReadMessageArray(tag, field_name, result.location_, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location> LocationList {

+        get { return PrepareBuilder().location_; }

+      }

+      public int LocationCount {

+        get { return result.LocationCount; }

+      }

+      public global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location GetLocation(int index) {

+        return result.GetLocation(index);

+      }

+      public Builder SetLocation(int index, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.location_[index] = value;

+        return this;

+      }

+      public Builder SetLocation(int index, global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.location_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddLocation(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.location_.Add(value);

+        return this;

+      }

+      public Builder AddLocation(global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.location_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeLocation(scg::IEnumerable<global::Google.ProtocolBuffers.DescriptorProtos.SourceCodeInfo.Types.Location> values) {

+        PrepareBuilder();

+        result.location_.Add(values);

+        return this;

+      }

+      public Builder ClearLocation() {

+        PrepareBuilder();

+        result.location_.Clear();

+        return this;

+      }

+    }

+    static SourceCodeInfo() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.DescriptorProtos.DescriptorProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffers/DescriptorProtos/IDescriptorProto.cs b/csharp/src/ProtocolBuffers/DescriptorProtos/IDescriptorProto.cs
new file mode 100644
index 0000000..c894d32
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/DescriptorProtos/IDescriptorProto.cs
@@ -0,0 +1,52 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+namespace Google.ProtocolBuffers.DescriptorProtos

+{

+    /// <summary>

+    /// Interface implemented by all DescriptorProtos. The generator doesn't

+    /// emit the interface implementation claim, so PartialClasses.cs contains

+    /// partial class declarations for each of them.

+    /// </summary>

+    /// <typeparam name="TOptions">The associated options protocol buffer type</typeparam>

+    public interface IDescriptorProto<TOptions>

+    {

+        /// <summary>

+        /// The brief name of the descriptor's target.

+        /// </summary>

+        string Name { get; }

+

+        /// <summary>

+        /// The options for this descriptor.

+        /// </summary>

+        TOptions Options { get; }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/DescriptorProtos/PartialClasses.cs b/csharp/src/ProtocolBuffers/DescriptorProtos/PartialClasses.cs
new file mode 100644
index 0000000..adc2afb
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/DescriptorProtos/PartialClasses.cs
@@ -0,0 +1,65 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+// This file just contains partial classes for each of the

+// autogenerated classes, so that they implement

+// IDescriptorProto

+namespace Google.ProtocolBuffers.DescriptorProtos

+{

+    public partial class DescriptorProto : IDescriptorProto<MessageOptions>

+    {

+    }

+

+    public partial class EnumDescriptorProto : IDescriptorProto<EnumOptions>

+    {

+    }

+

+    public partial class EnumValueDescriptorProto : IDescriptorProto<EnumValueOptions>

+    {

+    }

+

+    public partial class FieldDescriptorProto : IDescriptorProto<FieldOptions>

+    {

+    }

+

+    public partial class FileDescriptorProto : IDescriptorProto<FileOptions>

+    {

+    }

+

+    public partial class MethodDescriptorProto : IDescriptorProto<MethodOptions>

+    {

+    }

+

+    public partial class ServiceDescriptorProto : IDescriptorProto<ServiceOptions>

+    {

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/DescriptorBase.cs b/csharp/src/ProtocolBuffers/Descriptors/DescriptorBase.cs
new file mode 100644
index 0000000..59006f8
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/DescriptorBase.cs
@@ -0,0 +1,115 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using Google.ProtocolBuffers.DescriptorProtos;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Base class for nearly all descriptors, providing common functionality.

+    /// </summary>

+    /// <typeparam name="TProto">Type of the protocol buffer form of this descriptor</typeparam>

+    /// <typeparam name="TOptions">Type of the options protocol buffer for this descriptor</typeparam>

+    public abstract class DescriptorBase<TProto, TOptions> : IDescriptor<TProto>

+        where TProto : IMessage, IDescriptorProto<TOptions>

+    {

+        private TProto proto;

+        private readonly FileDescriptor file;

+        private readonly string fullName;

+

+        protected DescriptorBase(TProto proto, FileDescriptor file, string fullName)

+        {

+            this.proto = proto;

+            this.file = file;

+            this.fullName = fullName;

+        }

+

+        internal virtual void ReplaceProto(TProto newProto)

+        {

+            this.proto = newProto;

+        }

+

+        protected static string ComputeFullName(FileDescriptor file, MessageDescriptor parent, string name)

+        {

+            if (parent != null)

+            {

+                return parent.FullName + "." + name;

+            }

+            if (file.Package.Length > 0)

+            {

+                return file.Package + "." + name;

+            }

+            return name;

+        }

+

+        IMessage IDescriptor.Proto

+        {

+            get { return proto; }

+        }

+

+        /// <summary>

+        /// Returns the protocol buffer form of this descriptor.

+        /// </summary>

+        public TProto Proto

+        {

+            get { return proto; }

+        }

+

+        public TOptions Options

+        {

+            get { return proto.Options; }

+        }

+

+        /// <summary>

+        /// The fully qualified name of the descriptor's target.

+        /// </summary>

+        public string FullName

+        {

+            get { return fullName; }

+        }

+

+        /// <summary>

+        /// The brief name of the descriptor's target.

+        /// </summary>

+        public string Name

+        {

+            get { return proto.Name; }

+        }

+

+        /// <value>

+        /// The file this descriptor was declared in.

+        /// </value>

+        public FileDescriptor File

+        {

+            get { return file; }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/DescriptorPool.cs b/csharp/src/ProtocolBuffers/Descriptors/DescriptorPool.cs
new file mode 100644
index 0000000..ae81980
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/DescriptorPool.cs
@@ -0,0 +1,352 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Collections.Generic;

+using System.Text;

+using System.Text.RegularExpressions;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Contains lookup tables containing all the descriptors defined in a particular file.

+    /// </summary>

+    internal sealed class DescriptorPool

+    {

+        private readonly IDictionary<string, IDescriptor> descriptorsByName =

+            new Dictionary<string, IDescriptor>();

+

+        private readonly IDictionary<DescriptorIntPair, FieldDescriptor> fieldsByNumber =

+            new Dictionary<DescriptorIntPair, FieldDescriptor>();

+

+        private readonly IDictionary<DescriptorIntPair, EnumValueDescriptor> enumValuesByNumber =

+            new Dictionary<DescriptorIntPair, EnumValueDescriptor>();

+

+        private readonly DescriptorPool[] dependencies;

+

+        internal DescriptorPool(FileDescriptor[] dependencyFiles)

+        {

+            dependencies = new DescriptorPool[dependencyFiles.Length];

+            for (int i = 0; i < dependencyFiles.Length; i++)

+            {

+                dependencies[i] = dependencyFiles[i].DescriptorPool;

+            }

+

+            foreach (FileDescriptor dependency in dependencyFiles)

+            {

+                AddPackage(dependency.Package, dependency);

+            }

+        }

+

+        /// <summary>

+        /// Finds a symbol of the given name within the pool.

+        /// </summary>

+        /// <typeparam name="T">The type of symbol to look for</typeparam>

+        /// <param name="fullName">Fully-qualified name to look up</param>

+        /// <returns>The symbol with the given name and type,

+        /// or null if the symbol doesn't exist or has the wrong type</returns>

+        internal T FindSymbol<T>(string fullName) where T : class, IDescriptor

+        {

+            IDescriptor result;

+            descriptorsByName.TryGetValue(fullName, out result);

+            T descriptor = result as T;

+            if (descriptor != null)

+            {

+                return descriptor;

+            }

+

+            foreach (DescriptorPool dependency in dependencies)

+            {

+                dependency.descriptorsByName.TryGetValue(fullName, out result);

+                descriptor = result as T;

+                if (descriptor != null)

+                {

+                    return descriptor;

+                }

+            }

+

+            return null;

+        }

+

+        /// <summary>

+        /// Adds a package to the symbol tables. If a package by the same name

+        /// already exists, that is fine, but if some other kind of symbol

+        /// exists under the same name, an exception is thrown. If the package

+        /// has multiple components, this also adds the parent package(s).

+        /// </summary>

+        internal void AddPackage(string fullName, FileDescriptor file)

+        {

+            int dotpos = fullName.LastIndexOf('.');

+            String name;

+            if (dotpos != -1)

+            {

+                AddPackage(fullName.Substring(0, dotpos), file);

+                name = fullName.Substring(dotpos + 1);

+            }

+            else

+            {

+                name = fullName;

+            }

+

+            IDescriptor old;

+            if (descriptorsByName.TryGetValue(fullName, out old))

+            {

+                if (!(old is PackageDescriptor))

+                {

+                    throw new DescriptorValidationException(file,

+                                                            "\"" + name +

+                                                            "\" is already defined (as something other than a " +

+                                                            "package) in file \"" + old.File.Name + "\".");

+                }

+            }

+            descriptorsByName[fullName] = new PackageDescriptor(name, fullName, file);

+        }

+

+        /// <summary>

+        /// Adds a symbol to the symbol table.

+        /// </summary>

+        /// <exception cref="DescriptorValidationException">The symbol already existed

+        /// in the symbol table.</exception>

+        internal void AddSymbol(IDescriptor descriptor)

+        {

+            ValidateSymbolName(descriptor);

+            String fullName = descriptor.FullName;

+

+            IDescriptor old;

+            if (descriptorsByName.TryGetValue(fullName, out old))

+            {

+                int dotPos = fullName.LastIndexOf('.');

+                string message;

+                if (descriptor.File == old.File)

+                {

+                    if (dotPos == -1)

+                    {

+                        message = "\"" + fullName + "\" is already defined.";

+                    }

+                    else

+                    {

+                        message = "\"" + fullName.Substring(dotPos + 1) + "\" is already defined in \"" +

+                                  fullName.Substring(0, dotPos) + "\".";

+                    }

+                }

+                else

+                {

+                    message = "\"" + fullName + "\" is already defined in file \"" + old.File.Name + "\".";

+                }

+                throw new DescriptorValidationException(descriptor, message);

+            }

+            descriptorsByName[fullName] = descriptor;

+        }

+

+        private static readonly Regex ValidationRegex = new Regex("^[_A-Za-z][_A-Za-z0-9]*$",

+                                                                  FrameworkPortability.CompiledRegexWhereAvailable);

+

+        /// <summary>

+        /// Verifies that the descriptor's name is valid (i.e. it contains

+        /// only letters, digits and underscores, and does not start with a digit).

+        /// </summary>

+        /// <param name="descriptor"></param>

+        private static void ValidateSymbolName(IDescriptor descriptor)

+        {

+            if (descriptor.Name == "")

+            {

+                throw new DescriptorValidationException(descriptor, "Missing name.");

+            }

+            if (!ValidationRegex.IsMatch(descriptor.Name))

+            {

+                throw new DescriptorValidationException(descriptor,

+                                                        "\"" + descriptor.Name + "\" is not a valid identifier.");

+            }

+        }

+

+        /// <summary>

+        /// Returns the field with the given number in the given descriptor,

+        /// or null if it can't be found.

+        /// </summary>

+        internal FieldDescriptor FindFieldByNumber(MessageDescriptor messageDescriptor, int number)

+        {

+            FieldDescriptor ret;

+            fieldsByNumber.TryGetValue(new DescriptorIntPair(messageDescriptor, number), out ret);

+            return ret;

+        }

+

+        internal EnumValueDescriptor FindEnumValueByNumber(EnumDescriptor enumDescriptor, int number)

+        {

+            EnumValueDescriptor ret;

+            enumValuesByNumber.TryGetValue(new DescriptorIntPair(enumDescriptor, number), out ret);

+            return ret;

+        }

+

+        /// <summary>

+        /// Adds a field to the fieldsByNumber table.

+        /// </summary>

+        /// <exception cref="DescriptorValidationException">A field with the same

+        /// containing type and number already exists.</exception>

+        internal void AddFieldByNumber(FieldDescriptor field)

+        {

+            DescriptorIntPair key = new DescriptorIntPair(field.ContainingType, field.FieldNumber);

+            FieldDescriptor old;

+            if (fieldsByNumber.TryGetValue(key, out old))

+            {

+                throw new DescriptorValidationException(field, "Field number " + field.FieldNumber +

+                                                               "has already been used in \"" +

+                                                               field.ContainingType.FullName +

+                                                               "\" by field \"" + old.Name + "\".");

+            }

+            fieldsByNumber[key] = field;

+        }

+

+        /// <summary>

+        /// Adds an enum value to the enumValuesByNumber table. If an enum value

+        /// with the same type and number already exists, this method does nothing.

+        /// (This is allowed; the first value defined with the number takes precedence.)

+        /// </summary>

+        internal void AddEnumValueByNumber(EnumValueDescriptor enumValue)

+        {

+            DescriptorIntPair key = new DescriptorIntPair(enumValue.EnumDescriptor, enumValue.Number);

+            if (!enumValuesByNumber.ContainsKey(key))

+            {

+                enumValuesByNumber[key] = enumValue;

+            }

+        }

+

+        /// <summary>

+        /// Looks up a descriptor by name, relative to some other descriptor.

+        /// The name may be fully-qualified (with a leading '.'), partially-qualified,

+        /// or unqualified. C++-like name lookup semantics are used to search for the

+        /// matching descriptor.

+        /// </summary>

+        public IDescriptor LookupSymbol(string name, IDescriptor relativeTo)

+        {

+            // TODO(jonskeet):  This could be optimized in a number of ways.

+

+            IDescriptor result;

+            if (name.StartsWith("."))

+            {

+                // Fully-qualified name.

+                result = FindSymbol<IDescriptor>(name.Substring(1));

+            }

+            else

+            {

+                // If "name" is a compound identifier, we want to search for the

+                // first component of it, then search within it for the rest.

+                int firstPartLength = name.IndexOf('.');

+                string firstPart = firstPartLength == -1 ? name : name.Substring(0, firstPartLength);

+

+                // We will search each parent scope of "relativeTo" looking for the

+                // symbol.

+                StringBuilder scopeToTry = new StringBuilder(relativeTo.FullName);

+

+                while (true)

+                {

+                    // Chop off the last component of the scope.

+

+                    // TODO(jonskeet): Make this more efficient. May not be worth using StringBuilder at all

+                    int dotpos = scopeToTry.ToString().LastIndexOf(".");

+                    if (dotpos == -1)

+                    {

+                        result = FindSymbol<IDescriptor>(name);

+                        break;

+                    }

+                    else

+                    {

+                        scopeToTry.Length = dotpos + 1;

+

+                        // Append firstPart and try to find.

+                        scopeToTry.Append(firstPart);

+                        result = FindSymbol<IDescriptor>(scopeToTry.ToString());

+

+                        if (result != null)

+                        {

+                            if (firstPartLength != -1)

+                            {

+                                // We only found the first part of the symbol.  Now look for

+                                // the whole thing.  If this fails, we *don't* want to keep

+                                // searching parent scopes.

+                                scopeToTry.Length = dotpos + 1;

+                                scopeToTry.Append(name);

+                                result = FindSymbol<IDescriptor>(scopeToTry.ToString());

+                            }

+                            break;

+                        }

+

+                        // Not found.  Remove the name so we can try again.

+                        scopeToTry.Length = dotpos;

+                    }

+                }

+            }

+

+            if (result == null)

+            {

+                throw new DescriptorValidationException(relativeTo, "\"" + name + "\" is not defined.");

+            }

+            else

+            {

+                return result;

+            }

+        }

+

+        /// <summary>

+        /// Struct used to hold the keys for the fieldByNumber table.

+        /// </summary>

+        private struct DescriptorIntPair : IEquatable<DescriptorIntPair>

+        {

+            private readonly int number;

+            private readonly IDescriptor descriptor;

+

+            internal DescriptorIntPair(IDescriptor descriptor, int number)

+            {

+                this.number = number;

+                this.descriptor = descriptor;

+            }

+

+            public bool Equals(DescriptorIntPair other)

+            {

+                return descriptor == other.descriptor

+                       && number == other.number;

+            }

+

+            public override bool Equals(object obj)

+            {

+                if (obj is DescriptorIntPair)

+                {

+                    return Equals((DescriptorIntPair) obj);

+                }

+                return false;

+            }

+

+            public override int GetHashCode()

+            {

+                return descriptor.GetHashCode()*((1 << 16) - 1) + number;

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/DescriptorUtil.cs b/csharp/src/ProtocolBuffers/Descriptors/DescriptorUtil.cs
new file mode 100644
index 0000000..00efdbe
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/DescriptorUtil.cs
@@ -0,0 +1,64 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Collections;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Internal class containing utility methods when working with descriptors.

+    /// </summary>

+    internal static class DescriptorUtil

+    {

+        /// <summary>

+        /// Equivalent to Func[TInput, int, TOutput] but usable in .NET 2.0. Only used to convert

+        /// arrays.

+        /// </summary>

+        internal delegate TOutput IndexedConverter<TInput, TOutput>(TInput element, int index);

+

+        /// <summary>

+        /// Converts the given array into a read-only list, applying the specified conversion to

+        /// each input element.

+        /// </summary>

+        internal static IList<TOutput> ConvertAndMakeReadOnly<TInput, TOutput>(IList<TInput> input,

+                                                                               IndexedConverter<TInput, TOutput>

+                                                                                   converter)

+        {

+            TOutput[] array = new TOutput[input.Count];

+            for (int i = 0; i < array.Length; i++)

+            {

+                array[i] = converter(input[i], i);

+            }

+            return Lists<TOutput>.AsReadOnly(array);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/DescriptorValidationException.cs b/csharp/src/ProtocolBuffers/Descriptors/DescriptorValidationException.cs
new file mode 100644
index 0000000..d05d60d
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/DescriptorValidationException.cs
@@ -0,0 +1,90 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Thrown when building descriptors fails because the source DescriptorProtos

+    /// are not valid.

+    /// </summary>

+    public sealed class DescriptorValidationException : Exception

+    {

+        private readonly String name;

+        private readonly IMessage proto;

+        private readonly string description;

+

+        /// <value>

+        /// The full name of the descriptor where the error occurred.

+        /// </value>

+        public String ProblemSymbolName

+        {

+            get { return name; }

+        }

+

+        /// <value>

+        /// The protocol message representation of the invalid descriptor.

+        /// </value>

+        public IMessage ProblemProto

+        {

+            get { return proto; }

+        }

+

+        /// <value>

+        /// A human-readable description of the error. (The Message property

+        /// is made up of the descriptor's name and this description.)

+        /// </value>

+        public string Description

+        {

+            get { return description; }

+        }

+

+        internal DescriptorValidationException(IDescriptor problemDescriptor, string description) :

+            base(problemDescriptor.FullName + ": " + description)

+        {

+            // Note that problemDescriptor may be partially uninitialized, so we

+            // don't want to expose it directly to the user.  So, we only provide

+            // the name and the original proto.

+            name = problemDescriptor.FullName;

+            proto = problemDescriptor.Proto;

+            this.description = description;

+        }

+

+        internal DescriptorValidationException(IDescriptor problemDescriptor, string description, Exception cause) :

+            base(problemDescriptor.FullName + ": " + description, cause)

+        {

+            name = problemDescriptor.FullName;

+            proto = problemDescriptor.Proto;

+            this.description = description;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/EnumDescriptor.cs b/csharp/src/ProtocolBuffers/Descriptors/EnumDescriptor.cs
new file mode 100644
index 0000000..a0b81b6
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/EnumDescriptor.cs
@@ -0,0 +1,126 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System.Collections.Generic;

+using Google.ProtocolBuffers.DescriptorProtos;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Descriptor for an enum type in a .proto file.

+    /// </summary>

+    public sealed class EnumDescriptor : IndexedDescriptorBase<EnumDescriptorProto, EnumOptions>,

+                                         IEnumLiteMap<EnumValueDescriptor>

+    {

+        private readonly MessageDescriptor containingType;

+        private readonly IList<EnumValueDescriptor> values;

+

+        internal EnumDescriptor(EnumDescriptorProto proto, FileDescriptor file, MessageDescriptor parent, int index)

+            : base(proto, file, ComputeFullName(file, parent, proto.Name), index)

+        {

+            containingType = parent;

+

+            if (proto.ValueCount == 0)

+            {

+                // We cannot allow enums with no values because this would mean there

+                // would be no valid default value for fields of this type.

+                throw new DescriptorValidationException(this, "Enums must contain at least one value.");

+            }

+

+            values = DescriptorUtil.ConvertAndMakeReadOnly(proto.ValueList,

+                                                           (value, i) => new EnumValueDescriptor(value, file, this, i));

+

+            File.DescriptorPool.AddSymbol(this);

+        }

+

+        /// <value>

+        /// If this is a nested type, get the outer descriptor, otherwise null.

+        /// </value>

+        public MessageDescriptor ContainingType

+        {

+            get { return containingType; }

+        }

+

+        /// <value>

+        /// An unmodifiable list of defined value descriptors for this enum.

+        /// </value>

+        public IList<EnumValueDescriptor> Values

+        {

+            get { return values; }

+        }

+

+        /// <summary>

+        /// Logic moved from FieldSet to continue current behavior

+        /// </summary>

+        public bool IsValidValue(IEnumLite value)

+        {

+            return value is EnumValueDescriptor && ((EnumValueDescriptor) value).EnumDescriptor == this;

+        }

+

+        /// <summary>

+        /// Finds an enum value by number. If multiple enum values have the

+        /// same number, this returns the first defined value with that number.

+        /// </summary>

+        public EnumValueDescriptor FindValueByNumber(int number)

+        {

+            return File.DescriptorPool.FindEnumValueByNumber(this, number);

+        }

+

+        IEnumLite IEnumLiteMap.FindValueByNumber(int number)

+        {

+            return FindValueByNumber(number);

+        }

+

+        IEnumLite IEnumLiteMap.FindValueByName(string name)

+        {

+            return FindValueByName(name);

+        }

+

+        /// <summary>

+        /// Finds an enum value by name.

+        /// </summary>

+        /// <param name="name">The unqualified name of the value (e.g. "FOO").</param>

+        /// <returns>The value's descriptor, or null if not found.</returns>

+        public EnumValueDescriptor FindValueByName(string name)

+        {

+            return File.DescriptorPool.FindSymbol<EnumValueDescriptor>(FullName + "." + name);

+        }

+

+        internal override void ReplaceProto(EnumDescriptorProto newProto)

+        {

+            base.ReplaceProto(newProto);

+            for (int i = 0; i < values.Count; i++)

+            {

+                values[i].ReplaceProto(newProto.GetValue(i));

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/EnumValueDescriptor.cs b/csharp/src/ProtocolBuffers/Descriptors/EnumValueDescriptor.cs
new file mode 100644
index 0000000..afb9cbb
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/EnumValueDescriptor.cs
@@ -0,0 +1,63 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using Google.ProtocolBuffers.DescriptorProtos;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Descriptor for a single enum value within an enum in a .proto file.

+    /// </summary>

+    public sealed class EnumValueDescriptor : IndexedDescriptorBase<EnumValueDescriptorProto, EnumValueOptions>,

+                                              IEnumLite

+    {

+        private readonly EnumDescriptor enumDescriptor;

+

+        internal EnumValueDescriptor(EnumValueDescriptorProto proto, FileDescriptor file,

+                                     EnumDescriptor parent, int index)

+            : base(proto, file, parent.FullName + "." + proto.Name, index)

+        {

+            enumDescriptor = parent;

+            file.DescriptorPool.AddSymbol(this);

+            file.DescriptorPool.AddEnumValueByNumber(this);

+        }

+

+        public int Number

+        {

+            get { return Proto.Number; }

+        }

+

+        public EnumDescriptor EnumDescriptor

+        {

+            get { return enumDescriptor; }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/FieldDescriptor.cs b/csharp/src/ProtocolBuffers/Descriptors/FieldDescriptor.cs
new file mode 100644
index 0000000..6d17ae2
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/FieldDescriptor.cs
@@ -0,0 +1,671 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Collections.Generic;

+using System.Reflection;

+using Google.ProtocolBuffers.Collections;

+using Google.ProtocolBuffers.DescriptorProtos;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Descriptor for a field or extension within a message in a .proto file.

+    /// </summary>

+    public sealed class FieldDescriptor : IndexedDescriptorBase<FieldDescriptorProto, FieldOptions>,

+                                          IComparable<FieldDescriptor>, IFieldDescriptorLite

+    {

+        private readonly MessageDescriptor extensionScope;

+        private EnumDescriptor enumType;

+        private MessageDescriptor messageType;

+        private MessageDescriptor containingType;

+        private object defaultValue;

+        private FieldType fieldType;

+        private MappedType mappedType;

+

+        private CSharpFieldOptions csharpFieldOptions;

+        private readonly object optionsLock = new object();

+

+        internal FieldDescriptor(FieldDescriptorProto proto, FileDescriptor file,

+                                 MessageDescriptor parent, int index, bool isExtension)

+            : base(proto, file, ComputeFullName(file, parent, proto.Name), index)

+        {

+            if (proto.HasType)

+            {

+                fieldType = GetFieldTypeFromProtoType(proto.Type);

+                mappedType = FieldTypeToMappedTypeMap[fieldType];

+            }

+

+            if (FieldNumber <= 0)

+            {

+                throw new DescriptorValidationException(this,

+                                                        "Field numbers must be positive integers.");

+            }

+

+            if (isExtension)

+            {

+                if (!proto.HasExtendee)

+                {

+                    throw new DescriptorValidationException(this,

+                                                            "FieldDescriptorProto.Extendee not set for extension field.");

+                }

+                containingType = null; // Will be filled in when cross-linking

+                if (parent != null)

+                {

+                    extensionScope = parent;

+                }

+                else

+                {

+                    extensionScope = null;

+                }

+            }

+            else

+            {

+                if (proto.HasExtendee)

+                {

+                    throw new DescriptorValidationException(this,

+                                                            "FieldDescriptorProto.Extendee set for non-extension field.");

+                }

+                containingType = parent;

+                extensionScope = null;

+            }

+

+            file.DescriptorPool.AddSymbol(this);

+        }

+

+        private CSharpFieldOptions BuildOrFakeCSharpOptions()

+        {

+            // TODO(jonskeet): Check if we could use FileDescriptorProto.Descriptor.Name - interesting bootstrap issues

+            if (File.Proto.Name == "google/protobuf/csharp_options.proto")

+            {

+                if (Name == "csharp_field_options")

+                {

+                    return new CSharpFieldOptions.Builder {PropertyName = "CSharpFieldOptions"}.Build();

+                }

+                if (Name == "csharp_file_options")

+                {

+                    return new CSharpFieldOptions.Builder {PropertyName = "CSharpFileOptions"}.Build();

+                }

+            }

+            CSharpFieldOptions.Builder builder = CSharpFieldOptions.CreateBuilder();

+            if (Proto.Options.HasExtension(DescriptorProtos.CSharpOptions.CSharpFieldOptions))

+            {

+                builder.MergeFrom(Proto.Options.GetExtension(DescriptorProtos.CSharpOptions.CSharpFieldOptions));

+            }

+            if (!builder.HasPropertyName)

+            {

+                string fieldName = FieldType == FieldType.Group ? MessageType.Name : Name;

+                string propertyName = NameHelpers.UnderscoresToPascalCase(fieldName);

+                if (propertyName == ContainingType.Name)

+                {

+                    propertyName += "_";

+                }

+                builder.PropertyName = propertyName;

+            }

+            return builder.Build();

+        }

+

+        /// <summary>

+        /// Maps a field type as included in the .proto file to a FieldType.

+        /// </summary>

+        private static FieldType GetFieldTypeFromProtoType(FieldDescriptorProto.Types.Type type)

+        {

+            switch (type)

+            {

+                case FieldDescriptorProto.Types.Type.TYPE_DOUBLE:

+                    return FieldType.Double;

+                case FieldDescriptorProto.Types.Type.TYPE_FLOAT:

+                    return FieldType.Float;

+                case FieldDescriptorProto.Types.Type.TYPE_INT64:

+                    return FieldType.Int64;

+                case FieldDescriptorProto.Types.Type.TYPE_UINT64:

+                    return FieldType.UInt64;

+                case FieldDescriptorProto.Types.Type.TYPE_INT32:

+                    return FieldType.Int32;

+                case FieldDescriptorProto.Types.Type.TYPE_FIXED64:

+                    return FieldType.Fixed64;

+                case FieldDescriptorProto.Types.Type.TYPE_FIXED32:

+                    return FieldType.Fixed32;

+                case FieldDescriptorProto.Types.Type.TYPE_BOOL:

+                    return FieldType.Bool;

+                case FieldDescriptorProto.Types.Type.TYPE_STRING:

+                    return FieldType.String;

+                case FieldDescriptorProto.Types.Type.TYPE_GROUP:

+                    return FieldType.Group;

+                case FieldDescriptorProto.Types.Type.TYPE_MESSAGE:

+                    return FieldType.Message;

+                case FieldDescriptorProto.Types.Type.TYPE_BYTES:

+                    return FieldType.Bytes;

+                case FieldDescriptorProto.Types.Type.TYPE_UINT32:

+                    return FieldType.UInt32;

+                case FieldDescriptorProto.Types.Type.TYPE_ENUM:

+                    return FieldType.Enum;

+                case FieldDescriptorProto.Types.Type.TYPE_SFIXED32:

+                    return FieldType.SFixed32;

+                case FieldDescriptorProto.Types.Type.TYPE_SFIXED64:

+                    return FieldType.SFixed64;

+                case FieldDescriptorProto.Types.Type.TYPE_SINT32:

+                    return FieldType.SInt32;

+                case FieldDescriptorProto.Types.Type.TYPE_SINT64:

+                    return FieldType.SInt64;

+                default:

+                    throw new ArgumentException("Invalid type specified");

+            }

+        }

+

+        /// <summary>

+        /// Returns the default value for a mapped type.

+        /// </summary>

+        private static object GetDefaultValueForMappedType(MappedType type)

+        {

+            switch (type)

+            {

+                case MappedType.Int32:

+                    return 0;

+                case MappedType.Int64:

+                    return (long) 0;

+                case MappedType.UInt32:

+                    return (uint) 0;

+                case MappedType.UInt64:

+                    return (ulong) 0;

+                case MappedType.Single:

+                    return (float) 0;

+                case MappedType.Double:

+                    return (double) 0;

+                case MappedType.Boolean:

+                    return false;

+                case MappedType.String:

+                    return "";

+                case MappedType.ByteString:

+                    return ByteString.Empty;

+                case MappedType.Message:

+                    return null;

+                case MappedType.Enum:

+                    return null;

+                default:

+                    throw new ArgumentException("Invalid type specified");

+            }

+        }

+

+        public bool IsRequired

+        {

+            get { return Proto.Label == FieldDescriptorProto.Types.Label.LABEL_REQUIRED; }

+        }

+

+        public bool IsOptional

+        {

+            get { return Proto.Label == FieldDescriptorProto.Types.Label.LABEL_OPTIONAL; }

+        }

+

+        public bool IsRepeated

+        {

+            get { return Proto.Label == FieldDescriptorProto.Types.Label.LABEL_REPEATED; }

+        }

+

+        public bool IsPacked

+        {

+            get { return Proto.Options.Packed; }

+        }

+

+        /// <valule>

+        /// Indicates whether or not the field had an explicitly-defined default value.

+        /// </value>

+        public bool HasDefaultValue

+        {

+            get { return Proto.HasDefaultValue; }

+        }

+

+        /// <value>

+        /// The field's default value. Valid for all types except messages

+        /// and groups. For all other types, the object returned is of the

+        /// same class that would be returned by IMessage[this].

+        /// For repeated fields this will always be an empty immutable list compatible with IList[object].

+        /// For message fields it will always be null. For singular values, it will depend on the descriptor.

+        /// </value>

+        public object DefaultValue

+        {

+            get

+            {

+                if (MappedType == MappedType.Message)

+                {

+                    throw new InvalidOperationException(

+                        "FieldDescriptor.DefaultValue called on an embedded message field.");

+                }

+                return defaultValue;

+            }

+        }

+

+        /// <value>

+        /// Indicates whether or not this field is an extension.

+        /// </value>

+        public bool IsExtension

+        {

+            get { return Proto.HasExtendee; }

+        }

+

+        /*

+     * Get the field's containing type. For extensions, this is the type being

+     * extended, not the location where the extension was defined.  See

+     * {@link #getExtensionScope()}.

+     */

+

+        /// <summary>

+        /// Get the field's containing type. For extensions, this is the type being

+        /// extended, not the location where the extension was defined. See

+        /// <see cref="ExtensionScope" />.

+        /// </summary>

+        public MessageDescriptor ContainingType

+        {

+            get { return containingType; }

+        }

+

+        /// <summary>

+        /// Returns the C#-specific options for this field descriptor. This will always be

+        /// completely filled in.

+        /// </summary>

+        public CSharpFieldOptions CSharpOptions

+        {

+            get

+            {

+                lock (optionsLock)

+                {

+                    if (csharpFieldOptions == null)

+                    {

+                        csharpFieldOptions = BuildOrFakeCSharpOptions();

+                    }

+                }

+                return csharpFieldOptions;

+            }

+        }

+

+        /// <summary>

+        /// For extensions defined nested within message types, gets

+        /// the outer type. Not valid for non-extension fields.

+        /// </summary>

+        /// <example>

+        /// <code>

+        /// message Foo {

+        ///   extensions 1000 to max;

+        /// }

+        /// extend Foo {

+        ///   optional int32 baz = 1234;

+        /// }

+        /// message Bar {

+        ///   extend Foo {

+        ///     optional int32 qux = 4321;

+        ///   }

+        /// }

+        /// </code>

+        /// The containing type for both <c>baz</c> and <c>qux</c> is <c>Foo</c>.

+        /// However, the extension scope for <c>baz</c> is <c>null</c> while

+        /// the extension scope for <c>qux</c> is <c>Bar</c>.

+        /// </example>

+        public MessageDescriptor ExtensionScope

+        {

+            get

+            {

+                if (!IsExtension)

+                {

+                    throw new InvalidOperationException("This field is not an extension.");

+                }

+                return extensionScope;

+            }

+        }

+

+        public MappedType MappedType

+        {

+            get { return mappedType; }

+        }

+

+        public FieldType FieldType

+        {

+            get { return fieldType; }

+        }

+

+        public bool IsCLSCompliant

+        {

+            get 

+            { 

+                return mappedType != MappedType.UInt32 && 

+                    mappedType != MappedType.UInt64 &&

+                    !NameHelpers.UnderscoresToPascalCase(Name).StartsWith("_");

+            }

+        }

+

+        public int FieldNumber

+        {

+            get { return Proto.Number; }

+        }

+

+        /// <summary>

+        /// Compares this descriptor with another one, ordering in "canonical" order

+        /// which simply means ascending order by field number. <paramref name="other"/>

+        /// must be a field of the same type, i.e. the <see cref="ContainingType"/> of

+        /// both fields must be the same.

+        /// </summary>

+        public int CompareTo(FieldDescriptor other)

+        {

+            if (other.containingType != containingType)

+            {

+                throw new ArgumentException("FieldDescriptors can only be compared to other FieldDescriptors " +

+                                            "for fields of the same message type.");

+            }

+            return FieldNumber - other.FieldNumber;

+        }

+

+        /// <summary>

+        /// Compares this descriptor with another one, ordering in "canonical" order

+        /// which simply means ascending order by field number. <paramref name="other"/>

+        /// must be a field of the same type, i.e. the <see cref="ContainingType"/> of

+        /// both fields must be the same.

+        /// </summary>

+        public int CompareTo(IFieldDescriptorLite other)

+        {

+            return FieldNumber - other.FieldNumber;

+        }

+

+        IEnumLiteMap IFieldDescriptorLite.EnumType

+        {

+            get { return EnumType; }

+        }

+

+        bool IFieldDescriptorLite.MessageSetWireFormat

+        {

+            get { return ContainingType.Options.MessageSetWireFormat; }

+        }

+

+        /// <summary>

+        /// For enum fields, returns the field's type.

+        /// </summary>

+        public EnumDescriptor EnumType

+        {

+            get

+            {

+                if (MappedType != MappedType.Enum)

+                {

+                    throw new InvalidOperationException("EnumType is only valid for enum fields.");

+                }

+                return enumType;

+            }

+        }

+

+        /// <summary>

+        /// For embedded message and group fields, returns the field's type.

+        /// </summary>

+        public MessageDescriptor MessageType

+        {

+            get

+            {

+                if (MappedType != MappedType.Message)

+                {

+                    throw new InvalidOperationException("MessageType is only valid for enum fields.");

+                }

+                return messageType;

+            }

+        }

+

+        /// <summary>

+        /// Immutable mapping from field type to mapped type. Built using the attributes on

+        /// FieldType values.

+        /// </summary>

+        public static readonly IDictionary<FieldType, MappedType> FieldTypeToMappedTypeMap = MapFieldTypes();

+

+        private static IDictionary<FieldType, MappedType> MapFieldTypes()

+        {

+            var map = new Dictionary<FieldType, MappedType>();

+            foreach (FieldInfo field in typeof(FieldType).GetFields(BindingFlags.Static | BindingFlags.Public))

+            {

+                FieldType fieldType = (FieldType) field.GetValue(null);

+                FieldMappingAttribute mapping =

+                    (FieldMappingAttribute) field.GetCustomAttributes(typeof(FieldMappingAttribute), false)[0];

+                map[fieldType] = mapping.MappedType;

+            }

+            return Dictionaries.AsReadOnly(map);

+        }

+

+        /// <summary>

+        /// Look up and cross-link all field types etc.

+        /// </summary>

+        internal void CrossLink()

+        {

+            if (Proto.HasExtendee)

+            {

+                IDescriptor extendee = File.DescriptorPool.LookupSymbol(Proto.Extendee, this);

+                if (!(extendee is MessageDescriptor))

+                {

+                    throw new DescriptorValidationException(this, "\"" + Proto.Extendee + "\" is not a message type.");

+                }

+                containingType = (MessageDescriptor) extendee;

+

+                if (!containingType.IsExtensionNumber(FieldNumber))

+                {

+                    throw new DescriptorValidationException(this,

+                                                            "\"" + containingType.FullName + "\" does not declare " +

+                                                            FieldNumber + " as an extension number.");

+                }

+            }

+

+            if (Proto.HasTypeName)

+            {

+                IDescriptor typeDescriptor =

+                    File.DescriptorPool.LookupSymbol(Proto.TypeName, this);

+

+                if (!Proto.HasType)

+                {

+                    // Choose field type based on symbol.

+                    if (typeDescriptor is MessageDescriptor)

+                    {

+                        fieldType = FieldType.Message;

+                        mappedType = MappedType.Message;

+                    }

+                    else if (typeDescriptor is EnumDescriptor)

+                    {

+                        fieldType = FieldType.Enum;

+                        mappedType = MappedType.Enum;

+                    }

+                    else

+                    {

+                        throw new DescriptorValidationException(this, "\"" + Proto.TypeName + "\" is not a type.");

+                    }

+                }

+

+                if (MappedType == MappedType.Message)

+                {

+                    if (!(typeDescriptor is MessageDescriptor))

+                    {

+                        throw new DescriptorValidationException(this,

+                                                                "\"" + Proto.TypeName + "\" is not a message type.");

+                    }

+                    messageType = (MessageDescriptor) typeDescriptor;

+

+                    if (Proto.HasDefaultValue)

+                    {

+                        throw new DescriptorValidationException(this, "Messages can't have default values.");

+                    }

+                }

+                else if (MappedType == Descriptors.MappedType.Enum)

+                {

+                    if (!(typeDescriptor is EnumDescriptor))

+                    {

+                        throw new DescriptorValidationException(this, "\"" + Proto.TypeName + "\" is not an enum type.");

+                    }

+                    enumType = (EnumDescriptor) typeDescriptor;

+                }

+                else

+                {

+                    throw new DescriptorValidationException(this, "Field with primitive type has type_name.");

+                }

+            }

+            else

+            {

+                if (MappedType == MappedType.Message || MappedType == MappedType.Enum)

+                {

+                    throw new DescriptorValidationException(this, "Field with message or enum type missing type_name.");

+                }

+            }

+

+            // We don't attempt to parse the default value until here because for

+            // enums we need the enum type's descriptor.

+            if (Proto.HasDefaultValue)

+            {

+                if (IsRepeated)

+                {

+                    throw new DescriptorValidationException(this, "Repeated fields cannot have default values.");

+                }

+

+                try

+                {

+                    switch (FieldType)

+                    {

+                        case FieldType.Int32:

+                        case FieldType.SInt32:

+                        case FieldType.SFixed32:

+                            defaultValue = TextFormat.ParseInt32(Proto.DefaultValue);

+                            break;

+                        case FieldType.UInt32:

+                        case FieldType.Fixed32:

+                            defaultValue = TextFormat.ParseUInt32(Proto.DefaultValue);

+                            break;

+                        case FieldType.Int64:

+                        case FieldType.SInt64:

+                        case FieldType.SFixed64:

+                            defaultValue = TextFormat.ParseInt64(Proto.DefaultValue);

+                            break;

+                        case FieldType.UInt64:

+                        case FieldType.Fixed64:

+                            defaultValue = TextFormat.ParseUInt64(Proto.DefaultValue);

+                            break;

+                        case FieldType.Float:

+                            defaultValue = TextFormat.ParseFloat(Proto.DefaultValue);

+                            break;

+                        case FieldType.Double:

+                            defaultValue = TextFormat.ParseDouble(Proto.DefaultValue);

+                            break;

+                        case FieldType.Bool:

+                            if (Proto.DefaultValue == "true")

+                            {

+                                defaultValue = true;

+                            }

+                            else if (Proto.DefaultValue == "false")

+                            {

+                                defaultValue = false;

+                            }

+                            else

+                            {

+                                throw new FormatException("Boolean values must be \"true\" or \"false\"");

+                            }

+                            break;

+                        case FieldType.String:

+                            defaultValue = Proto.DefaultValue;

+                            break;

+                        case FieldType.Bytes:

+                            try

+                            {

+                                defaultValue = TextFormat.UnescapeBytes(Proto.DefaultValue);

+                            }

+                            catch (FormatException e)

+                            {

+                                throw new DescriptorValidationException(this,

+                                                                        "Couldn't parse default value: " + e.Message);

+                            }

+                            break;

+                        case FieldType.Enum:

+                            defaultValue = enumType.FindValueByName(Proto.DefaultValue);

+                            if (defaultValue == null)

+                            {

+                                throw new DescriptorValidationException(this,

+                                                                        "Unknown enum default value: \"" +

+                                                                        Proto.DefaultValue + "\"");

+                            }

+                            break;

+                        case FieldType.Message:

+                        case FieldType.Group:

+                            throw new DescriptorValidationException(this, "Message type had default value.");

+                    }

+                }

+                catch (FormatException e)

+                {

+                    DescriptorValidationException validationException =

+                        new DescriptorValidationException(this,

+                                                          "Could not parse default value: \"" + Proto.DefaultValue +

+                                                          "\"", e);

+                    throw validationException;

+                }

+            }

+            else

+            {

+                // Determine the default default for this field.

+                if (IsRepeated)

+                {

+                    defaultValue = Lists<object>.Empty;

+                }

+                else

+                {

+                    switch (MappedType)

+                    {

+                        case MappedType.Enum:

+                            // We guarantee elsewhere that an enum type always has at least

+                            // one possible value.

+                            defaultValue = enumType.Values[0];

+                            break;

+                        case MappedType.Message:

+                            defaultValue = null;

+                            break;

+                        default:

+                            defaultValue = GetDefaultValueForMappedType(MappedType);

+                            break;

+                    }

+                }

+            }

+

+            if (!IsExtension)

+            {

+                File.DescriptorPool.AddFieldByNumber(this);

+            }

+

+            if (containingType != null && containingType.Options.MessageSetWireFormat)

+            {

+                if (IsExtension)

+                {

+                    if (!IsOptional || FieldType != FieldType.Message)

+                    {

+                        throw new DescriptorValidationException(this,

+                                                                "Extensions of MessageSets must be optional messages.");

+                    }

+                }

+                else

+                {

+                    throw new DescriptorValidationException(this, "MessageSets cannot have fields, only extensions.");

+                }

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/FieldMappingAttribute.cs b/csharp/src/ProtocolBuffers/Descriptors/FieldMappingAttribute.cs
new file mode 100644
index 0000000..fc58d04
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/FieldMappingAttribute.cs
@@ -0,0 +1,86 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Collections.Generic;

+using System.Reflection;

+using Google.ProtocolBuffers.Collections;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Defined specifically for the <see cref="FieldType" /> enumeration,

+    /// this allows each field type to specify the mapped type and wire type.

+    /// </summary>

+    [CLSCompliant(false)]

+    [AttributeUsage(AttributeTargets.Field)]

+    public sealed class FieldMappingAttribute : Attribute

+    {

+        public FieldMappingAttribute(MappedType mappedType, WireFormat.WireType wireType)

+        {

+            MappedType = mappedType;

+            WireType = wireType;

+        }

+

+        public MappedType MappedType { get; private set; }

+        public WireFormat.WireType WireType { get; private set; }

+

+

+        /// <summary>

+        /// Immutable mapping from field type to mapped type. Built using the attributes on

+        /// FieldType values.

+        /// </summary>

+        private static readonly IDictionary<FieldType, FieldMappingAttribute> FieldTypeToMappedTypeMap = MapFieldTypes();

+

+        private static IDictionary<FieldType, FieldMappingAttribute> MapFieldTypes()

+        {

+            var map = new Dictionary<FieldType, FieldMappingAttribute>();

+            foreach (FieldInfo field in typeof(FieldType).GetFields(BindingFlags.Static | BindingFlags.Public))

+            {

+                FieldType fieldType = (FieldType) field.GetValue(null);

+                FieldMappingAttribute mapping =

+                    (FieldMappingAttribute) field.GetCustomAttributes(typeof(FieldMappingAttribute), false)[0];

+                map[fieldType] = mapping;

+            }

+            return Dictionaries.AsReadOnly(map);

+        }

+

+        internal static MappedType MappedTypeFromFieldType(FieldType type)

+        {

+            return FieldTypeToMappedTypeMap[type].MappedType;

+        }

+

+        internal static WireFormat.WireType WireTypeFromFieldType(FieldType type, bool packed)

+        {

+            return packed ? WireFormat.WireType.LengthDelimited : FieldTypeToMappedTypeMap[type].WireType;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/FieldType.cs b/csharp/src/ProtocolBuffers/Descriptors/FieldType.cs
new file mode 100644
index 0000000..056d3d4
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/FieldType.cs
@@ -0,0 +1,60 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Enumeration of all the possible field types. The odd formatting is to make it very clear

+    /// which attribute applies to which value, while maintaining a compact format.

+    /// </summary>

+    public enum FieldType

+    {

+        [FieldMapping(MappedType.Double, WireFormat.WireType.Fixed64)] Double,

+        [FieldMapping(MappedType.Single, WireFormat.WireType.Fixed32)] Float,

+        [FieldMapping(MappedType.Int64, WireFormat.WireType.Varint)] Int64,

+        [FieldMapping(MappedType.UInt64, WireFormat.WireType.Varint)] UInt64,

+        [FieldMapping(MappedType.Int32, WireFormat.WireType.Varint)] Int32,

+        [FieldMapping(MappedType.UInt64, WireFormat.WireType.Fixed64)] Fixed64,

+        [FieldMapping(MappedType.UInt32, WireFormat.WireType.Fixed32)] Fixed32,

+        [FieldMapping(MappedType.Boolean, WireFormat.WireType.Varint)] Bool,

+        [FieldMapping(MappedType.String, WireFormat.WireType.LengthDelimited)] String,

+        [FieldMapping(MappedType.Message, WireFormat.WireType.StartGroup)] Group,

+        [FieldMapping(MappedType.Message, WireFormat.WireType.LengthDelimited)] Message,

+        [FieldMapping(MappedType.ByteString, WireFormat.WireType.LengthDelimited)] Bytes,

+        [FieldMapping(MappedType.UInt32, WireFormat.WireType.Varint)] UInt32,

+        [FieldMapping(MappedType.Int32, WireFormat.WireType.Fixed32)] SFixed32,

+        [FieldMapping(MappedType.Int64, WireFormat.WireType.Fixed64)] SFixed64,

+        [FieldMapping(MappedType.Int32, WireFormat.WireType.Varint)] SInt32,

+        [FieldMapping(MappedType.Int64, WireFormat.WireType.Varint)] SInt64,

+        [FieldMapping(MappedType.Enum, WireFormat.WireType.Varint)] Enum

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/FileDescriptor.cs b/csharp/src/ProtocolBuffers/Descriptors/FileDescriptor.cs
new file mode 100644
index 0000000..d7075e3
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/FileDescriptor.cs
@@ -0,0 +1,498 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Collections.Generic;

+using System.Collections.ObjectModel;

+using System.IO;

+using Google.ProtocolBuffers.DescriptorProtos;

+using FileOptions = Google.ProtocolBuffers.DescriptorProtos.FileOptions;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Describes a .proto file, including everything defined within.

+    /// IDescriptor is implemented such that the File property returns this descriptor,

+    /// and the FullName is the same as the Name.

+    /// </summary>

+    public sealed class FileDescriptor : IDescriptor<FileDescriptorProto>

+    {

+        private FileDescriptorProto proto;

+        private readonly IList<MessageDescriptor> messageTypes;

+        private readonly IList<EnumDescriptor> enumTypes;

+        private readonly IList<ServiceDescriptor> services;

+        private readonly IList<FieldDescriptor> extensions;

+        private readonly IList<FileDescriptor> dependencies;

+        private readonly DescriptorPool pool;

+        private CSharpFileOptions csharpFileOptions;

+        private readonly object optionsLock = new object();

+

+        private FileDescriptor(FileDescriptorProto proto, FileDescriptor[] dependencies, DescriptorPool pool)

+        {

+            this.pool = pool;

+            this.proto = proto;

+            this.dependencies = new ReadOnlyCollection<FileDescriptor>((FileDescriptor[]) dependencies.Clone());

+

+            pool.AddPackage(Package, this);

+

+            messageTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.MessageTypeList,

+                                                                 (message, index) =>

+                                                                 new MessageDescriptor(message, this, null, index));

+

+            enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumTypeList,

+                                                              (enumType, index) =>

+                                                              new EnumDescriptor(enumType, this, null, index));

+

+            services = DescriptorUtil.ConvertAndMakeReadOnly(proto.ServiceList,

+                                                             (service, index) =>

+                                                             new ServiceDescriptor(service, this, index));

+

+            extensions = DescriptorUtil.ConvertAndMakeReadOnly(proto.ExtensionList,

+                                                               (field, index) =>

+                                                               new FieldDescriptor(field, this, null, index, true));

+        }

+

+

+        /// <summary>

+        /// Allows a file descriptor to be configured with a set of external options, e.g. from the

+        /// command-line arguments to protogen.

+        /// </summary>

+        public void ConfigureWithDefaultOptions(CSharpFileOptions options)

+        {

+            csharpFileOptions = BuildOrFakeWithDefaultOptions(options);

+        }

+

+        static readonly char[] PathSeperators = new char[] { '/', '\\' };

+        private CSharpFileOptions BuildOrFakeWithDefaultOptions(CSharpFileOptions defaultOptions)

+        {

+            // Fix for being able to relocate these files to any directory structure

+            if (proto.Package == "google.protobuf")

+            {

+                int ixslash = proto.Name.LastIndexOfAny(PathSeperators);

+                string filename = ixslash < 0 ? proto.Name : proto.Name.Substring(ixslash + 1);

+                // TODO(jonskeet): Check if we could use FileDescriptorProto.Descriptor.Name - interesting bootstrap issues)

+                if (filename == "descriptor.proto")

+                {

+                    return new CSharpFileOptions.Builder

+                               {

+                                   Namespace = "Google.ProtocolBuffers.DescriptorProtos",

+                                   UmbrellaClassname = "DescriptorProtoFile",

+                                   NestClasses = false,

+                                   MultipleFiles = false,

+                                   PublicClasses = true,

+                                   OutputDirectory = defaultOptions.OutputDirectory,

+                                   IgnoreGoogleProtobuf = defaultOptions.IgnoreGoogleProtobuf

+                               }.Build();

+                }

+                if (filename == "csharp_options.proto")

+                {

+                    return new CSharpFileOptions.Builder

+                               {

+                                   Namespace = "Google.ProtocolBuffers.DescriptorProtos",

+                                   UmbrellaClassname = "CSharpOptions",

+                                   NestClasses = false,

+                                   MultipleFiles = false,

+                                   PublicClasses = true,

+                                   OutputDirectory = defaultOptions.OutputDirectory,

+                                   IgnoreGoogleProtobuf = defaultOptions.IgnoreGoogleProtobuf

+                               }.Build();

+                }

+            }

+            CSharpFileOptions.Builder builder = defaultOptions.ToBuilder();

+            if (proto.Options.HasExtension(DescriptorProtos.CSharpOptions.CSharpFileOptions))

+            {

+                builder.MergeFrom(proto.Options.GetExtension(DescriptorProtos.CSharpOptions.CSharpFileOptions));

+            }

+            if (!builder.HasNamespace)

+            {

+                builder.Namespace = Package;

+            }

+            if (!builder.HasUmbrellaClassname)

+            {

+                int lastSlash = Name.LastIndexOf('/');

+                string baseName = Name.Substring(lastSlash + 1);

+                builder.UmbrellaClassname = NameHelpers.UnderscoresToPascalCase(NameHelpers.StripProto(baseName));

+            }

+

+            // Auto-fix for name collision by placing umbrella class into a new namespace.  This

+            // still won't fix the collisions with nesting enabled; however, you have to turn that on explicitly anyway.

+            if (!builder.NestClasses && !builder.HasUmbrellaNamespace)

+            {

+                bool collision = false;

+                foreach (IDescriptor d in MessageTypes)

+                {

+                    collision |= d.Name == builder.UmbrellaClassname;

+                }

+                foreach (IDescriptor d in Services)

+                {

+                    collision |= d.Name == builder.UmbrellaClassname;

+                }

+                foreach (IDescriptor d in EnumTypes)

+                {

+                    collision |= d.Name == builder.UmbrellaClassname;

+                }

+                if (collision)

+                {

+                    builder.UmbrellaNamespace = "Proto";

+                }

+            }

+

+            return builder.Build();

+        }

+

+        /// <value>

+        /// The descriptor in its protocol message representation.

+        /// </value>

+        public FileDescriptorProto Proto

+        {

+            get { return proto; }

+        }

+

+        /// <value>

+        /// The <see cref="DescriptorProtos.FileOptions" /> defined in <c>descriptor.proto</c>.

+        /// </value>

+        public FileOptions Options

+        {

+            get { return proto.Options; }

+        }

+

+        /// <summary>

+        /// Returns the C#-specific options for this file descriptor. This will always be

+        /// completely filled in.

+        /// </summary>

+        public CSharpFileOptions CSharpOptions

+        {

+            get

+            {

+                lock (optionsLock)

+                {

+                    if (csharpFileOptions == null)

+                    {

+                        csharpFileOptions = BuildOrFakeWithDefaultOptions(CSharpFileOptions.DefaultInstance);

+                    }

+                }

+                return csharpFileOptions;

+            }

+        }

+

+        /// <value>

+        /// The file name.

+        /// </value>

+        public string Name

+        {

+            get { return proto.Name; }

+        }

+

+        /// <summary>

+        /// The package as declared in the .proto file. This may or may not

+        /// be equivalent to the .NET namespace of the generated classes.

+        /// </summary>

+        public string Package

+        {

+            get { return proto.Package; }

+        }

+

+        /// <value>

+        /// Unmodifiable list of top-level message types declared in this file.

+        /// </value>

+        public IList<MessageDescriptor> MessageTypes

+        {

+            get { return messageTypes; }

+        }

+

+        /// <value>

+        /// Unmodifiable list of top-level enum types declared in this file.

+        /// </value>

+        public IList<EnumDescriptor> EnumTypes

+        {

+            get { return enumTypes; }

+        }

+

+        /// <value>

+        /// Unmodifiable list of top-level services declared in this file.

+        /// </value>

+        public IList<ServiceDescriptor> Services

+        {

+            get { return services; }

+        }

+

+        /// <value>

+        /// Unmodifiable list of top-level extensions declared in this file.

+        /// </value>

+        public IList<FieldDescriptor> Extensions

+        {

+            get { return extensions; }

+        }

+

+        /// <value>

+        /// Unmodifiable list of this file's dependencies (imports).

+        /// </value>

+        public IList<FileDescriptor> Dependencies

+        {

+            get { return dependencies; }

+        }

+

+        /// <value>

+        /// Implementation of IDescriptor.FullName - just returns the same as Name.

+        /// </value>

+        string IDescriptor.FullName

+        {

+            get { return Name; }

+        }

+

+        /// <value>

+        /// Implementation of IDescriptor.File - just returns this descriptor.

+        /// </value>

+        FileDescriptor IDescriptor.File

+        {

+            get { return this; }

+        }

+

+        /// <value>

+        /// Protocol buffer describing this descriptor.

+        /// </value>

+        IMessage IDescriptor.Proto

+        {

+            get { return Proto; }

+        }

+

+        /// <value>

+        /// Pool containing symbol descriptors.

+        /// </value>

+        internal DescriptorPool DescriptorPool

+        {

+            get { return pool; }

+        }

+

+        /// <summary>

+        /// Finds a type (message, enum, service or extension) in the file by name. Does not find nested types.

+        /// </summary>

+        /// <param name="name">The unqualified type name to look for.</param>

+        /// <typeparam name="T">The type of descriptor to look for (or ITypeDescriptor for any)</typeparam>

+        /// <returns>The type's descriptor, or null if not found.</returns>

+        public T FindTypeByName<T>(String name)

+            where T : class, IDescriptor

+        {

+            // Don't allow looking up nested types.  This will make optimization

+            // easier later.

+            if (name.IndexOf('.') != -1)

+            {

+                return null;

+            }

+            if (Package.Length > 0)

+            {

+                name = Package + "." + name;

+            }

+            T result = pool.FindSymbol<T>(name);

+            if (result != null && result.File == this)

+            {

+                return result;

+            }

+            return null;

+        }

+

+        /// <summary>

+        /// Builds a FileDescriptor from its protocol buffer representation.

+        /// </summary>

+        /// <param name="proto">The protocol message form of the FileDescriptor.</param>

+        /// <param name="dependencies">FileDescriptors corresponding to all of the

+        /// file's dependencies, in the exact order listed in the .proto file. May be null,

+        /// in which case it is treated as an empty array.</param>

+        /// <exception cref="DescriptorValidationException">If <paramref name="proto"/> is not

+        /// a valid descriptor. This can occur for a number of reasons, such as a field

+        /// having an undefined type or because two messages were defined with the same name.</exception>

+        public static FileDescriptor BuildFrom(FileDescriptorProto proto, FileDescriptor[] dependencies)

+        {

+            // Building descriptors involves two steps: translating and linking.

+            // In the translation step (implemented by FileDescriptor's

+            // constructor), we build an object tree mirroring the

+            // FileDescriptorProto's tree and put all of the descriptors into the

+            // DescriptorPool's lookup tables.  In the linking step, we look up all

+            // type references in the DescriptorPool, so that, for example, a

+            // FieldDescriptor for an embedded message contains a pointer directly

+            // to the Descriptor for that message's type.  We also detect undefined

+            // types in the linking step.

+            if (dependencies == null)

+            {

+                dependencies = new FileDescriptor[0];

+            }

+

+            DescriptorPool pool = new DescriptorPool(dependencies);

+            FileDescriptor result = new FileDescriptor(proto, dependencies, pool);

+

+            if (dependencies.Length != proto.DependencyCount)

+            {

+                throw new DescriptorValidationException(result,

+                                                        "Dependencies passed to FileDescriptor.BuildFrom() don't match " +

+                                                        "those listed in the FileDescriptorProto.");

+            }

+            for (int i = 0; i < proto.DependencyCount; i++)

+            {

+                if (dependencies[i].Name != proto.DependencyList[i])

+                {

+                    throw new DescriptorValidationException(result,

+                                                            "Dependencies passed to FileDescriptor.BuildFrom() don't match " +

+                                                            "those listed in the FileDescriptorProto.");

+                }

+            }

+

+            result.CrossLink();

+            return result;

+        }

+

+        private void CrossLink()

+        {

+            foreach (MessageDescriptor message in messageTypes)

+            {

+                message.CrossLink();

+            }

+

+            foreach (ServiceDescriptor service in services)

+            {

+                service.CrossLink();

+            }

+

+            foreach (FieldDescriptor extension in extensions)

+            {

+                extension.CrossLink();

+            }

+

+            foreach (MessageDescriptor message in messageTypes)

+            {

+                message.CheckRequiredFields();

+            }

+        }

+

+        /// <summary>

+        /// This method is to be called by generated code only.  It is equivalent

+        /// to BuildFrom except that the FileDescriptorProto is encoded in

+        /// protocol buffer wire format. This overload is maintained for backward

+        /// compatibility with source code generated before the custom options were available

+        /// (and working).

+        /// </summary>

+        public static FileDescriptor InternalBuildGeneratedFileFrom(byte[] descriptorData, FileDescriptor[] dependencies)

+        {

+            return InternalBuildGeneratedFileFrom(descriptorData, dependencies, x => null);

+        }

+

+        /// <summary>

+        /// This delegate should be used by generated code only. When calling

+        /// FileDescriptor.InternalBuildGeneratedFileFrom, the caller can provide

+        /// a callback which assigns the global variables defined in the generated code

+        /// which point at parts of the FileDescriptor. The callback returns an

+        /// Extension Registry which contains any extensions which might be used in

+        /// the descriptor - that is, extensions of the various "Options" messages defined

+        /// in descriptor.proto. The callback may also return null to indicate that

+        /// no extensions are used in the descriptor.

+        /// </summary>

+        /// <param name="descriptor"></param>

+        /// <returns></returns>

+        public delegate ExtensionRegistry InternalDescriptorAssigner(FileDescriptor descriptor);

+

+        public static FileDescriptor InternalBuildGeneratedFileFrom(byte[] descriptorData,

+                                                                    FileDescriptor[] dependencies,

+                                                                    InternalDescriptorAssigner descriptorAssigner)

+        {

+            FileDescriptorProto proto;

+            try

+            {

+                proto = FileDescriptorProto.ParseFrom(descriptorData);

+            }

+            catch (InvalidProtocolBufferException e)

+            {

+                throw new ArgumentException("Failed to parse protocol buffer descriptor for generated code.", e);

+            }

+

+            FileDescriptor result;

+            try

+            {

+                result = BuildFrom(proto, dependencies);

+            }

+            catch (DescriptorValidationException e)

+            {

+                throw new ArgumentException("Invalid embedded descriptor for \"" + proto.Name + "\".", e);

+            }

+

+            ExtensionRegistry registry = descriptorAssigner(result);

+

+            if (registry != null)

+            {

+                // We must re-parse the proto using the registry.

+                try

+                {

+                    proto = FileDescriptorProto.ParseFrom(descriptorData, registry);

+                }

+                catch (InvalidProtocolBufferException e)

+                {

+                    throw new ArgumentException("Failed to parse protocol buffer descriptor for generated code.", e);

+                }

+

+                result.ReplaceProto(proto);

+            }

+            return result;

+        }

+

+        /// <summary>

+        /// Replace our FileDescriptorProto with the given one, which is

+        /// identical except that it might contain extensions that weren't present

+        /// in the original. This method is needed for bootstrapping when a file

+        /// defines custom options. The options may be defined in the file itself,

+        /// so we can't actually parse them until we've constructed the descriptors,

+        /// but to construct the decsriptors we have to have parsed the descriptor

+        /// protos. So, we have to parse the descriptor protos a second time after

+        /// constructing the descriptors.

+        /// </summary>

+        private void ReplaceProto(FileDescriptorProto newProto)

+        {

+            proto = newProto;

+

+            for (int i = 0; i < messageTypes.Count; i++)

+            {

+                messageTypes[i].ReplaceProto(proto.GetMessageType(i));

+            }

+

+            for (int i = 0; i < enumTypes.Count; i++)

+            {

+                enumTypes[i].ReplaceProto(proto.GetEnumType(i));

+            }

+

+            for (int i = 0; i < services.Count; i++)

+            {

+                services[i].ReplaceProto(proto.GetService(i));

+            }

+

+            for (int i = 0; i < extensions.Count; i++)

+            {

+                extensions[i].ReplaceProto(proto.GetExtension(i));

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/IDescriptor.cs b/csharp/src/ProtocolBuffers/Descriptors/IDescriptor.cs
new file mode 100644
index 0000000..899c156
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/IDescriptor.cs
@@ -0,0 +1,55 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// The non-generic form of the IDescriptor interface. Useful for describing a general

+    /// descriptor.

+    /// </summary>

+    public interface IDescriptor

+    {

+        string Name { get; }

+        string FullName { get; }

+        FileDescriptor File { get; }

+        IMessage Proto { get; }

+    }

+

+    /// <summary>

+    /// Strongly-typed form of the IDescriptor interface.

+    /// </summary>

+    /// <typeparam name="TProto">Protocol buffer type underlying this descriptor type</typeparam>

+    public interface IDescriptor<TProto> : IDescriptor where TProto : IMessage

+    {

+        new TProto Proto { get; }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/IndexedDescriptorBase.cs b/csharp/src/ProtocolBuffers/Descriptors/IndexedDescriptorBase.cs
new file mode 100644
index 0000000..bdb4eb8
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/IndexedDescriptorBase.cs
@@ -0,0 +1,64 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using Google.ProtocolBuffers.DescriptorProtos;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Base class for descriptors which are also indexed. This is all of them other than

+    /// <see cref="FileDescriptor" />.

+    /// </summary>

+    public abstract class IndexedDescriptorBase<TProto, TOptions> : DescriptorBase<TProto, TOptions>

+        where TProto : IMessage<TProto>, IDescriptorProto<TOptions>

+    {

+        private readonly int index;

+

+        protected IndexedDescriptorBase(TProto proto, FileDescriptor file, string fullName, int index)

+            : base(proto, file, fullName)

+        {

+            this.index = index;

+        }

+

+        /// <value>

+        /// The index of this descriptor within its parent descriptor. 

+        /// </value>

+        /// <remarks>

+        /// This returns the index of this descriptor within its parent, for

+        /// this descriptor's type. (There can be duplicate values for different

+        /// types, e.g. one enum type with index 0 and one message type with index 0.)

+        /// </remarks>

+        public int Index

+        {

+            get { return index; }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/MappedType.cs b/csharp/src/ProtocolBuffers/Descriptors/MappedType.cs
new file mode 100644
index 0000000..0a55530
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/MappedType.cs
@@ -0,0 +1,52 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Type as it's mapped onto a .NET type.

+    /// </summary>

+    public enum MappedType

+    {

+        Int32,

+        Int64,

+        UInt32,

+        UInt64,

+        Single,

+        Double,

+        Boolean,

+        String,

+        ByteString,

+        Message,

+        Enum

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/MessageDescriptor.cs b/csharp/src/ProtocolBuffers/Descriptors/MessageDescriptor.cs
new file mode 100644
index 0000000..d438c0f
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/MessageDescriptor.cs
@@ -0,0 +1,288 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.DescriptorProtos;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Describes a message type.

+    /// </summary>

+    public sealed class MessageDescriptor : IndexedDescriptorBase<DescriptorProto, MessageOptions>

+    {

+        private readonly MessageDescriptor containingType;

+        private readonly IList<MessageDescriptor> nestedTypes;

+        private readonly IList<EnumDescriptor> enumTypes;

+        private readonly IList<FieldDescriptor> fields;

+        private readonly IList<FieldDescriptor> extensions;

+        private bool hasRequiredFields;

+

+        internal MessageDescriptor(DescriptorProto proto, FileDescriptor file, MessageDescriptor parent, int typeIndex)

+            : base(proto, file, ComputeFullName(file, parent, proto.Name), typeIndex)

+        {

+            containingType = parent;

+

+            nestedTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.NestedTypeList,

+                                                                (type, index) =>

+                                                                new MessageDescriptor(type, file, this, index));

+

+            enumTypes = DescriptorUtil.ConvertAndMakeReadOnly(proto.EnumTypeList,

+                                                              (type, index) =>

+                                                              new EnumDescriptor(type, file, this, index));

+

+            // TODO(jonskeet): Sort fields first?

+            fields = DescriptorUtil.ConvertAndMakeReadOnly(proto.FieldList,

+                                                           (field, index) =>

+                                                           new FieldDescriptor(field, file, this, index, false));

+

+            extensions = DescriptorUtil.ConvertAndMakeReadOnly(proto.ExtensionList,

+                                                               (field, index) =>

+                                                               new FieldDescriptor(field, file, this, index, true));

+

+            file.DescriptorPool.AddSymbol(this);

+        }

+

+        /// <value>

+        /// If this is a nested type, get the outer descriptor, otherwise null.

+        /// </value>

+        public MessageDescriptor ContainingType

+        {

+            get { return containingType; }

+        }

+

+        /// <value>

+        /// An unmodifiable list of this message type's fields.

+        /// </value>

+        public IList<FieldDescriptor> Fields

+        {

+            get { return fields; }

+        }

+

+        /// <value>

+        /// An unmodifiable list of this message type's extensions.

+        /// </value>

+        public IList<FieldDescriptor> Extensions

+        {

+            get { return extensions; }

+        }

+

+        /// <value>

+        /// An unmodifiable list of this message type's nested types.

+        /// </value>

+        public IList<MessageDescriptor> NestedTypes

+        {

+            get { return nestedTypes; }

+        }

+

+        /// <value>

+        /// An unmodifiable list of this message type's enum types.

+        /// </value>

+        public IList<EnumDescriptor> EnumTypes

+        {

+            get { return enumTypes; }

+        }

+

+        /// <summary>

+        /// Returns a pre-computed result as to whether this message

+        /// has required fields. This includes optional fields which are

+        /// message types which in turn have required fields, and any 

+        /// extension fields.

+        /// </summary>

+        internal bool HasRequiredFields

+        {

+            get { return hasRequiredFields; }

+        }

+

+        /// <summary>

+        /// Determines if the given field number is an extension.

+        /// </summary>

+        public bool IsExtensionNumber(int number)

+        {

+            foreach (DescriptorProto.Types.ExtensionRange range in Proto.ExtensionRangeList)

+            {

+                if (range.Start <= number && number < range.End)

+                {

+                    return true;

+                }

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// Finds a field by field name.

+        /// </summary>

+        /// <param name="name">The unqualified name of the field (e.g. "foo").</param>

+        /// <returns>The field's descriptor, or null if not found.</returns>

+        public FieldDescriptor FindFieldByName(String name)

+        {

+            return File.DescriptorPool.FindSymbol<FieldDescriptor>(FullName + "." + name);

+        }

+

+        /// <summary>

+        /// Finds a field by field number.

+        /// </summary>

+        /// <param name="number">The field number within this message type.</param>

+        /// <returns>The field's descriptor, or null if not found.</returns>

+        public FieldDescriptor FindFieldByNumber(int number)

+        {

+            return File.DescriptorPool.FindFieldByNumber(this, number);

+        }

+

+        /// <summary>

+        /// Finds a field by its property name, as it would be generated by protogen.

+        /// </summary>

+        /// <param name="propertyName">The property name within this message type.</param>

+        /// <returns>The field's descriptor, or null if not found.</returns>

+        public FieldDescriptor FindFieldByPropertyName(string propertyName)

+        {

+            // For reasonably short messages, this will be more efficient than a dictionary

+            // lookup. It also means we don't need to do things lazily with locks etc.

+            foreach (FieldDescriptor field in Fields)

+            {

+                if (field.CSharpOptions.PropertyName == propertyName)

+                {

+                    return field;

+                }

+            }

+            return null;

+        }

+

+        /// <summary>

+        /// Finds a nested descriptor by name. The is valid for fields, nested

+        /// message types and enums.

+        /// </summary>

+        /// <param name="name">The unqualified name of the descriptor, e.g. "Foo"</param>

+        /// <returns>The descriptor, or null if not found.</returns>

+        public T FindDescriptor<T>(string name)

+            where T : class, IDescriptor

+        {

+            return File.DescriptorPool.FindSymbol<T>(FullName + "." + name);

+        }

+

+        /// <summary>

+        /// Looks up and cross-links all fields, nested types, and extensions.

+        /// </summary>

+        internal void CrossLink()

+        {

+            foreach (MessageDescriptor message in nestedTypes)

+            {

+                message.CrossLink();

+            }

+

+            foreach (FieldDescriptor field in fields)

+            {

+                field.CrossLink();

+            }

+

+            foreach (FieldDescriptor extension in extensions)

+            {

+                extension.CrossLink();

+            }

+        }

+

+        internal void CheckRequiredFields()

+        {

+            IDictionary<MessageDescriptor, byte> alreadySeen = new Dictionary<MessageDescriptor, byte>();

+            hasRequiredFields = CheckRequiredFields(alreadySeen);

+        }

+

+        private bool CheckRequiredFields(IDictionary<MessageDescriptor, byte> alreadySeen)

+        {

+            if (alreadySeen.ContainsKey(this))

+            {

+                // The type is already in the cache. This means that either:

+                // a. The type has no required fields.

+                // b. We are in the midst of checking if the type has required fields,

+                //    somewhere up the stack.  In this case, we know that if the type

+                //    has any required fields, they'll be found when we return to it,

+                //    and the whole call to HasRequiredFields() will return true.

+                //    Therefore, we don't have to check if this type has required fields

+                //    here.

+                return false;

+            }

+            alreadySeen[this] = 0; // Value is irrelevant; we want set semantics

+

+            // If the type allows extensions, an extension with message type could contain

+            // required fields, so we have to be conservative and assume such an

+            // extension exists.

+            if (Proto.ExtensionRangeCount != 0)

+            {

+                return true;

+            }

+

+            foreach (FieldDescriptor field in Fields)

+            {

+                if (field.IsRequired)

+                {

+                    return true;

+                }

+                if (field.MappedType == MappedType.Message)

+                {

+                    if (field.MessageType.CheckRequiredFields(alreadySeen))

+                    {

+                        return true;

+                    }

+                }

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// See FileDescriptor.ReplaceProto

+        /// </summary>

+        internal override void ReplaceProto(DescriptorProto newProto)

+        {

+            base.ReplaceProto(newProto);

+

+            for (int i = 0; i < nestedTypes.Count; i++)

+            {

+                nestedTypes[i].ReplaceProto(newProto.GetNestedType(i));

+            }

+

+            for (int i = 0; i < enumTypes.Count; i++)

+            {

+                enumTypes[i].ReplaceProto(newProto.GetEnumType(i));

+            }

+

+            for (int i = 0; i < fields.Count; i++)

+            {

+                fields[i].ReplaceProto(newProto.GetField(i));

+            }

+

+            for (int i = 0; i < extensions.Count; i++)

+            {

+                extensions[i].ReplaceProto(newProto.GetExtension(i));

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/MethodDescriptor.cs b/csharp/src/ProtocolBuffers/Descriptors/MethodDescriptor.cs
new file mode 100644
index 0000000..f9ede24
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/MethodDescriptor.cs
@@ -0,0 +1,94 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using Google.ProtocolBuffers.DescriptorProtos;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Describes a single method in a service.

+    /// </summary>

+    public sealed class MethodDescriptor : IndexedDescriptorBase<MethodDescriptorProto, MethodOptions>

+    {

+        private readonly ServiceDescriptor service;

+        private MessageDescriptor inputType;

+        private MessageDescriptor outputType;

+

+        /// <value>

+        /// The service this method belongs to.

+        /// </value>

+        public ServiceDescriptor Service

+        {

+            get { return service; }

+        }

+

+        /// <value>

+        /// The method's input type.

+        /// </value>

+        public MessageDescriptor InputType

+        {

+            get { return inputType; }

+        }

+

+        /// <value>

+        /// The method's input type.

+        /// </value>

+        public MessageDescriptor OutputType

+        {

+            get { return outputType; }

+        }

+

+        internal MethodDescriptor(MethodDescriptorProto proto, FileDescriptor file,

+                                  ServiceDescriptor parent, int index)

+            : base(proto, file, parent.FullName + "." + proto.Name, index)

+        {

+            service = parent;

+            file.DescriptorPool.AddSymbol(this);

+        }

+

+        internal void CrossLink()

+        {

+            IDescriptor lookup = File.DescriptorPool.LookupSymbol(Proto.InputType, this);

+            if (!(lookup is MessageDescriptor))

+            {

+                throw new DescriptorValidationException(this, "\"" + Proto.InputType + "\" is not a message type.");

+            }

+            inputType = (MessageDescriptor) lookup;

+

+            lookup = File.DescriptorPool.LookupSymbol(Proto.OutputType, this);

+            if (!(lookup is MessageDescriptor))

+            {

+                throw new DescriptorValidationException(this, "\"" + Proto.OutputType + "\" is not a message type.");

+            }

+            outputType = (MessageDescriptor) lookup;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/PackageDescriptor.cs b/csharp/src/ProtocolBuffers/Descriptors/PackageDescriptor.cs
new file mode 100644
index 0000000..02549f9
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/PackageDescriptor.cs
@@ -0,0 +1,73 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Represents a package in the symbol table.  We use PackageDescriptors

+    /// just as placeholders so that someone cannot define, say, a message type

+    /// that has the same name as an existing package.

+    /// </summary>

+    internal sealed class PackageDescriptor : IDescriptor<IMessage>

+    {

+        private readonly string name;

+        private readonly string fullName;

+        private readonly FileDescriptor file;

+

+        internal PackageDescriptor(string name, string fullName, FileDescriptor file)

+        {

+            this.file = file;

+            this.fullName = fullName;

+            this.name = name;

+        }

+

+        public IMessage Proto

+        {

+            get { return file.Proto; }

+        }

+

+        public string Name

+        {

+            get { return name; }

+        }

+

+        public string FullName

+        {

+            get { return fullName; }

+        }

+

+        public FileDescriptor File

+        {

+            get { return file; }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Descriptors/ServiceDescriptor.cs b/csharp/src/ProtocolBuffers/Descriptors/ServiceDescriptor.cs
new file mode 100644
index 0000000..417c083
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Descriptors/ServiceDescriptor.cs
@@ -0,0 +1,89 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.DescriptorProtos;

+

+namespace Google.ProtocolBuffers.Descriptors

+{

+    /// <summary>

+    /// Describes a service type.

+    /// </summary>

+    public sealed class ServiceDescriptor : IndexedDescriptorBase<ServiceDescriptorProto, ServiceOptions>

+    {

+        private readonly IList<MethodDescriptor> methods;

+

+        public ServiceDescriptor(ServiceDescriptorProto proto, FileDescriptor file, int index)

+            : base(proto, file, ComputeFullName(file, null, proto.Name), index)

+        {

+            methods = DescriptorUtil.ConvertAndMakeReadOnly(proto.MethodList,

+                                                            (method, i) => new MethodDescriptor(method, file, this, i));

+

+            file.DescriptorPool.AddSymbol(this);

+        }

+

+        /// <value>

+        /// An unmodifiable list of methods in this service.

+        /// </value>

+        public IList<MethodDescriptor> Methods

+        {

+            get { return methods; }

+        }

+

+        /// <summary>

+        /// Finds a method by name.

+        /// </summary>

+        /// <param name="name">The unqualified name of the method (e.g. "Foo").</param>

+        /// <returns>The method's decsriptor, or null if not found.</returns>

+        public MethodDescriptor FindMethodByName(String name)

+        {

+            return File.DescriptorPool.FindSymbol<MethodDescriptor>(FullName + "." + name);

+        }

+

+        internal void CrossLink()

+        {

+            foreach (MethodDescriptor method in methods)

+            {

+                method.CrossLink();

+            }

+        }

+

+        internal override void ReplaceProto(ServiceDescriptorProto newProto)

+        {

+            base.ReplaceProto(newProto);

+            for (int i = 0; i < methods.Count; i++)

+            {

+                methods[i].ReplaceProto(newProto.GetMethod(i));

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/DynamicMessage.cs b/csharp/src/ProtocolBuffers/DynamicMessage.cs
new file mode 100644
index 0000000..e39efb1
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/DynamicMessage.cs
@@ -0,0 +1,512 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.IO;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// An implementation of IMessage that can represent arbitrary types, given a MessageaDescriptor.

+    /// </summary>

+    public sealed partial class DynamicMessage : AbstractMessage<DynamicMessage, DynamicMessage.Builder>

+    {

+        private readonly MessageDescriptor type;

+        private readonly FieldSet fields;

+        private readonly UnknownFieldSet unknownFields;

+        private int memoizedSize = -1;

+

+        /// <summary>

+        /// Creates a DynamicMessage with the given FieldSet.

+        /// </summary>

+        /// <param name="type"></param>

+        /// <param name="fields"></param>

+        /// <param name="unknownFields"></param>

+        private DynamicMessage(MessageDescriptor type, FieldSet fields, UnknownFieldSet unknownFields)

+        {

+            this.type = type;

+            this.fields = fields;

+            this.unknownFields = unknownFields;

+        }

+

+        /// <summary>

+        /// Returns a DynamicMessage representing the default instance of the given type.

+        /// </summary>

+        /// <param name="type"></param>

+        /// <returns></returns>

+        public static DynamicMessage GetDefaultInstance(MessageDescriptor type)

+        {

+            return new DynamicMessage(type, FieldSet.DefaultInstance, UnknownFieldSet.DefaultInstance);

+        }

+

+        /// <summary>

+        /// Parses a message of the given type from the given stream.

+        /// </summary>

+        public static DynamicMessage ParseFrom(MessageDescriptor type, ICodedInputStream input)

+        {

+            Builder builder = CreateBuilder(type);

+            Builder dynamicBuilder = builder.MergeFrom(input);

+            return dynamicBuilder.BuildParsed();

+        }

+

+        /// <summary>

+        /// Parse a message of the given type from the given stream and extension registry.

+        /// </summary>

+        /// <param name="type"></param>

+        /// <param name="input"></param>

+        /// <param name="extensionRegistry"></param>

+        /// <returns></returns>

+        public static DynamicMessage ParseFrom(MessageDescriptor type, ICodedInputStream input,

+                                               ExtensionRegistry extensionRegistry)

+        {

+            Builder builder = CreateBuilder(type);

+            Builder dynamicBuilder = builder.MergeFrom(input, extensionRegistry);

+            return dynamicBuilder.BuildParsed();

+        }

+

+        /// <summary>

+        /// Parses a message of the given type from the given stream.

+        /// </summary>

+        public static DynamicMessage ParseFrom(MessageDescriptor type, Stream input)

+        {

+            Builder builder = CreateBuilder(type);

+            Builder dynamicBuilder = builder.MergeFrom(input);

+            return dynamicBuilder.BuildParsed();

+        }

+

+        /// <summary>

+        /// Parse a message of the given type from the given stream and extension registry.

+        /// </summary>

+        /// <param name="type"></param>

+        /// <param name="input"></param>

+        /// <param name="extensionRegistry"></param>

+        /// <returns></returns>

+        public static DynamicMessage ParseFrom(MessageDescriptor type, Stream input, ExtensionRegistry extensionRegistry)

+        {

+            Builder builder = CreateBuilder(type);

+            Builder dynamicBuilder = builder.MergeFrom(input, extensionRegistry);

+            return dynamicBuilder.BuildParsed();

+        }

+

+        /// <summary>

+        /// Parse <paramref name="data"/> as a message of the given type and return it.

+        /// </summary>

+        public static DynamicMessage ParseFrom(MessageDescriptor type, ByteString data)

+        {

+            Builder builder = CreateBuilder(type);

+            Builder dynamicBuilder = builder.MergeFrom(data);

+            return dynamicBuilder.BuildParsed();

+        }

+

+        /// <summary>

+        /// Parse <paramref name="data"/> as a message of the given type and return it.

+        /// </summary>

+        public static DynamicMessage ParseFrom(MessageDescriptor type, ByteString data,

+                                               ExtensionRegistry extensionRegistry)

+        {

+            Builder builder = CreateBuilder(type);

+            Builder dynamicBuilder = builder.MergeFrom(data, extensionRegistry);

+            return dynamicBuilder.BuildParsed();

+        }

+

+        /// <summary>

+        /// Parse <paramref name="data"/> as a message of the given type and return it.

+        /// </summary>

+        public static DynamicMessage ParseFrom(MessageDescriptor type, byte[] data)

+        {

+            Builder builder = CreateBuilder(type);

+            Builder dynamicBuilder = builder.MergeFrom(data);

+            return dynamicBuilder.BuildParsed();

+        }

+

+        /// <summary>

+        /// Parse <paramref name="data"/> as a message of the given type and return it.

+        /// </summary>

+        public static DynamicMessage ParseFrom(MessageDescriptor type, byte[] data, ExtensionRegistry extensionRegistry)

+        {

+            Builder builder = CreateBuilder(type);

+            Builder dynamicBuilder = builder.MergeFrom(data, extensionRegistry);

+            return dynamicBuilder.BuildParsed();

+        }

+

+        /// <summary>

+        /// Constructs a builder for the given type.

+        /// </summary>

+        public static Builder CreateBuilder(MessageDescriptor type)

+        {

+            return new Builder(type);

+        }

+

+        /// <summary>

+        /// Constructs a builder for a message of the same type as <paramref name="prototype"/>,

+        /// and initializes it with the same contents.

+        /// </summary>

+        /// <param name="prototype"></param>

+        /// <returns></returns>

+        public static Builder CreateBuilder(IMessage prototype)

+        {

+            return new Builder(prototype.DescriptorForType).MergeFrom(prototype);

+        }

+

+        // -----------------------------------------------------------------

+        // Implementation of IMessage interface.

+

+        public override MessageDescriptor DescriptorForType

+        {

+            get { return type; }

+        }

+

+        public override DynamicMessage DefaultInstanceForType

+        {

+            get { return GetDefaultInstance(type); }

+        }

+

+        public override IDictionary<FieldDescriptor, object> AllFields

+        {

+            get { return fields.AllFieldDescriptors; }

+        }

+

+        public override bool HasField(FieldDescriptor field)

+        {

+            VerifyContainingType(field);

+            return fields.HasField(field);

+        }

+

+        public override object this[FieldDescriptor field]

+        {

+            get

+            {

+                VerifyContainingType(field);

+                object result = fields[field];

+                if (result == null)

+                {

+                    result = GetDefaultInstance(field.MessageType);

+                }

+                return result;

+            }

+        }

+

+        public override int GetRepeatedFieldCount(FieldDescriptor field)

+        {

+            VerifyContainingType(field);

+            return fields.GetRepeatedFieldCount(field);

+        }

+

+        public override object this[FieldDescriptor field, int index]

+        {

+            get

+            {

+                VerifyContainingType(field);

+                return fields[field, index];

+            }

+        }

+

+        public override UnknownFieldSet UnknownFields

+        {

+            get { return unknownFields; }

+        }

+

+        public bool Initialized

+        {

+            get { return fields.IsInitializedWithRespectTo(type.Fields); }

+        }

+

+        public override void WriteTo(ICodedOutputStream output)

+        {

+            fields.WriteTo(output);

+            if (type.Options.MessageSetWireFormat)

+            {

+                unknownFields.WriteAsMessageSetTo(output);

+            }

+            else

+            {

+                unknownFields.WriteTo(output);

+            }

+        }

+

+        public override int SerializedSize

+        {

+            get

+            {

+                int size = memoizedSize;

+                if (size != -1)

+                {

+                    return size;

+                }

+

+                size = fields.SerializedSize;

+                if (type.Options.MessageSetWireFormat)

+                {

+                    size += unknownFields.SerializedSizeAsMessageSet;

+                }

+                else

+                {

+                    size += unknownFields.SerializedSize;

+                }

+

+                memoizedSize = size;

+                return size;

+            }

+        }

+

+        public override Builder CreateBuilderForType()

+        {

+            return new Builder(type);

+        }

+

+        public override Builder ToBuilder()

+        {

+            return CreateBuilderForType().MergeFrom(this);

+        }

+

+        /// <summary>

+        /// Verifies that the field is a field of this message.

+        /// </summary>

+        private void VerifyContainingType(FieldDescriptor field)

+        {

+            if (field.ContainingType != type)

+            {

+                throw new ArgumentException("FieldDescriptor does not match message type.");

+            }

+        }

+

+        /// <summary>

+        /// Builder for dynamic messages. Instances are created with DynamicMessage.CreateBuilder.

+        /// </summary>

+        public sealed partial class Builder : AbstractBuilder<DynamicMessage, Builder>

+        {

+            private readonly MessageDescriptor type;

+            private FieldSet fields;

+            private UnknownFieldSet unknownFields;

+

+            internal Builder(MessageDescriptor type)

+            {

+                this.type = type;

+                this.fields = FieldSet.CreateInstance();

+                this.unknownFields = UnknownFieldSet.DefaultInstance;

+            }

+

+            protected override Builder ThisBuilder

+            {

+                get { return this; }

+            }

+

+            public override Builder Clear()

+            {

+                fields.Clear();

+                return this;

+            }

+

+            public override Builder MergeFrom(IMessage other)

+            {

+                if (other.DescriptorForType != type)

+                {

+                    throw new ArgumentException("MergeFrom(IMessage) can only merge messages of the same type.");

+                }

+                fields.MergeFrom(other);

+                MergeUnknownFields(other.UnknownFields);

+                return this;

+            }

+

+            public override Builder MergeFrom(DynamicMessage other)

+            {

+                IMessage downcast = other;

+                return MergeFrom(downcast);

+            }

+

+            public override DynamicMessage Build()

+            {

+                if (fields != null && !IsInitialized)

+                {

+                    throw new UninitializedMessageException(new DynamicMessage(type, fields, unknownFields));

+                }

+                return BuildPartial();

+            }

+

+            /// <summary>

+            /// Helper for DynamicMessage.ParseFrom() methods to call. Throws

+            /// InvalidProtocolBufferException 

+            /// </summary>

+            /// <returns></returns>

+            internal DynamicMessage BuildParsed()

+            {

+                if (!IsInitialized)

+                {

+                    throw new UninitializedMessageException(new DynamicMessage(type, fields, unknownFields)).

+                        AsInvalidProtocolBufferException();

+                }

+                return BuildPartial();

+            }

+

+            public override DynamicMessage BuildPartial()

+            {

+                if (fields == null)

+                {

+                    throw new InvalidOperationException("Build() has already been called on this Builder.");

+                }

+                fields.MakeImmutable();

+                DynamicMessage result = new DynamicMessage(type, fields, unknownFields);

+                fields = null;

+                unknownFields = null;

+                return result;

+            }

+

+            public override Builder Clone()

+            {

+                Builder result = new Builder(type);

+                result.fields.MergeFrom(fields);

+                return result;

+            }

+

+            public override bool IsInitialized

+            {

+                get { return fields.IsInitializedWithRespectTo(type.Fields); }

+            }

+

+            public override Builder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry)

+            {

+                UnknownFieldSet.Builder unknownFieldsBuilder = UnknownFieldSet.CreateBuilder(unknownFields);

+                unknownFieldsBuilder.MergeFrom(input, extensionRegistry, this);

+                unknownFields = unknownFieldsBuilder.Build();

+                return this;

+            }

+

+            public override MessageDescriptor DescriptorForType

+            {

+                get { return type; }

+            }

+

+            public override DynamicMessage DefaultInstanceForType

+            {

+                get { return GetDefaultInstance(type); }

+            }

+

+            public override IDictionary<FieldDescriptor, object> AllFields

+            {

+                get { return fields.AllFieldDescriptors; }

+            }

+

+            public override IBuilder CreateBuilderForField(FieldDescriptor field)

+            {

+                VerifyContainingType(field);

+                if (field.MappedType != MappedType.Message)

+                {

+                    throw new ArgumentException("CreateBuilderForField is only valid for fields with message type.");

+                }

+                return new Builder(field.MessageType);

+            }

+

+            public override bool HasField(FieldDescriptor field)

+            {

+                VerifyContainingType(field);

+                return fields.HasField(field);

+            }

+

+            public override object this[FieldDescriptor field, int index]

+            {

+                get

+                {

+                    VerifyContainingType(field);

+                    return fields[field, index];

+                }

+                set

+                {

+                    VerifyContainingType(field);

+                    fields[field, index] = value;

+                }

+            }

+

+            public override object this[FieldDescriptor field]

+            {

+                get

+                {

+                    VerifyContainingType(field);

+                    object result = fields[field];

+                    if (result == null)

+                    {

+                        result = GetDefaultInstance(field.MessageType);

+                    }

+                    return result;

+                }

+                set

+                {

+                    VerifyContainingType(field);

+                    fields[field] = value;

+                }

+            }

+

+            public override Builder ClearField(FieldDescriptor field)

+            {

+                VerifyContainingType(field);

+                fields.ClearField(field);

+                return this;

+            }

+

+            public override int GetRepeatedFieldCount(FieldDescriptor field)

+            {

+                VerifyContainingType(field);

+                return fields.GetRepeatedFieldCount(field);

+            }

+

+            public override Builder AddRepeatedField(FieldDescriptor field, object value)

+            {

+                VerifyContainingType(field);

+                fields.AddRepeatedField(field, value);

+                return this;

+            }

+

+            public override UnknownFieldSet UnknownFields

+            {

+                get { return unknownFields; }

+                set { unknownFields = value; }

+            }

+

+            /// <summary>

+            /// Verifies that the field is a field of this message.

+            /// </summary>

+            /// <param name="field"></param>

+            private void VerifyContainingType(FieldDescriptor field)

+            {

+                if (field.ContainingType != type)

+                {

+                    throw new ArgumentException("FieldDescriptor does not match message type.");

+                }

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/EnumLite.cs b/csharp/src/ProtocolBuffers/EnumLite.cs
new file mode 100644
index 0000000..1301ec2
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/EnumLite.cs
@@ -0,0 +1,234 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+

+namespace Google.ProtocolBuffers

+{

+    ///<summary>

+    ///Interface for an enum value or value descriptor, to be used in FieldSet.

+    ///The lite library stores enum values directly in FieldSets but the full

+    ///library stores EnumValueDescriptors in order to better support reflection.

+    ///</summary>

+    public interface IEnumLite

+    {

+        int Number { get; }

+        string Name { get; }

+    }

+

+    ///<summary>

+    ///Interface for an object which maps integers to {@link EnumLite}s.

+    ///{@link Descriptors.EnumDescriptor} implements this interface by mapping

+    ///numbers to {@link Descriptors.EnumValueDescriptor}s.  Additionally,

+    ///every generated enum type has a static method internalGetValueMap() which

+    ///returns an implementation of this type that maps numbers to enum values.

+    ///</summary>

+    public interface IEnumLiteMap<T> : IEnumLiteMap

+        where T : IEnumLite

+    {

+        new T FindValueByNumber(int number);

+    }

+

+    public interface IEnumLiteMap

+    {

+        bool IsValidValue(IEnumLite value);

+        IEnumLite FindValueByNumber(int number);

+        IEnumLite FindValueByName(string name);

+    }

+

+    public class EnumLiteMap<TEnum> : IEnumLiteMap<IEnumLite>

+        where TEnum : struct, IComparable, IFormattable

+    {

+        private struct EnumValue : IEnumLite

+        {

+            private readonly TEnum value;

+

+            public EnumValue(TEnum value)

+            {

+                this.value = value;

+            }

+

+            int IEnumLite.Number

+            {

+                get { return Convert.ToInt32(value); }

+            }

+

+            string IEnumLite.Name

+            {

+                get { return value.ToString(); }

+            }

+        }

+

+        public IEnumLite FindValueByNumber(int number)

+        {

+            TEnum val = default(TEnum);

+            if (EnumParser<TEnum>.TryConvert(number, ref val))

+            {

+                return new EnumValue(val);

+            }

+            return null;

+        }

+

+        public IEnumLite FindValueByName(string name)

+        {

+            TEnum val = default(TEnum);

+            if (EnumParser<TEnum>.TryConvert(name, ref val))

+            {

+                return new EnumValue(val);

+            }

+            return null;

+        }

+

+        public bool IsValidValue(IEnumLite value)

+        {

+            TEnum val = default(TEnum);

+            return EnumParser<TEnum>.TryConvert(value.Number, ref val);

+        }

+    }

+

+    public static class EnumParser<T> where T : struct, IComparable, IFormattable

+    {

+        private static readonly Dictionary<int, T> _byNumber;

+        private static Dictionary<string, T> _byName;

+

+        static EnumParser()

+        {

+            int[] array;

+            try

+            {

+#if CLIENTPROFILE

+                // It will actually be a T[], but the CLR will let us convert.

+                array = (int[])Enum.GetValues(typeof(T));

+#else

+                var temp = new List<T>();

+                foreach (var fld in typeof (T).GetFields(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static))

+                {

+                    if (fld.IsLiteral && fld.FieldType == typeof(T))

+                    {

+                        temp.Add((T)fld.GetValue(null));

+                    }

+                }

+                array = (int[])(object)temp.ToArray();

+#endif

+            }

+            catch

+            {

+                _byNumber = null;

+                return;

+            }

+

+            _byNumber = new Dictionary<int, T>(array.Length);

+            foreach (int i in array)

+            {

+                _byNumber[i] = (T)(object)i;

+            }

+        }

+

+        public static bool TryConvert(object input, ref T value)

+        {

+            if (input is int || input is T)

+            {

+                return TryConvert((int)input, ref value);

+            }

+            if (input is string)

+            {

+                return TryConvert((string)input, ref value);

+            }

+            return false;

+        }

+

+        /// <summary>

+        /// Tries to convert an integer to its enum representation. This would take an out parameter,

+        /// but the caller uses ref, so this approach is simpler.

+        /// </summary>

+        public static bool TryConvert(int number, ref T value)

+        {

+            // null indicates an exception at construction, use native IsDefined.

+            if (_byNumber == null)

+            {

+                return Enum.IsDefined(typeof(T), number);

+            }

+            T converted;

+            if (_byNumber != null && _byNumber.TryGetValue(number, out converted))

+            {

+                value = converted;

+                return true;

+            }

+

+            return false;

+        }

+

+        /// <summary>

+        /// Tries to convert a string to its enum representation. This would take an out parameter,

+        /// but the caller uses ref, so this approach is simpler.

+        /// </summary>

+        public static bool TryConvert(string name, ref T value)

+        {

+            // null indicates an exception at construction, use native IsDefined/Parse.

+            if (_byNumber == null)

+            {

+                if (Enum.IsDefined(typeof(T), name))

+                {

+                    value = (T)Enum.Parse(typeof(T), name, false);

+                    return true;

+                }

+                return false;

+            }

+

+            // known race, possible multiple threads each build their own copy; however, last writer will win

+            var map = _byName;

+            if (map == null)

+            {

+                map = new Dictionary<string, T>(StringComparer.Ordinal);

+                foreach (var possible in _byNumber.Values)

+                {

+                    map[possible.ToString()] = possible;

+                }

+                _byName = map;

+            }

+

+            T converted;

+            if (map.TryGetValue(name, out converted))

+            {

+                value = converted;

+                return true;

+            }

+

+            return false;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ExtendableBuilder.cs b/csharp/src/ProtocolBuffers/ExtendableBuilder.cs
new file mode 100644
index 0000000..111ff57
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ExtendableBuilder.cs
@@ -0,0 +1,213 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    public abstract partial class ExtendableBuilder<TMessage, TBuilder> : GeneratedBuilder<TMessage, TBuilder>

+        where TMessage : ExtendableMessage<TMessage, TBuilder>

+        where TBuilder : GeneratedBuilder<TMessage, TBuilder>, new()

+    {

+        protected ExtendableBuilder()

+        {

+        }

+

+        /// <summary>

+        /// Checks if a singular extension is present

+        /// </summary>

+        public bool HasExtension<TExtension>(GeneratedExtensionBase<TExtension> extension)

+        {

+            return MessageBeingBuilt.HasExtension(extension);

+        }

+

+        /// <summary>

+        /// Returns the number of elements in a repeated extension.

+        /// </summary>

+        public int GetExtensionCount<TExtension>(GeneratedExtensionBase<IList<TExtension>> extension)

+        {

+            return MessageBeingBuilt.GetExtensionCount(extension);

+        }

+

+        /// <summary>

+        /// Returns the value of an extension.

+        /// </summary>

+        public TExtension GetExtension<TExtension>(GeneratedExtensionBase<TExtension> extension)

+        {

+            return MessageBeingBuilt.GetExtension(extension);

+        }

+

+        /// <summary>

+        /// Returns one element of a repeated extension.

+        /// </summary>

+        public TExtension GetExtension<TExtension>(GeneratedExtensionBase<IList<TExtension>> extension, int index)

+        {

+            return MessageBeingBuilt.GetExtension(extension, index);

+        }

+

+        /// <summary>

+        /// Sets the value of an extension.

+        /// </summary>

+        public TBuilder SetExtension<TExtension>(GeneratedExtensionBase<TExtension> extension, TExtension value)

+        {

+            ExtendableMessage<TMessage, TBuilder> message = MessageBeingBuilt;

+            message.VerifyExtensionContainingType(extension);

+            message.Extensions[extension.Descriptor] = extension.ToReflectionType(value);

+            return ThisBuilder;

+        }

+

+        /// <summary>

+        /// Sets the value of one element of a repeated extension.

+        /// </summary>

+        public TBuilder SetExtension<TExtension>(GeneratedExtensionBase<IList<TExtension>> extension, int index,

+                                                 TExtension value)

+        {

+            ExtendableMessage<TMessage, TBuilder> message = MessageBeingBuilt;

+            message.VerifyExtensionContainingType(extension);

+            message.Extensions[extension.Descriptor, index] = extension.SingularToReflectionType(value);

+            return ThisBuilder;

+        }

+

+        /// <summary>

+        /// Appends a value to a repeated extension.

+        /// </summary>

+        public TBuilder AddExtension<TExtension>(GeneratedExtensionBase<IList<TExtension>> extension, TExtension value)

+        {

+            ExtendableMessage<TMessage, TBuilder> message = MessageBeingBuilt;

+            message.VerifyExtensionContainingType(extension);

+            message.Extensions.AddRepeatedField(extension.Descriptor, extension.SingularToReflectionType(value));

+            return ThisBuilder;

+        }

+

+        /// <summary>

+        /// Clears an extension.

+        /// </summary>

+        public TBuilder ClearExtension<TExtension>(GeneratedExtensionBase<TExtension> extension)

+        {

+            ExtendableMessage<TMessage, TBuilder> message = MessageBeingBuilt;

+            message.VerifyExtensionContainingType(extension);

+            message.Extensions.ClearField(extension.Descriptor);

+            return ThisBuilder;

+        }

+

+        /// <summary>

+        /// Called by subclasses to parse an unknown field or an extension.

+        /// </summary>

+        /// <returns>true unless the tag is an end-group tag</returns>

+        [CLSCompliant(false)]

+        protected override bool ParseUnknownField(ICodedInputStream input, UnknownFieldSet.Builder unknownFields,

+                                                  ExtensionRegistry extensionRegistry, uint tag, string fieldName)

+        {

+            return unknownFields.MergeFieldFrom(input, extensionRegistry, this, tag, fieldName);

+        }

+

+        // ---------------------------------------------------------------

+        // Reflection

+

+

+        public override object this[FieldDescriptor field, int index]

+        {

+            set

+            {

+                if (field.IsExtension)

+                {

+                    ExtendableMessage<TMessage, TBuilder> message = MessageBeingBuilt;

+                    message.VerifyContainingType(field);

+                    message.Extensions[field, index] = value;

+                }

+                else

+                {

+                    base[field, index] = value;

+                }

+            }

+        }

+

+

+        public override object this[FieldDescriptor field]

+        {

+            set

+            {

+                if (field.IsExtension)

+                {

+                    ExtendableMessage<TMessage, TBuilder> message = MessageBeingBuilt;

+                    message.VerifyContainingType(field);

+                    message.Extensions[field] = value;

+                }

+                else

+                {

+                    base[field] = value;

+                }

+            }

+        }

+

+        public override TBuilder ClearField(FieldDescriptor field)

+        {

+            if (field.IsExtension)

+            {

+                ExtendableMessage<TMessage, TBuilder> message = MessageBeingBuilt;

+                message.VerifyContainingType(field);

+                message.Extensions.ClearField(field);

+                return ThisBuilder;

+            }

+            else

+            {

+                return base.ClearField(field);

+            }

+        }

+

+        public override TBuilder AddRepeatedField(FieldDescriptor field, object value)

+        {

+            if (field.IsExtension)

+            {

+                ExtendableMessage<TMessage, TBuilder> message = MessageBeingBuilt;

+                message.VerifyContainingType(field);

+                message.Extensions.AddRepeatedField(field, value);

+                return ThisBuilder;

+            }

+            else

+            {

+                return base.AddRepeatedField(field, value);

+            }

+        }

+

+        protected void MergeExtensionFields(ExtendableMessage<TMessage, TBuilder> other)

+        {

+            MessageBeingBuilt.Extensions.MergeFrom(other.Extensions);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ExtendableBuilderLite.cs b/csharp/src/ProtocolBuffers/ExtendableBuilderLite.cs
new file mode 100644
index 0000000..2a71aa4
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ExtendableBuilderLite.cs
@@ -0,0 +1,346 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    public abstract partial class ExtendableBuilderLite<TMessage, TBuilder> : GeneratedBuilderLite<TMessage, TBuilder>

+        where TMessage : ExtendableMessageLite<TMessage, TBuilder>

+        where TBuilder : GeneratedBuilderLite<TMessage, TBuilder>

+    {

+        protected ExtendableBuilderLite()

+        {

+        }

+

+        /// <summary>

+        /// Checks if a singular extension is present

+        /// </summary>

+        public bool HasExtension<TExtension>(GeneratedExtensionLite<TMessage, TExtension> extension)

+        {

+            return MessageBeingBuilt.HasExtension(extension);

+        }

+

+        /// <summary>

+        /// Returns the number of elements in a repeated extension.

+        /// </summary>

+        public int GetExtensionCount<TExtension>(GeneratedExtensionLite<TMessage, IList<TExtension>> extension)

+        {

+            return MessageBeingBuilt.GetExtensionCount(extension);

+        }

+

+        /// <summary>

+        /// Returns the value of an extension.

+        /// </summary>

+        public TExtension GetExtension<TExtension>(GeneratedExtensionLite<TMessage, TExtension> extension)

+        {

+            return MessageBeingBuilt.GetExtension(extension);

+        }

+

+        /// <summary>

+        /// Returns one element of a repeated extension.

+        /// </summary>

+        public TExtension GetExtension<TExtension>(GeneratedExtensionLite<TMessage, IList<TExtension>> extension,

+                                                   int index)

+        {

+            return MessageBeingBuilt.GetExtension(extension, index);

+        }

+

+        /// <summary>

+        /// Sets the value of an extension.

+        /// </summary>

+        public TBuilder SetExtension<TExtension>(GeneratedExtensionLite<TMessage, TExtension> extension,

+                                                 TExtension value)

+        {

+            ExtendableMessageLite<TMessage, TBuilder> message = MessageBeingBuilt;

+            message.VerifyExtensionContainingType(extension);

+            message.Extensions[extension.Descriptor] = extension.ToReflectionType(value);

+            return ThisBuilder;

+        }

+

+        /// <summary>

+        /// Sets the value of one element of a repeated extension.

+        /// </summary>

+        public TBuilder SetExtension<TExtension>(GeneratedExtensionLite<TMessage, IList<TExtension>> extension,

+                                                 int index, TExtension value)

+        {

+            ExtendableMessageLite<TMessage, TBuilder> message = MessageBeingBuilt;

+            message.VerifyExtensionContainingType(extension);

+            message.Extensions[extension.Descriptor, index] = extension.SingularToReflectionType(value);

+            return ThisBuilder;

+        }

+

+        /// <summary>

+        /// Appends a value to a repeated extension.

+        /// </summary>

+        public TBuilder AddExtension<TExtension>(GeneratedExtensionLite<TMessage, IList<TExtension>> extension,

+                                                 TExtension value)

+        {

+            ExtendableMessageLite<TMessage, TBuilder> message = MessageBeingBuilt;

+            message.VerifyExtensionContainingType(extension);

+            message.Extensions.AddRepeatedField(extension.Descriptor, extension.SingularToReflectionType(value));

+            return ThisBuilder;

+        }

+

+        /// <summary>

+        /// Clears an extension.

+        /// </summary>

+        public TBuilder ClearExtension<TExtension>(GeneratedExtensionLite<TMessage, TExtension> extension)

+        {

+            ExtendableMessageLite<TMessage, TBuilder> message = MessageBeingBuilt;

+            message.VerifyExtensionContainingType(extension);

+            message.Extensions.ClearField(extension.Descriptor);

+            return ThisBuilder;

+        }

+

+        /// <summary>

+        /// Called by subclasses to parse an unknown field or an extension.

+        /// </summary>

+        /// <returns>true unless the tag is an end-group tag</returns>

+        [CLSCompliant(false)]

+        protected override bool ParseUnknownField(ICodedInputStream input,

+                                                  ExtensionRegistry extensionRegistry, uint tag, string fieldName)

+        {

+            FieldSet extensions = MessageBeingBuilt.Extensions;

+

+            WireFormat.WireType wireType = WireFormat.GetTagWireType(tag);

+            int fieldNumber = WireFormat.GetTagFieldNumber(tag);

+            IGeneratedExtensionLite extension = extensionRegistry[DefaultInstanceForType, fieldNumber];

+

+            if (extension == null) //unknown field

+            {

+                return input.SkipField();

+            }

+

+            IFieldDescriptorLite field = extension.Descriptor;

+

+

+            // Unknown field or wrong wire type. Skip.

+            if (field == null)

+            {

+                return input.SkipField();

+            }

+            WireFormat.WireType expectedType = field.IsPacked

+                                                   ? WireFormat.WireType.LengthDelimited

+                                                   : WireFormat.GetWireType(field.FieldType);

+            if (wireType != expectedType)

+            {

+                expectedType = WireFormat.GetWireType(field.FieldType);

+                if (wireType == expectedType)

+                {

+                    //Allowed as of 2.3, this is unpacked data for a packed array

+                }

+                else if (field.IsRepeated && wireType == WireFormat.WireType.LengthDelimited &&

+                         (expectedType == WireFormat.WireType.Varint || expectedType == WireFormat.WireType.Fixed32 ||

+                          expectedType == WireFormat.WireType.Fixed64))

+                {

+                    //Allowed as of 2.3, this is packed data for an unpacked array

+                }

+                else

+                {

+                    return input.SkipField();

+                }

+            }

+            if (!field.IsRepeated && wireType != WireFormat.GetWireType(field.FieldType)) //invalid wire type

+            {

+                return input.SkipField();

+            }

+

+            switch (field.FieldType)

+            {

+                case FieldType.Group:

+                case FieldType.Message:

+                    {

+                        if (!field.IsRepeated)

+                        {

+                            IMessageLite message = extensions[extension.Descriptor] as IMessageLite;

+                            IBuilderLite subBuilder = (message ?? extension.MessageDefaultInstance).WeakToBuilder();

+

+                            if (field.FieldType == FieldType.Group)

+                            {

+                                input.ReadGroup(field.FieldNumber, subBuilder, extensionRegistry);

+                            }

+                            else

+                            {

+                                input.ReadMessage(subBuilder, extensionRegistry);

+                            }

+

+                            extensions[field] = subBuilder.WeakBuild();

+                        }

+                        else

+                        {

+                            List<IMessageLite> list = new List<IMessageLite>();

+                            if (field.FieldType == FieldType.Group)

+                            {

+                                input.ReadGroupArray(tag, fieldName, list, extension.MessageDefaultInstance,

+                                                     extensionRegistry);

+                            }

+                            else

+                            {

+                                input.ReadMessageArray(tag, fieldName, list, extension.MessageDefaultInstance,

+                                                       extensionRegistry);

+                            }

+

+                            foreach (IMessageLite m in list)

+                            {

+                                extensions.AddRepeatedField(field, m);

+                            }

+                            return true;

+                        }

+                        break;

+                    }

+                case FieldType.Enum:

+                    {

+                        if (!field.IsRepeated)

+                        {

+                            object unknown;

+                            IEnumLite value = null;

+                            if (input.ReadEnum(ref value, out unknown, field.EnumType))

+                            {

+                                extensions[field] = value;

+                            }

+                        }

+                        else

+                        {

+                            ICollection<object> unknown;

+                            List<IEnumLite> list = new List<IEnumLite>();

+                            input.ReadEnumArray(tag, fieldName, list, out unknown, field.EnumType);

+

+                            foreach (IEnumLite en in list)

+                            {

+                                extensions.AddRepeatedField(field, en);

+                            }

+                        }

+                        break;

+                    }

+                default:

+                    {

+                        if (!field.IsRepeated)

+                        {

+                            object value = null;

+                            if (input.ReadPrimitiveField(field.FieldType, ref value))

+                            {

+                                extensions[field] = value;

+                            }

+                        }

+                        else

+                        {

+                            List<object> list = new List<object>();

+                            input.ReadPrimitiveArray(field.FieldType, tag, fieldName, list);

+                            foreach (object oval in list)

+                            {

+                                extensions.AddRepeatedField(field, oval);

+                            }

+                        }

+                        break;

+                    }

+            }

+

+            return true;

+        }

+

+        #region Reflection

+

+        public object this[IFieldDescriptorLite field, int index]

+        {

+            set

+            {

+                if (field.IsExtension)

+                {

+                    ExtendableMessageLite<TMessage, TBuilder> message = MessageBeingBuilt;

+                    message.Extensions[field, index] = value;

+                }

+                else

+                {

+                    throw new NotSupportedException("Not supported in the lite runtime.");

+                }

+            }

+        }

+

+        public object this[IFieldDescriptorLite field]

+        {

+            set

+            {

+                if (field.IsExtension)

+                {

+                    ExtendableMessageLite<TMessage, TBuilder> message = MessageBeingBuilt;

+                    message.Extensions[field] = value;

+                }

+                else

+                {

+                    throw new NotSupportedException("Not supported in the lite runtime.");

+                }

+            }

+        }

+

+        public TBuilder ClearField(IFieldDescriptorLite field)

+        {

+            if (field.IsExtension)

+            {

+                ExtendableMessageLite<TMessage, TBuilder> message = MessageBeingBuilt;

+                message.Extensions.ClearField(field);

+                return ThisBuilder;

+            }

+            else

+            {

+                throw new NotSupportedException("Not supported in the lite runtime.");

+            }

+        }

+

+        public TBuilder AddRepeatedField(IFieldDescriptorLite field, object value)

+        {

+            if (field.IsExtension)

+            {

+                ExtendableMessageLite<TMessage, TBuilder> message = MessageBeingBuilt;

+                message.Extensions.AddRepeatedField(field, value);

+                return ThisBuilder;

+            }

+            else

+            {

+                throw new NotSupportedException("Not supported in the lite runtime.");

+            }

+        }

+

+        protected void MergeExtensionFields(ExtendableMessageLite<TMessage, TBuilder> other)

+        {

+            MessageBeingBuilt.Extensions.MergeFrom(other.Extensions);

+        }

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ExtendableMessage.cs b/csharp/src/ProtocolBuffers/ExtendableMessage.cs
new file mode 100644
index 0000000..71cd1b3
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ExtendableMessage.cs
@@ -0,0 +1,274 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Collections;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    public abstract partial class ExtendableMessage<TMessage, TBuilder> : GeneratedMessage<TMessage, TBuilder>

+        where TMessage : GeneratedMessage<TMessage, TBuilder>

+        where TBuilder : GeneratedBuilder<TMessage, TBuilder>, new()

+    {

+        protected ExtendableMessage()

+        {

+        }

+

+        private readonly FieldSet extensions = FieldSet.CreateInstance();

+

+        /// <summary>

+        /// Access for the builder.

+        /// </summary>

+        internal FieldSet Extensions

+        {

+            get { return extensions; }

+        }

+

+        /// <summary>

+        /// Checks if a singular extension is present.

+        /// </summary>

+        public bool HasExtension<TExtension>(GeneratedExtensionBase<TExtension> extension)

+        {

+            return extensions.HasField(extension.Descriptor);

+        }

+

+        /// <summary>

+        /// Returns the number of elements in a repeated extension.

+        /// </summary>

+        public int GetExtensionCount<TExtension>(GeneratedExtensionBase<IList<TExtension>> extension)

+        {

+            return extensions.GetRepeatedFieldCount(extension.Descriptor);

+        }

+

+        /// <summary>

+        /// Returns the value of an extension.

+        /// </summary>

+        public TExtension GetExtension<TExtension>(GeneratedExtensionBase<TExtension> extension)

+        {

+            object value = extensions[extension.Descriptor];

+            if (value == null)

+            {

+                return (TExtension) extension.MessageDefaultInstance;

+            }

+            else

+            {

+                return (TExtension) extension.FromReflectionType(value);

+            }

+        }

+

+        /// <summary>

+        /// Returns one element of a repeated extension.

+        /// </summary>

+        public TExtension GetExtension<TExtension>(GeneratedExtensionBase<IList<TExtension>> extension, int index)

+        {

+            return (TExtension) extension.SingularFromReflectionType(extensions[extension.Descriptor, index]);

+        }

+

+        /// <summary>

+        /// Called to check if all extensions are initialized.

+        /// </summary>

+        protected bool ExtensionsAreInitialized

+        {

+            get { return extensions.IsInitialized; }

+        }

+

+        public override bool IsInitialized

+        {

+            get { return base.IsInitialized && ExtensionsAreInitialized; }

+        }

+

+        #region Reflection

+

+        public override IDictionary<FieldDescriptor, object> AllFields

+        {

+            get

+            {

+                IDictionary<FieldDescriptor, object> result = GetMutableFieldMap();

+                foreach (KeyValuePair<IFieldDescriptorLite, object> entry in extensions.AllFields)

+                {

+                    result[(FieldDescriptor) entry.Key] = entry.Value;

+                }

+                return Dictionaries.AsReadOnly(result);

+            }

+        }

+

+        public override bool HasField(FieldDescriptor field)

+        {

+            if (field.IsExtension)

+            {

+                VerifyContainingType(field);

+                return extensions.HasField(field);

+            }

+            else

+            {

+                return base.HasField(field);

+            }

+        }

+

+        public override object this[FieldDescriptor field]

+        {

+            get

+            {

+                if (field.IsExtension)

+                {

+                    VerifyContainingType(field);

+                    object value = extensions[field];

+                    if (value == null)

+                    {

+                        // Lacking an ExtensionRegistry, we have no way to determine the

+                        // extension's real type, so we return a DynamicMessage.

+                        // TODO(jonskeet): Work out what this means

+                        return DynamicMessage.GetDefaultInstance(field.MessageType);

+                    }

+                    else

+                    {

+                        return value;

+                    }

+                }

+                else

+                {

+                    return base[field];

+                }

+            }

+        }

+

+        public override int GetRepeatedFieldCount(FieldDescriptor field)

+        {

+            if (field.IsExtension)

+            {

+                VerifyContainingType(field);

+                return extensions.GetRepeatedFieldCount(field);

+            }

+            else

+            {

+                return base.GetRepeatedFieldCount(field);

+            }

+        }

+

+        public override object this[FieldDescriptor field, int index]

+        {

+            get

+            {

+                if (field.IsExtension)

+                {

+                    VerifyContainingType(field);

+                    return extensions[field, index];

+                }

+                else

+                {

+                    return base[field, index];

+                }

+            }

+        }

+

+        internal void VerifyContainingType(FieldDescriptor field)

+        {

+            if (field.ContainingType != DescriptorForType)

+            {

+                throw new ArgumentException("FieldDescriptor does not match message type.");

+            }

+        }

+

+        #endregion

+

+        /// <summary>

+        /// Used by subclasses to serialize extensions. Extension ranges may be

+        /// interleaves with field numbers, but we must write them in canonical

+        /// (sorted by field number) order. This class helps us to write individual

+        /// ranges of extensions at once.

+        /// 

+        /// TODO(jonskeet): See if we can improve this in terms of readability.

+        /// </summary>

+        protected class ExtensionWriter

+        {

+            private readonly IEnumerator<KeyValuePair<IFieldDescriptorLite, object>> iterator;

+            private readonly FieldSet extensions;

+            private KeyValuePair<IFieldDescriptorLite, object>? next = null;

+

+            internal ExtensionWriter(ExtendableMessage<TMessage, TBuilder> message)

+            {

+                extensions = message.extensions;

+                iterator = message.extensions.GetEnumerator();

+                if (iterator.MoveNext())

+                {

+                    next = iterator.Current;

+                }

+            }

+

+            public void WriteUntil(int end, ICodedOutputStream output)

+            {

+                while (next != null && next.Value.Key.FieldNumber < end)

+                {

+                    extensions.WriteField(next.Value.Key, next.Value.Value, output);

+                    if (iterator.MoveNext())

+                    {

+                        next = iterator.Current;

+                    }

+                    else

+                    {

+                        next = null;

+                    }

+                }

+            }

+        }

+

+        protected ExtensionWriter CreateExtensionWriter(ExtendableMessage<TMessage, TBuilder> message)

+        {

+            return new ExtensionWriter(message);

+        }

+

+        /// <summary>

+        /// Called by subclasses to compute the size of extensions.

+        /// </summary>

+        protected int ExtensionsSerializedSize

+        {

+            get { return extensions.SerializedSize; }

+        }

+

+        internal void VerifyExtensionContainingType<TExtension>(GeneratedExtensionBase<TExtension> extension)

+        {

+            if (extension.Descriptor.ContainingType != DescriptorForType)

+            {

+                // This can only happen if someone uses unchecked operations.

+                throw new ArgumentException("Extension is for type \"" + extension.Descriptor.ContainingType.FullName

+                                            + "\" which does not match message type \"" + DescriptorForType.FullName +

+                                            "\".");

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ExtendableMessageLite.cs b/csharp/src/ProtocolBuffers/ExtendableMessageLite.cs
new file mode 100644
index 0000000..e682475
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ExtendableMessageLite.cs
@@ -0,0 +1,221 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using System.IO;

+using Google.ProtocolBuffers.Collections;

+

+namespace Google.ProtocolBuffers

+{

+    public abstract partial class ExtendableMessageLite<TMessage, TBuilder> : GeneratedMessageLite<TMessage, TBuilder>

+        where TMessage : GeneratedMessageLite<TMessage, TBuilder>

+        where TBuilder : GeneratedBuilderLite<TMessage, TBuilder>

+    {

+        protected ExtendableMessageLite()

+        {

+        }

+

+        private readonly FieldSet extensions = FieldSet.CreateInstance();

+

+        /// <summary>

+        /// Access for the builder.

+        /// </summary>

+        internal FieldSet Extensions

+        {

+            get { return extensions; }

+        }

+

+        public override bool Equals(object obj)

+        {

+            ExtendableMessageLite<TMessage, TBuilder> other = obj as ExtendableMessageLite<TMessage, TBuilder>;

+            return !ReferenceEquals(null, other) &&

+                   Dictionaries.Equals(extensions.AllFields, other.extensions.AllFields);

+        }

+

+        public override int GetHashCode()

+        {

+            return Dictionaries.GetHashCode(extensions.AllFields);

+        }

+

+        /// <summary>

+        /// writes the extensions to the text stream

+        /// </summary>

+        public override void PrintTo(TextWriter writer)

+        {

+            foreach (KeyValuePair<IFieldDescriptorLite, object> entry in extensions.AllFields)

+            {

+                string fn = string.Format("[{0}]", entry.Key.FullName);

+                if (entry.Key.IsRepeated)

+                {

+                    foreach (object o in ((IEnumerable) entry.Value))

+                    {

+                        PrintField(fn, true, o, writer);

+                    }

+                }

+                else

+                {

+                    PrintField(fn, true, entry.Value, writer);

+                }

+            }

+        }

+

+        /// <summary>

+        /// Checks if a singular extension is present.

+        /// </summary>

+        public bool HasExtension<TExtension>(GeneratedExtensionLite<TMessage, TExtension> extension)

+        {

+            VerifyExtensionContainingType(extension);

+            return extensions.HasField(extension.Descriptor);

+        }

+

+        /// <summary>

+        /// Returns the number of elements in a repeated extension.

+        /// </summary>

+        public int GetExtensionCount<TExtension>(GeneratedExtensionLite<TMessage, IList<TExtension>> extension)

+        {

+            VerifyExtensionContainingType(extension);

+            return extensions.GetRepeatedFieldCount(extension.Descriptor);

+        }

+

+        /// <summary>

+        /// Returns the value of an extension.

+        /// </summary>

+        public TExtension GetExtension<TExtension>(GeneratedExtensionLite<TMessage, TExtension> extension)

+        {

+            VerifyExtensionContainingType(extension);

+            object value = extensions[extension.Descriptor];

+            if (value == null)

+            {

+                return extension.DefaultValue;

+            }

+            else

+            {

+                return (TExtension) extension.FromReflectionType(value);

+            }

+        }

+

+        /// <summary>

+        /// Returns one element of a repeated extension.

+        /// </summary>

+        public TExtension GetExtension<TExtension>(GeneratedExtensionLite<TMessage, IList<TExtension>> extension,

+                                                   int index)

+        {

+            VerifyExtensionContainingType(extension);

+            return (TExtension) extension.SingularFromReflectionType(extensions[extension.Descriptor, index]);

+        }

+

+        /// <summary>

+        /// Called to check if all extensions are initialized.

+        /// </summary>

+        protected bool ExtensionsAreInitialized

+        {

+            get { return extensions.IsInitialized; }

+        }

+

+        public override bool IsInitialized

+        {

+            get { return ExtensionsAreInitialized; }

+        }

+

+        /// <summary>

+        /// Used by subclasses to serialize extensions. Extension ranges may be

+        /// interleaves with field numbers, but we must write them in canonical

+        /// (sorted by field number) order. This class helps us to write individual

+        /// ranges of extensions at once.

+        /// 

+        /// TODO(jonskeet): See if we can improve this in terms of readability.

+        /// </summary>

+        protected class ExtensionWriter

+        {

+            private readonly IEnumerator<KeyValuePair<IFieldDescriptorLite, object>> iterator;

+            private readonly FieldSet extensions;

+            private KeyValuePair<IFieldDescriptorLite, object>? next = null;

+

+            internal ExtensionWriter(ExtendableMessageLite<TMessage, TBuilder> message)

+            {

+                extensions = message.extensions;

+                iterator = message.extensions.GetEnumerator();

+                if (iterator.MoveNext())

+                {

+                    next = iterator.Current;

+                }

+            }

+

+            public void WriteUntil(int end, ICodedOutputStream output)

+            {

+                while (next != null && next.Value.Key.FieldNumber < end)

+                {

+                    extensions.WriteField(next.Value.Key, next.Value.Value, output);

+                    if (iterator.MoveNext())

+                    {

+                        next = iterator.Current;

+                    }

+                    else

+                    {

+                        next = null;

+                    }

+                }

+            }

+        }

+

+        protected ExtensionWriter CreateExtensionWriter(ExtendableMessageLite<TMessage, TBuilder> message)

+        {

+            return new ExtensionWriter(message);

+        }

+

+        /// <summary>

+        /// Called by subclasses to compute the size of extensions.

+        /// </summary>

+        protected int ExtensionsSerializedSize

+        {

+            get { return extensions.SerializedSize; }

+        }

+

+        internal void VerifyExtensionContainingType<TExtension>(GeneratedExtensionLite<TMessage, TExtension> extension)

+        {

+            if (!ReferenceEquals(extension.ContainingTypeDefaultInstance, DefaultInstanceForType))

+            {

+                // This can only happen if someone uses unchecked operations.

+                throw new ArgumentException(

+                    String.Format("Extension is for type \"{0}\" which does not match message type \"{1}\".",

+                                  extension.ContainingTypeDefaultInstance, DefaultInstanceForType

+                        ));

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ExtensionInfo.cs b/csharp/src/ProtocolBuffers/ExtensionInfo.cs
new file mode 100644
index 0000000..4f11d3b
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ExtensionInfo.cs
@@ -0,0 +1,88 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    public sealed class ExtensionInfo : IGeneratedExtensionLite

+    {

+        /// <summary>

+        /// The extension's descriptor

+        /// </summary>

+        public FieldDescriptor Descriptor { get; private set; }

+

+        IFieldDescriptorLite IGeneratedExtensionLite.Descriptor

+        {

+            get { return Descriptor; }

+        }

+

+        /// <summary>

+        /// A default instance of the extensions's type, if it has a message type,

+        /// or null otherwise.

+        /// </summary>

+        public IMessageLite DefaultInstance { get; private set; }

+

+        internal ExtensionInfo(FieldDescriptor descriptor) : this(descriptor, null)

+        {

+        }

+

+        internal ExtensionInfo(FieldDescriptor descriptor, IMessageLite defaultInstance)

+        {

+            Descriptor = descriptor;

+            DefaultInstance = defaultInstance;

+        }

+

+        #region IGeneratedExtensionLite Members

+

+        int IGeneratedExtensionLite.Number

+        {

+            get { return Descriptor.FieldNumber; }

+        }

+

+        object IGeneratedExtensionLite.ContainingType

+        {

+            get { return Descriptor.ContainingType; }

+        }

+

+        IMessageLite IGeneratedExtensionLite.MessageDefaultInstance

+        {

+            get { return DefaultInstance; }

+        }

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ExtensionRegistry.cs b/csharp/src/ProtocolBuffers/ExtensionRegistry.cs
new file mode 100644
index 0000000..7c9467b
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ExtensionRegistry.cs
@@ -0,0 +1,215 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// A table of known extensions, searchable by name or field number.  When

+    /// parsing a protocol message that might have extensions, you must provide

+    /// an <see cref="ExtensionRegistry"/> in which you have registered any extensions

+    /// that you want to be able to parse.  Otherwise, those extensions will just

+    /// be treated like unknown fields.

+    /// </summary>

+    /// <example>

+    /// For example, if you had the <c>.proto</c> file:

+    /// <code>

+    /// option java_class = "MyProto";

+    ///

+    /// message Foo {

+    ///   extensions 1000 to max;

+    /// }

+    ///

+    /// extend Foo {

+    ///   optional int32 bar;

+    /// }

+    /// </code>

+    ///

+    /// Then you might write code like:

+    ///

+    /// <code>

+    /// ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+    /// registry.Add(MyProto.Bar);

+    /// MyProto.Foo message = MyProto.Foo.ParseFrom(input, registry);

+    /// </code>

+    /// </example>

+    ///

+    /// <remarks>

+    /// <para>You might wonder why this is necessary. Two alternatives might come to

+    /// mind. First, you might imagine a system where generated extensions are

+    /// automatically registered when their containing classes are loaded. This

+    /// is a popular technique, but is bad design; among other things, it creates a

+    /// situation where behavior can change depending on what classes happen to be

+    /// loaded. It also introduces a security vulnerability, because an

+    /// unprivileged class could cause its code to be called unexpectedly from a

+    /// privileged class by registering itself as an extension of the right type.

+    /// </para>

+    /// <para>Another option you might consider is lazy parsing: do not parse an

+    /// extension until it is first requested, at which point the caller must

+    /// provide a type to use. This introduces a different set of problems. First,

+    /// it would require a mutex lock any time an extension was accessed, which

+    /// would be slow. Second, corrupt data would not be detected until first

+    /// access, at which point it would be much harder to deal with it. Third, it

+    /// could violate the expectation that message objects are immutable, since the

+    /// type provided could be any arbitrary message class. An unprivileged user

+    /// could take advantage of this to inject a mutable object into a message

+    /// belonging to privileged code and create mischief.</para>

+    /// </remarks>

+    public sealed partial class ExtensionRegistry

+    {

+        /// <summary>

+        /// Finds an extension by fully-qualified field name, in the

+        /// proto namespace, i.e. result.Descriptor.FullName will match

+        /// <paramref name="fullName"/> if a match is found. A null

+        /// reference is returned if the extension can't be found.

+        /// </summary>

+        [Obsolete("Please use the FindByName method instead.", true)]

+        public ExtensionInfo this[string fullName]

+        {

+            get

+            {

+                foreach (IGeneratedExtensionLite ext in extensionsByNumber.Values)

+                {

+                    if (StringComparer.Ordinal.Equals(ext.Descriptor.FullName, fullName))

+                    {

+                        return ext as ExtensionInfo;

+                    }

+                }

+                return null;

+            }

+        }

+

+#if !LITE

+        /// <summary>

+        /// Finds an extension by containing type and field number.

+        /// A null reference is returned if the extension can't be found.

+        /// </summary>

+        public ExtensionInfo this[MessageDescriptor containingType, int fieldNumber]

+        {

+            get

+            {

+                IGeneratedExtensionLite ret;

+                extensionsByNumber.TryGetValue(new ExtensionIntPair(containingType, fieldNumber), out ret);

+                return ret as ExtensionInfo;

+            }

+        }

+

+        public ExtensionInfo FindByName(MessageDescriptor containingType, string fieldName)

+        {

+            return FindExtensionByName(containingType, fieldName) as ExtensionInfo;

+        }

+#endif

+

+        /// <summary>

+        /// Add an extension from a generated file to the registry.

+        /// </summary>

+        public void Add<TExtension>(GeneratedExtensionBase<TExtension> extension)

+        {

+            if (extension.Descriptor.MappedType == MappedType.Message)

+            {

+                Add(new ExtensionInfo(extension.Descriptor, extension.MessageDefaultInstance));

+            }

+            else

+            {

+                Add(new ExtensionInfo(extension.Descriptor, null));

+            }

+        }

+

+        /// <summary>

+        /// Adds a non-message-type extension to the registry by descriptor.

+        /// </summary>

+        /// <param name="type"></param>

+        public void Add(FieldDescriptor type)

+        {

+            if (type.MappedType == MappedType.Message)

+            {

+                throw new ArgumentException("ExtensionRegistry.Add() must be provided a default instance "

+                                            + "when adding an embedded message extension.");

+            }

+            Add(new ExtensionInfo(type, null));

+        }

+

+        /// <summary>

+        /// Adds a message-type-extension to the registry by descriptor.

+        /// </summary>

+        /// <param name="type"></param>

+        /// <param name="defaultInstance"></param>

+        public void Add(FieldDescriptor type, IMessage defaultInstance)

+        {

+            if (type.MappedType != MappedType.Message)

+            {

+                throw new ArgumentException("ExtensionRegistry.Add() provided a default instance for a "

+                                            + "non-message extension.");

+            }

+            Add(new ExtensionInfo(type, defaultInstance));

+        }

+

+        private void Add(ExtensionInfo extension)

+        {

+            if (readOnly)

+            {

+                throw new InvalidOperationException("Cannot add entries to a read-only extension registry");

+            }

+            if (!extension.Descriptor.IsExtension)

+            {

+                throw new ArgumentException("ExtensionRegistry.add() was given a FieldDescriptor for a "

+                                            + "regular (non-extension) field.");

+            }

+

+            IGeneratedExtensionLite liteExtension = extension;

+            Add(liteExtension);

+

+            FieldDescriptor field = extension.Descriptor;

+            if (field.ContainingType.Options.MessageSetWireFormat

+                && field.FieldType == FieldType.Message

+                && field.IsOptional

+                && field.ExtensionScope == field.MessageType)

+            {

+                // This is an extension of a MessageSet type defined within the extension

+                // type's own scope. For backwards-compatibility, allow it to be looked

+                // up by type name.

+                Dictionary<string, IGeneratedExtensionLite> map;

+                if (extensionsByName.TryGetValue(liteExtension.ContainingType, out map))

+                {

+                    map[field.MessageType.FullName] = extension;

+                }

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ExtensionRegistryLite.cs b/csharp/src/ProtocolBuffers/ExtensionRegistryLite.cs
new file mode 100644
index 0000000..d1220e9
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ExtensionRegistryLite.cs
@@ -0,0 +1,220 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using ExtensionByNameMap = System.Collections.Generic.Dictionary<object, System.Collections.Generic.Dictionary<string, Google.ProtocolBuffers.IGeneratedExtensionLite>>;

+using ExtensionByIdMap = System.Collections.Generic.Dictionary<Google.ProtocolBuffers.ExtensionRegistry.ExtensionIntPair, Google.ProtocolBuffers.IGeneratedExtensionLite>;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// A table of known extensions, searchable by name or field number.  When

+    /// parsing a protocol message that might have extensions, you must provide

+    /// an <see cref="ExtensionRegistry"/> in which you have registered any extensions

+    /// that you want to be able to parse.  Otherwise, those extensions will just

+    /// be treated like unknown fields.

+    /// </summary>

+    /// <example>

+    /// For example, if you had the <c>.proto</c> file:

+    /// <code>

+    /// option java_class = "MyProto";

+    ///

+    /// message Foo {

+    ///   extensions 1000 to max;

+    /// }

+    ///

+    /// extend Foo {

+    ///   optional int32 bar;

+    /// }

+    /// </code>

+    ///

+    /// Then you might write code like:

+    ///

+    /// <code>

+    /// extensionRegistry registry = extensionRegistry.CreateInstance();

+    /// registry.Add(MyProto.Bar);

+    /// MyProto.Foo message = MyProto.Foo.ParseFrom(input, registry);

+    /// </code>

+    /// </example>

+    ///

+    /// <remarks>

+    /// <para>You might wonder why this is necessary. Two alternatives might come to

+    /// mind. First, you might imagine a system where generated extensions are

+    /// automatically registered when their containing classes are loaded. This

+    /// is a popular technique, but is bad design; among other things, it creates a

+    /// situation where behavior can change depending on what classes happen to be

+    /// loaded. It also introduces a security vulnerability, because an

+    /// unprivileged class could cause its code to be called unexpectedly from a

+    /// privileged class by registering itself as an extension of the right type.

+    /// </para>

+    /// <para>Another option you might consider is lazy parsing: do not parse an

+    /// extension until it is first requested, at which point the caller must

+    /// provide a type to use. This introduces a different set of problems. First,

+    /// it would require a mutex lock any time an extension was accessed, which

+    /// would be slow. Second, corrupt data would not be detected until first

+    /// access, at which point it would be much harder to deal with it. Third, it

+    /// could violate the expectation that message objects are immutable, since the

+    /// type provided could be any arbitrary message class. An unprivileged user

+    /// could take advantage of this to inject a mutable object into a message

+    /// belonging to privileged code and create mischief.</para>

+    /// </remarks>

+    public sealed partial class ExtensionRegistry

+    {

+        private static readonly ExtensionRegistry empty = new ExtensionRegistry(

+            new ExtensionByNameMap(),

+            new ExtensionByIdMap(),

+            true);

+

+        private readonly ExtensionByNameMap extensionsByName;

+        private readonly ExtensionByIdMap extensionsByNumber;

+

+        private readonly bool readOnly;

+

+        private ExtensionRegistry(ExtensionByNameMap byName, ExtensionByIdMap byNumber, bool readOnly)

+        {

+            this.extensionsByName = byName;

+            this.extensionsByNumber = byNumber;

+            this.readOnly = readOnly;

+        }

+

+        /// <summary>

+        /// Construct a new, empty instance.

+        /// </summary>

+        public static ExtensionRegistry CreateInstance()

+        {

+            return new ExtensionRegistry(new ExtensionByNameMap(), new ExtensionByIdMap(), false);

+        }

+

+        public ExtensionRegistry AsReadOnly()

+        {

+            return new ExtensionRegistry(extensionsByName, extensionsByNumber, true);

+        }

+

+        /// <summary>

+        /// Get the unmodifiable singleton empty instance.

+        /// </summary>

+        public static ExtensionRegistry Empty

+        {

+            get { return empty; }

+        }

+

+        /// <summary>

+        /// Finds an extension by containing type and field number.

+        /// A null reference is returned if the extension can't be found.

+        /// </summary>

+        public IGeneratedExtensionLite this[IMessageLite containingType, int fieldNumber]

+        {

+            get

+            {

+                IGeneratedExtensionLite ret;

+                extensionsByNumber.TryGetValue(new ExtensionIntPair(containingType, fieldNumber), out ret);

+                return ret;

+            }

+        }

+

+        public IGeneratedExtensionLite FindByName(IMessageLite defaultInstanceOfType, string fieldName)

+        {

+            return FindExtensionByName(defaultInstanceOfType, fieldName);

+        }

+

+        private IGeneratedExtensionLite FindExtensionByName(object forwhat, string fieldName)

+        {

+            IGeneratedExtensionLite extension = null;

+            Dictionary<string, IGeneratedExtensionLite> map;

+            if (extensionsByName.TryGetValue(forwhat, out map) && map.TryGetValue(fieldName, out extension))

+            {

+                return extension;

+            }

+            return null;

+        }

+

+        /// <summary>

+        /// Add an extension from a generated file to the registry.

+        /// </summary>

+        public void Add(IGeneratedExtensionLite extension)

+        {

+            if (readOnly)

+            {

+                throw new InvalidOperationException("Cannot add entries to a read-only extension registry");

+            }

+            extensionsByNumber.Add(new ExtensionIntPair(extension.ContainingType, extension.Number), extension);

+

+            Dictionary<string, IGeneratedExtensionLite> map;

+            if (!extensionsByName.TryGetValue(extension.ContainingType, out map))

+            {

+                extensionsByName.Add(extension.ContainingType, map = new Dictionary<string, IGeneratedExtensionLite>());

+            }

+            map[extension.Descriptor.Name] = extension;

+            map[extension.Descriptor.FullName] = extension;

+        }

+

+        /// <summary>

+        /// Nested type just used to represent a pair of MessageDescriptor and int, as

+        /// the key into the "by number" map.

+        /// </summary>

+        internal struct ExtensionIntPair : IEquatable<ExtensionIntPair>

+        {

+            private readonly object msgType;

+            private readonly int number;

+

+            internal ExtensionIntPair(object msgType, int number)

+            {

+                this.msgType = msgType;

+                this.number = number;

+            }

+

+            public override int GetHashCode()

+            {

+                return msgType.GetHashCode()*((1 << 16) - 1) + number;

+            }

+

+            public override bool Equals(object obj)

+            {

+                if (!(obj is ExtensionIntPair))

+                {

+                    return false;

+                }

+                return Equals((ExtensionIntPair) obj);

+            }

+

+            public bool Equals(ExtensionIntPair other)

+            {

+                return msgType.Equals(other.msgType) && number == other.number;

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs b/csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs
new file mode 100644
index 0000000..6ba039c
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/FieldAccess/FieldAccessorTable.cs
@@ -0,0 +1,126 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.FieldAccess

+{

+    /// <summary>

+    /// Provides access to fields in generated messages via reflection.

+    /// This type is public to allow it to be used by generated messages, which

+    /// create appropriate instances in the .proto file description class.

+    /// TODO(jonskeet): See if we can hide it somewhere...

+    /// </summary>

+    public sealed class FieldAccessorTable<TMessage, TBuilder>

+        where TMessage : IMessage<TMessage, TBuilder>

+        where TBuilder : IBuilder<TMessage, TBuilder>

+    {

+        private readonly IFieldAccessor<TMessage, TBuilder>[] accessors;

+

+        private readonly MessageDescriptor descriptor;

+

+        public MessageDescriptor Descriptor

+        {

+            get { return descriptor; }

+        }

+

+        /// <summary>

+        /// Constructs a FieldAccessorTable for a particular message class.

+        /// Only one FieldAccessorTable should be constructed per class.

+        /// The property names should all actually correspond with the field descriptor's

+        /// CSharpOptions.PropertyName property, but bootstrapping issues currently

+        /// prevent us from using that. This may be addressed at a future time, in which case

+        /// we can keep this constructor for backwards compatibility, just ignoring the parameter.

+        /// TODO(jonskeet): Make it so.

+        /// </summary>

+        /// <param name="descriptor">The type's descriptor</param>

+        /// <param name="propertyNames">The Pascal-case names of all the field-based properties in the message.</param>

+        public FieldAccessorTable(MessageDescriptor descriptor, String[] propertyNames)

+        {

+            this.descriptor = descriptor;

+            accessors = new IFieldAccessor<TMessage, TBuilder>[descriptor.Fields.Count];

+            for (int i = 0; i < accessors.Length; i++)

+            {

+                accessors[i] = CreateAccessor(descriptor.Fields[i], propertyNames[i]);

+            }

+        }

+

+        /// <summary>

+        /// Creates an accessor for a single field

+        /// </summary>   

+        private static IFieldAccessor<TMessage, TBuilder> CreateAccessor(FieldDescriptor field, string name)

+        {

+            if (field.IsRepeated)

+            {

+                switch (field.MappedType)

+                {

+                    case MappedType.Message:

+                        return new RepeatedMessageAccessor<TMessage, TBuilder>(name);

+                    case MappedType.Enum:

+                        return new RepeatedEnumAccessor<TMessage, TBuilder>(field, name);

+                    default:

+                        return new RepeatedPrimitiveAccessor<TMessage, TBuilder>(name);

+                }

+            }

+            else

+            {

+                switch (field.MappedType)

+                {

+                    case MappedType.Message:

+                        return new SingleMessageAccessor<TMessage, TBuilder>(name);

+                    case MappedType.Enum:

+                        return new SingleEnumAccessor<TMessage, TBuilder>(field, name);

+                    default:

+                        return new SinglePrimitiveAccessor<TMessage, TBuilder>(name);

+                }

+            }

+        }

+

+        internal IFieldAccessor<TMessage, TBuilder> this[FieldDescriptor field]

+        {

+            get

+            {

+                if (field.ContainingType != descriptor)

+                {

+                    throw new ArgumentException("FieldDescriptor does not match message type.");

+                }

+                else if (field.IsExtension)

+                {

+                    // If this type had extensions, it would subclass ExtendableMessage,

+                    // which overrides the reflection interface to handle extensions.

+                    throw new ArgumentException("This type does not have extensions.");

+                }

+                return accessors[field.Index];

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/FieldAccess/IFieldAccessor.cs b/csharp/src/ProtocolBuffers/FieldAccess/IFieldAccessor.cs
new file mode 100644
index 0000000..39d3b85
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/FieldAccess/IFieldAccessor.cs
@@ -0,0 +1,95 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+namespace Google.ProtocolBuffers.FieldAccess

+{

+    /// <summary>

+    /// Allows fields to be reflectively accessed in a smart manner.

+    /// The property descriptors for each field are created once and then cached.

+    /// In addition, this interface holds knowledge of repeated fields, builders etc.

+    /// </summary>

+    internal interface IFieldAccessor<TMessage, TBuilder>

+        where TMessage : IMessage<TMessage, TBuilder>

+        where TBuilder : IBuilder<TMessage, TBuilder>

+    {

+        /// <summary>

+        /// Indicates whether the specified message contains the field.

+        /// </summary>

+        bool Has(TMessage message);

+

+        /// <summary>

+        /// Gets the count of the repeated field in the specified message.

+        /// </summary>

+        int GetRepeatedCount(TMessage message);

+

+        /// <summary>

+        /// Clears the field in the specified builder.

+        /// </summary>

+        /// <param name="builder"></param>

+        void Clear(TBuilder builder);

+

+        /// <summary>

+        /// Creates a builder for the type of this field (which must be a message field).

+        /// </summary>

+        IBuilder CreateBuilder();

+

+        /// <summary>

+        /// Accessor for single fields

+        /// </summary>

+        object GetValue(TMessage message);

+

+        /// <summary>

+        /// Mutator for single fields

+        /// </summary>

+        void SetValue(TBuilder builder, object value);

+

+        /// <summary>

+        /// Accessor for repeated fields

+        /// </summary>

+        object GetRepeatedValue(TMessage message, int index);

+

+        /// <summary>

+        /// Mutator for repeated fields

+        /// </summary>

+        void SetRepeated(TBuilder builder, int index, object value);

+

+        /// <summary>

+        /// Adds the specified value to the field in the given builder.

+        /// </summary>

+        void AddRepeated(TBuilder builder, object value);

+

+        /// <summary>

+        /// Returns a read-only wrapper around the value of a repeated field.

+        /// </summary>

+        object GetRepeatedWrapper(TBuilder builder);

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/FieldAccess/ReflectionUtil.cs b/csharp/src/ProtocolBuffers/FieldAccess/ReflectionUtil.cs
new file mode 100644
index 0000000..798f0dd
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/FieldAccess/ReflectionUtil.cs
@@ -0,0 +1,189 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Reflection;

+

+namespace Google.ProtocolBuffers.FieldAccess

+{

+    /// <summary>

+    /// The methods in this class are somewhat evil, and should not be tampered with lightly.

+    /// Basically they allow the creation of relatively weakly typed delegates from MethodInfos

+    /// which are more strongly typed. They do this by creating an appropriate strongly typed

+    /// delegate from the MethodInfo, and then calling that within an anonymous method.

+    /// Mind-bending stuff (at least to your humble narrator) but the resulting delegates are

+    /// very fast compared with calling Invoke later on.

+    /// </summary>

+    internal static class ReflectionUtil

+    {

+        /// <summary>

+        /// Empty Type[] used when calling GetProperty to force property instead of indexer fetching.

+        /// </summary>

+        internal static readonly Type[] EmptyTypes = new Type[0];

+

+        /// <summary>

+        /// Creates a delegate which will execute the given method and then return

+        /// the result as an object.

+        /// </summary>

+        public static Func<T, object> CreateUpcastDelegate<T>(MethodInfo method)

+        {

+            // The tricky bit is invoking CreateCreateUpcastDelegateImpl with the right type parameters

+            MethodInfo openImpl = typeof(ReflectionUtil).GetMethod("CreateUpcastDelegateImpl");

+            MethodInfo closedImpl = openImpl.MakeGenericMethod(typeof(T), method.ReturnType);

+            return (Func<T, object>) closedImpl.Invoke(null, new object[] {method});

+        }

+

+        /// <summary>

+        /// Method used solely for implementing CreateUpcastDelegate. Public to avoid trust issues

+        /// in low-trust scenarios.

+        /// </summary>

+        public static Func<TSource, object> CreateUpcastDelegateImpl<TSource, TResult>(MethodInfo method)

+        {

+            // Convert the reflection call into an open delegate, i.e. instead of calling x.Method()

+            // we'll call getter(x).

+            Func<TSource, TResult> getter = ReflectionUtil.CreateDelegateFunc<TSource, TResult>(method);

+

+            // Implicit upcast to object (within the delegate)

+            return delegate(TSource source) { return getter(source); };

+        }

+

+        /// <summary>

+        /// Creates a delegate which will execute the given method after casting the parameter

+        /// down from object to the required parameter type.

+        /// </summary>

+        public static Action<T, object> CreateDowncastDelegate<T>(MethodInfo method)

+        {

+            MethodInfo openImpl = typeof(ReflectionUtil).GetMethod("CreateDowncastDelegateImpl");

+            MethodInfo closedImpl = openImpl.MakeGenericMethod(typeof(T), method.GetParameters()[0].ParameterType);

+            return (Action<T, object>) closedImpl.Invoke(null, new object[] {method});

+        }

+

+        public static Action<TSource, object> CreateDowncastDelegateImpl<TSource, TParam>(MethodInfo method)

+        {

+            // Convert the reflection call into an open delegate, i.e. instead of calling x.Method(y) we'll

+            // call Method(x, y)

+            Action<TSource, TParam> call = ReflectionUtil.CreateDelegateAction<TSource, TParam>(method);

+

+            return delegate(TSource source, object parameter) { call(source, (TParam) parameter); };

+        }

+

+        /// <summary>

+        /// Creates a delegate which will execute the given method after casting the parameter

+        /// down from object to the required parameter type.

+        /// </summary>

+        public static Action<T, object> CreateDowncastDelegateIgnoringReturn<T>(MethodInfo method)

+        {

+            MethodInfo openImpl = typeof(ReflectionUtil).GetMethod("CreateDowncastDelegateIgnoringReturnImpl");

+            MethodInfo closedImpl = openImpl.MakeGenericMethod(typeof(T), method.GetParameters()[0].ParameterType,

+                                                               method.ReturnType);

+            return (Action<T, object>) closedImpl.Invoke(null, new object[] {method});

+        }

+

+        public static Action<TSource, object> CreateDowncastDelegateIgnoringReturnImpl<TSource, TParam, TReturn>(

+            MethodInfo method)

+        {

+            // Convert the reflection call into an open delegate, i.e. instead of calling x.Method(y) we'll

+            // call Method(x, y)

+            Func<TSource, TParam, TReturn> call = ReflectionUtil.CreateDelegateFunc<TSource, TParam, TReturn>(method);

+

+            return delegate(TSource source, object parameter) { call(source, (TParam) parameter); };

+        }

+

+        /// <summary>

+        /// Creates a delegate which will execute the given static method and cast the result up to IBuilder.

+        /// </summary>

+        public static Func<IBuilder> CreateStaticUpcastDelegate(MethodInfo method)

+        {

+            MethodInfo openImpl = typeof(ReflectionUtil).GetMethod("CreateStaticUpcastDelegateImpl");

+            MethodInfo closedImpl = openImpl.MakeGenericMethod(method.ReturnType);

+            return (Func<IBuilder>) closedImpl.Invoke(null, new object[] {method});

+        }

+

+        public static Func<IBuilder> CreateStaticUpcastDelegateImpl<T>(MethodInfo method)

+        {

+            Func<T> call = ReflectionUtil.CreateDelegateFunc<T>(method);

+            return delegate { return (IBuilder) call(); };

+        }

+

+

+        internal static Func<TResult> CreateDelegateFunc<TResult>(MethodInfo method)

+        {

+#if !CF20

+            object tdelegate = Delegate.CreateDelegate(typeof(Func<TResult>), null, method);

+            return (Func<TResult>)tdelegate;

+#else

+            return delegate() { return (TResult)method.Invoke(null, null); };

+#endif

+        }

+

+        internal static Func<T, TResult> CreateDelegateFunc<T, TResult>(MethodInfo method)

+        {

+#if !CF20

+            object tdelegate = Delegate.CreateDelegate(typeof(Func<T, TResult>), null, method);

+            return (Func<T, TResult>)tdelegate;

+#else

+            if (method.IsStatic)

+            {

+                return delegate(T arg1) { return (TResult) method.Invoke(null, new object[] {arg1}); };

+            }

+            return delegate(T arg1) { return (TResult)method.Invoke(arg1, null); };

+#endif

+        }

+

+        internal static Func<T1, T2, TResult> CreateDelegateFunc<T1, T2, TResult>(MethodInfo method)

+        {

+#if !CF20

+            object tdelegate = Delegate.CreateDelegate(typeof(Func<T1, T2, TResult>), null, method);

+            return (Func<T1, T2, TResult>)tdelegate;

+#else

+            if (method.IsStatic)

+            {

+                return delegate(T1 arg1, T2 arg2) { return (TResult) method.Invoke(null, new object[] {arg1, arg2}); };

+            }

+            return delegate(T1 arg1, T2 arg2) { return (TResult)method.Invoke(arg1, new object[] { arg2 }); };

+#endif

+        }

+

+        internal static Action<T1, T2> CreateDelegateAction<T1, T2>(MethodInfo method)

+        {

+#if !CF20

+            object tdelegate = Delegate.CreateDelegate(typeof(Action<T1, T2>), null, method);

+            return (Action<T1, T2>)tdelegate;

+#else

+            if (method.IsStatic)

+            {

+                return delegate(T1 arg1, T2 arg2) { method.Invoke(null, new object[] {arg1, arg2}); };

+            }

+            return delegate(T1 arg1, T2 arg2) { method.Invoke(arg1, new object[] { arg2 }); };

+#endif

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/FieldAccess/RepeatedEnumAccessor.cs b/csharp/src/ProtocolBuffers/FieldAccess/RepeatedEnumAccessor.cs
new file mode 100644
index 0000000..152c2e0
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/FieldAccess/RepeatedEnumAccessor.cs
@@ -0,0 +1,83 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System.Collections;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Collections;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.FieldAccess

+{

+    /// <summary>

+    /// Accessor for a repeated enum field.

+    /// </summary>

+    internal sealed class RepeatedEnumAccessor<TMessage, TBuilder> : RepeatedPrimitiveAccessor<TMessage, TBuilder>

+        where TMessage : IMessage<TMessage, TBuilder>

+        where TBuilder : IBuilder<TMessage, TBuilder>

+    {

+        private readonly EnumDescriptor enumDescriptor;

+

+        internal RepeatedEnumAccessor(FieldDescriptor field, string name) : base(name)

+        {

+            enumDescriptor = field.EnumType;

+        }

+

+        public override object GetValue(TMessage message)

+        {

+            List<EnumValueDescriptor> ret = new List<EnumValueDescriptor>();

+            foreach (int rawValue in (IEnumerable) base.GetValue(message))

+            {

+                ret.Add(enumDescriptor.FindValueByNumber(rawValue));

+            }

+            return Lists.AsReadOnly(ret);

+        }

+

+        public override object GetRepeatedValue(TMessage message, int index)

+        {

+            // Note: This relies on the fact that the CLR allows unboxing from an enum to

+            // its underlying value

+            int rawValue = (int) base.GetRepeatedValue(message, index);

+            return enumDescriptor.FindValueByNumber(rawValue);

+        }

+

+        public override void AddRepeated(TBuilder builder, object value)

+        {

+            ThrowHelper.ThrowIfNull(value, "value");

+            base.AddRepeated(builder, ((EnumValueDescriptor) value).Number);

+        }

+

+        public override void SetRepeated(TBuilder builder, int index, object value)

+        {

+            ThrowHelper.ThrowIfNull(value, "value");

+            base.SetRepeated(builder, index, ((EnumValueDescriptor) value).Number);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs b/csharp/src/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs
new file mode 100644
index 0000000..fd18b90
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/FieldAccess/RepeatedMessageAccessor.cs
@@ -0,0 +1,97 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Reflection;

+

+namespace Google.ProtocolBuffers.FieldAccess

+{

+    /// <summary>

+    /// Accessor for a repeated message field.

+    /// 

+    /// TODO(jonskeet): Try to extract the commonality between this and SingleMessageAccessor.

+    /// We almost want multiple inheritance...

+    /// </summary>

+    internal sealed class RepeatedMessageAccessor<TMessage, TBuilder> : RepeatedPrimitiveAccessor<TMessage, TBuilder>

+        where TMessage : IMessage<TMessage, TBuilder>

+        where TBuilder : IBuilder<TMessage, TBuilder>

+    {

+        /// <summary>

+        /// The static method to create a builder for the property type. For example,

+        /// in a message type "Foo", a field called "bar" might be of type "Baz". This

+        /// method is Baz.CreateBuilder.

+        /// </summary>

+        private readonly Func<IBuilder> createBuilderDelegate;

+

+        internal RepeatedMessageAccessor(string name) : base(name)

+        {

+            MethodInfo createBuilderMethod = ClrType.GetMethod("CreateBuilder", EmptyTypes);

+            if (createBuilderMethod == null)

+            {

+                throw new ArgumentException("No public static CreateBuilder method declared in " + ClrType.Name);

+            }

+            createBuilderDelegate = ReflectionUtil.CreateStaticUpcastDelegate(createBuilderMethod);

+        }

+

+        /// <summary>

+        /// Creates a message of the appropriate CLR type from the given value,

+        /// which may already be of the right type or may be a dynamic message.

+        /// </summary>

+        private object CoerceType(object value)

+        {

+            ThrowHelper.ThrowIfNull(value, "value");

+            // If it's already of the right type, we're done

+            if (ClrType.IsInstanceOfType(value))

+            {

+                return value;

+            }

+

+            // No... so let's create a builder of the right type, and merge the value in.

+            IMessageLite message = (IMessageLite) value;

+            return CreateBuilder().WeakMergeFrom(message).WeakBuild();

+        }

+

+        public override void SetRepeated(TBuilder builder, int index, object value)

+        {

+            base.SetRepeated(builder, index, CoerceType(value));

+        }

+

+        public override IBuilder CreateBuilder()

+        {

+            return createBuilderDelegate();

+        }

+

+        public override void AddRepeated(TBuilder builder, object value)

+        {

+            base.AddRepeated(builder, CoerceType(value));

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/FieldAccess/RepeatedPrimitiveAccessor.cs b/csharp/src/ProtocolBuffers/FieldAccess/RepeatedPrimitiveAccessor.cs
new file mode 100644
index 0000000..d3b926b
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/FieldAccess/RepeatedPrimitiveAccessor.cs
@@ -0,0 +1,158 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Collections;

+using System.Reflection;

+

+namespace Google.ProtocolBuffers.FieldAccess

+{

+    /// <summary>

+    /// Accessor for a repeated field of type int, ByteString etc.

+    /// </summary>

+    internal class RepeatedPrimitiveAccessor<TMessage, TBuilder> : IFieldAccessor<TMessage, TBuilder>

+        where TMessage : IMessage<TMessage, TBuilder>

+        where TBuilder : IBuilder<TMessage, TBuilder>

+    {

+        private readonly Type clrType;

+        private readonly Func<TMessage, object> getValueDelegate;

+        private readonly Func<TBuilder, IBuilder> clearDelegate;

+        private readonly Action<TBuilder, object> addValueDelegate;

+        private readonly Func<TBuilder, object> getRepeatedWrapperDelegate;

+        private readonly Func<TMessage, int> countDelegate;

+        private readonly MethodInfo getElementMethod;

+        private readonly MethodInfo setElementMethod;

+

+        // Replacement for Type.EmptyTypes which apparently isn't available on the compact framework

+        internal static readonly Type[] EmptyTypes = new Type[0];

+

+        /// <summary>

+        /// The CLR type of the field (int, the enum type, ByteString, the message etc).

+        /// This is taken from the return type of the method used to retrieve a single

+        /// value.

+        /// </summary>

+        protected Type ClrType

+        {

+            get { return clrType; }

+        }

+

+        internal RepeatedPrimitiveAccessor(string name)

+        {

+            PropertyInfo messageProperty = typeof(TMessage).GetProperty(name + "List");

+            PropertyInfo builderProperty = typeof(TBuilder).GetProperty(name + "List");

+            PropertyInfo countProperty = typeof(TMessage).GetProperty(name + "Count");

+            MethodInfo clearMethod = typeof(TBuilder).GetMethod("Clear" + name, EmptyTypes);

+            getElementMethod = typeof(TMessage).GetMethod("Get" + name, new Type[] {typeof(int)});

+            clrType = getElementMethod.ReturnType;

+            MethodInfo addMethod = typeof(TBuilder).GetMethod("Add" + name, new Type[] {ClrType});

+            setElementMethod = typeof(TBuilder).GetMethod("Set" + name, new Type[] {typeof(int), ClrType});

+            if (messageProperty == null

+                || builderProperty == null

+                || countProperty == null

+                || clearMethod == null

+                || addMethod == null

+                || getElementMethod == null

+                || setElementMethod == null)

+            {

+                throw new ArgumentException("Not all required properties/methods available");

+            }

+            clearDelegate = ReflectionUtil.CreateDelegateFunc<TBuilder, IBuilder>(clearMethod);

+            countDelegate = ReflectionUtil.CreateDelegateFunc<TMessage, int>(countProperty.GetGetMethod());

+            getValueDelegate = ReflectionUtil.CreateUpcastDelegate<TMessage>(messageProperty.GetGetMethod());

+            addValueDelegate = ReflectionUtil.CreateDowncastDelegateIgnoringReturn<TBuilder>(addMethod);

+            getRepeatedWrapperDelegate = ReflectionUtil.CreateUpcastDelegate<TBuilder>(builderProperty.GetGetMethod());

+        }

+

+        public bool Has(TMessage message)

+        {

+            throw new InvalidOperationException();

+        }

+

+        public virtual IBuilder CreateBuilder()

+        {

+            throw new InvalidOperationException();

+        }

+

+        public virtual object GetValue(TMessage message)

+        {

+            return getValueDelegate(message);

+        }

+

+        public void SetValue(TBuilder builder, object value)

+        {

+            // Add all the elements individually.  This serves two purposes:

+            // 1) Verifies that each element has the correct type.

+            // 2) Insures that the caller cannot modify the list later on and

+            //    have the modifications be reflected in the message.

+            Clear(builder);

+            foreach (object element in (IEnumerable) value)

+            {

+                AddRepeated(builder, element);

+            }

+        }

+

+        public void Clear(TBuilder builder)

+        {

+            clearDelegate(builder);

+        }

+

+        public int GetRepeatedCount(TMessage message)

+        {

+            return countDelegate(message);

+        }

+

+        public virtual object GetRepeatedValue(TMessage message, int index)

+        {

+            return getElementMethod.Invoke(message, new object[] {index});

+        }

+

+        public virtual void SetRepeated(TBuilder builder, int index, object value)

+        {

+            ThrowHelper.ThrowIfNull(value, "value");

+            setElementMethod.Invoke(builder, new object[] {index, value});

+        }

+

+        public virtual void AddRepeated(TBuilder builder, object value)

+        {

+            ThrowHelper.ThrowIfNull(value, "value");

+            addValueDelegate(builder, value);

+        }

+

+        /// <summary>

+        /// The builder class's accessor already builds a read-only wrapper for

+        /// us, which is exactly what we want.

+        /// </summary>

+        public object GetRepeatedWrapper(TBuilder builder)

+        {

+            return getRepeatedWrapperDelegate(builder);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/FieldAccess/SingleEnumAccessor.cs b/csharp/src/ProtocolBuffers/FieldAccess/SingleEnumAccessor.cs
new file mode 100644
index 0000000..6327cc5
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/FieldAccess/SingleEnumAccessor.cs
@@ -0,0 +1,74 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers.FieldAccess

+{

+    /// <summary>

+    /// Accessor for fields representing a non-repeated enum value.

+    /// </summary>

+    internal sealed class SingleEnumAccessor<TMessage, TBuilder> : SinglePrimitiveAccessor<TMessage, TBuilder>

+        where TMessage : IMessage<TMessage, TBuilder>

+        where TBuilder : IBuilder<TMessage, TBuilder>

+    {

+        private readonly EnumDescriptor enumDescriptor;

+

+        internal SingleEnumAccessor(FieldDescriptor field, string name) : base(name)

+        {

+            enumDescriptor = field.EnumType;

+        }

+

+        /// <summary>

+        /// Returns an EnumValueDescriptor representing the value in the builder.

+        /// Note that if an enum has multiple values for the same number, the descriptor

+        /// for the first value with that number will be returned.

+        /// </summary>

+        public override object GetValue(TMessage message)

+        {

+            // Note: This relies on the fact that the CLR allows unboxing from an enum to

+            // its underlying value

+            int rawValue = (int) base.GetValue(message);

+            return enumDescriptor.FindValueByNumber(rawValue);

+        }

+

+        /// <summary>

+        /// Sets the value as an enum (via an int) in the builder,

+        /// from an EnumValueDescriptor parameter.

+        /// </summary>

+        public override void SetValue(TBuilder builder, object value)

+        {

+            ThrowHelper.ThrowIfNull(value, "value");

+            EnumValueDescriptor valueDescriptor = (EnumValueDescriptor) value;

+            base.SetValue(builder, valueDescriptor.Number);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs b/csharp/src/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs
new file mode 100644
index 0000000..6bf48a0
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/FieldAccess/SingleMessageAccessor.cs
@@ -0,0 +1,89 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Reflection;

+

+namespace Google.ProtocolBuffers.FieldAccess

+{

+    /// <summary>

+    /// Accessor for fields representing a non-repeated message value.

+    /// </summary>

+    internal sealed class SingleMessageAccessor<TMessage, TBuilder> : SinglePrimitiveAccessor<TMessage, TBuilder>

+        where TMessage : IMessage<TMessage, TBuilder>

+        where TBuilder : IBuilder<TMessage, TBuilder>

+    {

+        /// <summary>

+        /// The static method to create a builder for the property type. For example,

+        /// in a message type "Foo", a field called "bar" might be of type "Baz". This

+        /// method is Baz.CreateBuilder.

+        /// </summary>

+        private readonly Func<IBuilder> createBuilderDelegate;

+

+        internal SingleMessageAccessor(string name) : base(name)

+        {

+            MethodInfo createBuilderMethod = ClrType.GetMethod("CreateBuilder", ReflectionUtil.EmptyTypes);

+            if (createBuilderMethod == null)

+            {

+                throw new ArgumentException("No public static CreateBuilder method declared in " + ClrType.Name);

+            }

+            createBuilderDelegate = ReflectionUtil.CreateStaticUpcastDelegate(createBuilderMethod);

+        }

+

+        /// <summary>

+        /// Creates a message of the appropriate CLR type from the given value,

+        /// which may already be of the right type or may be a dynamic message.

+        /// </summary>

+        private object CoerceType(object value)

+        {

+            ThrowHelper.ThrowIfNull(value, "value");

+            // If it's already of the right type, we're done

+            if (ClrType.IsInstanceOfType(value))

+            {

+                return value;

+            }

+

+            // No... so let's create a builder of the right type, and merge the value in.

+            IMessageLite message = (IMessageLite) value;

+            return CreateBuilder().WeakMergeFrom(message).WeakBuild();

+        }

+

+        public override void SetValue(TBuilder builder, object value)

+        {

+            base.SetValue(builder, CoerceType(value));

+        }

+

+        public override IBuilder CreateBuilder()

+        {

+            return createBuilderDelegate();

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/FieldAccess/SinglePrimitiveAccessor.cs b/csharp/src/ProtocolBuffers/FieldAccess/SinglePrimitiveAccessor.cs
new file mode 100644
index 0000000..e5a0754
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/FieldAccess/SinglePrimitiveAccessor.cs
@@ -0,0 +1,133 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Reflection;

+

+namespace Google.ProtocolBuffers.FieldAccess

+{

+    /// <summary>

+    /// Access for a non-repeated field of a "primitive" type (i.e. not another message or an enum).

+    /// </summary>

+    internal class SinglePrimitiveAccessor<TMessage, TBuilder> : IFieldAccessor<TMessage, TBuilder>

+        where TMessage : IMessage<TMessage, TBuilder>

+        where TBuilder : IBuilder<TMessage, TBuilder>

+    {

+        private readonly Type clrType;

+        private readonly Func<TMessage, object> getValueDelegate;

+        private readonly Action<TBuilder, object> setValueDelegate;

+        private readonly Func<TMessage, bool> hasDelegate;

+        private readonly Func<TBuilder, IBuilder> clearDelegate;

+

+        /// <summary>

+        /// The CLR type of the field (int, the enum type, ByteString, the message etc).

+        /// As declared by the property.

+        /// </summary>

+        protected Type ClrType

+        {

+            get { return clrType; }

+        }

+

+        internal SinglePrimitiveAccessor(string name)

+        {

+            PropertyInfo messageProperty = typeof(TMessage).GetProperty(name, null, ReflectionUtil.EmptyTypes);

+            PropertyInfo builderProperty = typeof(TBuilder).GetProperty(name, null, ReflectionUtil.EmptyTypes);

+            PropertyInfo hasProperty = typeof(TMessage).GetProperty("Has" + name);

+            MethodInfo clearMethod = typeof(TBuilder).GetMethod("Clear" + name);

+            if (messageProperty == null || builderProperty == null || hasProperty == null || clearMethod == null)

+            {

+                throw new ArgumentException("Not all required properties/methods available");

+            }

+            clrType = messageProperty.PropertyType;

+            hasDelegate = ReflectionUtil.CreateDelegateFunc<TMessage, bool>(hasProperty.GetGetMethod());

+            clearDelegate = ReflectionUtil.CreateDelegateFunc<TBuilder, IBuilder>(clearMethod);

+            getValueDelegate = ReflectionUtil.CreateUpcastDelegate<TMessage>(messageProperty.GetGetMethod());

+            setValueDelegate = ReflectionUtil.CreateDowncastDelegate<TBuilder>(builderProperty.GetSetMethod());

+        }

+

+        public bool Has(TMessage message)

+        {

+            return hasDelegate(message);

+        }

+

+        public void Clear(TBuilder builder)

+        {

+            clearDelegate(builder);

+        }

+

+        /// <summary>

+        /// Only valid for message types - this implementation throws InvalidOperationException.

+        /// </summary>

+        public virtual IBuilder CreateBuilder()

+        {

+            throw new InvalidOperationException();

+        }

+

+        public virtual object GetValue(TMessage message)

+        {

+            return getValueDelegate(message);

+        }

+

+        public virtual void SetValue(TBuilder builder, object value)

+        {

+            setValueDelegate(builder, value);

+        }

+

+        #region Methods only related to repeated values

+

+        public int GetRepeatedCount(TMessage message)

+        {

+            throw new InvalidOperationException();

+        }

+

+        public object GetRepeatedValue(TMessage message, int index)

+        {

+            throw new InvalidOperationException();

+        }

+

+        public void SetRepeated(TBuilder builder, int index, object value)

+        {

+            throw new InvalidOperationException();

+        }

+

+        public void AddRepeated(TBuilder builder, object value)

+        {

+            throw new InvalidOperationException();

+        }

+

+        public object GetRepeatedWrapper(TBuilder builder)

+        {

+            throw new InvalidOperationException();

+        }

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/FieldSet.cs b/csharp/src/ProtocolBuffers/FieldSet.cs
new file mode 100644
index 0000000..f3c08cf
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/FieldSet.cs
@@ -0,0 +1,632 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Collections;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    public interface IFieldDescriptorLite : IComparable<IFieldDescriptorLite>

+    {

+        bool IsRepeated { get; }

+        bool IsRequired { get; }

+        bool IsPacked { get; }

+        bool IsExtension { get; }

+        bool MessageSetWireFormat { get; } //field.ContainingType.Options.MessageSetWireFormat

+        int FieldNumber { get; }

+        string Name { get; }

+        string FullName { get; }

+        IEnumLiteMap EnumType { get; }

+        FieldType FieldType { get; }

+        MappedType MappedType { get; }

+        object DefaultValue { get; }

+    }

+

+    /// <summary>

+    /// A class which represents an arbitrary set of fields of some message type.

+    /// This is used to implement DynamicMessage, and also to represent extensions

+    /// in GeneratedMessage. This class is internal, since outside users should probably

+    /// be using DynamicMessage.

+    /// 

+    /// As in the Java implementation, this class goes against the rest of the framework

+    /// in terms of mutability. Instead of having a mutable Builder class and an immutable

+    /// FieldSet class, FieldSet just has a MakeImmutable() method. This is safe so long as

+    /// all callers are careful not to let a mutable FieldSet escape into the open. This would

+    /// be impossible to guarantee if this were a public class, of course.

+    /// 

+    /// All repeated fields are stored as IList[object] even 

+    /// TODO(jonskeet): Finish this comment!

+    /// </summary>

+    internal sealed class FieldSet

+    {

+        private static readonly FieldSet defaultInstance =

+            new FieldSet(new Dictionary<IFieldDescriptorLite, object>()).MakeImmutable();

+

+        private IDictionary<IFieldDescriptorLite, object> fields;

+

+        private FieldSet(IDictionary<IFieldDescriptorLite, object> fields)

+        {

+            this.fields = fields;

+        }

+

+        public static FieldSet CreateInstance()

+        {

+            // Use SortedList to keep fields in the canonical order

+            return new FieldSet(new SortedList<IFieldDescriptorLite, object>());

+        }

+

+        /// <summary>

+        /// Makes this FieldSet immutable, and returns it for convenience. Any

+        /// mutable repeated fields are made immutable, as well as the map itself.

+        /// </summary>

+        internal FieldSet MakeImmutable()

+        {

+            // First check if we have any repeated values

+            bool hasRepeats = false;

+            foreach (object value in fields.Values)

+            {

+                IList<object> list = value as IList<object>;

+                if (list != null && !list.IsReadOnly)

+                {

+                    hasRepeats = true;

+                    break;

+                }

+            }

+

+            if (hasRepeats)

+            {

+                var tmp = new SortedList<IFieldDescriptorLite, object>();

+                foreach (KeyValuePair<IFieldDescriptorLite, object> entry in fields)

+                {

+                    IList<object> list = entry.Value as IList<object>;

+                    tmp[entry.Key] = list == null ? entry.Value : Lists.AsReadOnly(list);

+                }

+                fields = tmp;

+            }

+

+            fields = Dictionaries.AsReadOnly(fields);

+

+            return this;

+        }

+

+        /// <summary>

+        /// Returns the default, immutable instance with no fields defined.

+        /// </summary>

+        internal static FieldSet DefaultInstance

+        {

+            get { return defaultInstance; }

+        }

+

+        /// <summary>

+        /// Returns an immutable mapping of fields. Note that although the mapping itself

+        /// is immutable, the entries may not be (i.e. any repeated values are represented by

+        /// mutable lists). The behaviour is not specified if the contents are mutated.

+        /// </summary>

+        internal IDictionary<IFieldDescriptorLite, object> AllFields

+        {

+            get { return Dictionaries.AsReadOnly(fields); }

+        }

+

+#if !LITE

+        /// <summary>

+        /// Force coercion to full descriptor dictionary.

+        /// </summary>

+        internal IDictionary<FieldDescriptor, object> AllFieldDescriptors

+        {

+            get

+            {

+                SortedList<FieldDescriptor, object> copy =

+                    new SortedList<FieldDescriptor, object>();

+                foreach (KeyValuePair<IFieldDescriptorLite, object> fd in fields)

+                {

+                    copy.Add((FieldDescriptor) fd.Key, fd.Value);

+                }

+                return Dictionaries.AsReadOnly(copy);

+            }

+        }

+#endif

+

+        /// <summary>

+        /// See <see cref="IMessageLite.HasField"/>.

+        /// </summary>

+        public bool HasField(IFieldDescriptorLite field)

+        {

+            if (field.IsRepeated)

+            {

+                throw new ArgumentException("HasField() can only be called on non-repeated fields.");

+            }

+

+            return fields.ContainsKey(field);

+        }

+

+        /// <summary>

+        /// Clears all fields.

+        /// </summary>

+        internal void Clear()

+        {

+            fields.Clear();

+        }

+

+        /// <summary>

+        /// See <see cref="IMessageLite.Item(IFieldDescriptorLite)"/>

+        /// </summary>

+        /// <remarks>

+        /// If the field is not set, the behaviour when fetching this property varies by field type:

+        /// <list>

+        /// <item>For singular message values, null is returned.</item>

+        /// <item>For singular non-message values, the default value of the field is returned.</item>

+        /// <item>For repeated values, an empty immutable list is returned. This will be compatible

+        /// with IList[object], regardless of the type of the repeated item.</item>

+        /// </list>

+        /// This method returns null if the field is a singular message type

+        /// and is not set; in this case it is up to the caller to fetch the 

+        /// message's default instance. For repeated fields of message types, 

+        /// an empty collection is returned. For repeated fields of non-message

+        /// types, null is returned.

+        /// <para />

+        /// When setting this property, any list values are copied, and each element is checked

+        /// to ensure it is of an appropriate type.

+        /// </remarks>

+        /// 

+        internal object this[IFieldDescriptorLite field]

+        {

+            get

+            {

+                object result;

+                if (fields.TryGetValue(field, out result))

+                {

+                    return result;

+                }

+                if (field.MappedType == MappedType.Message)

+                {

+                    if (field.IsRepeated)

+                    {

+                        return new List<object>();

+                    }

+                    else

+                    {

+                        return null;

+                    }

+                }

+                return field.DefaultValue;

+            }

+            set

+            {

+                if (field.IsRepeated)

+                {

+                    List<object> list = value as List<object>;

+                    if (list == null)

+                    {

+                        throw new ArgumentException("Wrong object type used with protocol message reflection.");

+                    }

+

+                    // Wrap the contents in a new list so that the caller cannot change

+                    // the list's contents after setting it.

+                    List<object> newList = new List<object>(list);

+                    foreach (object element in newList)

+                    {

+                        VerifyType(field, element);

+                    }

+                    value = newList;

+                }

+                else

+                {

+                    VerifyType(field, value);

+                }

+                fields[field] = value;

+            }

+        }

+

+        /// <summary>

+        /// See <see cref="IMessageLite.Item(IFieldDescriptorLite,int)" />

+        /// </summary>

+        internal object this[IFieldDescriptorLite field, int index]

+        {

+            get

+            {

+                if (!field.IsRepeated)

+                {

+                    throw new ArgumentException(

+                        "Indexer specifying field and index can only be called on repeated fields.");

+                }

+

+                return ((IList<object>) this[field])[index];

+            }

+            set

+            {

+                if (!field.IsRepeated)

+                {

+                    throw new ArgumentException(

+                        "Indexer specifying field and index can only be called on repeated fields.");

+                }

+                VerifyType(field, value);

+                object list;

+                if (!fields.TryGetValue(field, out list))

+                {

+                    throw new ArgumentOutOfRangeException();

+                }

+                ((IList<object>) list)[index] = value;

+            }

+        }

+

+        /// <summary>

+        /// See <see cref="IBuilder{TMessage, TBuilder}.AddRepeatedField" />

+        /// </summary>

+        internal void AddRepeatedField(IFieldDescriptorLite field, object value)

+        {

+            if (!field.IsRepeated)

+            {

+                throw new ArgumentException("AddRepeatedField can only be called on repeated fields.");

+            }

+            VerifyType(field, value);

+            object list;

+            if (!fields.TryGetValue(field, out list))

+            {

+                list = new List<object>();

+                fields[field] = list;

+            }

+            ((IList<object>) list).Add(value);

+        }

+

+        /// <summary>

+        /// Returns an enumerator for the field map. Used to write the fields out.

+        /// </summary>

+        internal IEnumerator<KeyValuePair<IFieldDescriptorLite, object>> GetEnumerator()

+        {

+            return fields.GetEnumerator();

+        }

+

+        /// <summary>

+        /// See <see cref="IMessageLite.IsInitialized" />

+        /// </summary>

+        /// <remarks>

+        /// Since FieldSet itself does not have any way of knowing about

+        /// required fields that aren't actually present in the set, it is up

+        /// to the caller to check for genuinely required fields. This property

+        /// merely checks that any messages present are themselves initialized.

+        /// </remarks>

+        internal bool IsInitialized

+        {

+            get

+            {

+                foreach (KeyValuePair<IFieldDescriptorLite, object> entry in fields)

+                {

+                    IFieldDescriptorLite field = entry.Key;

+                    if (field.MappedType == MappedType.Message)

+                    {

+                        if (field.IsRepeated)

+                        {

+                            foreach (IMessageLite message in (IEnumerable) entry.Value)

+                            {

+                                if (!message.IsInitialized)

+                                {

+                                    return false;

+                                }

+                            }

+                        }

+                        else

+                        {

+                            if (!((IMessageLite) entry.Value).IsInitialized)

+                            {

+                                return false;

+                            }

+                        }

+                    }

+                }

+                return true;

+            }

+        }

+

+        /// <summary>

+        /// Verifies whether all the required fields in the specified message

+        /// descriptor are present in this field set, as well as whether

+        /// all the embedded messages are themselves initialized.

+        /// </summary>

+        internal bool IsInitializedWithRespectTo(IEnumerable typeFields)

+        {

+            foreach (IFieldDescriptorLite field in typeFields)

+            {

+                if (field.IsRequired && !HasField(field))

+                {

+                    return false;

+                }

+            }

+            return IsInitialized;

+        }

+

+        /// <summary>

+        /// See <see cref="IBuilder{TMessage, TBuilder}.ClearField" />

+        /// </summary>

+        public void ClearField(IFieldDescriptorLite field)

+        {

+            fields.Remove(field);

+        }

+

+        /// <summary>

+        /// See <see cref="IMessageLite.GetRepeatedFieldCount" />

+        /// </summary>

+        public int GetRepeatedFieldCount(IFieldDescriptorLite field)

+        {

+            if (!field.IsRepeated)

+            {

+                throw new ArgumentException("GetRepeatedFieldCount() can only be called on repeated fields.");

+            }

+

+            return ((IList<object>) this[field]).Count;

+        }

+

+#if !LITE

+        /// <summary>

+        /// See <see cref="IBuilder{TMessage, TBuilder}.MergeFrom(IMessageLite)" />

+        /// </summary>

+        public void MergeFrom(IMessage other)

+        {

+            foreach (KeyValuePair<FieldDescriptor, object> fd in other.AllFields)

+            {

+                MergeField(fd.Key, fd.Value);

+            }

+        }

+#endif

+

+        /// <summary>

+        /// Implementation of both <c>MergeFrom</c> methods.

+        /// </summary>

+        /// <param name="otherFields"></param>

+        public void MergeFrom(FieldSet other)

+        {

+            // Note:  We don't attempt to verify that other's fields have valid

+            //   types.  Doing so would be a losing battle.  We'd have to verify

+            //   all sub-messages as well, and we'd have to make copies of all of

+            //   them to insure that they don't change after verification (since

+            //   the IMessageLite interface itself cannot enforce immutability of

+            //   implementations).

+            // TODO(jonskeet):  Provide a function somewhere called MakeDeepCopy()

+            //   which allows people to make secure deep copies of messages.

+

+            foreach (KeyValuePair<IFieldDescriptorLite, object> entry in other.fields)

+            {

+                MergeField(entry.Key, entry.Value);

+            }

+        }

+

+        private void MergeField(IFieldDescriptorLite field, object mergeValue)

+        {

+            object existingValue;

+            fields.TryGetValue(field, out existingValue);

+            if (field.IsRepeated)

+            {

+                if (existingValue == null)

+                {

+                    existingValue = new List<object>();

+                    fields[field] = existingValue;

+                }

+                IList<object> list = (IList<object>) existingValue;

+                foreach (object otherValue in (IEnumerable) mergeValue)

+                {

+                    list.Add(otherValue);

+                }

+            }

+            else if (field.MappedType == MappedType.Message && existingValue != null)

+            {

+                IMessageLite existingMessage = (IMessageLite) existingValue;

+                IMessageLite merged = existingMessage.WeakToBuilder()

+                    .WeakMergeFrom((IMessageLite) mergeValue)

+                    .WeakBuild();

+                this[field] = merged;

+            }

+            else

+            {

+                this[field] = mergeValue;

+            }

+        }

+

+        /// <summary>

+        /// See <see cref="IMessageLite.WriteTo(CodedOutputStream)" />.

+        /// </summary>

+        public void WriteTo(ICodedOutputStream output)

+        {

+            foreach (KeyValuePair<IFieldDescriptorLite, object> entry in fields)

+            {

+                WriteField(entry.Key, entry.Value, output);

+            }

+        }

+

+        /// <summary>

+        /// Writes a single field to a CodedOutputStream.

+        /// </summary>

+        public void WriteField(IFieldDescriptorLite field, Object value, ICodedOutputStream output)

+        {

+            if (field.IsExtension && field.MessageSetWireFormat)

+            {

+                output.WriteMessageSetExtension(field.FieldNumber, field.Name, (IMessageLite) value);

+            }

+            else

+            {

+                if (field.IsRepeated)

+                {

+                    IEnumerable valueList = (IEnumerable) value;

+                    if (field.IsPacked)

+                    {

+                        output.WritePackedArray(field.FieldType, field.FieldNumber, field.Name, valueList);

+                    }

+                    else

+                    {

+                        output.WriteArray(field.FieldType, field.FieldNumber, field.Name, valueList);

+                    }

+                }

+                else

+                {

+                    output.WriteField(field.FieldType, field.FieldNumber, field.Name, value);

+                }

+            }

+        }

+

+        /// <summary>

+        /// See <see cref="IMessageLite.SerializedSize" />. It's up to the caller to

+        /// cache the resulting size if desired.

+        /// </summary>

+        public int SerializedSize

+        {

+            get

+            {

+                int size = 0;

+                foreach (KeyValuePair<IFieldDescriptorLite, object> entry in fields)

+                {

+                    IFieldDescriptorLite field = entry.Key;

+                    object value = entry.Value;

+

+                    if (field.IsExtension && field.MessageSetWireFormat)

+                    {

+                        size += CodedOutputStream.ComputeMessageSetExtensionSize(field.FieldNumber, (IMessageLite) value);

+                    }

+                    else

+                    {

+                        if (field.IsRepeated)

+                        {

+                            IEnumerable valueList = (IEnumerable) value;

+                            if (field.IsPacked)

+                            {

+                                int dataSize = 0;

+                                foreach (object element in valueList)

+                                {

+                                    dataSize += CodedOutputStream.ComputeFieldSizeNoTag(field.FieldType, element);

+                                }

+                                size += dataSize + CodedOutputStream.ComputeTagSize(field.FieldNumber) +

+                                        CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);

+                            }

+                            else

+                            {

+                                foreach (object element in valueList)

+                                {

+                                    size += CodedOutputStream.ComputeFieldSize(field.FieldType, field.FieldNumber,

+                                                                               element);

+                                }

+                            }

+                        }

+                        else

+                        {

+                            size += CodedOutputStream.ComputeFieldSize(field.FieldType, field.FieldNumber, value);

+                        }

+                    }

+                }

+                return size;

+            }

+        }

+

+        /// <summary>

+        /// Verifies that the given object is of the correct type to be a valid

+        /// value for the given field.

+        /// </summary>

+        /// <remarks>

+        /// For repeated fields, this checks if the object is of the right

+        /// element type, not whether it's a list.

+        /// </remarks>

+        /// <exception cref="ArgumentException">The value is not of the right type.</exception>

+        /// <exception cref="ArgumentNullException">The value is null.</exception>

+        private static void VerifyType(IFieldDescriptorLite field, object value)

+        {

+            ThrowHelper.ThrowIfNull(value, "value");

+            bool isValid = false;

+            switch (field.MappedType)

+            {

+                case MappedType.Int32:

+                    isValid = value is int;

+                    break;

+                case MappedType.Int64:

+                    isValid = value is long;

+                    break;

+                case MappedType.UInt32:

+                    isValid = value is uint;

+                    break;

+                case MappedType.UInt64:

+                    isValid = value is ulong;

+                    break;

+                case MappedType.Single:

+                    isValid = value is float;

+                    break;

+                case MappedType.Double:

+                    isValid = value is double;

+                    break;

+                case MappedType.Boolean:

+                    isValid = value is bool;

+                    break;

+                case MappedType.String:

+                    isValid = value is string;

+                    break;

+                case MappedType.ByteString:

+                    isValid = value is ByteString;

+                    break;

+                case MappedType.Enum:

+                    IEnumLite enumValue = value as IEnumLite;

+                    isValid = enumValue != null && field.EnumType.IsValidValue(enumValue);

+                    break;

+                case MappedType.Message:

+                    IMessageLite messageValue = value as IMessageLite;

+                    isValid = messageValue != null;

+#if !LITE

+                    if (isValid && messageValue is IMessage && field is FieldDescriptor)

+                    {

+                        isValid = ((IMessage) messageValue).DescriptorForType == ((FieldDescriptor) field).MessageType;

+                    }

+#endif

+                    break;

+            }

+

+            if (!isValid)

+            {

+                // When chaining calls to SetField(), it can be hard to tell from

+                // the stack trace which exact call failed, since the whole chain is

+                // considered one line of code.  So, let's make sure to include the

+                // field name and other useful info in the exception.

+                string message = "Wrong object type used with protocol message reflection.";

+#if !LITE

+                FieldDescriptor fieldinfo =

+                    field as FieldDescriptor;

+                if (fieldinfo != null)

+                {

+                    message += "Message type \"" + fieldinfo.ContainingType.FullName;

+                    message += "\", field \"" + (fieldinfo.IsExtension ? fieldinfo.FullName : fieldinfo.Name);

+                    message += "\", value was type \"" + value.GetType().Name + "\".";

+                }

+#endif

+                throw new ArgumentException(message);

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/FrameworkPortability.cs b/csharp/src/ProtocolBuffers/FrameworkPortability.cs
new file mode 100644
index 0000000..8ce8198
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/FrameworkPortability.cs
@@ -0,0 +1,111 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Globalization;

+using System.Reflection;

+using System.Text.RegularExpressions;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Class containing helpful workarounds for various platform compatibility

+    /// </summary>

+    internal static class FrameworkPortability

+    {

+#if COMPACT_FRAMEWORK

+        internal const string NewLine = "\n";

+#else

+        internal static readonly string NewLine = System.Environment.NewLine;

+#endif

+

+#if CLIENTPROFILE

+        internal const RegexOptions CompiledRegexWhereAvailable = RegexOptions.Compiled;

+#else

+        internal const RegexOptions CompiledRegexWhereAvailable = RegexOptions.None;

+#endif

+

+        internal static CultureInfo InvariantCulture 

+        { 

+            get { return CultureInfo.InvariantCulture; } 

+        }

+

+        internal static double Int64ToDouble(long value)

+        {

+#if CLIENTPROFILE

+            return BitConverter.Int64BitsToDouble(value);

+#else

+            double[] arresult = new double[1];

+            Buffer.BlockCopy(new[] { value }, 0, arresult, 0, 8);

+            return arresult[0];

+#endif

+        }

+

+        internal static long DoubleToInt64(double value)

+        {

+#if CLIENTPROFILE

+            return BitConverter.DoubleToInt64Bits(value);

+#else

+            long[] arresult = new long[1];

+            Buffer.BlockCopy(new[] { value }, 0, arresult, 0, 8);

+            return arresult[0];

+#endif

+        }

+

+        internal static bool TryParseInt32(string text, out int number)

+        {

+            return TryParseInt32(text, NumberStyles.Any, InvariantCulture, out number);

+        }

+

+        internal static bool TryParseInt32(string text, NumberStyles style, IFormatProvider format, out int number)

+        {

+#if COMPACT_FRAMEWORK

+                try 

+                {

+                    number = int.Parse(text, style, format); 

+                    return true;

+                }

+                catch 

+                {

+                    number = 0;

+                    return false; 

+                }

+#else

+            return int.TryParse(text, style, format, out number);

+#endif

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/GeneratedBuilder.cs b/csharp/src/ProtocolBuffers/GeneratedBuilder.cs
new file mode 100644
index 0000000..fd6fe4d
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/GeneratedBuilder.cs
@@ -0,0 +1,215 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Descriptors;

+using Google.ProtocolBuffers.FieldAccess;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// All generated protocol message builder classes extend this class. It implements

+    /// most of the IBuilder interface using reflection. Users can ignore this class

+    /// as an implementation detail.

+    /// </summary>

+    public abstract partial class GeneratedBuilder<TMessage, TBuilder> : AbstractBuilder<TMessage, TBuilder>

+        where TMessage : GeneratedMessage<TMessage, TBuilder>

+        where TBuilder : GeneratedBuilder<TMessage, TBuilder>, new()

+    {

+        /// <summary>

+        /// Returns the message being built at the moment.

+        /// </summary>

+        protected abstract TMessage MessageBeingBuilt { get; }

+

+        protected internal FieldAccessorTable<TMessage, TBuilder> InternalFieldAccessors

+        {

+            get { return DefaultInstanceForType.FieldAccessorsFromBuilder; }

+        }

+

+        public override IDictionary<FieldDescriptor, object> AllFields

+        {

+            get { return MessageBeingBuilt.AllFields; }

+        }

+

+        public override object this[FieldDescriptor field]

+        {

+            get

+            {

+                // For repeated fields, the underlying list object is still modifiable at this point.

+                // Make sure not to expose the modifiable list to the caller.

+                return field.IsRepeated

+                           ? InternalFieldAccessors[field].GetRepeatedWrapper(ThisBuilder)

+                           : MessageBeingBuilt[field];

+            }

+            set { InternalFieldAccessors[field].SetValue(ThisBuilder, value); }

+        }

+

+        /// <summary>

+        /// Called by derived classes to parse an unknown field.

+        /// </summary>

+        /// <returns>true unless the tag is an end-group tag</returns>

+        [CLSCompliant(false)]

+        protected virtual bool ParseUnknownField(ICodedInputStream input, UnknownFieldSet.Builder unknownFields,

+                                                 ExtensionRegistry extensionRegistry, uint tag, string fieldName)

+        {

+            return unknownFields.MergeFieldFrom(tag, input);

+        }

+

+        public override MessageDescriptor DescriptorForType

+        {

+            get { return DefaultInstanceForType.DescriptorForType; }

+        }

+

+        public override int GetRepeatedFieldCount(FieldDescriptor field)

+        {

+            return MessageBeingBuilt.GetRepeatedFieldCount(field);

+        }

+

+        public override object this[FieldDescriptor field, int index]

+        {

+            get { return MessageBeingBuilt[field, index]; }

+            set { InternalFieldAccessors[field].SetRepeated(ThisBuilder, index, value); }

+        }

+

+        public override bool HasField(FieldDescriptor field)

+        {

+            return MessageBeingBuilt.HasField(field);

+        }

+

+        public override IBuilder CreateBuilderForField(FieldDescriptor field)

+        {

+            return InternalFieldAccessors[field].CreateBuilder();

+        }

+

+        public override TBuilder ClearField(FieldDescriptor field)

+        {

+            InternalFieldAccessors[field].Clear(ThisBuilder);

+            return ThisBuilder;

+        }

+

+        public override TBuilder MergeFrom(TMessage other)

+        {

+            if (other.DescriptorForType != InternalFieldAccessors.Descriptor)

+            {

+                throw new ArgumentException("Message type mismatch");

+            }

+

+            foreach (KeyValuePair<FieldDescriptor, object> entry in other.AllFields)

+            {

+                FieldDescriptor field = entry.Key;

+                if (field.IsRepeated)

+                {

+                    // Concatenate repeated fields

+                    foreach (object element in (IEnumerable) entry.Value)

+                    {

+                        AddRepeatedField(field, element);

+                    }

+                }

+                else if (field.MappedType == MappedType.Message && HasField(field))

+                {

+                    // Merge singular embedded messages

+                    IMessageLite oldValue = (IMessageLite) this[field];

+                    this[field] = oldValue.WeakCreateBuilderForType()

+                        .WeakMergeFrom(oldValue)

+                        .WeakMergeFrom((IMessageLite) entry.Value)

+                        .WeakBuildPartial();

+                }

+                else

+                {

+                    // Just overwrite

+                    this[field] = entry.Value;

+                }

+            }

+

+            //Fix for unknown fields not merging, see java's AbstractMessage.Builder<T> line 236

+            MergeUnknownFields(other.UnknownFields);

+

+            return ThisBuilder;

+        }

+

+        public override TBuilder MergeUnknownFields(UnknownFieldSet unknownFields)

+        {

+            if (unknownFields != UnknownFieldSet.DefaultInstance)

+            {

+                TMessage result = MessageBeingBuilt;

+                result.SetUnknownFields(UnknownFieldSet.CreateBuilder(result.UnknownFields)

+                                            .MergeFrom(unknownFields)

+                                            .Build());

+            }

+            return ThisBuilder;

+        }

+

+        public override TBuilder AddRepeatedField(FieldDescriptor field, object value)

+        {

+            InternalFieldAccessors[field].AddRepeated(ThisBuilder, value);

+            return ThisBuilder;

+        }

+

+        /// <summary>

+        /// Like Build(), but will wrap UninitializedMessageException in

+        /// InvalidProtocolBufferException.

+        /// </summary>

+        public TMessage BuildParsed()

+        {

+            if (!IsInitialized)

+            {

+                throw new UninitializedMessageException(MessageBeingBuilt).AsInvalidProtocolBufferException();

+            }

+            return BuildPartial();

+        }

+

+        /// <summary>

+        /// Implementation of <see cref="IBuilder{TMessage, TBuilder}.Build" />.

+        /// </summary>

+        public override TMessage Build()

+        {

+            // If the message is null, we'll throw a more appropriate exception in BuildPartial.

+            if (!IsInitialized)

+            {

+                throw new UninitializedMessageException(MessageBeingBuilt);

+            }

+            return BuildPartial();

+        }

+

+        public override UnknownFieldSet UnknownFields

+        {

+            get { return MessageBeingBuilt.UnknownFields; }

+            set { MessageBeingBuilt.SetUnknownFields(value); }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/GeneratedBuilderLite.cs b/csharp/src/ProtocolBuffers/GeneratedBuilderLite.cs
new file mode 100644
index 0000000..4030e80
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/GeneratedBuilderLite.cs
@@ -0,0 +1,101 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// All generated protocol message builder classes extend this class. It implements

+    /// most of the IBuilder interface using reflection. Users can ignore this class

+    /// as an implementation detail.

+    /// </summary>

+    public abstract partial class GeneratedBuilderLite<TMessage, TBuilder> : AbstractBuilderLite<TMessage, TBuilder>

+        where TMessage : GeneratedMessageLite<TMessage, TBuilder>

+        where TBuilder : GeneratedBuilderLite<TMessage, TBuilder>

+    {

+        /// <summary>

+        /// Returns the message being built at the moment.

+        /// </summary>

+        protected abstract TMessage MessageBeingBuilt { get; }

+

+        public override TBuilder MergeFrom(IMessageLite other)

+        {

+            //do nothing, Lite runtime does not support cross-message merges

+            return ThisBuilder;

+        }

+

+        public abstract TBuilder MergeFrom(TMessage other);

+

+        /// <summary>

+        /// Called by derived classes to parse an unknown field.

+        /// </summary>

+        /// <returns>true unless the tag is an end-group tag</returns>

+        [CLSCompliant(false)]

+        protected virtual bool ParseUnknownField(ICodedInputStream input,

+                                                 ExtensionRegistry extensionRegistry, uint tag, string fieldName)

+        {

+            return input.SkipField();

+        }

+

+        /// <summary>

+        /// Like Build(), but will wrap UninitializedMessageException in

+        /// InvalidProtocolBufferException.

+        /// </summary>

+        public TMessage BuildParsed()

+        {

+            if (!IsInitialized)

+            {

+                throw new UninitializedMessageException(MessageBeingBuilt).AsInvalidProtocolBufferException();

+            }

+            return BuildPartial();

+        }

+

+        /// <summary>

+        /// Implementation of <see cref="IBuilder{TMessage, TBuilder}.Build" />.

+        /// </summary>

+        public override TMessage Build()

+        {

+            // If the message is null, we'll throw a more appropriate exception in BuildPartial.

+            if (!IsInitialized)

+            {

+                throw new UninitializedMessageException(MessageBeingBuilt);

+            }

+            return BuildPartial();

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/GeneratedExtensionBase.cs b/csharp/src/ProtocolBuffers/GeneratedExtensionBase.cs
new file mode 100644
index 0000000..424b981
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/GeneratedExtensionBase.cs
@@ -0,0 +1,185 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using System.Reflection;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Base type for all generated extensions.

+    /// </summary>

+    /// <remarks>

+    /// The protocol compiler generates a static singleton instance of this

+    /// class for each extension. For exmaple, imagine a .proto file with:

+    /// <code>

+    /// message Foo {

+    ///   extensions 1000 to max

+    /// }

+    /// 

+    /// extend Foo {

+    ///   optional int32 bar;

+    /// }

+    /// </code>

+    /// Then MyProto.Foo.Bar has type GeneratedExtensionBase&lt;MyProto.Foo,int&gt;.

+    /// <para />

+    /// In general, users should ignore the details of this type, and

+    /// simply use the static singletons as parameters to the extension accessors

+    /// in ExtendableMessage and ExtendableBuilder.

+    /// The interface implemented by both GeneratedException and GeneratedRepeatException,

+    /// to make it easier to cope with repeats separately.

+    /// </remarks>

+    public abstract class GeneratedExtensionBase<TExtension>

+    {

+        private readonly FieldDescriptor descriptor;

+        private readonly IMessageLite messageDefaultInstance;

+

+        protected GeneratedExtensionBase(FieldDescriptor descriptor, Type singularExtensionType)

+        {

+            if (!descriptor.IsExtension)

+            {

+                throw new ArgumentException("GeneratedExtension given a regular (non-extension) field.");

+            }

+

+            this.descriptor = descriptor;

+            if (descriptor.MappedType == MappedType.Message)

+            {

+                PropertyInfo defaultInstanceProperty = singularExtensionType

+                    .GetProperty("DefaultInstance", BindingFlags.Static | BindingFlags.Public);

+                if (defaultInstanceProperty == null)

+                {

+                    throw new ArgumentException("No public static DefaultInstance property for type " +

+                                                typeof(TExtension).Name);

+                }

+

+                messageDefaultInstance = (IMessageLite) defaultInstanceProperty.GetValue(null, null);

+            }

+        }

+

+        public FieldDescriptor Descriptor

+        {

+            get { return descriptor; }

+        }

+

+        public int Number

+        {

+            get { return Descriptor.FieldNumber; }

+        }

+

+        /// <summary>

+        /// Returns the default message instance for extensions which are message types.

+        /// </summary>

+        public IMessageLite MessageDefaultInstance

+        {

+            get { return messageDefaultInstance; }

+        }

+

+        public object SingularFromReflectionType(object value)

+        {

+            switch (Descriptor.MappedType)

+            {

+                case MappedType.Message:

+                    if (value is TExtension)

+                    {

+                        return value;

+                    }

+                    else

+                    {

+                        // It seems the copy of the embedded message stored inside the

+                        // extended message is not of the exact type the user was

+                        // expecting.  This can happen if a user defines a

+                        // GeneratedExtension manually and gives it a different type.

+                        // This should not happen in normal use.  But, to be nice, we'll

+                        // copy the message to whatever type the caller was expecting.

+                        return MessageDefaultInstance.WeakCreateBuilderForType()

+                            .WeakMergeFrom((IMessageLite) value).WeakBuild();

+                    }

+                case MappedType.Enum:

+                    // Just return a boxed int - that can be unboxed to the enum

+                    EnumValueDescriptor enumValue = (EnumValueDescriptor) value;

+                    return enumValue.Number;

+                default:

+                    return value;

+            }

+        }

+

+        /// <summary>

+        /// Converts from the type used by the native accessors to the type

+        /// used by reflection accessors. For example, the reflection accessors

+        /// for enums use EnumValueDescriptors but the native accessors use

+        /// the generated enum type.

+        /// </summary>

+        public object ToReflectionType(object value)

+        {

+            if (descriptor.IsRepeated)

+            {

+                if (descriptor.MappedType == MappedType.Enum)

+                {

+                    // Must convert the whole list.

+                    IList<object> result = new List<object>();

+                    foreach (object element in (IEnumerable) value)

+                    {

+                        result.Add(SingularToReflectionType(element));

+                    }

+                    return result;

+                }

+                else

+                {

+                    return value;

+                }

+            }

+            else

+            {

+                return SingularToReflectionType(value);

+            }

+        }

+

+        /// <summary>

+        /// Like ToReflectionType(object) but for a single element.

+        /// </summary>

+        internal Object SingularToReflectionType(object value)

+        {

+            return descriptor.MappedType == MappedType.Enum

+                       ? descriptor.EnumType.FindValueByNumber((int) value)

+                       : value;

+        }

+

+        public abstract object FromReflectionType(object value);

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/GeneratedExtensionLite.cs b/csharp/src/ProtocolBuffers/GeneratedExtensionLite.cs
new file mode 100644
index 0000000..a162334
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/GeneratedExtensionLite.cs
@@ -0,0 +1,354 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.Collections;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    public interface IGeneratedExtensionLite

+    {

+        int Number { get; }

+        object ContainingType { get; }

+        IMessageLite MessageDefaultInstance { get; }

+        IFieldDescriptorLite Descriptor { get; }

+    }

+

+    public class ExtensionDescriptorLite : IFieldDescriptorLite

+    {

+        private readonly string fullName;

+        private readonly IEnumLiteMap enumTypeMap;

+        private readonly int number;

+        private readonly FieldType type;

+        private readonly bool isRepeated;

+        private readonly bool isPacked;

+        private readonly MappedType mapType;

+        private readonly object defaultValue;

+

+        public ExtensionDescriptorLite(string fullName, IEnumLiteMap enumTypeMap, int number, FieldType type,

+                                       object defaultValue, bool isRepeated, bool isPacked)

+        {

+            this.fullName = fullName;

+            this.enumTypeMap = enumTypeMap;

+            this.number = number;

+            this.type = type;

+            this.mapType = FieldMappingAttribute.MappedTypeFromFieldType(type);

+            this.isRepeated = isRepeated;

+            this.isPacked = isPacked;

+            this.defaultValue = defaultValue;

+        }

+

+        public string Name

+        {

+            get

+            {

+                string name = fullName;

+                int offset = name.LastIndexOf('.');

+                if (offset >= 0)

+                {

+                    name = name.Substring(offset);

+                }

+                return name;

+            }

+        }

+

+        public string FullName

+        {

+            get { return fullName; }

+        }

+

+        public bool IsRepeated

+        {

+            get { return isRepeated; }

+        }

+

+        public bool IsRequired

+        {

+            get { return false; }

+        }

+

+        public bool IsPacked

+        {

+            get { return isPacked; }

+        }

+

+        public bool IsExtension

+        {

+            get { return true; }

+        }

+

+        /// <summary>

+        /// This is not supported and assertions are made to ensure this does not exist on extensions of Lite types

+        /// </summary>

+        public bool MessageSetWireFormat

+        {

+            get { return false; }

+        }

+

+        public int FieldNumber

+        {

+            get { return number; }

+        }

+

+        public IEnumLiteMap EnumType

+        {

+            get { return enumTypeMap; }

+        }

+

+        public FieldType FieldType

+        {

+            get { return type; }

+        }

+

+        public MappedType MappedType

+        {

+            get { return mapType; }

+        }

+

+        public object DefaultValue

+        {

+            get { return defaultValue; }

+        }

+

+        public int CompareTo(IFieldDescriptorLite other)

+        {

+            return FieldNumber.CompareTo(other.FieldNumber);

+        }

+    }

+

+    public class GeneratedRepeatExtensionLite<TContainingType, TExtensionType> :

+        GeneratedExtensionLite<TContainingType, IList<TExtensionType>>

+        where TContainingType : IMessageLite

+    {

+        public GeneratedRepeatExtensionLite(string fullName, TContainingType containingTypeDefaultInstance,

+                                            IMessageLite messageDefaultInstance, IEnumLiteMap enumTypeMap, int number,

+                                            FieldType type, bool isPacked) :

+                                                base(

+                                                fullName, containingTypeDefaultInstance, new List<TExtensionType>(),

+                                                messageDefaultInstance, enumTypeMap, number, type, isPacked)

+        {

+        }

+

+        public override object ToReflectionType(object value)

+        {

+            IList<object> result = new List<object>();

+            foreach (object element in (IEnumerable) value)

+            {

+                result.Add(SingularToReflectionType(element));

+            }

+            return result;

+        }

+

+        public override object FromReflectionType(object value)

+        {

+            // Must convert the whole list.

+            List<TExtensionType> result = new List<TExtensionType>();

+            foreach (object element in (IEnumerable) value)

+            {

+                result.Add((TExtensionType) SingularFromReflectionType(element));

+            }

+            return result;

+        }

+    }

+

+    public class GeneratedExtensionLite<TContainingType, TExtensionType> : IGeneratedExtensionLite

+        where TContainingType : IMessageLite

+    {

+        private readonly TContainingType containingTypeDefaultInstance;

+        private readonly TExtensionType defaultValue;

+        private readonly IMessageLite messageDefaultInstance;

+        private readonly ExtensionDescriptorLite descriptor;

+

+        // We can't always initialize a GeneratedExtension when we first construct

+        // it due to initialization order difficulties (namely, the default

+        // instances may not have been constructed yet).  So, we construct an

+        // uninitialized GeneratedExtension once, then call internalInit() on it

+        // later.  Generated code will always call internalInit() on all extensions

+        // as part of the static initialization code, and internalInit() throws an

+        // exception if called more than once, so this method is useless to users.

+        protected GeneratedExtensionLite(

+            TContainingType containingTypeDefaultInstance,

+            TExtensionType defaultValue,

+            IMessageLite messageDefaultInstance,

+            ExtensionDescriptorLite descriptor)

+        {

+            this.containingTypeDefaultInstance = containingTypeDefaultInstance;

+            this.messageDefaultInstance = messageDefaultInstance;

+            this.defaultValue = defaultValue;

+            this.descriptor = descriptor;

+        }

+

+        /** For use by generated code only. */

+

+        public GeneratedExtensionLite(

+            string fullName,

+            TContainingType containingTypeDefaultInstance,

+            TExtensionType defaultValue,

+            IMessageLite messageDefaultInstance,

+            IEnumLiteMap enumTypeMap,

+            int number,

+            FieldType type)

+            : this(containingTypeDefaultInstance, defaultValue, messageDefaultInstance,

+                   new ExtensionDescriptorLite(fullName, enumTypeMap, number, type, defaultValue,

+                                               false /* isRepeated */, false /* isPacked */))

+        {

+        }

+

+        private static readonly IList<object> Empty = new object[0];

+        /** Repeating fields: For use by generated code only. */

+

+        protected GeneratedExtensionLite(

+            string fullName,

+            TContainingType containingTypeDefaultInstance,

+            TExtensionType defaultValue,

+            IMessageLite messageDefaultInstance,

+            IEnumLiteMap enumTypeMap,

+            int number,

+            FieldType type,

+            bool isPacked)

+            : this(containingTypeDefaultInstance, defaultValue, messageDefaultInstance,

+                   new ExtensionDescriptorLite(fullName, enumTypeMap, number, type, Empty,

+                                               true /* isRepeated */, isPacked))

+        {

+        }

+

+        /// <summary>

+        /// Returns information about this extension

+        /// </summary>

+        public IFieldDescriptorLite Descriptor

+        {

+            get { return descriptor; }

+        }

+

+        /// <summary>

+        /// Returns the default value for this extension

+        /// </summary>

+        public TExtensionType DefaultValue

+        {

+            get { return defaultValue; }

+        }

+

+        /// <summary>

+        /// used for the extension registry

+        /// </summary>

+        object IGeneratedExtensionLite.ContainingType

+        {

+            get { return ContainingTypeDefaultInstance; }

+        }

+

+        /**

+     * Default instance of the type being extended, used to identify that type.

+     */

+

+        public TContainingType ContainingTypeDefaultInstance

+        {

+            get { return containingTypeDefaultInstance; }

+        }

+

+        /** Get the field number. */

+

+        public int Number

+        {

+            get { return descriptor.FieldNumber; }

+        }

+

+        /**

+     * If the extension is an embedded message, this is the default instance of

+     * that type.

+     */

+

+        public IMessageLite MessageDefaultInstance

+        {

+            get { return messageDefaultInstance; }

+        }

+

+        /// <summary>

+        /// Converts from the type used by the native accessors to the type

+        /// used by reflection accessors. For example, the reflection accessors

+        /// for enums use EnumValueDescriptors but the native accessors use

+        /// the generated enum type.

+        /// </summary>

+        public virtual object ToReflectionType(object value)

+        {

+            return SingularToReflectionType(value);

+        }

+

+        /// <summary>

+        /// Like ToReflectionType(object) but for a single element.

+        /// </summary>

+        public object SingularToReflectionType(object value)

+        {

+            return descriptor.MappedType == MappedType.Enum

+                       ? descriptor.EnumType.FindValueByNumber((int) value)

+                       : value;

+        }

+

+        public virtual object FromReflectionType(object value)

+        {

+            return SingularFromReflectionType(value);

+        }

+

+        public object SingularFromReflectionType(object value)

+        {

+            switch (Descriptor.MappedType)

+            {

+                case MappedType.Message:

+                    if (value is TExtensionType)

+                    {

+                        return value;

+                    }

+                    else

+                    {

+                        // It seems the copy of the embedded message stored inside the

+                        // extended message is not of the exact type the user was

+                        // expecting.  This can happen if a user defines a

+                        // GeneratedExtension manually and gives it a different type.

+                        // This should not happen in normal use.  But, to be nice, we'll

+                        // copy the message to whatever type the caller was expecting.

+                        return MessageDefaultInstance.WeakCreateBuilderForType()

+                            .WeakMergeFrom((IMessageLite) value).WeakBuild();

+                    }

+                case MappedType.Enum:

+                    // Just return a boxed int - that can be unboxed to the enum

+                    IEnumLite enumValue = (IEnumLite) value;

+                    return enumValue.Number;

+                default:

+                    return value;

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/GeneratedMessage.cs b/csharp/src/ProtocolBuffers/GeneratedMessage.cs
new file mode 100644
index 0000000..6f4b665
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/GeneratedMessage.cs
@@ -0,0 +1,181 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using System.IO;

+using System.Xml;

+using Google.ProtocolBuffers.Collections;

+using Google.ProtocolBuffers.Descriptors;

+using Google.ProtocolBuffers.FieldAccess;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// All generated protocol message classes extend this class. It implements

+    /// most of the IMessage interface using reflection. Users

+    /// can ignore this class as an implementation detail.

+    /// </summary>

+    public abstract partial class GeneratedMessage<TMessage, TBuilder> : AbstractMessage<TMessage, TBuilder>

+        where TMessage : GeneratedMessage<TMessage, TBuilder>

+        where TBuilder : GeneratedBuilder<TMessage, TBuilder>, new()

+    {

+        private UnknownFieldSet unknownFields = UnknownFieldSet.DefaultInstance;

+

+        /// <summary>

+        /// Returns the message as a TMessage.

+        /// </summary>

+        protected abstract TMessage ThisMessage { get; }

+

+        internal FieldAccessorTable<TMessage, TBuilder> FieldAccessorsFromBuilder

+        {

+            get { return InternalFieldAccessors; }

+        }

+

+        protected abstract FieldAccessorTable<TMessage, TBuilder> InternalFieldAccessors { get; }

+

+        public override MessageDescriptor DescriptorForType

+        {

+            get { return InternalFieldAccessors.Descriptor; }

+        }

+

+        internal IDictionary<FieldDescriptor, Object> GetMutableFieldMap()

+        {

+            // Use a SortedList so we'll end up serializing fields in order

+            var ret = new SortedList<FieldDescriptor, object>();

+            MessageDescriptor descriptor = DescriptorForType;

+            foreach (FieldDescriptor field in descriptor.Fields)

+            {

+                IFieldAccessor<TMessage, TBuilder> accessor = InternalFieldAccessors[field];

+                if (field.IsRepeated)

+                {

+                    if (accessor.GetRepeatedCount(ThisMessage) != 0)

+                    {

+                        ret[field] = accessor.GetValue(ThisMessage);

+                    }

+                }

+                else if (HasField(field))

+                {

+                    ret[field] = accessor.GetValue(ThisMessage);

+                }

+            }

+            return ret;

+        }

+

+        public override bool IsInitialized

+        {

+            get

+            {

+                foreach (FieldDescriptor field in DescriptorForType.Fields)

+                {

+                    // Check that all required fields are present.

+                    if (field.IsRequired && !HasField(field))

+                    {

+                        return false;

+                    }

+                    // Check that embedded messages are initialized.

+                    // This code is similar to that in AbstractMessage, but we don't

+                    // fetch all the field values - just the ones we need to.

+                    if (field.MappedType == MappedType.Message)

+                    {

+                        if (field.IsRepeated)

+                        {

+                            // We know it's an IList<T>, but not the exact type - so

+                            // IEnumerable is the best we can do. (C# generics aren't covariant yet.)

+                            foreach (IMessageLite element in (IEnumerable) this[field])

+                            {

+                                if (!element.IsInitialized)

+                                {

+                                    return false;

+                                }

+                            }

+                        }

+                        else

+                        {

+                            if (HasField(field) && !((IMessageLite) this[field]).IsInitialized)

+                            {

+                                return false;

+                            }

+                        }

+                    }

+                }

+                return true;

+            }

+        }

+

+        public override IDictionary<FieldDescriptor, object> AllFields

+        {

+            get { return Dictionaries.AsReadOnly(GetMutableFieldMap()); }

+        }

+

+        public override bool HasField(FieldDescriptor field)

+        {

+            return InternalFieldAccessors[field].Has(ThisMessage);

+        }

+

+        public override int GetRepeatedFieldCount(FieldDescriptor field)

+        {

+            return InternalFieldAccessors[field].GetRepeatedCount(ThisMessage);

+        }

+

+        public override object this[FieldDescriptor field, int index]

+        {

+            get { return InternalFieldAccessors[field].GetRepeatedValue(ThisMessage, index); }

+        }

+

+        public override object this[FieldDescriptor field]

+        {

+            get { return InternalFieldAccessors[field].GetValue(ThisMessage); }

+        }

+

+        public override UnknownFieldSet UnknownFields

+        {

+            get { return unknownFields; }

+        }

+

+        /// <summary>

+        /// Replaces the set of unknown fields for this message. This should

+        /// only be used before a message is built, by the builder. (In the

+        /// Java code it is private, but the builder is nested so has access

+        /// to it.)

+        /// </summary>

+        internal void SetUnknownFields(UnknownFieldSet fieldSet)

+        {

+            unknownFields = fieldSet;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/GeneratedMessageLite.cs b/csharp/src/ProtocolBuffers/GeneratedMessageLite.cs
new file mode 100644
index 0000000..0dfc976
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/GeneratedMessageLite.cs
@@ -0,0 +1,182 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.Globalization;

+using System.IO;

+using System.Text;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// All generated protocol message classes extend this class. It implements

+    /// most of the IMessage interface using reflection. Users

+    /// can ignore this class as an implementation detail.

+    /// </summary>

+    public abstract partial class GeneratedMessageLite<TMessage, TBuilder> : AbstractMessageLite<TMessage, TBuilder>

+        where TMessage : GeneratedMessageLite<TMessage, TBuilder>

+        where TBuilder : GeneratedBuilderLite<TMessage, TBuilder>

+    {

+        protected abstract TMessage ThisMessage { get; }

+

+        public override sealed string ToString()

+        {

+            using (StringWriter wtr = new StringWriter())

+            {

+                PrintTo(wtr);

+                return wtr.ToString();

+            }

+        }

+

+        /// <summary>

+        /// PrintTo() helper methods for Lite Runtime

+        /// </summary>

+        protected static void PrintField<T>(string name, IList<T> value, TextWriter writer)

+        {

+            foreach (T item in value)

+            {

+                PrintField(name, true, (object) item, writer);

+            }

+        }

+

+        /// <summary>

+        /// PrintTo() helper methods for Lite Runtime

+        /// </summary>

+        protected static void PrintField(string name, bool hasValue, object value, TextWriter writer)

+        {

+            if (!hasValue)

+            {

+                return;

+            }

+            if (value is IMessageLite)

+            {

+                writer.WriteLine("{0} {{", name);

+                ((IMessageLite) value).PrintTo(writer);

+                writer.WriteLine("}");

+            }

+            else if (value is ByteString || value is String)

+            {

+                writer.Write("{0}: \"", name);

+                if (value is String)

+                {

+                    EscapeBytes(Encoding.UTF8.GetBytes((string) value), writer);

+                }

+                else

+                {

+                    EscapeBytes(((ByteString) value), writer);

+                }

+                writer.WriteLine("\"");

+            }

+            else if (value is bool)

+            {

+                writer.WriteLine("{0}: {1}", name, (bool) value ? "true" : "false");

+            }

+            else if (value is IEnumLite)

+            {

+                writer.WriteLine("{0}: {1}", name, ((IEnumLite) value).Name);

+            }

+            else

+            {

+                writer.WriteLine("{0}: {1}", name, ((IConvertible)value).ToString(FrameworkPortability.InvariantCulture));

+            }

+        }

+

+        /// <summary>

+        /// COPIED from TextFormat

+        /// Escapes bytes in the format used in protocol buffer text format, which

+        /// is the same as the format used for C string literals.  All bytes

+        /// that are not printable 7-bit ASCII characters are escaped, as well as

+        /// backslash, single-quote, and double-quote characters.  Characters for

+        /// which no defined short-hand escape sequence is defined will be escaped

+        /// using 3-digit octal sequences.

+        /// The returned value is guaranteed to be entirely ASCII.

+        /// </summary>

+        private static void EscapeBytes(IEnumerable<byte> input, TextWriter writer)

+        {

+            foreach (byte b in input)

+            {

+                switch (b)

+                {

+                        // C# does not use \a or \v

+                    case 0x07:

+                        writer.Write("\\a");

+                        break;

+                    case (byte) '\b':

+                        writer.Write("\\b");

+                        break;

+                    case (byte) '\f':

+                        writer.Write("\\f");

+                        break;

+                    case (byte) '\n':

+                        writer.Write("\\n");

+                        break;

+                    case (byte) '\r':

+                        writer.Write("\\r");

+                        break;

+                    case (byte) '\t':

+                        writer.Write("\\t");

+                        break;

+                    case 0x0b:

+                        writer.Write("\\v");

+                        break;

+                    case (byte) '\\':

+                        writer.Write("\\\\");

+                        break;

+                    case (byte) '\'':

+                        writer.Write("\\\'");

+                        break;

+                    case (byte) '"':

+                        writer.Write("\\\"");

+                        break;

+                    default:

+                        if (b >= 0x20 && b < 128)

+                        {

+                            writer.Write((char) b);

+                        }

+                        else

+                        {

+                            writer.Write('\\');

+                            writer.Write((char) ('0' + ((b >> 6) & 3)));

+                            writer.Write((char) ('0' + ((b >> 3) & 7)));

+                            writer.Write((char) ('0' + (b & 7)));

+                        }

+                        break;

+                }

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/GeneratedRepeatExtension.cs b/csharp/src/ProtocolBuffers/GeneratedRepeatExtension.cs
new file mode 100644
index 0000000..7e7b088
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/GeneratedRepeatExtension.cs
@@ -0,0 +1,88 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Class used to represent repeat extensions in generated classes.

+    /// </summary>

+    public sealed class GeneratedRepeatExtension<TExtensionElement> : GeneratedExtensionBase<IList<TExtensionElement>>

+    {

+        private GeneratedRepeatExtension(FieldDescriptor field) : base(field, typeof(TExtensionElement))

+        {

+        }

+

+        public static GeneratedExtensionBase<IList<TExtensionElement>> CreateInstance(FieldDescriptor descriptor)

+        {

+            if (!descriptor.IsRepeated)

+            {

+                throw new ArgumentException("Must call GeneratedRepeatExtension.CreateInstance() for repeated types.");

+            }

+            return new GeneratedRepeatExtension<TExtensionElement>(descriptor);

+        }

+

+        /// <summary>

+        /// Converts the list to the right type.

+        /// TODO(jonskeet): Check where this is used, and whether we need to convert

+        /// for primitive types.

+        /// </summary>

+        /// <param name="value"></param>

+        /// <returns></returns>

+        public override object FromReflectionType(object value)

+        {

+            if (Descriptor.MappedType == MappedType.Message ||

+                Descriptor.MappedType == MappedType.Enum)

+            {

+                // Must convert the whole list.

+                List<TExtensionElement> result = new List<TExtensionElement>();

+                foreach (object element in (IEnumerable) value)

+                {

+                    result.Add((TExtensionElement) SingularFromReflectionType(element));

+                }

+                return result;

+            }

+            else

+            {

+                return value;

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/GeneratedSingleExtension.cs b/csharp/src/ProtocolBuffers/GeneratedSingleExtension.cs
new file mode 100644
index 0000000..f0f1979
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/GeneratedSingleExtension.cs
@@ -0,0 +1,65 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Generated extension for a singular field.

+    /// </remarks>

+    public sealed class GeneratedSingleExtension<TExtension> : GeneratedExtensionBase<TExtension>

+    {

+        internal GeneratedSingleExtension(FieldDescriptor descriptor) : base(descriptor, typeof(TExtension))

+        {

+        }

+

+        public static GeneratedSingleExtension<TExtension> CreateInstance(FieldDescriptor descriptor)

+        {

+            if (descriptor.IsRepeated)

+            {

+                throw new ArgumentException("Must call GeneratedRepeateExtension.CreateInstance() for repeated types.");

+            }

+            return new GeneratedSingleExtension<TExtension>(descriptor);

+        }

+

+        public override object FromReflectionType(object value)

+        {

+            return base.SingularFromReflectionType(value);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/IBuilder.cs b/csharp/src/ProtocolBuffers/IBuilder.cs
new file mode 100644
index 0000000..f9c0df6
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/IBuilder.cs
@@ -0,0 +1,309 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.IO;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Non-generic interface for all members whose signatures don't require knowledge of

+    /// the type being built. The generic interface extends this one. Some methods return

+    /// either an IBuilder or an IMessage; in these cases the generic interface redeclares

+    /// the same method with a type-specific signature. Implementations are encouraged to

+    /// use explicit interface implemenation for the non-generic form. This mirrors

+    /// how IEnumerable and IEnumerable&lt;T&gt; work.

+    /// </summary>

+    public interface IBuilder : IBuilderLite

+    {

+        /// <summary>

+        /// Returns true iff all required fields in the message and all

+        /// embedded messages are set.

+        /// </summary>

+        new bool IsInitialized { get; }

+

+        /// <summary>

+        /// Only present in the nongeneric interface - useful for tests, but

+        /// not as much in real life.

+        /// </summary>

+        IBuilder SetField(FieldDescriptor field, object value);

+

+        /// <summary>

+        /// Only present in the nongeneric interface - useful for tests, but

+        /// not as much in real life.

+        /// </summary>

+        IBuilder SetRepeatedField(FieldDescriptor field, int index, object value);

+

+        /// <summary>

+        /// Behaves like the equivalent property in IMessage&lt;T&gt;.

+        /// The returned map may or may not reflect future changes to the builder.

+        /// Either way, the returned map is unmodifiable.

+        /// </summary>

+        IDictionary<FieldDescriptor, object> AllFields { get; }

+

+        /// <summary>

+        /// Allows getting and setting of a field.

+        /// <see cref="IMessage{TMessage, TBuilder}.Item(FieldDescriptor)"/>

+        /// </summary>

+        /// <param name="field"></param>

+        /// <returns></returns>

+        object this[FieldDescriptor field] { get; set; }

+

+        /// <summary>

+        /// Get the message's type descriptor.

+        /// <see cref="IMessage{TMessage, TBuilder}.DescriptorForType"/>

+        /// </summary>

+        MessageDescriptor DescriptorForType { get; }

+

+        /// <summary>

+        /// <see cref="IMessage{TMessage, TBuilder}.GetRepeatedFieldCount"/>

+        /// </summary>

+        /// <param name="field"></param>

+        /// <returns></returns>

+        int GetRepeatedFieldCount(FieldDescriptor field);

+

+        /// <summary>

+        /// Allows getting and setting of a repeated field value.

+        /// <see cref="IMessage{TMessage, TBuilder}.Item(FieldDescriptor, int)"/>

+        /// </summary>

+        object this[FieldDescriptor field, int index] { get; set; }

+

+        /// <summary>

+        /// <see cref="IMessage{TMessage, TBuilder}.HasField"/>

+        /// </summary>

+        bool HasField(FieldDescriptor field);

+

+        /// <summary>

+        /// <see cref="IMessage{TMessage, TBuilder}.UnknownFields"/>

+        /// </summary>

+        UnknownFieldSet UnknownFields { get; set; }

+

+        /// <summary>

+        /// Create a builder for messages of the appropriate type for the given field.

+        /// Messages built with this can then be passed to the various mutation properties

+        /// and methods.

+        /// </summary>

+        IBuilder CreateBuilderForField(FieldDescriptor field);

+

+        #region Methods which are like those of the generic form, but without any knowledge of the type parameters

+

+        IBuilder WeakAddRepeatedField(FieldDescriptor field, object value);

+        new IBuilder WeakClear();

+        IBuilder WeakClearField(FieldDescriptor field);

+        IBuilder WeakMergeFrom(IMessage message);

+        new IBuilder WeakMergeFrom(ByteString data);

+        new IBuilder WeakMergeFrom(ByteString data, ExtensionRegistry registry);

+        new IBuilder WeakMergeFrom(ICodedInputStream input);

+        new IBuilder WeakMergeFrom(ICodedInputStream input, ExtensionRegistry registry);

+        new IMessage WeakBuild();

+        new IMessage WeakBuildPartial();

+        new IBuilder WeakClone();

+        new IMessage WeakDefaultInstanceForType { get; }

+

+        #endregion

+    }

+

+    /// <summary>

+    /// Interface implemented by Protocol Message builders.

+    /// TODO(jonskeet): Consider "SetXXX" methods returning the builder, as well as the properties.

+    /// </summary>

+    /// <typeparam name="TMessage">Type of message</typeparam>

+    /// <typeparam name="TBuilder">Type of builder</typeparam>

+    public interface IBuilder<TMessage, TBuilder> : IBuilder, IBuilderLite<TMessage, TBuilder>

+        where TMessage : IMessage<TMessage, TBuilder>

+        where TBuilder : IBuilder<TMessage, TBuilder>

+    {

+        TBuilder SetUnknownFields(UnknownFieldSet unknownFields);

+

+        /// <summary>

+        /// Resets all fields to their default values.

+        /// </summary>

+        new TBuilder Clear();

+

+        /// <summary>

+        /// Merge the specified other message which may be a different implementation of

+        /// the same message descriptor.

+        /// </summary>

+        TBuilder MergeFrom(IMessage other);

+

+        /// <summary>

+        /// Constructs the final message. Once this is called, this Builder instance

+        /// is no longer valid, and calling any other method may throw a

+        /// NullReferenceException. If you need to continue working with the builder

+        /// after calling Build, call Clone first.

+        /// </summary>

+        /// <exception cref="UninitializedMessageException">the message

+        /// is missing one or more required fields; use BuildPartial to bypass

+        /// this check</exception>

+        new TMessage Build();

+

+        /// <summary>

+        /// Like Build(), but does not throw an exception if the message is missing

+        /// required fields. Instead, a partial message is returned.

+        /// </summary>

+        new TMessage BuildPartial();

+

+        /// <summary>

+        /// Clones this builder.

+        /// TODO(jonskeet): Explain depth of clone.

+        /// </summary>

+        new TBuilder Clone();

+

+        /// <summary>

+        /// Parses a message of this type from the input and merges it with this

+        /// message, as if using MergeFrom(IMessage&lt;T&gt;).

+        /// </summary>

+        /// <remarks>

+        /// Warning: This does not verify that all required fields are present

+        /// in the input message. If you call Build() without setting all

+        /// required fields, it will throw an UninitializedMessageException.

+        /// There are a few good ways to deal with this:

+        /// <list>

+        /// <item>Call IsInitialized to verify to verify that all required fields are

+        /// set before building.</item>

+        /// <item>Parse  the message separately using one of the static ParseFrom

+        /// methods, then use MergeFrom(IMessage&lt;T&gt;) to merge it with

+        /// this one. ParseFrom will throw an InvalidProtocolBufferException

+        /// (an IOException) if some required fields are missing.

+        /// Use BuildPartial to build, which ignores missing required fields.

+        /// </list>

+        /// </remarks>

+        new TBuilder MergeFrom(ICodedInputStream input);

+

+        /// <summary>

+        /// Like MergeFrom(ICodedInputStream), but also parses extensions.

+        /// The extensions that you want to be able to parse must be registered

+        /// in <paramref name="extensionRegistry"/>. Extensions not in the registry

+        /// will be treated as unknown fields.

+        /// </summary>

+        new TBuilder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry);

+

+        /// <summary>

+        /// Get's the message's type's default instance.

+        /// <see cref="IMessage{TMessage}.DefaultInstanceForType" />

+        /// </summary>

+        new TMessage DefaultInstanceForType { get; }

+

+        /// <summary>

+        /// Clears the field. This is exactly equivalent to calling the generated

+        /// Clear method corresponding to the field.

+        /// </summary>

+        /// <param name="field"></param>

+        /// <returns></returns>

+        TBuilder ClearField(FieldDescriptor field);

+

+        /// <summary>

+        /// Appends the given value as a new element for the specified repeated field.

+        /// </summary>

+        /// <exception cref="ArgumentException">the field is not a repeated field,

+        /// the field does not belong to this builder's type, or the value is

+        /// of the incorrect type

+        /// </exception>

+        TBuilder AddRepeatedField(FieldDescriptor field, object value);

+

+        /// <summary>

+        /// Merge some unknown fields into the set for this message.

+        /// </summary>

+        TBuilder MergeUnknownFields(UnknownFieldSet unknownFields);

+

+        /// <summary>

+        /// Like MergeFrom(Stream), but does not read until the end of the file.

+        /// Instead, the size of the message (encoded as a varint) is read first,

+        /// then the message data. Use Message.WriteDelimitedTo(Stream) to

+        /// write messages in this format.

+        /// </summary>

+        /// <param name="input"></param>

+        new TBuilder MergeDelimitedFrom(Stream input);

+

+        /// <summary>

+        /// Like MergeDelimitedFrom(Stream) but supporting extensions.

+        /// </summary>

+        new TBuilder MergeDelimitedFrom(Stream input, ExtensionRegistry extensionRegistry);

+

+        #region Convenience methods

+

+        /// <summary>

+        /// Parse <paramref name="data"/> as a message of this type and merge

+        /// it with the message being built. This is just a small wrapper around

+        /// MergeFrom(ICodedInputStream).

+        /// </summary>

+        new TBuilder MergeFrom(ByteString data);

+

+        /// <summary>

+        /// Parse <paramref name="data"/> as a message of this type and merge

+        /// it with the message being built. This is just a small wrapper around

+        /// MergeFrom(ICodedInputStream, extensionRegistry).

+        /// </summary>

+        new TBuilder MergeFrom(ByteString data, ExtensionRegistry extensionRegistry);

+

+        /// <summary>

+        /// Parse <paramref name="data"/> as a message of this type and merge

+        /// it with the message being built. This is just a small wrapper around

+        /// MergeFrom(ICodedInputStream).

+        /// </summary>

+        new TBuilder MergeFrom(byte[] data);

+

+        /// <summary>

+        /// Parse <paramref name="data"/> as a message of this type and merge

+        /// it with the message being built. This is just a small wrapper around

+        /// MergeFrom(ICodedInputStream, extensionRegistry).

+        /// </summary>

+        new TBuilder MergeFrom(byte[] data, ExtensionRegistry extensionRegistry);

+

+        /// <summary>

+        /// Parse <paramref name="input"/> as a message of this type and merge

+        /// it with the message being built. This is just a small wrapper around

+        /// MergeFrom(ICodedInputStream). Note that this method always reads

+        /// the entire input (unless it throws an exception). If you want it to

+        /// stop earlier, you will need to wrap the input in a wrapper

+        /// stream which limits reading. Or, use IMessage.WriteDelimitedTo(Stream)

+        /// to write your message and MmergeDelimitedFrom(Stream) to read it.

+        /// Despite usually reading the entire stream, this method never closes the stream. 

+        /// </summary>

+        new TBuilder MergeFrom(Stream input);

+

+        /// <summary>

+        /// Parse <paramref name="input"/> as a message of this type and merge

+        /// it with the message being built. This is just a small wrapper around

+        /// MergeFrom(ICodedInputStream, extensionRegistry).

+        /// </summary>

+        new TBuilder MergeFrom(Stream input, ExtensionRegistry extensionRegistry);

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/IBuilderLite.cs b/csharp/src/ProtocolBuffers/IBuilderLite.cs
new file mode 100644
index 0000000..330fe49
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/IBuilderLite.cs
@@ -0,0 +1,213 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.IO;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Non-generic interface for all members whose signatures don't require knowledge of

+    /// the type being built. The generic interface extends this one. Some methods return

+    /// either an IBuilder or an IMessage; in these cases the generic interface redeclares

+    /// the same method with a type-specific signature. Implementations are encouraged to

+    /// use explicit interface implemenation for the non-generic form. This mirrors

+    /// how IEnumerable and IEnumerable&lt;T&gt; work.

+    /// </summary>

+    public partial interface IBuilderLite

+    {

+        /// <summary>

+        /// Returns true iff all required fields in the message and all

+        /// embedded messages are set.

+        /// </summary>

+        bool IsInitialized { get; }

+

+        IBuilderLite WeakClear();

+        IBuilderLite WeakMergeFrom(IMessageLite message);

+        IBuilderLite WeakMergeFrom(ByteString data);

+        IBuilderLite WeakMergeFrom(ByteString data, ExtensionRegistry registry);

+        IBuilderLite WeakMergeFrom(ICodedInputStream input);

+        IBuilderLite WeakMergeFrom(ICodedInputStream input, ExtensionRegistry registry);

+        IMessageLite WeakBuild();

+        IMessageLite WeakBuildPartial();

+        IBuilderLite WeakClone();

+        IMessageLite WeakDefaultInstanceForType { get; }

+    }

+

+    /// <summary>

+    /// Interface implemented by Protocol Message builders.

+    /// TODO(jonskeet): Consider "SetXXX" methods returning the builder, as well as the properties.

+    /// </summary>

+    /// <typeparam name="TMessage">Type of message</typeparam>

+    /// <typeparam name="TBuilder">Type of builder</typeparam>

+    public interface IBuilderLite<TMessage, TBuilder> : IBuilderLite

+        where TMessage : IMessageLite<TMessage, TBuilder>

+        where TBuilder : IBuilderLite<TMessage, TBuilder>

+    {

+        /// <summary>

+        /// Resets all fields to their default values.

+        /// </summary>

+        TBuilder Clear();

+

+        /// <summary>

+        /// Merge the specified other message which may be a different implementation of

+        /// the same message descriptor.

+        /// </summary>

+        TBuilder MergeFrom(IMessageLite other);

+

+        /// <summary>

+        /// Constructs the final message. Once this is called, this Builder instance

+        /// is no longer valid, and calling any other method may throw a

+        /// NullReferenceException. If you need to continue working with the builder

+        /// after calling Build, call Clone first.

+        /// </summary>

+        /// <exception cref="UninitializedMessageException">the message

+        /// is missing one or more required fields; use BuildPartial to bypass

+        /// this check</exception>

+        TMessage Build();

+

+        /// <summary>

+        /// Like Build(), but does not throw an exception if the message is missing

+        /// required fields. Instead, a partial message is returned.

+        /// </summary>

+        TMessage BuildPartial();

+

+        /// <summary>

+        /// Clones this builder.

+        /// TODO(jonskeet): Explain depth of clone.

+        /// </summary>

+        TBuilder Clone();

+

+        /// <summary>

+        /// Parses a message of this type from the input and merges it with this

+        /// message, as if using MergeFrom(IMessage&lt;T&gt;).

+        /// </summary>

+        /// <remarks>

+        /// Warning: This does not verify that all required fields are present

+        /// in the input message. If you call Build() without setting all

+        /// required fields, it will throw an UninitializedMessageException.

+        /// There are a few good ways to deal with this:

+        /// <list>

+        /// <item>Call IsInitialized to verify to verify that all required fields are

+        /// set before building.</item>

+        /// <item>Parse  the message separately using one of the static ParseFrom

+        /// methods, then use MergeFrom(IMessage&lt;T&gt;) to merge it with

+        /// this one. ParseFrom will throw an InvalidProtocolBufferException

+        /// (an IOException) if some required fields are missing.

+        /// Use BuildPartial to build, which ignores missing required fields.

+        /// </list>

+        /// </remarks>

+        TBuilder MergeFrom(ICodedInputStream input);

+

+        /// <summary>

+        /// Like MergeFrom(ICodedInputStream), but also parses extensions.

+        /// The extensions that you want to be able to parse must be registered

+        /// in <paramref name="extensionRegistry"/>. Extensions not in the registry

+        /// will be treated as unknown fields.

+        /// </summary>

+        TBuilder MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry);

+

+        /// <summary>

+        /// Get's the message's type's default instance.

+        /// <see cref="IMessageLite{TMessage}.DefaultInstanceForType" />

+        /// </summary>

+        TMessage DefaultInstanceForType { get; }

+

+        /// <summary>

+        /// Like MergeFrom(Stream), but does not read until the end of the file.

+        /// Instead, the size of the message (encoded as a varint) is read first,

+        /// then the message data. Use Message.WriteDelimitedTo(Stream) to

+        /// write messages in this format.

+        /// </summary>

+        /// <param name="input"></param>

+        TBuilder MergeDelimitedFrom(Stream input);

+

+        /// <summary>

+        /// Like MergeDelimitedFrom(Stream) but supporting extensions.

+        /// </summary>

+        TBuilder MergeDelimitedFrom(Stream input, ExtensionRegistry extensionRegistry);

+

+        #region Convenience methods

+

+        /// <summary>

+        /// Parse <paramref name="data"/> as a message of this type and merge

+        /// it with the message being built. This is just a small wrapper around

+        /// MergeFrom(ICodedInputStream).

+        /// </summary>

+        TBuilder MergeFrom(ByteString data);

+

+        /// <summary>

+        /// Parse <paramref name="data"/> as a message of this type and merge

+        /// it with the message being built. This is just a small wrapper around

+        /// MergeFrom(ICodedInputStream, ExtensionRegistry).

+        /// </summary>

+        TBuilder MergeFrom(ByteString data, ExtensionRegistry extensionRegistry);

+

+        /// <summary>

+        /// Parse <paramref name="data"/> as a message of this type and merge

+        /// it with the message being built. This is just a small wrapper around

+        /// MergeFrom(ICodedInputStream).

+        /// </summary>

+        TBuilder MergeFrom(byte[] data);

+

+        /// <summary>

+        /// Parse <paramref name="data"/> as a message of this type and merge

+        /// it with the message being built. This is just a small wrapper around

+        /// MergeFrom(ICodedInputStream, ExtensionRegistry).

+        /// </summary>

+        TBuilder MergeFrom(byte[] data, ExtensionRegistry extensionRegistry);

+

+        /// <summary>

+        /// Parse <paramref name="input"/> as a message of this type and merge

+        /// it with the message being built. This is just a small wrapper around

+        /// MergeFrom(ICodedInputStream). Note that this method always reads

+        /// the entire input (unless it throws an exception). If you want it to

+        /// stop earlier, you will need to wrap the input in a wrapper

+        /// stream which limits reading. Or, use IMessage.WriteDelimitedTo(Stream)

+        /// to write your message and MmergeDelimitedFrom(Stream) to read it.

+        /// Despite usually reading the entire stream, this method never closes the stream. 

+        /// </summary>

+        TBuilder MergeFrom(Stream input);

+

+        /// <summary>

+        /// Parse <paramref name="input"/> as a message of this type and merge

+        /// it with the message being built. This is just a small wrapper around

+        /// MergeFrom(ICodedInputStream, ExtensionRegistry).

+        /// </summary>

+        TBuilder MergeFrom(Stream input, ExtensionRegistry extensionRegistry);

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ICodedInputStream.cs b/csharp/src/ProtocolBuffers/ICodedInputStream.cs
new file mode 100644
index 0000000..b39b602
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ICodedInputStream.cs
@@ -0,0 +1,345 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Descriptors;

+

+//Disable warning CS3010: CLS-compliant interfaces must have only CLS-compliant members

+#pragma warning disable 3010

+

+namespace Google.ProtocolBuffers

+{

+    public interface ICodedInputStream

+    {

+        /// <summary>

+        /// Reads any message initialization data expected from the input stream

+        /// </summary>

+        /// <remarks>

+        /// This is primarily used by text formats and unnecessary for protobuffers' own

+        /// binary format.  The API for MessageStart/End was added for consistent handling

+        /// of output streams regardless of the actual writer implementation.

+        /// </remarks>

+        void ReadMessageStart();

+        /// <summary>

+        /// Reads any message finalization data expected from the input stream

+        /// </summary>

+        /// <remarks>

+        /// This is primarily used by text formats and unnecessary for protobuffers' own

+        /// binary format.  The API for MessageStart/End was added for consistent handling

+        /// of output streams regardless of the actual writer implementation.

+        /// </remarks>

+        void ReadMessageEnd();

+        /// <summary>

+        /// Attempt to read a field tag, returning false if we have reached the end

+        /// of the input data.

+        /// </summary>

+        /// <remarks>

+        /// <para>

+        /// If fieldTag is non-zero and ReadTag returns true then the value in fieldName

+        /// may or may not be populated.  However, if fieldTag is zero and ReadTag returns

+        /// true, then fieldName should be populated with a non-null field name.

+        /// </para><para>

+        /// In other words if ReadTag returns true then either fieldTag will be non-zero OR

+        /// fieldName will be non-zero.  In some cases both may be populated, however the

+        /// builders will always prefer the fieldTag over fieldName.

+        /// </para>

+        /// </remarks>

+        [CLSCompliant(false)]

+        bool ReadTag(out uint fieldTag, out string fieldName);

+

+        /// <summary>

+        /// Read a double field from the stream.

+        /// </summary>

+        bool ReadDouble(ref double value);

+

+        /// <summary>

+        /// Read a float field from the stream.

+        /// </summary>

+        bool ReadFloat(ref float value);

+

+        /// <summary>

+        /// Read a uint64 field from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        bool ReadUInt64(ref ulong value);

+

+        /// <summary>

+        /// Read an int64 field from the stream.

+        /// </summary>

+        bool ReadInt64(ref long value);

+

+        /// <summary>

+        /// Read an int32 field from the stream.

+        /// </summary>

+        bool ReadInt32(ref int value);

+

+        /// <summary>

+        /// Read a fixed64 field from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        bool ReadFixed64(ref ulong value);

+

+        /// <summary>

+        /// Read a fixed32 field from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        bool ReadFixed32(ref uint value);

+

+        /// <summary>

+        /// Read a bool field from the stream.

+        /// </summary>

+        bool ReadBool(ref bool value);

+

+        /// <summary>

+        /// Reads a string field from the stream.

+        /// </summary>

+        bool ReadString(ref string value);

+

+        /// <summary>

+        /// Reads a group field value from the stream.

+        /// </summary>    

+        void ReadGroup(int fieldNumber, IBuilderLite builder,

+                       ExtensionRegistry extensionRegistry);

+

+        /// <summary>

+        /// Reads a group field value from the stream and merges it into the given

+        /// UnknownFieldSet.

+        /// </summary>   

+        [Obsolete]

+        void ReadUnknownGroup(int fieldNumber, IBuilderLite builder);

+

+        /// <summary>

+        /// Reads an embedded message field value from the stream.

+        /// </summary>   

+        void ReadMessage(IBuilderLite builder, ExtensionRegistry extensionRegistry);

+

+        /// <summary>

+        /// Reads a bytes field value from the stream.

+        /// </summary>   

+        bool ReadBytes(ref ByteString value);

+

+        /// <summary>

+        /// Reads a uint32 field value from the stream.

+        /// </summary>   

+        [CLSCompliant(false)]

+        bool ReadUInt32(ref uint value);

+

+        /// <summary>

+        /// Reads an enum field value from the stream. The caller is responsible

+        /// for converting the numeric value to an actual enum.

+        /// </summary>   

+        bool ReadEnum(ref IEnumLite value, out object unknown, IEnumLiteMap mapping);

+

+        /// <summary>

+        /// Reads an enum field value from the stream. If the enum is valid for type T,

+        /// then the ref value is set and it returns true.  Otherwise the unkown output

+        /// value is set and this method returns false.

+        /// </summary>   

+        [CLSCompliant(false)]

+        bool ReadEnum<T>(ref T value, out object unknown)

+            where T : struct, IComparable, IFormattable;

+

+        /// <summary>

+        /// Reads an sfixed32 field value from the stream.

+        /// </summary>   

+        bool ReadSFixed32(ref int value);

+

+        /// <summary>

+        /// Reads an sfixed64 field value from the stream.

+        /// </summary>   

+        bool ReadSFixed64(ref long value);

+

+        /// <summary>

+        /// Reads an sint32 field value from the stream.

+        /// </summary>   

+        bool ReadSInt32(ref int value);

+

+        /// <summary>

+        /// Reads an sint64 field value from the stream.

+        /// </summary>   

+        bool ReadSInt64(ref long value);

+

+        /// <summary>

+        /// Reads an array of primitive values into the list, if the wire-type of fieldTag is length-prefixed and the 

+        /// type is numeric, it will read a packed array.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadPrimitiveArray(FieldType fieldType, uint fieldTag, string fieldName, ICollection<object> list);

+

+        /// <summary>

+        /// Reads an array of primitive values into the list, if the wire-type of fieldTag is length-prefixed, it will

+        /// read a packed array.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadEnumArray(uint fieldTag, string fieldName, ICollection<IEnumLite> list, out ICollection<object> unknown,

+                           IEnumLiteMap mapping);

+

+        /// <summary>

+        /// Reads an array of primitive values into the list, if the wire-type of fieldTag is length-prefixed, it will

+        /// read a packed array.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadEnumArray<T>(uint fieldTag, string fieldName, ICollection<T> list, out ICollection<object> unknown)

+            where T : struct, IComparable, IFormattable;

+

+        /// <summary>

+        /// Reads a set of messages using the <paramref name="messageType"/> as a template.  T is not guaranteed to be 

+        /// the most derived type, it is only the type specifier for the collection.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadMessageArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType,

+                                 ExtensionRegistry registry) where T : IMessageLite;

+

+        /// <summary>

+        /// Reads a set of messages using the <paramref name="messageType"/> as a template.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadGroupArray<T>(uint fieldTag, string fieldName, ICollection<T> list, T messageType,

+                               ExtensionRegistry registry) where T : IMessageLite;

+

+        /// <summary>

+        /// Reads a field of any primitive type. Enums, groups and embedded

+        /// messages are not handled by this method.

+        /// </summary>

+        bool ReadPrimitiveField(FieldType fieldType, ref object value);

+

+        /// <summary>

+        /// Returns true if the stream has reached the end of the input. This is the

+        /// case if either the end of the underlying input source has been reached or

+        /// the stream has reached a limit created using PushLimit.

+        /// </summary>

+        bool IsAtEnd { get; }

+

+        /// <summary>

+        /// Reads and discards a single field, given its tag value.

+        /// </summary>

+        /// <returns>false if the tag is an end-group tag, in which case

+        /// nothing is skipped. Otherwise, returns true.</returns>

+        [CLSCompliant(false)]

+        bool SkipField();

+

+        /// <summary>

+        /// Reads one or more repeated string field values from the stream.

+        /// </summary>   

+        [CLSCompliant(false)]

+        void ReadStringArray(uint fieldTag, string fieldName, ICollection<string> list);

+

+        /// <summary>

+        /// Reads one or more repeated ByteString field values from the stream.

+        /// </summary>   

+        [CLSCompliant(false)]

+        void ReadBytesArray(uint fieldTag, string fieldName, ICollection<ByteString> list);

+

+        /// <summary>

+        /// Reads one or more repeated boolean field values from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadBoolArray(uint fieldTag, string fieldName, ICollection<bool> list);

+

+        /// <summary>

+        /// Reads one or more repeated Int32 field values from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadInt32Array(uint fieldTag, string fieldName, ICollection<int> list);

+

+        /// <summary>

+        /// Reads one or more repeated SInt32 field values from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadSInt32Array(uint fieldTag, string fieldName, ICollection<int> list);

+

+        /// <summary>

+        /// Reads one or more repeated UInt32 field values from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadUInt32Array(uint fieldTag, string fieldName, ICollection<uint> list);

+

+        /// <summary>

+        /// Reads one or more repeated Fixed32 field values from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadFixed32Array(uint fieldTag, string fieldName, ICollection<uint> list);

+

+        /// <summary>

+        /// Reads one or more repeated SFixed32 field values from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadSFixed32Array(uint fieldTag, string fieldName, ICollection<int> list);

+

+        /// <summary>

+        /// Reads one or more repeated Int64 field values from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadInt64Array(uint fieldTag, string fieldName, ICollection<long> list);

+

+        /// <summary>

+        /// Reads one or more repeated SInt64 field values from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadSInt64Array(uint fieldTag, string fieldName, ICollection<long> list);

+

+        /// <summary>

+        /// Reads one or more repeated UInt64 field values from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadUInt64Array(uint fieldTag, string fieldName, ICollection<ulong> list);

+

+        /// <summary>

+        /// Reads one or more repeated Fixed64 field values from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadFixed64Array(uint fieldTag, string fieldName, ICollection<ulong> list);

+

+        /// <summary>

+        /// Reads one or more repeated SFixed64 field values from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadSFixed64Array(uint fieldTag, string fieldName, ICollection<long> list);

+

+        /// <summary>

+        /// Reads one or more repeated Double field values from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadDoubleArray(uint fieldTag, string fieldName, ICollection<double> list);

+

+        /// <summary>

+        /// Reads one or more repeated Float field values from the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void ReadFloatArray(uint fieldTag, string fieldName, ICollection<float> list);

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ICodedOutputStream.cs b/csharp/src/ProtocolBuffers/ICodedOutputStream.cs
new file mode 100644
index 0000000..64c8065
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ICodedOutputStream.cs
@@ -0,0 +1,374 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.Descriptors;

+

+//Disable warning CS3010: CLS-compliant interfaces must have only CLS-compliant members

+#pragma warning disable 3010

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Provides an interface that is used write a message.  Most often proto buffers are written

+    /// in their binary form by creating a instance via the CodedOutputStream.CreateInstance

+    /// static factory.

+    /// </summary>

+    public interface ICodedOutputStream

+    {

+        /// <summary>

+        /// Writes any message initialization data needed to the output stream

+        /// </summary>

+        /// <remarks>

+        /// This is primarily used by text formats and unnecessary for protobuffers' own

+        /// binary format.  The API for MessageStart/End was added for consistent handling

+        /// of output streams regardless of the actual writer implementation.

+        /// </remarks>

+        void WriteMessageStart();

+        /// <summary>

+        /// Writes any message finalization data needed to the output stream

+        /// </summary>

+        /// <remarks>

+        /// This is primarily used by text formats and unnecessary for protobuffers' own

+        /// binary format.  The API for MessageStart/End was added for consistent handling

+        /// of output streams regardless of the actual writer implementation.

+        /// </remarks>

+        void WriteMessageEnd();

+        /// <summary>

+        /// Indicates that all temporary buffers be written to the final output.

+        /// </summary>

+        void Flush();

+        /// <summary>

+        /// Writes an unknown message as a group

+        /// </summary>

+        [Obsolete]

+        void WriteUnknownGroup(int fieldNumber, IMessageLite value);

+        /// <summary>

+        /// Writes an unknown field value of bytes

+        /// </summary>

+        void WriteUnknownBytes(int fieldNumber, ByteString value);

+        /// <summary>

+        /// Writes an unknown field of a primitive type

+        /// </summary>

+        [CLSCompliant(false)]

+        void WriteUnknownField(int fieldNumber, WireFormat.WireType wireType, ulong value);

+        /// <summary>

+        /// Writes an extension as a message-set group

+        /// </summary>

+        void WriteMessageSetExtension(int fieldNumber, string fieldName, IMessageLite value);

+        /// <summary>

+        /// Writes an unknown extension as a message-set group

+        /// </summary>

+        void WriteMessageSetExtension(int fieldNumber, string fieldName, ByteString value);

+

+        /// <summary>

+        /// Writes a field value, including tag, to the stream.

+        /// </summary>

+        void WriteField(FieldType fieldType, int fieldNumber, string fieldName, object value);

+

+        /// <summary>

+        /// Writes a double field value, including tag, to the stream.

+        /// </summary>

+        void WriteDouble(int fieldNumber, string fieldName, double value);

+

+        /// <summary>

+        /// Writes a float field value, including tag, to the stream.

+        /// </summary>

+        void WriteFloat(int fieldNumber, string fieldName, float value);

+

+        /// <summary>

+        /// Writes a uint64 field value, including tag, to the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void WriteUInt64(int fieldNumber, string fieldName, ulong value);

+

+        /// <summary>

+        /// Writes an int64 field value, including tag, to the stream.

+        /// </summary>

+        void WriteInt64(int fieldNumber, string fieldName, long value);

+

+        /// <summary>

+        /// Writes an int32 field value, including tag, to the stream.

+        /// </summary>

+        void WriteInt32(int fieldNumber, string fieldName, int value);

+

+        /// <summary>

+        /// Writes a fixed64 field value, including tag, to the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void WriteFixed64(int fieldNumber, string fieldName, ulong value);

+

+        /// <summary>

+        /// Writes a fixed32 field value, including tag, to the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void WriteFixed32(int fieldNumber, string fieldName, uint value);

+

+        /// <summary>

+        /// Writes a bool field value, including tag, to the stream.

+        /// </summary>

+        void WriteBool(int fieldNumber, string fieldName, bool value);

+

+        /// <summary>

+        /// Writes a string field value, including tag, to the stream.

+        /// </summary>

+        void WriteString(int fieldNumber, string fieldName, string value);

+

+        /// <summary>

+        /// Writes a group field value, including tag, to the stream.

+        /// </summary>

+        void WriteGroup(int fieldNumber, string fieldName, IMessageLite value);

+

+        /// <summary>

+        /// Writes a message field value, including tag, to the stream.

+        /// </summary>

+        void WriteMessage(int fieldNumber, string fieldName, IMessageLite value);

+

+        /// <summary>

+        /// Writes a byte array field value, including tag, to the stream.

+        /// </summary>

+        void WriteBytes(int fieldNumber, string fieldName, ByteString value);

+

+        /// <summary>

+        /// Writes a UInt32 field value, including tag, to the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void WriteUInt32(int fieldNumber, string fieldName, uint value);

+

+        /// <summary>

+        /// Writes an enum field value, including tag, to the stream.

+        /// </summary>

+        void WriteEnum(int fieldNumber, string fieldName, int value, object rawValue);

+

+        /// <summary>

+        /// Writes a fixed 32-bit field value, including tag, to the stream.

+        /// </summary>

+        void WriteSFixed32(int fieldNumber, string fieldName, int value);

+

+        /// <summary>

+        /// Writes a signed fixed 64-bit field value, including tag, to the stream.

+        /// </summary>

+        void WriteSFixed64(int fieldNumber, string fieldName, long value);

+

+        /// <summary>

+        /// Writes a signed 32-bit field value, including tag, to the stream.

+        /// </summary>

+        void WriteSInt32(int fieldNumber, string fieldName, int value);

+

+        /// <summary>

+        /// Writes a signed 64-bit field value, including tag, to the stream.

+        /// </summary>

+        void WriteSInt64(int fieldNumber, string fieldName, long value);

+

+        /// <summary>

+        /// Writes a repeated field value, including tag(s), to the stream.

+        /// </summary>

+        void WriteArray(FieldType fieldType, int fieldNumber, string fieldName, IEnumerable list);

+

+        /// <summary>

+        /// Writes a repeated group value, including tag(s), to the stream.

+        /// </summary>

+        void WriteGroupArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)

+            where T : IMessageLite;

+

+        /// <summary>

+        /// Writes a repeated message value, including tag(s), to the stream.

+        /// </summary>

+        void WriteMessageArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)

+            where T : IMessageLite;

+

+        /// <summary>

+        /// Writes a repeated string value, including tag(s), to the stream.

+        /// </summary>

+        void WriteStringArray(int fieldNumber, string fieldName, IEnumerable<string> list);

+

+        /// <summary>

+        /// Writes a repeated ByteString value, including tag(s), to the stream.

+        /// </summary>

+        void WriteBytesArray(int fieldNumber, string fieldName, IEnumerable<ByteString> list);

+

+        /// <summary>

+        /// Writes a repeated boolean value, including tag(s), to the stream.

+        /// </summary>

+        void WriteBoolArray(int fieldNumber, string fieldName, IEnumerable<bool> list);

+

+        /// <summary>

+        /// Writes a repeated Int32 value, including tag(s), to the stream.

+        /// </summary>

+        void WriteInt32Array(int fieldNumber, string fieldName, IEnumerable<int> list);

+

+        /// <summary>

+        /// Writes a repeated SInt32 value, including tag(s), to the stream.

+        /// </summary>

+        void WriteSInt32Array(int fieldNumber, string fieldName, IEnumerable<int> list);

+

+        /// <summary>

+        /// Writes a repeated UInt32 value, including tag(s), to the stream.

+        /// </summary>

+        void WriteUInt32Array(int fieldNumber, string fieldName, IEnumerable<uint> list);

+

+        /// <summary>

+        /// Writes a repeated Fixed32 value, including tag(s), to the stream.

+        /// </summary>

+        void WriteFixed32Array(int fieldNumber, string fieldName, IEnumerable<uint> list);

+

+        /// <summary>

+        /// Writes a repeated SFixed32 value, including tag(s), to the stream.

+        /// </summary>

+        void WriteSFixed32Array(int fieldNumber, string fieldName, IEnumerable<int> list);

+

+        /// <summary>

+        /// Writes a repeated Int64 value, including tag(s), to the stream.

+        /// </summary>

+        void WriteInt64Array(int fieldNumber, string fieldName, IEnumerable<long> list);

+

+        /// <summary>

+        /// Writes a repeated SInt64 value, including tag(s), to the stream.

+        /// </summary>

+        void WriteSInt64Array(int fieldNumber, string fieldName, IEnumerable<long> list);

+

+        /// <summary>

+        /// Writes a repeated UInt64 value, including tag(s), to the stream.

+        /// </summary>

+        void WriteUInt64Array(int fieldNumber, string fieldName, IEnumerable<ulong> list);

+

+        /// <summary>

+        /// Writes a repeated Fixed64 value, including tag(s), to the stream.

+        /// </summary>

+        void WriteFixed64Array(int fieldNumber, string fieldName, IEnumerable<ulong> list);

+

+        /// <summary>

+        /// Writes a repeated SFixed64 value, including tag(s), to the stream.

+        /// </summary>

+        void WriteSFixed64Array(int fieldNumber, string fieldName, IEnumerable<long> list);

+

+        /// <summary>

+        /// Writes a repeated Double value, including tag(s), to the stream.

+        /// </summary>

+        void WriteDoubleArray(int fieldNumber, string fieldName, IEnumerable<double> list);

+

+        /// <summary>

+        /// Writes a repeated Float value, including tag(s), to the stream.

+        /// </summary>

+        void WriteFloatArray(int fieldNumber, string fieldName, IEnumerable<float> list);

+

+        /// <summary>

+        /// Writes a repeated enumeration value of type T, including tag(s), to the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void WriteEnumArray<T>(int fieldNumber, string fieldName, IEnumerable<T> list)

+            where T : struct, IComparable, IFormattable;

+

+        /// <summary>

+        /// Writes a packed repeated primitive, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedArray(FieldType fieldType, int fieldNumber, string fieldName, IEnumerable list);

+

+        /// <summary>

+        /// Writes a packed repeated boolean, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedBoolArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<bool> list);

+

+        /// <summary>

+        /// Writes a packed repeated Int32, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<int> list);

+

+        /// <summary>

+        /// Writes a packed repeated SInt32, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedSInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<int> list);

+

+        /// <summary>

+        /// Writes a packed repeated UInt32, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedUInt32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<uint> list);

+

+        /// <summary>

+        /// Writes a packed repeated Fixed32, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedFixed32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<uint> list);

+

+        /// <summary>

+        /// Writes a packed repeated SFixed32, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedSFixed32Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<int> list);

+

+        /// <summary>

+        /// Writes a packed repeated Int64, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<long> list);

+

+        /// <summary>

+        /// Writes a packed repeated SInt64, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedSInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<long> list);

+

+        /// <summary>

+        /// Writes a packed repeated UInt64, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedUInt64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<ulong> list);

+

+        /// <summary>

+        /// Writes a packed repeated Fixed64, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedFixed64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<ulong> list);

+

+        /// <summary>

+        /// Writes a packed repeated SFixed64, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedSFixed64Array(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<long> list);

+

+        /// <summary>

+        /// Writes a packed repeated Double, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedDoubleArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<double> list);

+

+        /// <summary>

+        /// Writes a packed repeated Float, including tag and length, to the stream.

+        /// </summary>

+        void WritePackedFloatArray(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<float> list);

+

+        /// <summary>

+        /// Writes a packed repeated enumeration of type T, including tag and length, to the stream.

+        /// </summary>

+        [CLSCompliant(false)]

+        void WritePackedEnumArray<T>(int fieldNumber, string fieldName, int calculatedSize, IEnumerable<T> list)

+            where T : struct, IComparable, IFormattable;

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/IMessage.cs b/csharp/src/ProtocolBuffers/IMessage.cs
new file mode 100644
index 0000000..c23bc3f
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/IMessage.cs
@@ -0,0 +1,249 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.IO;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Non-generic interface used for all parts of the API which don't require

+    /// any type knowledge.

+    /// </summary>

+    public interface IMessage : IMessageLite

+    {

+        /// <summary>

+        /// Returns the message's type's descriptor. This differs from the

+        /// Descriptor property of each generated message class in that this

+        /// method is an abstract method of IMessage whereas Descriptor is

+        /// a static property of a specific class. They return the same thing.

+        /// </summary>

+        MessageDescriptor DescriptorForType { get; }

+

+        /// <summary>

+        /// Returns a collection of all the fields in this message which are set

+        /// and their corresponding values.  A singular ("required" or "optional")

+        /// field is set iff HasField() returns true for that field.  A "repeated"

+        /// field is set iff GetRepeatedFieldSize() is greater than zero.  The

+        /// values are exactly what would be returned by calling

+        /// GetField(FieldDescriptor) for each field.  The map

+        /// is guaranteed to be a sorted map, so iterating over it will return fields

+        /// in order by field number. 

+        /// </summary>

+        IDictionary<FieldDescriptor, object> AllFields { get; }

+

+        /// <summary>

+        /// Returns true if the given field is set. This is exactly equivalent

+        /// to calling the generated "Has" property corresponding to the field.

+        /// </summary>

+        /// <exception cref="ArgumentException">the field is a repeated field,

+        /// or it's not a field of this type</exception>

+        bool HasField(FieldDescriptor field);

+

+        /// <summary>

+        /// Obtains the value of the given field, or the default value if

+        /// it isn't set. For value type fields, the boxed value is returned.

+        /// For enum fields, the EnumValueDescriptor for the enum is returned.

+        /// For embedded message fields, the sub-message

+        /// is returned. For repeated fields, an IList&lt;T&gt; is returned.

+        /// </summary>

+        object this[FieldDescriptor field] { get; }

+

+        /// <summary>

+        /// Returns the number of elements of a repeated field. This is

+        /// exactly equivalent to calling the generated "Count" property

+        /// corresponding to the field.

+        /// </summary>

+        /// <exception cref="ArgumentException">the field is not a repeated field,

+        /// or it's not a field of this type</exception>

+        int GetRepeatedFieldCount(FieldDescriptor field);

+

+        /// <summary>

+        /// Gets an element of a repeated field. For value type fields 

+        /// excluding enums, the boxed value is returned. For embedded

+        /// message fields, the sub-message is returned. For enums, the

+        /// relevant EnumValueDescriptor is returned.

+        /// </summary>

+        /// <exception cref="ArgumentException">the field is not a repeated field,

+        /// or it's not a field of this type</exception>

+        /// <exception cref="ArgumentOutOfRangeException">the index is out of

+        /// range for the repeated field's value</exception>

+        object this[FieldDescriptor field, int index] { get; }

+

+        /// <summary>

+        /// Returns the unknown fields for this message.

+        /// </summary>

+        UnknownFieldSet UnknownFields { get; }

+

+        /// <summary>

+        /// Returns true iff all required fields in the message and all embedded

+        /// messages are set.

+        /// </summary>

+        new bool IsInitialized { get; }

+

+        /// <summary>

+        /// Serializes the message and writes it to the given output stream.

+        /// This does not flush or close the stream.

+        /// </summary>

+        /// <remarks>

+        /// Protocol Buffers are not self-delimiting. Therefore, if you write

+        /// any more data to the stream after the message, you must somehow ensure

+        /// that the parser on the receiving end does not interpret this as being

+        /// part of the protocol message. One way of doing this is by writing the size

+        /// of the message before the data, then making sure you limit the input to

+        /// that size when receiving the data. Alternatively, use WriteDelimitedTo(Stream).

+        /// </remarks>

+        new void WriteTo(ICodedOutputStream output);

+

+        /// <summary>

+        /// Like WriteTo(Stream) but writes the size of the message as a varint before

+        /// writing the data. This allows more data to be written to the stream after the

+        /// message without the need to delimit the message data yourself. Use 

+        /// IBuilder.MergeDelimitedFrom(Stream) or the static method

+        /// YourMessageType.ParseDelimitedFrom(Stream) to parse messages written by this method.

+        /// </summary>

+        /// <param name="output"></param>

+        new void WriteDelimitedTo(Stream output);

+

+        /// <summary>

+        /// Returns the number of bytes required to encode this message.

+        /// The result is only computed on the first call and memoized after that.

+        /// </summary>

+        new int SerializedSize { get; }

+

+        #region Comparison and hashing

+

+        /// <summary>

+        /// Compares the specified object with this message for equality.

+        /// Returns true iff the given object is a message of the same type

+        /// (as defined by DescriptorForType) and has identical values

+        /// for all its fields.

+        /// </summary>

+        new bool Equals(object other);

+

+        /// <summary>

+        /// Returns the hash code value for this message.

+        /// TODO(jonskeet): Specify the hash algorithm, but better than the Java one!

+        /// </summary>

+        new int GetHashCode();

+

+        #endregion

+

+        #region Convenience methods

+

+        /// <summary>

+        /// Converts the message to a string in protocol buffer text format.

+        /// This is just a trivial wrapper around TextFormat.PrintToString.

+        /// </summary>

+        new string ToString();

+

+        /// <summary>

+        /// Serializes the message to a ByteString. This is a trivial wrapper

+        /// around WriteTo(ICodedOutputStream).

+        /// </summary>

+        new ByteString ToByteString();

+

+        /// <summary>

+        /// Serializes the message to a byte array. This is a trivial wrapper

+        /// around WriteTo(ICodedOutputStream).

+        /// </summary>

+        new byte[] ToByteArray();

+

+        /// <summary>

+        /// Serializes the message and writes it to the given stream.

+        /// This is just a wrapper around WriteTo(ICodedOutputStream). This

+        /// does not flush or close the stream.

+        /// </summary>

+        /// <param name="output"></param>

+        new void WriteTo(Stream output);

+

+        #endregion

+

+        /// <summary>

+        /// Creates a builder for the type, but in a weakly typed manner. This

+        /// is typically implemented by strongly typed messages by just returning

+        /// the result of CreateBuilderForType.

+        /// </summary>

+        new IBuilder WeakCreateBuilderForType();

+

+        /// <summary>

+        /// Creates a builder with the same contents as this message. This

+        /// is typically implemented by strongly typed messages by just returning

+        /// the result of ToBuilder.

+        /// </summary>

+        new IBuilder WeakToBuilder();

+

+        new IMessage WeakDefaultInstanceForType { get; }

+    }

+

+    public interface IMessage<TMessage> : IMessage, IMessageLite<TMessage>

+    {

+        /// <summary>

+        /// Returns an instance of this message type with all fields set to

+        /// their default values. This may or may not be a singleton. This differs

+        /// from the DefaultInstance property of each generated message class in that this

+        /// method is an abstract method of IMessage whereas DefaultInstance is

+        /// a static property of a specific class. They return the same thing.

+        /// </summary>

+        new TMessage DefaultInstanceForType { get; }

+    }

+

+    /// <summary>

+    /// Type-safe interface for all generated messages to implement.

+    /// </summary>

+    public interface IMessage<TMessage, TBuilder> : IMessage<TMessage>, IMessageLite<TMessage, TBuilder>

+        where TMessage : IMessage<TMessage, TBuilder>

+        where TBuilder : IBuilder<TMessage, TBuilder>

+    {

+        #region Builders

+

+        /// <summary>

+        /// Constructs a new builder for a message of the same type as this message.

+        /// </summary>

+        new TBuilder CreateBuilderForType();

+

+        /// <summary>

+        /// Creates a builder with the same contents as this current instance.

+        /// This is typically implemented by strongly typed messages by just

+        /// returning the result of ToBuilder().

+        /// </summary>

+        new TBuilder ToBuilder();

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/IMessageLite.cs b/csharp/src/ProtocolBuffers/IMessageLite.cs
new file mode 100644
index 0000000..ea5d994
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/IMessageLite.cs
@@ -0,0 +1,188 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.IO;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Non-generic interface used for all parts of the API which don't require

+    /// any type knowledge.

+    /// </summary>

+    public partial interface IMessageLite

+    {

+        /// <summary>

+        /// Returns true iff all required fields in the message and all embedded

+        /// messages are set.

+        /// </summary>

+        bool IsInitialized { get; }

+

+        /// <summary>

+        /// Serializes the message and writes it to the given output stream.

+        /// This does not flush or close the stream.

+        /// </summary>

+        /// <remarks>

+        /// Protocol Buffers are not self-delimiting. Therefore, if you write

+        /// any more data to the stream after the message, you must somehow ensure

+        /// that the parser on the receiving end does not interpret this as being

+        /// part of the protocol message. One way of doing this is by writing the size

+        /// of the message before the data, then making sure you limit the input to

+        /// that size when receiving the data. Alternatively, use WriteDelimitedTo(Stream).

+        /// </remarks>

+        void WriteTo(ICodedOutputStream output);

+

+        /// <summary>

+        /// Like WriteTo(Stream) but writes the size of the message as a varint before

+        /// writing the data. This allows more data to be written to the stream after the

+        /// message without the need to delimit the message data yourself. Use 

+        /// IBuilder.MergeDelimitedFrom(Stream) or the static method

+        /// YourMessageType.ParseDelimitedFrom(Stream) to parse messages written by this method.

+        /// </summary>

+        /// <param name="output"></param>

+        void WriteDelimitedTo(Stream output);

+

+        /// <summary>

+        /// Returns the number of bytes required to encode this message.

+        /// The result is only computed on the first call and memoized after that.

+        /// </summary>

+        int SerializedSize { get; }

+

+        #region Comparison and hashing

+

+        /// <summary>

+        /// Compares the specified object with this message for equality.

+        /// Returns true iff the given object is a message of the same type

+        /// (as defined by DescriptorForType) and has identical values

+        /// for all its fields.

+        /// </summary>

+        bool Equals(object other);

+

+        /// <summary>

+        /// Returns the hash code value for this message.

+        /// TODO(jonskeet): Specify the hash algorithm, but better than the Java one!

+        /// </summary>

+        int GetHashCode();

+

+        #endregion

+

+        #region Convenience methods

+

+        /// <summary>

+        /// Converts the message to a string in protocol buffer text format.

+        /// This is just a trivial wrapper around TextFormat.PrintToString.

+        /// </summary>

+        string ToString();

+

+        /// <summary>

+        /// Converts the message to a string.

+        /// </summary>

+        void PrintTo(TextWriter writer);

+

+        /// <summary>

+        /// Serializes the message to a ByteString. This is a trivial wrapper

+        /// around WriteTo(ICodedOutputStream).

+        /// </summary>

+        ByteString ToByteString();

+

+        /// <summary>

+        /// Serializes the message to a byte array. This is a trivial wrapper

+        /// around WriteTo(ICodedOutputStream).

+        /// </summary>

+        byte[] ToByteArray();

+

+        /// <summary>

+        /// Serializes the message and writes it to the given stream.

+        /// This is just a wrapper around WriteTo(ICodedOutputStream). This

+        /// does not flush or close the stream.

+        /// </summary>

+        /// <param name="output"></param>

+        void WriteTo(Stream output);

+

+        #endregion

+

+        /// <summary>

+        /// Creates a builder for the type, but in a weakly typed manner. This

+        /// is typically implemented by strongly typed messages by just returning

+        /// the result of CreateBuilderForType.

+        /// </summary>

+        IBuilderLite WeakCreateBuilderForType();

+

+        /// <summary>

+        /// Creates a builder with the same contents as this message. This

+        /// is typically implemented by strongly typed messages by just returning

+        /// the result of ToBuilder.

+        /// </summary>

+        IBuilderLite WeakToBuilder();

+

+        IMessageLite WeakDefaultInstanceForType { get; }

+    }

+

+    public interface IMessageLite<TMessage> : IMessageLite

+    {

+        /// <summary>

+        /// Returns an instance of this message type with all fields set to

+        /// their default values. This may or may not be a singleton. This differs

+        /// from the DefaultInstance property of each generated message class in that this

+        /// method is an abstract method of IMessage whereas DefaultInstance is

+        /// a static property of a specific class. They return the same thing.

+        /// </summary>

+        TMessage DefaultInstanceForType { get; }

+    }

+

+    /// <summary>

+    /// Type-safe interface for all generated messages to implement.

+    /// </summary>

+    public interface IMessageLite<TMessage, TBuilder> : IMessageLite<TMessage>

+        where TMessage : IMessageLite<TMessage, TBuilder>

+        where TBuilder : IBuilderLite<TMessage, TBuilder>

+    {

+        #region Builders

+

+        /// <summary>

+        /// Constructs a new builder for a message of the same type as this message.

+        /// </summary>

+        TBuilder CreateBuilderForType();

+

+        /// <summary>

+        /// Creates a builder with the same contents as this current instance.

+        /// This is typically implemented by strongly typed messages by just

+        /// returning the result of ToBuilder().

+        /// </summary>

+        TBuilder ToBuilder();

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/IRpcChannel.cs b/csharp/src/ProtocolBuffers/IRpcChannel.cs
new file mode 100644
index 0000000..4ca24ea
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/IRpcChannel.cs
@@ -0,0 +1,63 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Interface for an RPC channel. A channel represents a communication line to

+    /// a service (IService implementation) which can be used to call that service's

+    /// methods. The service may be running on another machine. Normally, you should

+    /// not call an IRpcChannel directly, but instead construct a stub wrapping it.

+    /// Generated service classes contain a CreateStub method for precisely this purpose.

+    /// </summary>

+    public interface IRpcChannel

+    {

+        /// <summary>

+        /// Calls the given method of the remote service. This method is similar

+        /// to <see cref="IService.CallMethod" /> with one important difference: the

+        /// caller decides the types of the IMessage objects, not the implementation.

+        /// The request may be of any type as long as <c>request.Descriptor == method.InputType</c>.

+        /// The response passed to the callback will be of the same type as

+        /// <paramref name="responsePrototype"/> (which must be such that

+        /// <c>responsePrototype.Descriptor == method.OutputType</c>).

+        /// </summary>

+        void CallMethod(MethodDescriptor method, IRpcController controller,

+                        IMessage request, IMessage responsePrototype, Action<IMessage> done);

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/IRpcController.cs b/csharp/src/ProtocolBuffers/IRpcController.cs
new file mode 100644
index 0000000..b155bec
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/IRpcController.cs
@@ -0,0 +1,125 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Mediates a single method call. The primary purpose of the controller

+    /// is to provide a way to manipulate settings specific to the

+    /// RPC implementation and to find out about RPC-level errors.

+    /// 

+    /// The methods provided by this interface are intended to be a "least

+    /// common denominator" set of features which we expect all implementations to

+    /// support. Specific implementations may provide more advanced features,

+    /// (e.g. deadline propagation).

+    /// </summary>

+    public interface IRpcController

+    {

+        #region Client side calls

+

+        // These calls may be made from the client side only.  Their results

+        // are undefined on the server side (may throw exceptions).

+

+        /// <summary>

+        /// Resets the controller to its initial state so that it may be reused in

+        /// a new call.  This can be called from the client side only.  It must not

+        /// be called while an RPC is in progress.

+        /// </summary>

+        void Reset();

+

+        /// <summary>

+        /// After a call has finished, returns true if the call failed.  The possible

+        /// reasons for failure depend on the RPC implementation. Failed must

+        /// only be called on the client side, and must not be called before a call has

+        /// finished.

+        /// </summary>

+        bool Failed { get; }

+

+        /// <summary>

+        /// If Failed is true, ErrorText returns a human-readable description of the error.

+        /// </summary>

+        string ErrorText { get; }

+

+        /// <summary>

+        /// Advises the RPC system that the caller desires that the RPC call be

+        /// canceled. The RPC system may cancel it immediately, may wait awhile and

+        /// then cancel it, or may not even cancel the call at all. If the call is

+        /// canceled, the "done" callback will still be called and the RpcController

+        /// will indicate that the call failed at that time.

+        /// </summary>

+        void StartCancel();

+

+        #endregion

+

+        #region Server side calls

+

+        // These calls may be made from the server side only.  Their results

+        // are undefined on the client side (may throw exceptions).

+

+        /// <summary>

+        /// Causes Failed to return true on the client side. <paramref name="reason"/>

+        /// will be incorporated into the message returned by ErrorText.

+        /// If you find you need to return machine-readable information about

+        /// failures, you should incorporate it into your response protocol buffer

+        /// and should *not* call SetFailed.

+        /// </summary>

+        void SetFailed(string reason);

+

+        /// <summary>

+        /// If true, indicates that the client canceled the RPC, so the server may as

+        /// well give up on replying to it. This method must be called on the server

+        /// side only. The server should still call the final "done" callback.

+        /// </summary>

+        bool IsCanceled();

+

+        /// <summary>

+        /// Requests that the given callback be called when the RPC is canceled.

+        /// The parameter passed to the callback will always be null. The callback will

+        /// be called exactly once. If the RPC completes without being canceled, the

+        /// callback will be called after completion. If the RPC has already been canceled

+        /// when NotifyOnCancel is called, the callback will be called immediately.

+        /// 

+        /// NotifyOnCancel must be called no more than once per request. It must be

+        /// called on the server side only.

+        /// </summary>

+        /// <param name="callback"></param>

+        void NotifyOnCancel(Action<object> callback);

+

+        #endregion

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/IRpcDispatch.cs b/csharp/src/ProtocolBuffers/IRpcDispatch.cs
new file mode 100644
index 0000000..524838e
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/IRpcDispatch.cs
@@ -0,0 +1,78 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Provides an entry-point for transport listeners to call a specified method on a service

+    /// </summary>

+    public interface IRpcServerStub : IDisposable

+    {

+        /// <summary>

+        /// Calls the method identified by methodName and returns the message

+        /// </summary>

+        /// <param name="methodName">The method name on the service descriptor (case-sensitive)</param>

+        /// <param name="input">The ICodedInputStream to deserialize the call parameter from</param>

+        /// <param name="registry">The extension registry to use when deserializing the call parameter</param>

+        /// <returns>The message that was returned from the service's method</returns>

+        IMessageLite CallMethod(string methodName, ICodedInputStream input, ExtensionRegistry registry);

+    }

+

+    /// <summary>

+    /// Used to forward an invocation of a service method to a transport sender implementation

+    /// </summary>

+    public interface IRpcDispatch

+    {

+        /// <summary>

+        /// Calls the service member on the endpoint connected.  This is generally done by serializing

+        /// the message, sending the bytes over a transport, and then deserializing the call parameter

+        /// to invoke the service's actual implementation via IRpcServerStub.  Once the call has

+        /// completed the result message is serialized and returned to the originating endpoint.

+        /// </summary>

+        /// <typeparam name="TMessage">The type of the response message</typeparam>

+        /// <typeparam name="TBuilder">The type of of the response builder</typeparam>

+        /// <param name="method">The name of the method on the service</param>

+        /// <param name="request">The message instance provided to the service call</param>

+        /// <param name="response">The builder used to deserialize the response</param>

+        /// <returns>The resulting message of the service call</returns>

+        TMessage CallMethod<TMessage, TBuilder>(string method, IMessageLite request,

+                                                IBuilderLite<TMessage, TBuilder> response)

+            where TMessage : IMessageLite<TMessage, TBuilder>

+            where TBuilder : IBuilderLite<TMessage, TBuilder>;

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/IService.cs b/csharp/src/ProtocolBuffers/IService.cs
new file mode 100644
index 0000000..61af35c
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/IService.cs
@@ -0,0 +1,102 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Base interface for protocol-buffer-based RPC services. Services themselves

+    /// are abstract classes (implemented either by servers or as stubs) but they

+    /// implement this itnerface. The methods of this interface can be used to call

+    /// the methods of the service without knowing its exact type at compile time

+    /// (analagous to the IMessage interface).

+    /// </summary>

+    public interface IService

+    {

+        /// <summary>

+        /// The ServiceDescriptor describing this service and its methods.

+        /// </summary>

+        ServiceDescriptor DescriptorForType { get; }

+

+        /// <summary>

+        /// Call a method of the service specified by MethodDescriptor.  This is

+        /// normally implemented as a simple switch that calls the standard

+        /// definitions of the service's methods.

+        /// <para>

+        /// Preconditions

+        /// <list>

+        /// <item><c>method.Service == DescriptorForType</c></item>

+        /// <item>request is of the exact same class as the object returned by GetRequestPrototype(method)</item>

+        /// <item>controller is of the correct type for the RPC implementation being used by this service.

+        /// For stubs, the "correct type" depends on the IRpcChannel which the stub is using. Server-side

+        /// implementations are expected to accept whatever type of IRpcController the server-side RPC implementation

+        /// uses.</item>

+        /// </list>

+        /// </para>

+        /// <para>

+        /// Postconditions

+        /// <list>

+        /// <item><paramref name="done" /> will be called when the method is complete.

+        /// This may before CallMethod returns or it may be at some point in the future.</item>

+        /// <item>The parameter to <paramref name="done"/> is the response. It will be of the

+        /// exact same type as would be returned by <see cref="GetResponsePrototype"/>.</item>

+        /// <item>If the RPC failed, the parameter to <paramref name="done"/> will be null.

+        /// Further details about the failure can be found by querying <paramref name="controller"/>.</item>

+        /// </list>

+        /// </para>

+        /// </summary>

+        void CallMethod(MethodDescriptor method, IRpcController controller,

+                        IMessage request, Action<IMessage> done);

+

+        /// <summary>

+        /// CallMethod requires that the request passed in is of a particular implementation

+        /// of IMessage. This method gets the default instance of this type of a given method.

+        /// You can then call WeakCreateBuilderForType to create a builder to build an object which

+        /// you can then pass to CallMethod.

+        /// </summary>

+        IMessage GetRequestPrototype(MethodDescriptor method);

+

+        /// <summary>

+        /// Like GetRequestPrototype, but returns a prototype of the response message.

+        /// This is generally not needed because the IService implementation contructs

+        /// the response message itself, but it may be useful in some cases to know ahead

+        /// of time what type of object will be returned.

+        /// </summary>

+        IMessage GetResponsePrototype(MethodDescriptor method);

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/InvalidProtocolBufferException.cs b/csharp/src/ProtocolBuffers/InvalidProtocolBufferException.cs
new file mode 100644
index 0000000..67d7b37
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/InvalidProtocolBufferException.cs
@@ -0,0 +1,112 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.IO;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Thrown when a protocol message being parsed is invalid in some way,

+    /// e.g. it contains a malformed varint or a negative byte length.

+    /// </summary>

+    public sealed class InvalidProtocolBufferException : IOException

+    {

+        internal InvalidProtocolBufferException(string message)

+            : base(message)

+        {

+        }

+

+        public static InvalidProtocolBufferException TruncatedMessage()

+        {

+            return new InvalidProtocolBufferException(

+                "While parsing a protocol message, the input ended unexpectedly " +

+                "in the middle of a field.  This could mean either than the " +

+                "input has been truncated or that an embedded message " +

+                "misreported its own length.");

+        }

+

+        internal static InvalidProtocolBufferException NegativeSize()

+        {

+            return new InvalidProtocolBufferException(

+                "CodedInputStream encountered an embedded string or message " +

+                "which claimed to have negative size.");

+        }

+

+        public static InvalidProtocolBufferException MalformedVarint()

+        {

+            return new InvalidProtocolBufferException(

+                "CodedInputStream encountered a malformed varint.");

+        }

+

+        public static InvalidProtocolBufferException InvalidTag()

+        {

+            return new InvalidProtocolBufferException(

+                "Protocol message contained an invalid tag (zero).");

+        }

+

+        internal static InvalidProtocolBufferException InvalidEndTag()

+        {

+            return new InvalidProtocolBufferException(

+                "Protocol message end-group tag did not match expected tag.");

+        }

+

+        internal static InvalidProtocolBufferException InvalidWireType()

+        {

+            return new InvalidProtocolBufferException(

+                "Protocol message tag had invalid wire type.");

+        }

+

+        internal static InvalidProtocolBufferException RecursionLimitExceeded()

+        {

+            return new InvalidProtocolBufferException(

+                "Protocol message had too many levels of nesting.  May be malicious.  " +

+                "Use CodedInputStream.SetRecursionLimit() to increase the depth limit.");

+        }

+

+        internal static InvalidProtocolBufferException SizeLimitExceeded()

+        {

+            return new InvalidProtocolBufferException(

+                "Protocol message was too large.  May be malicious.  " +

+                "Use CodedInputStream.SetSizeLimit() to increase the size limit.");

+        }

+

+        internal static InvalidProtocolBufferException InvalidMessageStreamTag()

+        {

+            return new InvalidProtocolBufferException(

+                "Stream of protocol messages had invalid tag. Expected tag is length-delimited field 1.");

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/MessageStreamIterator.cs b/csharp/src/ProtocolBuffers/MessageStreamIterator.cs
new file mode 100644
index 0000000..32d697c
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/MessageStreamIterator.cs
@@ -0,0 +1,170 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using System.IO;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Iterates over data created using a <see cref="MessageStreamWriter{T}" />.

+    /// Unlike MessageStreamWriter, this class is not usually constructed directly with

+    /// a stream; instead it is provided with a way of opening a stream when iteration

+    /// is started. The stream is closed when the iteration is completed or the enumerator

+    /// is disposed. (This occurs naturally when using <c>foreach</c>.)

+    /// </summary>

+    public class MessageStreamIterator<TMessage> : IEnumerable<TMessage>

+        where TMessage : IMessage<TMessage>

+    {

+        private readonly StreamProvider streamProvider;

+        private readonly ExtensionRegistry extensionRegistry;

+        private readonly int sizeLimit;

+

+        /// <summary>

+        /// The default instance of TMessage type used to construct builders while reading

+        /// </summary>

+        private static readonly TMessage defaultMessageInstance = CreateDefaultInstance();

+        /// <summary>

+        /// Any exception (within reason) thrown in type ctor is caught and rethrown in the constructor.

+        /// This makes life a lot simpler for the caller.

+        /// </summary>

+        private static Exception typeInitializationException;

+

+

+        /// <summary>

+        /// Vastly simplified the reflection to simply obtain the default instance and use it to construct

+        /// the weak builder while simply casting the result.  Ideally this class should have required a 

+        /// TBuilder type argument with a new() constraint to construct the initial instance thereby the

+        /// reflection could be eliminated.

+        /// </summary>

+        private static TMessage CreateDefaultInstance()

+        {

+            try

+            {

+                return (TMessage)typeof(TMessage)

+                                      .GetProperty("DefaultInstance", typeof(TMessage), new Type[0])

+                                      .GetValue(null, null);

+            }

+            catch (Exception e)

+            {

+                typeInitializationException = e;

+                return default(TMessage);

+            }

+        }

+

+        private static readonly uint ExpectedTag = WireFormat.MakeTag(1, WireFormat.WireType.LengthDelimited);

+

+        private MessageStreamIterator(StreamProvider streamProvider, ExtensionRegistry extensionRegistry, int sizeLimit)

+        {

+            if (ReferenceEquals(defaultMessageInstance, null))

+            {

+                throw new System.Reflection.TargetInvocationException(typeInitializationException);

+            }

+            this.streamProvider = streamProvider;

+            this.extensionRegistry = extensionRegistry;

+            this.sizeLimit = sizeLimit;

+        }

+

+        private MessageStreamIterator(StreamProvider streamProvider, ExtensionRegistry extensionRegistry)

+            : this(streamProvider, extensionRegistry, CodedInputStream.DefaultSizeLimit)

+        {

+        }

+

+        /// <summary>

+        /// Creates a new instance which uses the same stream provider as this one,

+        /// but the specified extension registry.

+        /// </summary>

+        public MessageStreamIterator<TMessage> WithExtensionRegistry(ExtensionRegistry newRegistry)

+        {

+            return new MessageStreamIterator<TMessage>(streamProvider, newRegistry, sizeLimit);

+        }

+

+        /// <summary>

+        /// Creates a new instance which uses the same stream provider and extension registry as this one,

+        /// but with the specified size limit. Note that this must be big enough for the largest message

+        /// and the tag and size preceding it.

+        /// </summary>

+        public MessageStreamIterator<TMessage> WithSizeLimit(int newSizeLimit)

+        {

+            return new MessageStreamIterator<TMessage>(streamProvider, extensionRegistry, newSizeLimit);

+        }

+

+#if CLIENTPROFILE

+        public static MessageStreamIterator<TMessage> FromFile(string file)

+        {

+            return new MessageStreamIterator<TMessage>(() => File.OpenRead(file), ExtensionRegistry.Empty);

+        }

+#endif

+

+        public static MessageStreamIterator<TMessage> FromStreamProvider(StreamProvider streamProvider)

+        {

+            return new MessageStreamIterator<TMessage>(streamProvider, ExtensionRegistry.Empty);

+        }

+

+        public IEnumerator<TMessage> GetEnumerator()

+        {

+            using (Stream stream = streamProvider())

+            {

+                CodedInputStream input = CodedInputStream.CreateInstance(stream);

+                input.SetSizeLimit(sizeLimit);

+                uint tag;

+                string name;

+                while (input.ReadTag(out tag, out name))

+                {

+                    if ((tag == 0 && name == "item") || (tag == ExpectedTag))

+                    {

+                        IBuilder builder = defaultMessageInstance.WeakCreateBuilderForType();

+                        input.ReadMessage(builder, extensionRegistry);

+                        yield return (TMessage)builder.WeakBuild();

+                    }

+                    else

+                    {

+                        throw InvalidProtocolBufferException.InvalidMessageStreamTag();

+                    }

+

+                    input.ResetSizeCounter();

+                }

+            }

+        }

+

+        IEnumerator IEnumerable.GetEnumerator()

+        {

+            return GetEnumerator();

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/MessageStreamWriter.cs b/csharp/src/ProtocolBuffers/MessageStreamWriter.cs
new file mode 100644
index 0000000..3430e13
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/MessageStreamWriter.cs
@@ -0,0 +1,70 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.IO;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Writes multiple messages to the same stream. Each message is written

+    /// as if it were an element of a repeated field 1 in a larger protocol buffer.

+    /// This class takes no ownership of the stream it is given; it never closes the

+    /// stream.

+    /// </summary>

+    public sealed class MessageStreamWriter<T> where T : IMessage<T>

+    {

+        private readonly CodedOutputStream codedOutput;

+

+        /// <summary>

+        /// Creates an instance which writes to the given stream.

+        /// </summary>

+        /// <param name="output">Stream to write messages to.</param>

+        public MessageStreamWriter(Stream output)

+        {

+            codedOutput = CodedOutputStream.CreateInstance(output);

+        }

+

+        public void Write(T message)

+        {

+            codedOutput.WriteMessage(1, "item", message);

+        }

+

+        public void Flush()

+        {

+            codedOutput.Flush();

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/MessageUtil.cs b/csharp/src/ProtocolBuffers/MessageUtil.cs
new file mode 100644
index 0000000..d120d20
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/MessageUtil.cs
@@ -0,0 +1,109 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Reflection;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Utilities for arbitrary messages of an unknown type. This class does not use

+    /// generics precisely because it is designed for dynamically discovered types.

+    /// </summary>

+    public static class MessageUtil

+    {

+        /// <summary>

+        /// Returns the default message for the given type. If an exception is thrown

+        /// (directly from this code), the message will be suitable to be displayed to a user.

+        /// </summary>

+        /// <param name="type"></param>

+        /// <exception cref="ArgumentNullException">The type parameter is null.</exception>

+        /// <exception cref="ArgumentException">The type doesn't implement IMessage, or doesn't

+        /// have a static DefaultMessage property of the same type, or is generic or abstract.</exception>

+        /// <returns></returns>

+        public static IMessage GetDefaultMessage(Type type)

+        {

+            if (type == null)

+            {

+                throw new ArgumentNullException("type", "No type specified.");

+            }

+            if (type.IsAbstract || type.IsGenericTypeDefinition)

+            {

+                throw new ArgumentException("Unable to get a default message for an abstract or generic type (" +

+                                            type.FullName + ")");

+            }

+            if (!typeof(IMessage).IsAssignableFrom(type))

+            {

+                throw new ArgumentException("Unable to get a default message for non-message type (" + type.FullName +

+                                            ")");

+            }

+            PropertyInfo property = type.GetProperty("DefaultInstance",

+                                                     BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);

+            if (property == null)

+            {

+                throw new ArgumentException(type.FullName + " doesn't have a static DefaultInstance property");

+            }

+            if (property.PropertyType != type)

+            {

+                throw new ArgumentException(type.FullName + ".DefaultInstance property is of the wrong type");

+            }

+            return (IMessage) property.GetValue(null, null);

+        }

+

+        /// <summary>

+        /// Returns the default message for the type with the given name. This is just

+        /// a convenience wrapper around calling Type.GetType and then GetDefaultMessage.

+        /// If an exception is thrown, the message will be suitable to be displayed to a user.

+        /// </summary>

+        /// <param name="typeName"></param>

+        /// <exception cref="ArgumentNullException">The typeName parameter is null.</exception>

+        /// <exception cref="ArgumentException">The type doesn't implement IMessage, or doesn't

+        /// have a static DefaultMessage property of the same type, or can't be found.</exception>

+        public static IMessage GetDefaultMessage(string typeName)

+        {

+            if (typeName == null)

+            {

+                throw new ArgumentNullException("typeName", "No type name specified.");

+            }

+            Type type = Type.GetType(typeName);

+            if (type == null)

+            {

+                throw new ArgumentException("Unable to load type " + typeName);

+            }

+            return GetDefaultMessage(type);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/NameHelpers.cs b/csharp/src/ProtocolBuffers/NameHelpers.cs
new file mode 100644
index 0000000..80a1f9a
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/NameHelpers.cs
@@ -0,0 +1,140 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Text.RegularExpressions;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Helpers for converting names to pascal case etc.

+    /// </summary>

+    public class NameHelpers

+    {

+        /// <summary>

+        /// All characters that are not alpha-numeric

+        /// </summary>

+        private static readonly Regex NonAlphaNumericCharacters = new Regex(@"[^a-zA-Z0-9]+");

+

+        /// <summary>

+        /// Matches lower-case character that follow either an underscore, or a number

+        /// </summary>

+        private static readonly Regex UnderscoreOrNumberWithLowerCase = new Regex(@"[0-9_][a-z]");

+

+        /// <summary>

+        /// Removes non alpha numeric characters while capitalizing letters that follow

+        /// a number or underscore.  The first letter is always upper case.

+        /// </summary>

+        public static string UnderscoresToPascalCase(string input)

+        {

+            string name = UnderscoresToUpperCase(input);

+

+            // Pascal case always begins with upper-case letter

+            if (Char.IsLower(name[0]))

+            {

+                char[] chars = name.ToCharArray();

+                chars[0] = char.ToUpper(chars[0]);

+                return new string(chars);

+            }

+            return name;

+        }

+

+        /// <summary>

+        /// Removes non alpha numeric characters while capitalizing letters that follow

+        /// a number or underscore.  The first letter is always lower case.

+        /// </summary>

+        public static string UnderscoresToCamelCase(string input)

+        {

+            string name = UnderscoresToUpperCase(input);

+

+            // Camel case always begins with lower-case letter

+            if (Char.IsUpper(name[0]))

+            {

+                char[] chars = name.ToCharArray();

+                chars[0] = char.ToLower(chars[0]);

+                return new string(chars);

+            }

+            return name;

+        }

+

+        /// <summary>

+        /// Capitalizes any characters following an '_' or a number '0' - '9' and removes

+        /// all non alpha-numeric characters.  If the resulting string begins with a number

+        /// an '_' will be prefixed.  

+        /// </summary>

+        private static string UnderscoresToUpperCase(string input)

+        {

+            string name = UnderscoreOrNumberWithLowerCase.Replace(input, x => x.Value.ToUpper());

+            name = NonAlphaNumericCharacters.Replace(name, String.Empty);

+

+            if (name.Length == 0)

+            {

+                throw new ArgumentException(String.Format("The field name '{0}' is invalid.", input));

+            }

+

+            // Fields can not start with a number

+            if (Char.IsNumber(name[0]))

+            {

+                name = '_' + name;

+            }

+

+            return name;

+        }

+

+        internal static string StripProto(string text)

+        {

+            if (!StripSuffix(ref text, ".protodevel"))

+            {

+                StripSuffix(ref text, ".proto");

+            }

+            return text;

+        }

+

+        /// <summary>

+        /// Attempts to strip a suffix from a string, returning whether

+        /// or not the suffix was actually present.

+        /// </summary>

+        public static bool StripSuffix(ref string text, string suffix)

+        {

+            if (text.EndsWith(suffix))

+            {

+                text = text.Substring(0, text.Length - suffix.Length);

+                return true;

+            }

+            return false;

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/Properties/AssemblyInfo.cs b/csharp/src/ProtocolBuffers/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..cbab444
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/Properties/AssemblyInfo.cs
@@ -0,0 +1,72 @@
+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+using System;

+using System.Reflection;

+using System.Runtime.InteropServices;

+using System.Runtime.CompilerServices;

+

+// General Information about an assembly is controlled through the following 

+// set of attributes. Change these attribute values to modify the information

+// associated with an assembly.

+using System.Security;

+

+[assembly: AssemblyTitle("ProtocolBuffers")]

+[assembly: AssemblyDescription("")]

+[assembly: AssemblyConfiguration("")]

+[assembly: AssemblyCompany("")]

+[assembly: AssemblyProduct("ProtocolBuffers")]

+[assembly: AssemblyCopyright("Copyright ©  2008")]

+[assembly: AssemblyTrademark("")]

+[assembly: AssemblyCulture("")]

+

+// Version information for an assembly consists of the following four values:

+//

+//      Major Version

+//      Minor Version 

+//      Build Number

+//      Revision

+//

+// You can specify all the values or you can default the Build and Revision Numbers 

+// by using the '*' as shown below:

+// [assembly: AssemblyVersion("2.4.1.555")]

+

+[assembly: AssemblyVersion("2.4.1.555")]

+

+#if !NOFILEVERSION

+[assembly: AssemblyFileVersion("2.4.1.555")]

+#endif

+

+[assembly: CLSCompliant(true)]

+

+#if CLIENTPROFILE // ROK - not defined in SL, CF, or PL

+[assembly: AllowPartiallyTrustedCallers]

+#endif

diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffers.CF20.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffers.CF20.csproj
new file mode 100644
index 0000000..bfadf16
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffers.CF20.csproj
@@ -0,0 +1,166 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF20</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF20\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilder.cs" />

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessage.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Delegates.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="DescriptorProtos\CSharpOptions.cs" />

+    <Compile Include="DescriptorProtos\DescriptorProtoFile.cs" />

+    <Compile Include="DescriptorProtos\IDescriptorProto.cs" />

+    <Compile Include="DescriptorProtos\PartialClasses.cs" />

+    <Compile Include="Descriptors\DescriptorBase.cs" />

+    <Compile Include="Descriptors\DescriptorPool.cs" />

+    <Compile Include="Descriptors\DescriptorUtil.cs" />

+    <Compile Include="Descriptors\DescriptorValidationException.cs" />

+    <Compile Include="Descriptors\EnumDescriptor.cs" />

+    <Compile Include="Descriptors\EnumValueDescriptor.cs" />

+    <Compile Include="Descriptors\FieldDescriptor.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\FileDescriptor.cs" />

+    <Compile Include="Descriptors\IDescriptor.cs" />

+    <Compile Include="Descriptors\IndexedDescriptorBase.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="Descriptors\MessageDescriptor.cs" />

+    <Compile Include="Descriptors\MethodDescriptor.cs" />

+    <Compile Include="Descriptors\PackageDescriptor.cs" />

+    <Compile Include="Descriptors\ServiceDescriptor.cs" />

+    <Compile Include="DynamicMessage.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilder.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessage.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="ExtensionInfo.cs" />

+    <Compile Include="ExtensionRegistry.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="FieldAccess\ReflectionUtil.cs" />

+    <Compile Include="FieldAccess\SingleEnumAccessor.cs" />

+    <Compile Include="FieldAccess\SingleMessageAccessor.cs" />

+    <Compile Include="FieldAccess\SinglePrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedPrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedEnumAccessor.cs" />

+    <Compile Include="FieldAccess\IFieldAccessor.cs" />

+    <Compile Include="FieldAccess\FieldAccessorTable.cs" />

+    <Compile Include="FieldAccess\RepeatedMessageAccessor.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilder.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="GeneratedRepeatExtension.cs" />

+    <Compile Include="GeneratedSingleExtension.cs" />

+    <Compile Include="GeneratedMessage.cs" />

+    <Compile Include="IBuilder.cs" />

+    <Compile Include="GeneratedExtensionBase.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IMessage.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="IRpcChannel.cs" />

+    <Compile Include="IRpcController.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="IService.cs" />

+    <Compile Include="MessageStreamIterator.cs" />

+    <Compile Include="MessageStreamWriter.cs" />

+    <Compile Include="MessageUtil.cs" />

+    <Compile Include="NameHelpers.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="RpcUtil.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="TextFormat.cs" />

+    <Compile Include="TextGenerator.cs" />

+    <Compile Include="TextTokenizer.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="UnknownField.cs" />

+    <Compile Include="UnknownFieldSet.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffers.CF35.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffers.CF35.csproj
new file mode 100644
index 0000000..72e35c1
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffers.CF35.csproj
@@ -0,0 +1,167 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF35\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilder.cs" />

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessage.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Delegates.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="DescriptorProtos\CSharpOptions.cs" />

+    <Compile Include="DescriptorProtos\DescriptorProtoFile.cs" />

+    <Compile Include="DescriptorProtos\IDescriptorProto.cs" />

+    <Compile Include="DescriptorProtos\PartialClasses.cs" />

+    <Compile Include="Descriptors\DescriptorBase.cs" />

+    <Compile Include="Descriptors\DescriptorPool.cs" />

+    <Compile Include="Descriptors\DescriptorUtil.cs" />

+    <Compile Include="Descriptors\DescriptorValidationException.cs" />

+    <Compile Include="Descriptors\EnumDescriptor.cs" />

+    <Compile Include="Descriptors\EnumValueDescriptor.cs" />

+    <Compile Include="Descriptors\FieldDescriptor.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\FileDescriptor.cs" />

+    <Compile Include="Descriptors\IDescriptor.cs" />

+    <Compile Include="Descriptors\IndexedDescriptorBase.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="Descriptors\MessageDescriptor.cs" />

+    <Compile Include="Descriptors\MethodDescriptor.cs" />

+    <Compile Include="Descriptors\PackageDescriptor.cs" />

+    <Compile Include="Descriptors\ServiceDescriptor.cs" />

+    <Compile Include="DynamicMessage.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilder.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessage.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="ExtensionInfo.cs" />

+    <Compile Include="ExtensionRegistry.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="FieldAccess\ReflectionUtil.cs" />

+    <Compile Include="FieldAccess\SingleEnumAccessor.cs" />

+    <Compile Include="FieldAccess\SingleMessageAccessor.cs" />

+    <Compile Include="FieldAccess\SinglePrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedPrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedEnumAccessor.cs" />

+    <Compile Include="FieldAccess\IFieldAccessor.cs" />

+    <Compile Include="FieldAccess\FieldAccessorTable.cs" />

+    <Compile Include="FieldAccess\RepeatedMessageAccessor.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilder.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="GeneratedRepeatExtension.cs" />

+    <Compile Include="GeneratedSingleExtension.cs" />

+    <Compile Include="GeneratedMessage.cs" />

+    <Compile Include="IBuilder.cs" />

+    <Compile Include="GeneratedExtensionBase.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IMessage.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="IRpcChannel.cs" />

+    <Compile Include="IRpcController.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="IService.cs" />

+    <Compile Include="MessageStreamIterator.cs" />

+    <Compile Include="MessageStreamWriter.cs" />

+    <Compile Include="MessageUtil.cs" />

+    <Compile Include="NameHelpers.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="RpcUtil.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="TextFormat.cs" />

+    <Compile Include="TextGenerator.cs" />

+    <Compile Include="TextTokenizer.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="UnknownField.cs" />

+    <Compile Include="UnknownFieldSet.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffers.NET20.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffers.NET20.csproj
new file mode 100644
index 0000000..9bba728
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffers.NET20.csproj
@@ -0,0 +1,154 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET20</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET20\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilder.cs" />

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessage.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Delegates.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="DescriptorProtos\CSharpOptions.cs" />

+    <Compile Include="DescriptorProtos\DescriptorProtoFile.cs" />

+    <Compile Include="DescriptorProtos\IDescriptorProto.cs" />

+    <Compile Include="DescriptorProtos\PartialClasses.cs" />

+    <Compile Include="Descriptors\DescriptorBase.cs" />

+    <Compile Include="Descriptors\DescriptorPool.cs" />

+    <Compile Include="Descriptors\DescriptorUtil.cs" />

+    <Compile Include="Descriptors\DescriptorValidationException.cs" />

+    <Compile Include="Descriptors\EnumDescriptor.cs" />

+    <Compile Include="Descriptors\EnumValueDescriptor.cs" />

+    <Compile Include="Descriptors\FieldDescriptor.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\FileDescriptor.cs" />

+    <Compile Include="Descriptors\IDescriptor.cs" />

+    <Compile Include="Descriptors\IndexedDescriptorBase.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="Descriptors\MessageDescriptor.cs" />

+    <Compile Include="Descriptors\MethodDescriptor.cs" />

+    <Compile Include="Descriptors\PackageDescriptor.cs" />

+    <Compile Include="Descriptors\ServiceDescriptor.cs" />

+    <Compile Include="DynamicMessage.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilder.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessage.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="ExtensionInfo.cs" />

+    <Compile Include="ExtensionRegistry.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="FieldAccess\ReflectionUtil.cs" />

+    <Compile Include="FieldAccess\SingleEnumAccessor.cs" />

+    <Compile Include="FieldAccess\SingleMessageAccessor.cs" />

+    <Compile Include="FieldAccess\SinglePrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedPrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedEnumAccessor.cs" />

+    <Compile Include="FieldAccess\IFieldAccessor.cs" />

+    <Compile Include="FieldAccess\FieldAccessorTable.cs" />

+    <Compile Include="FieldAccess\RepeatedMessageAccessor.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilder.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="GeneratedRepeatExtension.cs" />

+    <Compile Include="GeneratedSingleExtension.cs" />

+    <Compile Include="GeneratedMessage.cs" />

+    <Compile Include="IBuilder.cs" />

+    <Compile Include="GeneratedExtensionBase.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IMessage.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="IRpcChannel.cs" />

+    <Compile Include="IRpcController.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="IService.cs" />

+    <Compile Include="MessageStreamIterator.cs" />

+    <Compile Include="MessageStreamWriter.cs" />

+    <Compile Include="MessageUtil.cs" />

+    <Compile Include="NameHelpers.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="RpcUtil.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="TextFormat.cs" />

+    <Compile Include="TextGenerator.cs" />

+    <Compile Include="TextTokenizer.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="UnknownField.cs" />

+    <Compile Include="UnknownFieldSet.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffers.NET35.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffers.NET35.csproj
new file mode 100644
index 0000000..6a79d92
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffers.NET35.csproj
@@ -0,0 +1,155 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilder.cs" />

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessage.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Delegates.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="DescriptorProtos\CSharpOptions.cs" />

+    <Compile Include="DescriptorProtos\DescriptorProtoFile.cs" />

+    <Compile Include="DescriptorProtos\IDescriptorProto.cs" />

+    <Compile Include="DescriptorProtos\PartialClasses.cs" />

+    <Compile Include="Descriptors\DescriptorBase.cs" />

+    <Compile Include="Descriptors\DescriptorPool.cs" />

+    <Compile Include="Descriptors\DescriptorUtil.cs" />

+    <Compile Include="Descriptors\DescriptorValidationException.cs" />

+    <Compile Include="Descriptors\EnumDescriptor.cs" />

+    <Compile Include="Descriptors\EnumValueDescriptor.cs" />

+    <Compile Include="Descriptors\FieldDescriptor.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\FileDescriptor.cs" />

+    <Compile Include="Descriptors\IDescriptor.cs" />

+    <Compile Include="Descriptors\IndexedDescriptorBase.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="Descriptors\MessageDescriptor.cs" />

+    <Compile Include="Descriptors\MethodDescriptor.cs" />

+    <Compile Include="Descriptors\PackageDescriptor.cs" />

+    <Compile Include="Descriptors\ServiceDescriptor.cs" />

+    <Compile Include="DynamicMessage.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilder.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessage.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="ExtensionInfo.cs" />

+    <Compile Include="ExtensionRegistry.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="FieldAccess\ReflectionUtil.cs" />

+    <Compile Include="FieldAccess\SingleEnumAccessor.cs" />

+    <Compile Include="FieldAccess\SingleMessageAccessor.cs" />

+    <Compile Include="FieldAccess\SinglePrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedPrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedEnumAccessor.cs" />

+    <Compile Include="FieldAccess\IFieldAccessor.cs" />

+    <Compile Include="FieldAccess\FieldAccessorTable.cs" />

+    <Compile Include="FieldAccess\RepeatedMessageAccessor.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilder.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="GeneratedRepeatExtension.cs" />

+    <Compile Include="GeneratedSingleExtension.cs" />

+    <Compile Include="GeneratedMessage.cs" />

+    <Compile Include="IBuilder.cs" />

+    <Compile Include="GeneratedExtensionBase.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IMessage.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="IRpcChannel.cs" />

+    <Compile Include="IRpcController.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="IService.cs" />

+    <Compile Include="MessageStreamIterator.cs" />

+    <Compile Include="MessageStreamWriter.cs" />

+    <Compile Include="MessageUtil.cs" />

+    <Compile Include="NameHelpers.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="RpcUtil.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="TextFormat.cs" />

+    <Compile Include="TextGenerator.cs" />

+    <Compile Include="TextTokenizer.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="UnknownField.cs" />

+    <Compile Include="UnknownFieldSet.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffers.NET40.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffers.NET40.csproj
new file mode 100644
index 0000000..7495778
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffers.NET40.csproj
@@ -0,0 +1,155 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET40</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET40\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilder.cs" />

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessage.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Delegates.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="DescriptorProtos\CSharpOptions.cs" />

+    <Compile Include="DescriptorProtos\DescriptorProtoFile.cs" />

+    <Compile Include="DescriptorProtos\IDescriptorProto.cs" />

+    <Compile Include="DescriptorProtos\PartialClasses.cs" />

+    <Compile Include="Descriptors\DescriptorBase.cs" />

+    <Compile Include="Descriptors\DescriptorPool.cs" />

+    <Compile Include="Descriptors\DescriptorUtil.cs" />

+    <Compile Include="Descriptors\DescriptorValidationException.cs" />

+    <Compile Include="Descriptors\EnumDescriptor.cs" />

+    <Compile Include="Descriptors\EnumValueDescriptor.cs" />

+    <Compile Include="Descriptors\FieldDescriptor.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\FileDescriptor.cs" />

+    <Compile Include="Descriptors\IDescriptor.cs" />

+    <Compile Include="Descriptors\IndexedDescriptorBase.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="Descriptors\MessageDescriptor.cs" />

+    <Compile Include="Descriptors\MethodDescriptor.cs" />

+    <Compile Include="Descriptors\PackageDescriptor.cs" />

+    <Compile Include="Descriptors\ServiceDescriptor.cs" />

+    <Compile Include="DynamicMessage.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilder.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessage.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="ExtensionInfo.cs" />

+    <Compile Include="ExtensionRegistry.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="FieldAccess\ReflectionUtil.cs" />

+    <Compile Include="FieldAccess\SingleEnumAccessor.cs" />

+    <Compile Include="FieldAccess\SingleMessageAccessor.cs" />

+    <Compile Include="FieldAccess\SinglePrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedPrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedEnumAccessor.cs" />

+    <Compile Include="FieldAccess\IFieldAccessor.cs" />

+    <Compile Include="FieldAccess\FieldAccessorTable.cs" />

+    <Compile Include="FieldAccess\RepeatedMessageAccessor.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilder.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="GeneratedRepeatExtension.cs" />

+    <Compile Include="GeneratedSingleExtension.cs" />

+    <Compile Include="GeneratedMessage.cs" />

+    <Compile Include="IBuilder.cs" />

+    <Compile Include="GeneratedExtensionBase.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IMessage.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="IRpcChannel.cs" />

+    <Compile Include="IRpcController.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="IService.cs" />

+    <Compile Include="MessageStreamIterator.cs" />

+    <Compile Include="MessageStreamWriter.cs" />

+    <Compile Include="MessageUtil.cs" />

+    <Compile Include="NameHelpers.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="RpcUtil.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="TextFormat.cs" />

+    <Compile Include="TextGenerator.cs" />

+    <Compile Include="TextTokenizer.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="UnknownField.cs" />

+    <Compile Include="UnknownFieldSet.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffers.PL40.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffers.PL40.csproj
new file mode 100644
index 0000000..00ffddb
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffers.PL40.csproj
@@ -0,0 +1,158 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>PORTABLE_LIBRARY</EnvironmentFlavor>

+    <EnvironmentTemplate>PL40</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>

+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <TargetFrameworkProfile>Profile1</TargetFrameworkProfile>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\PL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\PL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilder.cs" />

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessage.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Delegates.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="DescriptorProtos\CSharpOptions.cs" />

+    <Compile Include="DescriptorProtos\DescriptorProtoFile.cs" />

+    <Compile Include="DescriptorProtos\IDescriptorProto.cs" />

+    <Compile Include="DescriptorProtos\PartialClasses.cs" />

+    <Compile Include="Descriptors\DescriptorBase.cs" />

+    <Compile Include="Descriptors\DescriptorPool.cs" />

+    <Compile Include="Descriptors\DescriptorUtil.cs" />

+    <Compile Include="Descriptors\DescriptorValidationException.cs" />

+    <Compile Include="Descriptors\EnumDescriptor.cs" />

+    <Compile Include="Descriptors\EnumValueDescriptor.cs" />

+    <Compile Include="Descriptors\FieldDescriptor.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\FileDescriptor.cs" />

+    <Compile Include="Descriptors\IDescriptor.cs" />

+    <Compile Include="Descriptors\IndexedDescriptorBase.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="Descriptors\MessageDescriptor.cs" />

+    <Compile Include="Descriptors\MethodDescriptor.cs" />

+    <Compile Include="Descriptors\PackageDescriptor.cs" />

+    <Compile Include="Descriptors\ServiceDescriptor.cs" />

+    <Compile Include="DynamicMessage.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilder.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessage.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="ExtensionInfo.cs" />

+    <Compile Include="ExtensionRegistry.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="FieldAccess\ReflectionUtil.cs" />

+    <Compile Include="FieldAccess\SingleEnumAccessor.cs" />

+    <Compile Include="FieldAccess\SingleMessageAccessor.cs" />

+    <Compile Include="FieldAccess\SinglePrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedPrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedEnumAccessor.cs" />

+    <Compile Include="FieldAccess\IFieldAccessor.cs" />

+    <Compile Include="FieldAccess\FieldAccessorTable.cs" />

+    <Compile Include="FieldAccess\RepeatedMessageAccessor.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilder.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="GeneratedRepeatExtension.cs" />

+    <Compile Include="GeneratedSingleExtension.cs" />

+    <Compile Include="GeneratedMessage.cs" />

+    <Compile Include="IBuilder.cs" />

+    <Compile Include="GeneratedExtensionBase.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IMessage.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="IRpcChannel.cs" />

+    <Compile Include="IRpcController.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="IService.cs" />

+    <Compile Include="MessageStreamIterator.cs" />

+    <Compile Include="MessageStreamWriter.cs" />

+    <Compile Include="MessageUtil.cs" />

+    <Compile Include="NameHelpers.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="RpcUtil.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="TextFormat.cs" />

+    <Compile Include="TextGenerator.cs" />

+    <Compile Include="TextTokenizer.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="UnknownField.cs" />

+    <Compile Include="UnknownFieldSet.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffers.SL20.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffers.SL20.csproj
new file mode 100644
index 0000000..10fc828
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffers.SL20.csproj
@@ -0,0 +1,169 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL20</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL20\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilder.cs" />

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessage.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Delegates.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="DescriptorProtos\CSharpOptions.cs" />

+    <Compile Include="DescriptorProtos\DescriptorProtoFile.cs" />

+    <Compile Include="DescriptorProtos\IDescriptorProto.cs" />

+    <Compile Include="DescriptorProtos\PartialClasses.cs" />

+    <Compile Include="Descriptors\DescriptorBase.cs" />

+    <Compile Include="Descriptors\DescriptorPool.cs" />

+    <Compile Include="Descriptors\DescriptorUtil.cs" />

+    <Compile Include="Descriptors\DescriptorValidationException.cs" />

+    <Compile Include="Descriptors\EnumDescriptor.cs" />

+    <Compile Include="Descriptors\EnumValueDescriptor.cs" />

+    <Compile Include="Descriptors\FieldDescriptor.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\FileDescriptor.cs" />

+    <Compile Include="Descriptors\IDescriptor.cs" />

+    <Compile Include="Descriptors\IndexedDescriptorBase.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="Descriptors\MessageDescriptor.cs" />

+    <Compile Include="Descriptors\MethodDescriptor.cs" />

+    <Compile Include="Descriptors\PackageDescriptor.cs" />

+    <Compile Include="Descriptors\ServiceDescriptor.cs" />

+    <Compile Include="DynamicMessage.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilder.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessage.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="ExtensionInfo.cs" />

+    <Compile Include="ExtensionRegistry.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="FieldAccess\ReflectionUtil.cs" />

+    <Compile Include="FieldAccess\SingleEnumAccessor.cs" />

+    <Compile Include="FieldAccess\SingleMessageAccessor.cs" />

+    <Compile Include="FieldAccess\SinglePrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedPrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedEnumAccessor.cs" />

+    <Compile Include="FieldAccess\IFieldAccessor.cs" />

+    <Compile Include="FieldAccess\FieldAccessorTable.cs" />

+    <Compile Include="FieldAccess\RepeatedMessageAccessor.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilder.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="GeneratedRepeatExtension.cs" />

+    <Compile Include="GeneratedSingleExtension.cs" />

+    <Compile Include="GeneratedMessage.cs" />

+    <Compile Include="IBuilder.cs" />

+    <Compile Include="GeneratedExtensionBase.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IMessage.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="IRpcChannel.cs" />

+    <Compile Include="IRpcController.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="IService.cs" />

+    <Compile Include="MessageStreamIterator.cs" />

+    <Compile Include="MessageStreamWriter.cs" />

+    <Compile Include="MessageUtil.cs" />

+    <Compile Include="NameHelpers.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="RpcUtil.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="TextFormat.cs" />

+    <Compile Include="TextGenerator.cs" />

+    <Compile Include="TextTokenizer.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="UnknownField.cs" />

+    <Compile Include="UnknownFieldSet.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffers.SL30.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffers.SL30.csproj
new file mode 100644
index 0000000..4fe571c
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffers.SL30.csproj
@@ -0,0 +1,170 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL30</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL30\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL30\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilder.cs" />

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessage.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Delegates.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="DescriptorProtos\CSharpOptions.cs" />

+    <Compile Include="DescriptorProtos\DescriptorProtoFile.cs" />

+    <Compile Include="DescriptorProtos\IDescriptorProto.cs" />

+    <Compile Include="DescriptorProtos\PartialClasses.cs" />

+    <Compile Include="Descriptors\DescriptorBase.cs" />

+    <Compile Include="Descriptors\DescriptorPool.cs" />

+    <Compile Include="Descriptors\DescriptorUtil.cs" />

+    <Compile Include="Descriptors\DescriptorValidationException.cs" />

+    <Compile Include="Descriptors\EnumDescriptor.cs" />

+    <Compile Include="Descriptors\EnumValueDescriptor.cs" />

+    <Compile Include="Descriptors\FieldDescriptor.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\FileDescriptor.cs" />

+    <Compile Include="Descriptors\IDescriptor.cs" />

+    <Compile Include="Descriptors\IndexedDescriptorBase.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="Descriptors\MessageDescriptor.cs" />

+    <Compile Include="Descriptors\MethodDescriptor.cs" />

+    <Compile Include="Descriptors\PackageDescriptor.cs" />

+    <Compile Include="Descriptors\ServiceDescriptor.cs" />

+    <Compile Include="DynamicMessage.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilder.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessage.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="ExtensionInfo.cs" />

+    <Compile Include="ExtensionRegistry.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="FieldAccess\ReflectionUtil.cs" />

+    <Compile Include="FieldAccess\SingleEnumAccessor.cs" />

+    <Compile Include="FieldAccess\SingleMessageAccessor.cs" />

+    <Compile Include="FieldAccess\SinglePrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedPrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedEnumAccessor.cs" />

+    <Compile Include="FieldAccess\IFieldAccessor.cs" />

+    <Compile Include="FieldAccess\FieldAccessorTable.cs" />

+    <Compile Include="FieldAccess\RepeatedMessageAccessor.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilder.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="GeneratedRepeatExtension.cs" />

+    <Compile Include="GeneratedSingleExtension.cs" />

+    <Compile Include="GeneratedMessage.cs" />

+    <Compile Include="IBuilder.cs" />

+    <Compile Include="GeneratedExtensionBase.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IMessage.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="IRpcChannel.cs" />

+    <Compile Include="IRpcController.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="IService.cs" />

+    <Compile Include="MessageStreamIterator.cs" />

+    <Compile Include="MessageStreamWriter.cs" />

+    <Compile Include="MessageUtil.cs" />

+    <Compile Include="NameHelpers.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="RpcUtil.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="TextFormat.cs" />

+    <Compile Include="TextGenerator.cs" />

+    <Compile Include="TextTokenizer.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="UnknownField.cs" />

+    <Compile Include="UnknownFieldSet.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffers.SL40.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffers.SL40.csproj
new file mode 100644
index 0000000..3664e47
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffers.SL40.csproj
@@ -0,0 +1,171 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL40</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <SilverlightVersion>v4.0</SilverlightVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilder.cs" />

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessage.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Delegates.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="DescriptorProtos\CSharpOptions.cs" />

+    <Compile Include="DescriptorProtos\DescriptorProtoFile.cs" />

+    <Compile Include="DescriptorProtos\IDescriptorProto.cs" />

+    <Compile Include="DescriptorProtos\PartialClasses.cs" />

+    <Compile Include="Descriptors\DescriptorBase.cs" />

+    <Compile Include="Descriptors\DescriptorPool.cs" />

+    <Compile Include="Descriptors\DescriptorUtil.cs" />

+    <Compile Include="Descriptors\DescriptorValidationException.cs" />

+    <Compile Include="Descriptors\EnumDescriptor.cs" />

+    <Compile Include="Descriptors\EnumValueDescriptor.cs" />

+    <Compile Include="Descriptors\FieldDescriptor.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\FileDescriptor.cs" />

+    <Compile Include="Descriptors\IDescriptor.cs" />

+    <Compile Include="Descriptors\IndexedDescriptorBase.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="Descriptors\MessageDescriptor.cs" />

+    <Compile Include="Descriptors\MethodDescriptor.cs" />

+    <Compile Include="Descriptors\PackageDescriptor.cs" />

+    <Compile Include="Descriptors\ServiceDescriptor.cs" />

+    <Compile Include="DynamicMessage.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilder.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessage.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="ExtensionInfo.cs" />

+    <Compile Include="ExtensionRegistry.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="FieldAccess\ReflectionUtil.cs" />

+    <Compile Include="FieldAccess\SingleEnumAccessor.cs" />

+    <Compile Include="FieldAccess\SingleMessageAccessor.cs" />

+    <Compile Include="FieldAccess\SinglePrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedPrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedEnumAccessor.cs" />

+    <Compile Include="FieldAccess\IFieldAccessor.cs" />

+    <Compile Include="FieldAccess\FieldAccessorTable.cs" />

+    <Compile Include="FieldAccess\RepeatedMessageAccessor.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilder.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="GeneratedRepeatExtension.cs" />

+    <Compile Include="GeneratedSingleExtension.cs" />

+    <Compile Include="GeneratedMessage.cs" />

+    <Compile Include="IBuilder.cs" />

+    <Compile Include="GeneratedExtensionBase.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IMessage.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="IRpcChannel.cs" />

+    <Compile Include="IRpcController.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="IService.cs" />

+    <Compile Include="MessageStreamIterator.cs" />

+    <Compile Include="MessageStreamWriter.cs" />

+    <Compile Include="MessageUtil.cs" />

+    <Compile Include="NameHelpers.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="RpcUtil.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="TextFormat.cs" />

+    <Compile Include="TextGenerator.cs" />

+    <Compile Include="TextTokenizer.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="UnknownField.cs" />

+    <Compile Include="UnknownFieldSet.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffers.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffers.csproj
new file mode 100644
index 0000000..fe1f04a
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffers.csproj
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffers</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilder.cs" />

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessage.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Delegates.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="DescriptorProtos\CSharpOptions.cs" />

+    <Compile Include="DescriptorProtos\DescriptorProtoFile.cs" />

+    <Compile Include="DescriptorProtos\IDescriptorProto.cs" />

+    <Compile Include="DescriptorProtos\PartialClasses.cs" />

+    <Compile Include="Descriptors\DescriptorBase.cs" />

+    <Compile Include="Descriptors\DescriptorPool.cs" />

+    <Compile Include="Descriptors\DescriptorUtil.cs" />

+    <Compile Include="Descriptors\DescriptorValidationException.cs" />

+    <Compile Include="Descriptors\EnumDescriptor.cs" />

+    <Compile Include="Descriptors\EnumValueDescriptor.cs" />

+    <Compile Include="Descriptors\FieldDescriptor.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\FileDescriptor.cs" />

+    <Compile Include="Descriptors\IDescriptor.cs" />

+    <Compile Include="Descriptors\IndexedDescriptorBase.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="Descriptors\MessageDescriptor.cs" />

+    <Compile Include="Descriptors\MethodDescriptor.cs" />

+    <Compile Include="Descriptors\PackageDescriptor.cs" />

+    <Compile Include="Descriptors\ServiceDescriptor.cs" />

+    <Compile Include="DynamicMessage.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilder.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessage.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="ExtensionInfo.cs" />

+    <Compile Include="ExtensionRegistry.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="FieldAccess\ReflectionUtil.cs" />

+    <Compile Include="FieldAccess\SingleEnumAccessor.cs" />

+    <Compile Include="FieldAccess\SingleMessageAccessor.cs" />

+    <Compile Include="FieldAccess\SinglePrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedPrimitiveAccessor.cs" />

+    <Compile Include="FieldAccess\RepeatedEnumAccessor.cs" />

+    <Compile Include="FieldAccess\IFieldAccessor.cs" />

+    <Compile Include="FieldAccess\FieldAccessorTable.cs" />

+    <Compile Include="FieldAccess\RepeatedMessageAccessor.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilder.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="GeneratedRepeatExtension.cs" />

+    <Compile Include="GeneratedSingleExtension.cs" />

+    <Compile Include="GeneratedMessage.cs" />

+    <Compile Include="IBuilder.cs" />

+    <Compile Include="GeneratedExtensionBase.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IMessage.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="IRpcChannel.cs" />

+    <Compile Include="IRpcController.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="IService.cs" />

+    <Compile Include="MessageStreamIterator.cs" />

+    <Compile Include="MessageStreamWriter.cs" />

+    <Compile Include="MessageUtil.cs" />

+    <Compile Include="NameHelpers.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="RpcUtil.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="TextFormat.cs" />

+    <Compile Include="TextGenerator.cs" />

+    <Compile Include="TextTokenizer.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="UnknownField.cs" />

+    <Compile Include="UnknownFieldSet.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffersLite.CF20.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.CF20.csproj
new file mode 100644
index 0000000..6cf373f
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.CF20.csproj
@@ -0,0 +1,111 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF20</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF20\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffersLite.CF35.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.CF35.csproj
new file mode 100644
index 0000000..dad0071
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.CF35.csproj
@@ -0,0 +1,112 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF35\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffersLite.NET20.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.NET20.csproj
new file mode 100644
index 0000000..d516776
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.NET20.csproj
@@ -0,0 +1,99 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET20</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET20\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffersLite.NET35.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.NET35.csproj
new file mode 100644
index 0000000..d811fb5
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.NET35.csproj
@@ -0,0 +1,100 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffersLite.NET40.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.NET40.csproj
new file mode 100644
index 0000000..ad3abc6
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.NET40.csproj
@@ -0,0 +1,100 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET40</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET40\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffersLite.PL40.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.PL40.csproj
new file mode 100644
index 0000000..67f9093
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.PL40.csproj
@@ -0,0 +1,103 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>PORTABLE_LIBRARY</EnvironmentFlavor>

+    <EnvironmentTemplate>PL40</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>

+    <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <TargetFrameworkProfile>Profile1</TargetFrameworkProfile>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\PL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\PL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffersLite.SL20.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.SL20.csproj
new file mode 100644
index 0000000..1bbad18
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.SL20.csproj
@@ -0,0 +1,114 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL20</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL20\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffersLite.SL30.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.SL30.csproj
new file mode 100644
index 0000000..ab0e809
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.SL30.csproj
@@ -0,0 +1,115 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL30</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL30\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL30\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffersLite.SL40.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.SL40.csproj
new file mode 100644
index 0000000..42e5be1
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.SL40.csproj
@@ -0,0 +1,116 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL40</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>false</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <SilverlightVersion>v4.0</SilverlightVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ProtocolBuffersLite.csproj b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.csproj
new file mode 100644
index 0000000..4037c2b
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ProtocolBuffersLite.csproj
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>DEBUG;TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DocumentationFile>$(OutputPath)\$(AssemblyName).xml</DocumentationFile>

+    <NoWarn>1591, 1570, 1571, 1572, 1573, 1574</NoWarn>

+    <DefineConstants>TRACE;LITE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="AbstractBuilderLite.cs" />

+    <Compile Include="AbstractMessageLite.cs" />

+    <Compile Include="ByteArray.cs" />

+    <Compile Include="CodedOutputStream.ComputeSize.cs" />

+    <Compile Include="Collections\Dictionaries.cs" />

+    <Compile Include="Collections\Enumerables.cs" />

+    <Compile Include="Collections\IPopsicleList.cs" />

+    <Compile Include="Collections\Lists.cs" />

+    <Compile Include="Collections\PopsicleList.cs" />

+    <Compile Include="Collections\ReadOnlyDictionary.cs" />

+    <Compile Include="CustomSerialization.cs" />

+    <Compile Include="Descriptors\FieldMappingAttribute.cs" />

+    <Compile Include="Descriptors\FieldType.cs" />

+    <Compile Include="Descriptors\MappedType.cs" />

+    <Compile Include="EnumLite.cs" />

+    <Compile Include="ExtendableBuilderLite.cs" />

+    <Compile Include="ExtendableMessageLite.cs" />

+    <Compile Include="FieldSet.cs" />

+    <Compile Include="FrameworkPortability.cs" />

+    <Compile Include="GeneratedBuilderLite.cs" />

+    <Compile Include="GeneratedExtensionLite.cs" />

+    <Compile Include="GeneratedMessageLite.cs" />

+    <Compile Include="ICodedInputStream.cs" />

+    <Compile Include="ICodedOutputStream.cs" />

+    <Compile Include="IRpcDispatch.cs" />

+    <Compile Include="Properties\AssemblyInfo.cs" />

+    <Compile Include="ByteString.cs" />

+    <Compile Include="CodedInputStream.cs" />

+    <Compile Include="CodedOutputStream.cs" />

+    <Compile Include="ExtensionRegistryLite.cs" />

+    <Compile Include="IBuilderLite.cs" />

+    <Compile Include="IMessageLite.cs" />

+    <Compile Include="InvalidProtocolBufferException.cs" />

+    <Compile Include="SortedList.cs" />

+    <Compile Include="ThrowHelper.cs" />

+    <Compile Include="UninitializedMessageException.cs" />

+    <Compile Include="WireFormat.cs" />

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/RpcUtil.cs b/csharp/src/ProtocolBuffers/RpcUtil.cs
new file mode 100644
index 0000000..4659d86
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/RpcUtil.cs
@@ -0,0 +1,79 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Grab-bag of utility functions useful when dealing with RPCs.

+    /// </summary>

+    public static class RpcUtil

+    {

+        /// <summary>

+        /// Converts an Action[IMessage] to an Action[T].

+        /// </summary>

+        public static Action<T> SpecializeCallback<T>(Action<IMessage> action)

+            where T : IMessage<T>

+        {

+            return message => action(message);

+        }

+

+        /// <summary>

+        /// Converts an Action[T] to an Action[IMessage].

+        /// The generalized action will accept any message object which has

+        /// the same descriptor, and will convert it to the correct class

+        /// before calling the original action. However, if the generalized

+        /// callback is given a message with a different descriptor, an

+        /// exception will be thrown.

+        /// </summary>

+        public static Action<IMessage> GeneralizeCallback<TMessage, TBuilder>(Action<TMessage> action,

+                                                                              TMessage defaultInstance)

+            where TMessage : class, IMessage<TMessage, TBuilder>

+            where TBuilder : IBuilder<TMessage, TBuilder>

+        {

+            return message =>

+                       {

+                           TMessage castMessage = message as TMessage;

+                           if (castMessage == null)

+                           {

+                               castMessage = defaultInstance.CreateBuilderForType().MergeFrom(message).Build();

+                           }

+                           action(castMessage);

+                       };

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/SortedList.cs b/csharp/src/ProtocolBuffers/SortedList.cs
new file mode 100644
index 0000000..2dd7da9
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/SortedList.cs
@@ -0,0 +1,167 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+#if NOSORTEDLIST

+using System.Collections;

+using System.Collections.Generic;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Dictionary implementation which always yields keys in sorted order.

+    /// This is not particularly efficient: it wraps a normal dictionary

+    /// for most operations, but sorts by key when either iterating or

+    /// fetching the Keys/Values properties.

+    /// </summary>

+    internal sealed class SortedList<TKey, TValue> : IDictionary<TKey, TValue>

+    {

+        private readonly IDictionary<TKey, TValue> wrapped = new Dictionary<TKey, TValue>();

+

+        public SortedList()

+        {

+        }

+

+        public SortedList(IDictionary<TKey, TValue> dictionary)

+        {

+            foreach (KeyValuePair<TKey, TValue> entry in dictionary)

+            {

+                Add(entry.Key, entry.Value);

+            }

+        }

+

+        public void Add(TKey key, TValue value)

+        {

+            wrapped.Add(key, value);

+        }

+

+        public bool ContainsKey(TKey key)

+        {

+            return wrapped.ContainsKey(key);

+        }

+

+        public ICollection<TKey> Keys

+        {

+            get

+            {

+                List<TKey> keys = new List<TKey>(wrapped.Count);

+                foreach (var pair in this)

+                {

+                    keys.Add(pair.Key);

+                }

+                return keys;

+            }

+        }

+

+        public bool Remove(TKey key)

+        {

+            return wrapped.Remove(key);

+        }

+

+        public bool TryGetValue(TKey key, out TValue value)

+        {

+            return wrapped.TryGetValue(key, out value);

+        }

+

+        public ICollection<TValue> Values

+        {

+            get

+            {

+                List<TValue> values = new List<TValue>(wrapped.Count);

+                foreach (var pair in this)

+                {

+                    values.Add(pair.Value);

+                }

+                return values;

+            }

+        }

+

+        public TValue this[TKey key]

+        {

+            get { return wrapped[key]; }

+            set { wrapped[key] = value; }

+        }

+

+        public void Add(KeyValuePair<TKey, TValue> item)

+        {

+            wrapped.Add(item);

+        }

+

+        public void Clear()

+        {

+            wrapped.Clear();

+        }

+

+        public bool Contains(KeyValuePair<TKey, TValue> item)

+        {

+            return wrapped.Contains(item);

+        }

+

+        public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)

+        {

+            wrapped.CopyTo(array, arrayIndex);

+        }

+

+        public int Count

+        {

+            get { return wrapped.Count; }

+        }

+

+        public bool IsReadOnly

+        {

+            get { return wrapped.IsReadOnly; }

+        }

+

+        public bool Remove(KeyValuePair<TKey, TValue> item)

+        {

+            return wrapped.Remove(item);

+        }

+

+        public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()

+        {

+            IComparer<TKey> comparer = Comparer<TKey>.Default;

+            var list = new List<KeyValuePair<TKey, TValue>>(wrapped);

+            list.Sort((x, y) => comparer.Compare(x.Key, y.Key));

+            return list.GetEnumerator();

+        }

+

+        IEnumerator IEnumerable.GetEnumerator()

+        {

+            return GetEnumerator();

+        }

+    }

+}

+

+#endif
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/TextFormat.cs b/csharp/src/ProtocolBuffers/TextFormat.cs
new file mode 100644
index 0000000..747dce4
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/TextFormat.cs
@@ -0,0 +1,899 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using System.Globalization;

+using System.IO;

+using System.Text;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Provides ASCII text formatting support for messages.

+    /// TODO(jonskeet): Support for alternative line endings.

+    /// (Easy to print, via TextGenerator. Not sure about parsing.)

+    /// </summary>

+    public static class TextFormat

+    {

+        /// <summary>

+        /// Outputs a textual representation of the Protocol Message supplied into

+        /// the parameter output.

+        /// </summary>

+        public static void Print(IMessage message, TextWriter output)

+        {

+            TextGenerator generator = new TextGenerator(output, "\n");

+            Print(message, generator);

+        }

+

+        /// <summary>

+        /// Outputs a textual representation of the Protocol Message builder supplied into

+        /// the parameter output.

+        /// </summary>

+        public static void Print(IBuilder builder, TextWriter output)

+        {

+            TextGenerator generator = new TextGenerator(output, "\n");

+            Print(builder, generator);

+        }

+

+        /// <summary>

+        /// Outputs a textual representation of <paramref name="fields" /> to <paramref name="output"/>.

+        /// </summary>

+        public static void Print(UnknownFieldSet fields, TextWriter output)

+        {

+            TextGenerator generator = new TextGenerator(output, "\n");

+            PrintUnknownFields(fields, generator);

+        }

+

+        public static string PrintToString(IMessage message)

+        {

+            StringWriter text = new StringWriter();

+            Print(message, text);

+            return text.ToString();

+        }

+

+        public static string PrintToString(IBuilder builder)

+        {

+            StringWriter text = new StringWriter();

+            Print(builder, text);

+            return text.ToString();

+        }

+

+        public static string PrintToString(UnknownFieldSet fields)

+        {

+            StringWriter text = new StringWriter();

+            Print(fields, text);

+            return text.ToString();

+        }

+

+        private static void Print(IMessage message, TextGenerator generator)

+        {

+            foreach (KeyValuePair<FieldDescriptor, object> entry in message.AllFields)

+            {

+                PrintField(entry.Key, entry.Value, generator);

+            }

+            PrintUnknownFields(message.UnknownFields, generator);

+        }

+

+        private static void Print(IBuilder message, TextGenerator generator)

+        {

+            foreach (KeyValuePair<FieldDescriptor, object> entry in message.AllFields)

+            {

+                PrintField(entry.Key, entry.Value, generator);

+            }

+            PrintUnknownFields(message.UnknownFields, generator);

+        }

+

+        internal static void PrintField(FieldDescriptor field, object value, TextGenerator generator)

+        {

+            if (field.IsRepeated)

+            {

+                // Repeated field.  Print each element.

+                foreach (object element in (IEnumerable) value)

+                {

+                    PrintSingleField(field, element, generator);

+                }

+            }

+            else

+            {

+                PrintSingleField(field, value, generator);

+            }

+        }

+

+        private static void PrintSingleField(FieldDescriptor field, Object value, TextGenerator generator)

+        {

+            if (field.IsExtension)

+            {

+                generator.Print("[");

+                // We special-case MessageSet elements for compatibility with proto1.

+                if (field.ContainingType.Options.MessageSetWireFormat

+                    && field.FieldType == FieldType.Message

+                    && field.IsOptional

+                    // object equality (TODO(jonskeet): Work out what this comment means!)

+                    && field.ExtensionScope == field.MessageType)

+                {

+                    generator.Print(field.MessageType.FullName);

+                }

+                else

+                {

+                    generator.Print(field.FullName);

+                }

+                generator.Print("]");

+            }

+            else

+            {

+                if (field.FieldType == FieldType.Group)

+                {

+                    // Groups must be serialized with their original capitalization.

+                    generator.Print(field.MessageType.Name);

+                }

+                else

+                {

+                    generator.Print(field.Name);

+                }

+            }

+

+            if (field.MappedType == MappedType.Message)

+            {

+                generator.Print(" {\n");

+                generator.Indent();

+            }

+            else

+            {

+                generator.Print(": ");

+            }

+

+            PrintFieldValue(field, value, generator);

+

+            if (field.MappedType == MappedType.Message)

+            {

+                generator.Outdent();

+                generator.Print("}");

+            }

+            generator.Print("\n");

+        }

+

+        private static void PrintFieldValue(FieldDescriptor field, object value, TextGenerator generator)

+        {

+            switch (field.FieldType)

+            {

+                    // The Float and Double types must specify the "r" format to preserve their precision, otherwise,

+                    // the double to/from string will trim the precision to 6 places.  As with other numeric formats

+                    // below, always use the invariant culture so it's predictable.

+                case FieldType.Float:

+                    generator.Print(((float)value).ToString("r", FrameworkPortability.InvariantCulture));

+                    break;

+                case FieldType.Double:

+                    generator.Print(((double)value).ToString("r", FrameworkPortability.InvariantCulture));

+                    break;

+

+                case FieldType.Int32:

+                case FieldType.Int64:

+                case FieldType.SInt32:

+                case FieldType.SInt64:

+                case FieldType.SFixed32:

+                case FieldType.SFixed64:

+                case FieldType.UInt32:

+                case FieldType.UInt64:

+                case FieldType.Fixed32:

+                case FieldType.Fixed64:

+                    // The simple Object.ToString converts using the current culture.

+                    // We want to always use the invariant culture so it's predictable.

+                    generator.Print(((IConvertible)value).ToString(FrameworkPortability.InvariantCulture));

+                    break;

+                case FieldType.Bool:

+                    // Explicitly use the Java true/false

+                    generator.Print((bool) value ? "true" : "false");

+                    break;

+

+                case FieldType.String:

+                    generator.Print("\"");

+                    generator.Print(EscapeText((string) value));

+                    generator.Print("\"");

+                    break;

+

+                case FieldType.Bytes:

+                    {

+                        generator.Print("\"");

+                        generator.Print(EscapeBytes((ByteString) value));

+                        generator.Print("\"");

+                        break;

+                    }

+

+                case FieldType.Enum:

+                    {

+                        if (value is IEnumLite && !(value is EnumValueDescriptor))

+                        {

+                            throw new NotSupportedException("Lite enumerations are not supported.");

+                        }

+                        generator.Print(((EnumValueDescriptor) value).Name);

+                        break;

+                    }

+

+                case FieldType.Message:

+                case FieldType.Group:

+                    if (value is IMessageLite && !(value is IMessage))

+                    {

+                        throw new NotSupportedException("Lite messages are not supported.");

+                    }

+                    Print((IMessage) value, generator);

+                    break;

+            }

+        }

+

+        private static void PrintUnknownFields(UnknownFieldSet unknownFields, TextGenerator generator)

+        {

+            foreach (KeyValuePair<int, UnknownField> entry in unknownFields.FieldDictionary)

+            {

+                String prefix = entry.Key.ToString() + ": ";

+                UnknownField field = entry.Value;

+

+                foreach (ulong value in field.VarintList)

+                {

+                    generator.Print(prefix);

+                    generator.Print(value.ToString());

+                    generator.Print("\n");

+                }

+                foreach (uint value in field.Fixed32List)

+                {

+                    generator.Print(prefix);

+                    generator.Print(string.Format("0x{0:x8}", value));

+                    generator.Print("\n");

+                }

+                foreach (ulong value in field.Fixed64List)

+                {

+                    generator.Print(prefix);

+                    generator.Print(string.Format("0x{0:x16}", value));

+                    generator.Print("\n");

+                }

+                foreach (ByteString value in field.LengthDelimitedList)

+                {

+                    generator.Print(entry.Key.ToString());

+                    generator.Print(": \"");

+                    generator.Print(EscapeBytes(value));

+                    generator.Print("\"\n");

+                }

+                foreach (UnknownFieldSet value in field.GroupList)

+                {

+                    generator.Print(entry.Key.ToString());

+                    generator.Print(" {\n");

+                    generator.Indent();

+                    PrintUnknownFields(value, generator);

+                    generator.Outdent();

+                    generator.Print("}\n");

+                }

+            }

+        }

+

+        [CLSCompliant(false)]

+        public static ulong ParseUInt64(string text)

+        {

+            return (ulong) ParseInteger(text, false, true);

+        }

+

+        public static long ParseInt64(string text)

+        {

+            return ParseInteger(text, true, true);

+        }

+

+        [CLSCompliant(false)]

+        public static uint ParseUInt32(string text)

+        {

+            return (uint) ParseInteger(text, false, false);

+        }

+

+        public static int ParseInt32(string text)

+        {

+            return (int) ParseInteger(text, true, false);

+        }

+

+        public static float ParseFloat(string text)

+        {

+            switch (text)

+            {

+                case "-inf":

+                case "-infinity":

+                case "-inff":

+                case "-infinityf":

+                    return float.NegativeInfinity;

+                case "inf":

+                case "infinity":

+                case "inff":

+                case "infinityf":

+                    return float.PositiveInfinity;

+                case "nan":

+                case "nanf":

+                    return float.NaN;

+                default:

+                    return float.Parse(text, FrameworkPortability.InvariantCulture);

+            }

+        }

+

+        public static double ParseDouble(string text)

+        {

+            switch (text)

+            {

+                case "-inf":

+                case "-infinity":

+                    return double.NegativeInfinity;

+                case "inf":

+                case "infinity":

+                    return double.PositiveInfinity;

+                case "nan":

+                    return double.NaN;

+                default:

+                    return double.Parse(text, FrameworkPortability.InvariantCulture);

+            }

+        }

+

+        /// <summary>

+        /// Parses an integer in hex (leading 0x), decimal (no prefix) or octal (leading 0).

+        /// Only a negative sign is permitted, and it must come before the radix indicator.

+        /// </summary>

+        private static long ParseInteger(string text, bool isSigned, bool isLong)

+        {

+            string original = text;

+            bool negative = false;

+            if (text.StartsWith("-"))

+            {

+                if (!isSigned)

+                {

+                    throw new FormatException("Number must be positive: " + original);

+                }

+                negative = true;

+                text = text.Substring(1);

+            }

+

+            int radix = 10;

+            if (text.StartsWith("0x"))

+            {

+                radix = 16;

+                text = text.Substring(2);

+            }

+            else if (text.StartsWith("0"))

+            {

+                radix = 8;

+            }

+

+            ulong result;

+            try

+            {

+                // Workaround for https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=278448

+                // We should be able to use Convert.ToUInt64 for all cases.

+                result = radix == 10 ? ulong.Parse(text) : Convert.ToUInt64(text, radix);

+            }

+            catch (OverflowException)

+            {

+                // Convert OverflowException to FormatException so there's a single exception type this method can throw.

+                string numberDescription = string.Format("{0}-bit {1}signed integer", isLong ? 64 : 32,

+                                                         isSigned ? "" : "un");

+                throw new FormatException("Number out of range for " + numberDescription + ": " + original);

+            }

+

+            if (negative)

+            {

+                ulong max = isLong ? 0x8000000000000000UL : 0x80000000L;

+                if (result > max)

+                {

+                    string numberDescription = string.Format("{0}-bit signed integer", isLong ? 64 : 32);

+                    throw new FormatException("Number out of range for " + numberDescription + ": " + original);

+                }

+                return -((long) result);

+            }

+            else

+            {

+                ulong max = isSigned

+                                ? (isLong ? (ulong) long.MaxValue : int.MaxValue)

+                                : (isLong ? ulong.MaxValue : uint.MaxValue);

+                if (result > max)

+                {

+                    string numberDescription = string.Format("{0}-bit {1}signed integer", isLong ? 64 : 32,

+                                                             isSigned ? "" : "un");

+                    throw new FormatException("Number out of range for " + numberDescription + ": " + original);

+                }

+                return (long) result;

+            }

+        }

+

+        /// <summary>

+        /// Tests a character to see if it's an octal digit.

+        /// </summary>

+        private static bool IsOctal(char c)

+        {

+            return '0' <= c && c <= '7';

+        }

+

+        /// <summary>

+        /// Tests a character to see if it's a hex digit.

+        /// </summary>

+        private static bool IsHex(char c)

+        {

+            return ('0' <= c && c <= '9') ||

+                   ('a' <= c && c <= 'f') ||

+                   ('A' <= c && c <= 'F');

+        }

+

+        /// <summary>

+        /// Interprets a character as a digit (in any base up to 36) and returns the

+        /// numeric value.

+        /// </summary>

+        private static int ParseDigit(char c)

+        {

+            if ('0' <= c && c <= '9')

+            {

+                return c - '0';

+            }

+            else if ('a' <= c && c <= 'z')

+            {

+                return c - 'a' + 10;

+            }

+            else

+            {

+                return c - 'A' + 10;

+            }

+        }

+

+        /// <summary>

+        /// Unescapes a text string as escaped using <see cref="EscapeText(string)" />.

+        /// Two-digit hex escapes (starting with "\x" are also recognised.

+        /// </summary>

+        public static string UnescapeText(string input)

+        {

+            return UnescapeBytes(input).ToStringUtf8();

+        }

+

+        /// <summary>

+        /// Like <see cref="EscapeBytes" /> but escapes a text string.

+        /// The string is first encoded as UTF-8, then each byte escaped individually.

+        /// The returned value is guaranteed to be entirely ASCII.

+        /// </summary>

+        public static string EscapeText(string input)

+        {

+            return EscapeBytes(ByteString.CopyFromUtf8(input));

+        }

+

+        /// <summary>

+        /// Escapes bytes in the format used in protocol buffer text format, which

+        /// is the same as the format used for C string literals.  All bytes

+        /// that are not printable 7-bit ASCII characters are escaped, as well as

+        /// backslash, single-quote, and double-quote characters.  Characters for

+        /// which no defined short-hand escape sequence is defined will be escaped

+        /// using 3-digit octal sequences.

+        /// The returned value is guaranteed to be entirely ASCII.

+        /// </summary>

+        public static String EscapeBytes(ByteString input)

+        {

+            StringBuilder builder = new StringBuilder(input.Length);

+            foreach (byte b in input)

+            {

+                switch (b)

+                {

+                        // C# does not use \a or \v

+                    case 0x07:

+                        builder.Append("\\a");

+                        break;

+                    case (byte) '\b':

+                        builder.Append("\\b");

+                        break;

+                    case (byte) '\f':

+                        builder.Append("\\f");

+                        break;

+                    case (byte) '\n':

+                        builder.Append("\\n");

+                        break;

+                    case (byte) '\r':

+                        builder.Append("\\r");

+                        break;

+                    case (byte) '\t':

+                        builder.Append("\\t");

+                        break;

+                    case 0x0b:

+                        builder.Append("\\v");

+                        break;

+                    case (byte) '\\':

+                        builder.Append("\\\\");

+                        break;

+                    case (byte) '\'':

+                        builder.Append("\\\'");

+                        break;

+                    case (byte) '"':

+                        builder.Append("\\\"");

+                        break;

+                    default:

+                        if (b >= 0x20 && b < 128)

+                        {

+                            builder.Append((char) b);

+                        }

+                        else

+                        {

+                            builder.Append('\\');

+                            builder.Append((char) ('0' + ((b >> 6) & 3)));

+                            builder.Append((char) ('0' + ((b >> 3) & 7)));

+                            builder.Append((char) ('0' + (b & 7)));

+                        }

+                        break;

+                }

+            }

+            return builder.ToString();

+        }

+

+        /// <summary>

+        /// Performs string unescaping from C style (octal, hex, form feeds, tab etc) into a byte string.

+        /// </summary>

+        public static ByteString UnescapeBytes(string input)

+        {

+            byte[] result = new byte[input.Length];

+            int pos = 0;

+            for (int i = 0; i < input.Length; i++)

+            {

+                char c = input[i];

+                if (c > 127 || c < 32)

+                {

+                    throw new FormatException("Escaped string must only contain ASCII");

+                }

+                if (c != '\\')

+                {

+                    result[pos++] = (byte) c;

+                    continue;

+                }

+                if (i + 1 >= input.Length)

+                {

+                    throw new FormatException("Invalid escape sequence: '\\' at end of string.");

+                }

+

+                i++;

+                c = input[i];

+                if (c >= '0' && c <= '7')

+                {

+                    // Octal escape. 

+                    int code = ParseDigit(c);

+                    if (i + 1 < input.Length && IsOctal(input[i + 1]))

+                    {

+                        i++;

+                        code = code*8 + ParseDigit(input[i]);

+                    }

+                    if (i + 1 < input.Length && IsOctal(input[i + 1]))

+                    {

+                        i++;

+                        code = code*8 + ParseDigit(input[i]);

+                    }

+                    result[pos++] = (byte) code;

+                }

+                else

+                {

+                    switch (c)

+                    {

+                        case 'a':

+                            result[pos++] = 0x07;

+                            break;

+                        case 'b':

+                            result[pos++] = (byte) '\b';

+                            break;

+                        case 'f':

+                            result[pos++] = (byte) '\f';

+                            break;

+                        case 'n':

+                            result[pos++] = (byte) '\n';

+                            break;

+                        case 'r':

+                            result[pos++] = (byte) '\r';

+                            break;

+                        case 't':

+                            result[pos++] = (byte) '\t';

+                            break;

+                        case 'v':

+                            result[pos++] = 0x0b;

+                            break;

+                        case '\\':

+                            result[pos++] = (byte) '\\';

+                            break;

+                        case '\'':

+                            result[pos++] = (byte) '\'';

+                            break;

+                        case '"':

+                            result[pos++] = (byte) '\"';

+                            break;

+

+                        case 'x':

+                            // hex escape

+                            int code;

+                            if (i + 1 < input.Length && IsHex(input[i + 1]))

+                            {

+                                i++;

+                                code = ParseDigit(input[i]);

+                            }

+                            else

+                            {

+                                throw new FormatException("Invalid escape sequence: '\\x' with no digits");

+                            }

+                            if (i + 1 < input.Length && IsHex(input[i + 1]))

+                            {

+                                ++i;

+                                code = code*16 + ParseDigit(input[i]);

+                            }

+                            result[pos++] = (byte) code;

+                            break;

+

+                        default:

+                            throw new FormatException("Invalid escape sequence: '\\" + c + "'");

+                    }

+                }

+            }

+

+            return ByteString.CopyFrom(result, 0, pos);

+        }

+

+        public static void Merge(string text, IBuilder builder)

+        {

+            Merge(text, ExtensionRegistry.Empty, builder);

+        }

+

+        public static void Merge(TextReader reader, IBuilder builder)

+        {

+            Merge(reader, ExtensionRegistry.Empty, builder);

+        }

+

+        public static void Merge(TextReader reader, ExtensionRegistry registry, IBuilder builder)

+        {

+            Merge(reader.ReadToEnd(), registry, builder);

+        }

+

+        public static void Merge(string text, ExtensionRegistry registry, IBuilder builder)

+        {

+            TextTokenizer tokenizer = new TextTokenizer(text);

+

+            while (!tokenizer.AtEnd)

+            {

+                MergeField(tokenizer, registry, builder);

+            }

+        }

+

+        /// <summary>

+        /// Parses a single field from the specified tokenizer and merges it into

+        /// the builder.

+        /// </summary>

+        private static void MergeField(TextTokenizer tokenizer, ExtensionRegistry extensionRegistry,

+                                       IBuilder builder)

+        {

+            FieldDescriptor field;

+            MessageDescriptor type = builder.DescriptorForType;

+            ExtensionInfo extension = null;

+

+            if (tokenizer.TryConsume("["))

+            {

+                // An extension.

+                StringBuilder name = new StringBuilder(tokenizer.ConsumeIdentifier());

+                while (tokenizer.TryConsume("."))

+                {

+                    name.Append(".");

+                    name.Append(tokenizer.ConsumeIdentifier());

+                }

+

+                extension = extensionRegistry.FindByName(type, name.ToString());

+

+                if (extension == null)

+                {

+                    throw tokenizer.CreateFormatExceptionPreviousToken("Extension \"" + name +

+                                                                       "\" not found in the ExtensionRegistry.");

+                }

+                else if (extension.Descriptor.ContainingType != type)

+                {

+                    throw tokenizer.CreateFormatExceptionPreviousToken("Extension \"" + name +

+                                                                       "\" does not extend message type \"" +

+                                                                       type.FullName + "\".");

+                }

+

+                tokenizer.Consume("]");

+

+                field = extension.Descriptor;

+            }

+            else

+            {

+                String name = tokenizer.ConsumeIdentifier();

+                field = type.FindDescriptor<FieldDescriptor>(name);

+

+                // Group names are expected to be capitalized as they appear in the

+                // .proto file, which actually matches their type names, not their field

+                // names.

+                if (field == null)

+                {

+                    // Explicitly specify the invariant culture so that this code does not break when

+                    // executing in Turkey.

+#if PORTABLE_LIBRARY

+                    String lowerName = name.ToLowerInvariant();

+#else

+                    String lowerName = name.ToLower(FrameworkPortability.InvariantCulture);

+#endif

+                    field = type.FindDescriptor<FieldDescriptor>(lowerName);

+                    // If the case-insensitive match worked but the field is NOT a group,

+                    // TODO(jonskeet): What? Java comment ends here!

+                    if (field != null && field.FieldType != FieldType.Group)

+                    {

+                        field = null;

+                    }

+                }

+                // Again, special-case group names as described above.

+                if (field != null && field.FieldType == FieldType.Group && field.MessageType.Name != name)

+                {

+                    field = null;

+                }

+

+                if (field == null)

+                {

+                    throw tokenizer.CreateFormatExceptionPreviousToken(

+                        "Message type \"" + type.FullName + "\" has no field named \"" + name + "\".");

+                }

+            }

+

+            object value = null;

+

+            if (field.MappedType == MappedType.Message)

+            {

+                tokenizer.TryConsume(":"); // optional

+

+                String endToken;

+                if (tokenizer.TryConsume("<"))

+                {

+                    endToken = ">";

+                }

+                else

+                {

+                    tokenizer.Consume("{");

+                    endToken = "}";

+                }

+

+                IBuilder subBuilder;

+                if (extension == null)

+                {

+                    subBuilder = builder.CreateBuilderForField(field);

+                }

+                else

+                {

+                    subBuilder = extension.DefaultInstance.WeakCreateBuilderForType() as IBuilder;

+                    if (subBuilder == null)

+                    {

+                        throw new NotSupportedException("Lite messages are not supported.");

+                    }

+                }

+

+                while (!tokenizer.TryConsume(endToken))

+                {

+                    if (tokenizer.AtEnd)

+                    {

+                        throw tokenizer.CreateFormatException("Expected \"" + endToken + "\".");

+                    }

+                    MergeField(tokenizer, extensionRegistry, subBuilder);

+                }

+

+                value = subBuilder.WeakBuild();

+            }

+            else

+            {

+                tokenizer.Consume(":");

+

+                switch (field.FieldType)

+                {

+                    case FieldType.Int32:

+                    case FieldType.SInt32:

+                    case FieldType.SFixed32:

+                        value = tokenizer.ConsumeInt32();

+                        break;

+

+                    case FieldType.Int64:

+                    case FieldType.SInt64:

+                    case FieldType.SFixed64:

+                        value = tokenizer.ConsumeInt64();

+                        break;

+

+                    case FieldType.UInt32:

+                    case FieldType.Fixed32:

+                        value = tokenizer.ConsumeUInt32();

+                        break;

+

+                    case FieldType.UInt64:

+                    case FieldType.Fixed64:

+                        value = tokenizer.ConsumeUInt64();

+                        break;

+

+                    case FieldType.Float:

+                        value = tokenizer.ConsumeFloat();

+                        break;

+

+                    case FieldType.Double:

+                        value = tokenizer.ConsumeDouble();

+                        break;

+

+                    case FieldType.Bool:

+                        value = tokenizer.ConsumeBoolean();

+                        break;

+

+                    case FieldType.String:

+                        value = tokenizer.ConsumeString();

+                        break;

+

+                    case FieldType.Bytes:

+                        value = tokenizer.ConsumeByteString();

+                        break;

+

+                    case FieldType.Enum:

+                        {

+                            EnumDescriptor enumType = field.EnumType;

+

+                            if (tokenizer.LookingAtInteger())

+                            {

+                                int number = tokenizer.ConsumeInt32();

+                                value = enumType.FindValueByNumber(number);

+                                if (value == null)

+                                {

+                                    throw tokenizer.CreateFormatExceptionPreviousToken(

+                                        "Enum type \"" + enumType.FullName +

+                                        "\" has no value with number " + number + ".");

+                                }

+                            }

+                            else

+                            {

+                                String id = tokenizer.ConsumeIdentifier();

+                                value = enumType.FindValueByName(id);

+                                if (value == null)

+                                {

+                                    throw tokenizer.CreateFormatExceptionPreviousToken(

+                                        "Enum type \"" + enumType.FullName +

+                                        "\" has no value named \"" + id + "\".");

+                                }

+                            }

+

+                            break;

+                        }

+

+                    case FieldType.Message:

+                    case FieldType.Group:

+                        throw new InvalidOperationException("Can't get here.");

+                }

+            }

+

+            if (field.IsRepeated)

+            {

+                builder.WeakAddRepeatedField(field, value);

+            }

+            else

+            {

+                builder.SetField(field, value);

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/TextGenerator.cs b/csharp/src/ProtocolBuffers/TextGenerator.cs
new file mode 100644
index 0000000..30cbf0f
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/TextGenerator.cs
@@ -0,0 +1,159 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.IO;

+using System.Text;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Helper class to control indentation. Used for TextFormat and by ProtoGen.

+    /// </summary>

+    public sealed class TextGenerator

+    {

+        /// <summary>

+        /// The string to use at the end of each line. We assume that "Print" is only called using \n

+        /// to indicate a line break; that's what we use to detect when we need to indent etc, and

+        /// *just* the \n is replaced with the contents of lineBreak.

+        /// </summary>

+        private readonly string lineBreak;

+

+        /// <summary>

+        /// Writer to write formatted text to.

+        /// </summary>

+        private readonly TextWriter writer;

+

+        /// <summary>

+        /// Keeps track of whether the next piece of text should be indented

+        /// </summary>

+        private bool atStartOfLine = true;

+

+        /// <summary>

+        /// Keeps track of the current level of indentation

+        /// </summary>

+        private readonly StringBuilder indent = new StringBuilder();

+

+        /// <summary>

+        /// Creates a generator writing to the given writer. The writer

+        /// is not closed by this class.

+        /// </summary>

+        public TextGenerator(TextWriter writer, string lineBreak)

+        {

+            this.writer = writer;

+            this.lineBreak = lineBreak;

+        }

+

+        /// <summary>

+        /// Indents text by two spaces. After calling Indent(), two spaces

+        /// will be inserted at the beginning of each line of text. Indent() may

+        /// be called multiple times to produce deeper indents.

+        /// </summary>

+        public void Indent()

+        {

+            indent.Append("  ");

+        }

+

+        /// <summary>

+        /// Reduces the current indent level by two spaces.

+        /// </summary>

+        public void Outdent()

+        {

+            if (indent.Length == 0)

+            {

+                throw new InvalidOperationException("Too many calls to Outdent()");

+            }

+            indent.Length -= 2;

+        }

+

+        public void WriteLine(string text)

+        {

+            Print(text);

+            Print("\n");

+        }

+

+        public void WriteLine(string format, params object[] args)

+        {

+            WriteLine(string.Format(format, args));

+        }

+

+        public void WriteLine()

+        {

+            WriteLine("");

+        }

+

+        /// <summary>

+        /// Prints the given text to the output stream, indenting at line boundaries.

+        /// </summary>

+        /// <param name="text"></param>

+        public void Print(string text)

+        {

+            int pos = 0;

+

+            for (int i = 0; i < text.Length; i++)

+            {

+                if (text[i] == '\n')

+                {

+                    // Strip off the \n from what we write

+                    Write(text.Substring(pos, i - pos));

+                    Write(lineBreak);

+                    pos = i + 1;

+                    atStartOfLine = true;

+                }

+            }

+            Write(text.Substring(pos));

+        }

+

+        public void Write(string format, params object[] args)

+        {

+            Write(string.Format(format, args));

+        }

+

+        private void Write(string data)

+        {

+            if (data.Length == 0)

+            {

+                return;

+            }

+            if (atStartOfLine)

+            {

+                atStartOfLine = false;

+                writer.Write(indent);

+            }

+            writer.Write(data);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/TextTokenizer.cs b/csharp/src/ProtocolBuffers/TextTokenizer.cs
new file mode 100644
index 0000000..5bb27fd
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/TextTokenizer.cs
@@ -0,0 +1,501 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Globalization;

+using System.Text.RegularExpressions;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Represents a stream of tokens parsed from a string.

+    /// </summary>

+    internal sealed class TextTokenizer

+    {

+        private readonly string text;

+        private string currentToken;

+

+        /// <summary>

+        /// The character index within the text to perform the next regex match at.

+        /// </summary>

+        private int matchPos = 0;

+

+        /// <summary>

+        /// The character index within the text at which the current token begins.

+        /// </summary>

+        private int pos = 0;

+

+        /// <summary>

+        /// The line number of the current token.

+        /// </summary>

+        private int line = 0;

+

+        /// <summary>

+        /// The column number of the current token.

+        /// </summary>

+        private int column = 0;

+

+        /// <summary>

+        /// The line number of the previous token.

+        /// </summary>

+        private int previousLine = 0;

+

+        /// <summary>

+        /// The column number of the previous token.

+        /// </summary>

+        private int previousColumn = 0;

+

+        // Note: atomic groups used to mimic possessive quantifiers in Java in both of these regexes

+        internal static readonly Regex WhitespaceAndCommentPattern = new Regex("\\G(?>(\\s|(#.*$))+)",

+                                                                               FrameworkPortability.

+                                                                                   CompiledRegexWhereAvailable |

+                                                                               RegexOptions.Multiline);

+

+        private static readonly Regex TokenPattern = new Regex(

+            "\\G[a-zA-Z_](?>[0-9a-zA-Z_+-]*)|" + // an identifier

+            "\\G[0-9+-](?>[0-9a-zA-Z_.+-]*)|" + // a number

+            "\\G\"(?>([^\"\\\n\\\\]|\\\\.)*)(\"|\\\\?$)|" + // a double-quoted string

+            "\\G\'(?>([^\"\\\n\\\\]|\\\\.)*)(\'|\\\\?$)", // a single-quoted string

+            FrameworkPortability.CompiledRegexWhereAvailable | RegexOptions.Multiline);

+

+        private static readonly Regex DoubleInfinity = new Regex("^-?inf(inity)?$",

+                                                                 FrameworkPortability.CompiledRegexWhereAvailable |

+                                                                 RegexOptions.IgnoreCase);

+

+        private static readonly Regex FloatInfinity = new Regex("^-?inf(inity)?f?$",

+                                                                FrameworkPortability.CompiledRegexWhereAvailable |

+                                                                RegexOptions.IgnoreCase);

+

+        private static readonly Regex FloatNan = new Regex("^nanf?$",

+                                                           FrameworkPortability.CompiledRegexWhereAvailable |

+                                                           RegexOptions.IgnoreCase);

+

+        /** Construct a tokenizer that parses tokens from the given text. */

+

+        public TextTokenizer(string text)

+        {

+            this.text = text;

+            SkipWhitespace();

+            NextToken();

+        }

+

+        /// <summary>

+        /// Are we at the end of the input?

+        /// </summary>

+        public bool AtEnd

+        {

+            get { return currentToken.Length == 0; }

+        }

+

+        /// <summary>

+        /// Advances to the next token.

+        /// </summary>

+        public void NextToken()

+        {

+            previousLine = line;

+            previousColumn = column;

+

+            // Advance the line counter to the current position.

+            while (pos < matchPos)

+            {

+                if (text[pos] == '\n')

+                {

+                    ++line;

+                    column = 0;

+                }

+                else

+                {

+                    ++column;

+                }

+                ++pos;

+            }

+

+            // Match the next token.

+            if (matchPos == text.Length)

+            {

+                // EOF

+                currentToken = "";

+            }

+            else

+            {

+                Match match = TokenPattern.Match(text, matchPos);

+                if (match.Success)

+                {

+                    currentToken = match.Value;

+                    matchPos += match.Length;

+                }

+                else

+                {

+                    // Take one character.

+                    currentToken = text[matchPos].ToString();

+                    matchPos++;

+                }

+

+                SkipWhitespace();

+            }

+        }

+

+        /// <summary>

+        /// Skip over any whitespace so that matchPos starts at the next token.

+        /// </summary>

+        private void SkipWhitespace()

+        {

+            Match match = WhitespaceAndCommentPattern.Match(text, matchPos);

+            if (match.Success)

+            {

+                matchPos += match.Length;

+            }

+        }

+

+        /// <summary>

+        /// If the next token exactly matches the given token, consume it and return

+        /// true. Otherwise, return false without doing anything.

+        /// </summary>

+        public bool TryConsume(string token)

+        {

+            if (currentToken == token)

+            {

+                NextToken();

+                return true;

+            }

+            return false;

+        }

+

+        /*

+     * If the next token exactly matches {@code token}, consume it.  Otherwise,

+     * throw a {@link ParseException}.

+     */

+

+        /// <summary>

+        /// If the next token exactly matches the specified one, consume it.

+        /// Otherwise, throw a FormatException.

+        /// </summary>

+        /// <param name="token"></param>

+        public void Consume(string token)

+        {

+            if (!TryConsume(token))

+            {

+                throw CreateFormatException("Expected \"" + token + "\".");

+            }

+        }

+

+        /// <summary>

+        /// Returns true if the next token is an integer, but does not consume it.

+        /// </summary>

+        public bool LookingAtInteger()

+        {

+            if (currentToken.Length == 0)

+            {

+                return false;

+            }

+

+            char c = currentToken[0];

+            return ('0' <= c && c <= '9') || c == '-' || c == '+';

+        }

+

+        /// <summary>

+        /// If the next token is an identifier, consume it and return its value.

+        /// Otherwise, throw a FormatException.

+        /// </summary>

+        public string ConsumeIdentifier()

+        {

+            foreach (char c in currentToken)

+            {

+                if (('a' <= c && c <= 'z') ||

+                    ('A' <= c && c <= 'Z') ||

+                    ('0' <= c && c <= '9') ||

+                    (c == '_') || (c == '.'))

+                {

+                    // OK

+                }

+                else

+                {

+                    throw CreateFormatException("Expected identifier.");

+                }

+            }

+

+            string result = currentToken;

+            NextToken();

+            return result;

+        }

+

+        /// <summary>

+        /// If the next token is a 32-bit signed integer, consume it and return its 

+        /// value. Otherwise, throw a FormatException.

+        /// </summary>

+        public int ConsumeInt32()

+        {

+            try

+            {

+                int result = TextFormat.ParseInt32(currentToken);

+                NextToken();

+                return result;

+            }

+            catch (FormatException e)

+            {

+                throw CreateIntegerParseException(e);

+            }

+        }

+

+        /// <summary>

+        /// If the next token is a 32-bit unsigned integer, consume it and return its

+        /// value. Otherwise, throw a FormatException.

+        /// </summary>

+        public uint ConsumeUInt32()

+        {

+            try

+            {

+                uint result = TextFormat.ParseUInt32(currentToken);

+                NextToken();

+                return result;

+            }

+            catch (FormatException e)

+            {

+                throw CreateIntegerParseException(e);

+            }

+        }

+

+        /// <summary>

+        /// If the next token is a 64-bit signed integer, consume it and return its

+        /// value. Otherwise, throw a FormatException.

+        /// </summary>

+        public long ConsumeInt64()

+        {

+            try

+            {

+                long result = TextFormat.ParseInt64(currentToken);

+                NextToken();

+                return result;

+            }

+            catch (FormatException e)

+            {

+                throw CreateIntegerParseException(e);

+            }

+        }

+

+        /// <summary>

+        /// If the next token is a 64-bit unsigned integer, consume it and return its

+        /// value. Otherwise, throw a FormatException.

+        /// </summary>

+        public ulong ConsumeUInt64()

+        {

+            try

+            {

+                ulong result = TextFormat.ParseUInt64(currentToken);

+                NextToken();

+                return result;

+            }

+            catch (FormatException e)

+            {

+                throw CreateIntegerParseException(e);

+            }

+        }

+

+        /// <summary>

+        /// If the next token is a double, consume it and return its value.

+        /// Otherwise, throw a FormatException.

+        /// </summary>

+        public double ConsumeDouble()

+        {

+            // We need to parse infinity and nan separately because

+            // double.Parse() does not accept "inf", "infinity", or "nan".

+            if (DoubleInfinity.IsMatch(currentToken))

+            {

+                bool negative = currentToken.StartsWith("-");

+                NextToken();

+                return negative ? double.NegativeInfinity : double.PositiveInfinity;

+            }

+            if (currentToken.Equals("nan", StringComparison.OrdinalIgnoreCase))

+            {

+                NextToken();

+                return Double.NaN;

+            }

+

+            try

+            {

+                double result = double.Parse(currentToken, FrameworkPortability.InvariantCulture);

+                NextToken();

+                return result;

+            }

+            catch (FormatException e)

+            {

+                throw CreateFloatParseException(e);

+            }

+            catch (OverflowException e)

+            {

+                throw CreateFloatParseException(e);

+            }

+        }

+

+        /// <summary>

+        /// If the next token is a float, consume it and return its value.

+        /// Otherwise, throw a FormatException.

+        /// </summary>

+        public float ConsumeFloat()

+        {

+            // We need to parse infinity and nan separately because

+            // Float.parseFloat() does not accept "inf", "infinity", or "nan".

+            if (FloatInfinity.IsMatch(currentToken))

+            {

+                bool negative = currentToken.StartsWith("-");

+                NextToken();

+                return negative ? float.NegativeInfinity : float.PositiveInfinity;

+            }

+            if (FloatNan.IsMatch(currentToken))

+            {

+                NextToken();

+                return float.NaN;

+            }

+

+            if (currentToken.EndsWith("f"))

+            {

+                currentToken = currentToken.TrimEnd('f');

+            }

+

+            try

+            {

+                float result = float.Parse(currentToken, FrameworkPortability.InvariantCulture);

+                NextToken();

+                return result;

+            }

+            catch (FormatException e)

+            {

+                throw CreateFloatParseException(e);

+            }

+            catch (OverflowException e)

+            {

+                throw CreateFloatParseException(e);

+            }

+        }

+

+        /// <summary>

+        /// If the next token is a Boolean, consume it and return its value.

+        /// Otherwise, throw a FormatException.    

+        /// </summary>

+        public bool ConsumeBoolean()

+        {

+            if (currentToken == "true")

+            {

+                NextToken();

+                return true;

+            }

+            if (currentToken == "false")

+            {

+                NextToken();

+                return false;

+            }

+            throw CreateFormatException("Expected \"true\" or \"false\".");

+        }

+

+        /// <summary>

+        /// If the next token is a string, consume it and return its (unescaped) value.

+        /// Otherwise, throw a FormatException.

+        /// </summary>

+        public string ConsumeString()

+        {

+            return ConsumeByteString().ToStringUtf8();

+        }

+

+        /// <summary>

+        /// If the next token is a string, consume it, unescape it as a

+        /// ByteString and return it. Otherwise, throw a FormatException.

+        /// </summary>

+        public ByteString ConsumeByteString()

+        {

+            char quote = currentToken.Length > 0 ? currentToken[0] : '\0';

+            if (quote != '\"' && quote != '\'')

+            {

+                throw CreateFormatException("Expected string.");

+            }

+

+            if (currentToken.Length < 2 ||

+                currentToken[currentToken.Length - 1] != quote)

+            {

+                throw CreateFormatException("String missing ending quote.");

+            }

+

+            try

+            {

+                string escaped = currentToken.Substring(1, currentToken.Length - 2);

+                ByteString result = TextFormat.UnescapeBytes(escaped);

+                NextToken();

+                return result;

+            }

+            catch (FormatException e)

+            {

+                throw CreateFormatException(e.Message);

+            }

+        }

+

+        /// <summary>

+        /// Returns a format exception with the current line and column numbers

+        /// in the description, suitable for throwing.

+        /// </summary>

+        public FormatException CreateFormatException(string description)

+        {

+            // Note:  People generally prefer one-based line and column numbers.

+            return new FormatException((line + 1) + ":" + (column + 1) + ": " + description);

+        }

+

+        /// <summary>

+        /// Returns a format exception with the line and column numbers of the

+        /// previous token in the description, suitable for throwing.

+        /// </summary>

+        public FormatException CreateFormatExceptionPreviousToken(string description)

+        {

+            // Note:  People generally prefer one-based line and column numbers.

+            return new FormatException((previousLine + 1) + ":" + (previousColumn + 1) + ": " + description);

+        }

+

+        /// <summary>

+        /// Constructs an appropriate FormatException for the given existing exception

+        /// when trying to parse an integer.

+        /// </summary>

+        private FormatException CreateIntegerParseException(FormatException e)

+        {

+            return CreateFormatException("Couldn't parse integer: " + e.Message);

+        }

+

+        /// <summary>

+        /// Constructs an appropriate FormatException for the given existing exception

+        /// when trying to parse a float or double.

+        /// </summary>

+        private FormatException CreateFloatParseException(Exception e)

+        {

+            return CreateFormatException("Couldn't parse number: " + e.Message);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/ThrowHelper.cs b/csharp/src/ProtocolBuffers/ThrowHelper.cs
new file mode 100644
index 0000000..69e5f56
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/ThrowHelper.cs
@@ -0,0 +1,92 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Helper methods for throwing exceptions

+    /// </summary>

+    public static class ThrowHelper

+    {

+        /// <summary>

+        /// Throws an ArgumentNullException if the given value is null.

+        /// </summary>

+        public static void ThrowIfNull(object value, string name)

+        {

+            if (value == null)

+            {

+                throw new ArgumentNullException(name);

+            }

+        }

+

+        /// <summary>

+        /// Throws an ArgumentNullException if the given value is null.

+        /// </summary>

+        public static void ThrowIfNull(object value)

+        {

+            if (value == null)

+            {

+                throw new ArgumentNullException();

+            }

+        }

+

+        /// <summary>

+        /// Throws an ArgumentNullException if the given value or any element within it is null.

+        /// </summary>

+        public static void ThrowIfAnyNull<T>(IEnumerable<T> sequence)

+        {

+            foreach (T t in sequence)

+            {

+                if (t == null)

+                {

+                    throw new ArgumentNullException();

+                }

+            }

+        }

+

+        public static Exception CreateMissingMethod(Type type, string methodName)

+        {

+#if CLIENTPROFILE

+            return new System.MissingMethodException(type.FullName, methodName);

+#else

+            return new System.ArgumentException(String.Format("The method '{0}' was not found on type {1}.", methodName, type));

+#endif

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/UninitializedMessageException.cs b/csharp/src/ProtocolBuffers/UninitializedMessageException.cs
new file mode 100644
index 0000000..9e4f856
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/UninitializedMessageException.cs
@@ -0,0 +1,208 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using System.Text;

+

+#if !LITE

+using Google.ProtocolBuffers.Collections;

+using Google.ProtocolBuffers.Descriptors;

+

+#endif

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// TODO(jonskeet): Write summary text.

+    /// </summary>

+    public sealed class UninitializedMessageException : Exception

+    {

+        private readonly IList<string> missingFields;

+

+        private UninitializedMessageException(IList<string> missingFields)

+            : base(BuildDescription(missingFields))

+        {

+            this.missingFields = new List<string>(missingFields);

+        }

+

+        /// <summary>

+        /// Returns a read-only list of human-readable names of

+        /// required fields missing from this message. Each name

+        /// is a full path to a field, e.g. "foo.bar[5].baz"

+        /// </summary>

+        public IList<string> MissingFields

+        {

+            get { return missingFields; }

+        }

+

+        /// <summary>

+        /// Converts this exception into an InvalidProtocolBufferException.

+        /// When a parsed message is missing required fields, this should be thrown

+        /// instead of UninitializedMessageException.

+        /// </summary>

+        public InvalidProtocolBufferException AsInvalidProtocolBufferException()

+        {

+            return new InvalidProtocolBufferException(Message);

+        }

+

+        /// <summary>

+        /// Constructs the description string for a given list of missing fields.

+        /// </summary>

+        private static string BuildDescription(IEnumerable<string> missingFields)

+        {

+            StringBuilder description = new StringBuilder("Message missing required fields: ");

+            bool first = true;

+            foreach (string field in missingFields)

+            {

+                if (first)

+                {

+                    first = false;

+                }

+                else

+                {

+                    description.Append(", ");

+                }

+                description.Append(field);

+            }

+            return description.ToString();

+        }

+

+        /// <summary>

+        /// For Lite exceptions that do not known how to enumerate missing fields

+        /// </summary>

+        public UninitializedMessageException(IMessageLite message)

+            : base(String.Format("Message {0} is missing required fields", message.GetType()))

+        {

+            missingFields = new List<string>();

+        }

+

+#if !LITE

+        public UninitializedMessageException(IMessage message)

+            : this(FindMissingFields(message))

+        {

+        }

+

+        /// <summary>

+        /// Returns a list of the full "paths" of missing required

+        /// fields in the specified message.

+        /// </summary>

+        private static IList<String> FindMissingFields(IMessage message)

+        {

+            List<String> results = new List<String>();

+            FindMissingFields(message, "", results);

+            return results;

+        }

+

+        /// <summary>

+        /// Recursive helper implementing FindMissingFields.

+        /// </summary>

+        private static void FindMissingFields(IMessage message, String prefix, List<String> results)

+        {

+            foreach (FieldDescriptor field in message.DescriptorForType.Fields)

+            {

+                if (field.IsRequired && !message.HasField(field))

+                {

+                    results.Add(prefix + field.Name);

+                }

+            }

+

+            foreach (KeyValuePair<FieldDescriptor, object> entry in message.AllFields)

+            {

+                FieldDescriptor field = entry.Key;

+                object value = entry.Value;

+

+                if (field.MappedType == MappedType.Message)

+                {

+                    if (field.IsRepeated)

+                    {

+                        int i = 0;

+                        foreach (object element in (IEnumerable) value)

+                        {

+                            if (element is IMessage)

+                            {

+                                FindMissingFields((IMessage) element, SubMessagePrefix(prefix, field, i++), results);

+                            }

+                            else

+                            {

+                                results.Add(prefix + field.Name);

+                            }

+                        }

+                    }

+                    else

+                    {

+                        if (message.HasField(field))

+                        {

+                            if (value is IMessage)

+                            {

+                                FindMissingFields((IMessage) value, SubMessagePrefix(prefix, field, -1), results);

+                            }

+                            else

+                            {

+                                results.Add(prefix + field.Name);

+                            }

+                        }

+                    }

+                }

+            }

+        }

+

+        private static String SubMessagePrefix(String prefix, FieldDescriptor field, int index)

+        {

+            StringBuilder result = new StringBuilder(prefix);

+            if (field.IsExtension)

+            {

+                result.Append('(')

+                    .Append(field.FullName)

+                    .Append(')');

+            }

+            else

+            {

+                result.Append(field.Name);

+            }

+            if (index != -1)

+            {

+                result.Append('[')

+                    .Append(index)

+                    .Append(']');

+            }

+            result.Append('.');

+            return result.ToString();

+        }

+#endif

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/UnknownField.cs b/csharp/src/ProtocolBuffers/UnknownField.cs
new file mode 100644
index 0000000..e03477f
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/UnknownField.cs
@@ -0,0 +1,418 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.Collections.ObjectModel;

+using Google.ProtocolBuffers.Collections;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Represents a single field in an UnknownFieldSet.

+    /// 

+    /// An UnknownField consists of five lists of values. The lists correspond

+    /// to the five "wire types" used in the protocol buffer binary format.

+    /// The wire type of each field can be determined from the encoded form alone,

+    /// without knowing the field's declared type. So, we are able to parse

+    /// unknown values at least this far and separate them. Normally, only one

+    /// of the five lists will contain any values, since it is impossible to

+    /// define a valid message type that declares two different types for the

+    /// same field number. However, the code is designed to allow for the case

+    /// where the same unknown field number is encountered using multiple different

+    /// wire types.

+    /// 

+    /// UnknownField is an immutable class. To construct one, you must use an

+    /// UnknownField.Builder.

+    /// </summary>

+    public sealed class UnknownField

+    {

+        public const string UnknownFieldName = "unknown_field";

+        private static readonly UnknownField defaultInstance = CreateBuilder().Build();

+        private readonly ReadOnlyCollection<ulong> varintList;

+        private readonly ReadOnlyCollection<uint> fixed32List;

+        private readonly ReadOnlyCollection<ulong> fixed64List;

+        private readonly ReadOnlyCollection<ByteString> lengthDelimitedList;

+        private readonly ReadOnlyCollection<UnknownFieldSet> groupList;

+

+        private UnknownField(ReadOnlyCollection<ulong> varintList,

+                             ReadOnlyCollection<uint> fixed32List,

+                             ReadOnlyCollection<ulong> fixed64List,

+                             ReadOnlyCollection<ByteString> lengthDelimitedList,

+                             ReadOnlyCollection<UnknownFieldSet> groupList)

+        {

+            this.varintList = varintList;

+            this.fixed32List = fixed32List;

+            this.fixed64List = fixed64List;

+            this.lengthDelimitedList = lengthDelimitedList;

+            this.groupList = groupList;

+        }

+

+        public static UnknownField DefaultInstance

+        {

+            get { return defaultInstance; }

+        }

+

+        /// <summary>

+        /// The list of varint values for this field.

+        /// </summary>

+        public IList<ulong> VarintList

+        {

+            get { return varintList; }

+        }

+

+        /// <summary>

+        /// The list of fixed32 values for this field.

+        /// </summary>

+        public IList<uint> Fixed32List

+        {

+            get { return fixed32List; }

+        }

+

+        /// <summary>

+        /// The list of fixed64 values for this field.

+        /// </summary>

+        public IList<ulong> Fixed64List

+        {

+            get { return fixed64List; }

+        }

+

+        /// <summary>

+        /// The list of length-delimited values for this field.

+        /// </summary>

+        public IList<ByteString> LengthDelimitedList

+        {

+            get { return lengthDelimitedList; }

+        }

+

+        /// <summary>

+        /// The list of embedded group values for this field. These

+        /// are represented using UnknownFieldSets rather than Messages

+        /// since the group's type is presumably unknown.

+        /// </summary>

+        public IList<UnknownFieldSet> GroupList

+        {

+            get { return groupList; }

+        }

+

+        public override bool Equals(object other)

+        {

+            if (ReferenceEquals(this, other))

+            {

+                return true;

+            }

+            UnknownField otherField = other as UnknownField;

+            return otherField != null

+                   && Lists.Equals(varintList, otherField.varintList)

+                   && Lists.Equals(fixed32List, otherField.fixed32List)

+                   && Lists.Equals(fixed64List, otherField.fixed64List)

+                   && Lists.Equals(lengthDelimitedList, otherField.lengthDelimitedList)

+                   && Lists.Equals(groupList, otherField.groupList);

+        }

+

+        public override int GetHashCode()

+        {

+            int hash = 43;

+            hash = hash*47 + Lists.GetHashCode(varintList);

+            hash = hash*47 + Lists.GetHashCode(fixed32List);

+            hash = hash*47 + Lists.GetHashCode(fixed64List);

+            hash = hash*47 + Lists.GetHashCode(lengthDelimitedList);

+            hash = hash*47 + Lists.GetHashCode(groupList);

+            return hash;

+        }

+

+        /// <summary>

+        /// Constructs a new Builder.

+        /// </summary>

+        public static Builder CreateBuilder()

+        {

+            return new Builder();

+        }

+

+        /// <summary>

+        /// Constructs a new Builder and initializes it to a copy of <paramref name="copyFrom"/>.

+        /// </summary>

+        public static Builder CreateBuilder(UnknownField copyFrom)

+        {

+            return new Builder().MergeFrom(copyFrom);

+        }

+

+        /// <summary>

+        /// Serializes the field, including the field number, and writes it to

+        /// <paramref name="output"/>.

+        /// </summary>

+        public void WriteTo(int fieldNumber, ICodedOutputStream output)

+        {

+            foreach (ulong value in varintList)

+            {

+                output.WriteUnknownField(fieldNumber, WireFormat.WireType.Varint, value);

+            }

+            foreach (uint value in fixed32List)

+            {

+                output.WriteUnknownField(fieldNumber, WireFormat.WireType.Fixed32, value);

+            }

+            foreach (ulong value in fixed64List)

+            {

+                output.WriteUnknownField(fieldNumber, WireFormat.WireType.Fixed64, value);

+            }

+            foreach (ByteString value in lengthDelimitedList)

+            {

+                output.WriteUnknownBytes(fieldNumber, value);

+            }

+            foreach (UnknownFieldSet value in groupList)

+            {

+#pragma warning disable 0612

+                output.WriteUnknownGroup(fieldNumber, value);

+#pragma warning restore 0612

+            }

+        }

+

+        /// <summary>

+        /// Computes the number of bytes required to encode this field, including field

+        /// number.

+        /// </summary>

+        public int GetSerializedSize(int fieldNumber)

+        {

+            int result = 0;

+            foreach (ulong value in varintList)

+            {

+                result += CodedOutputStream.ComputeUInt64Size(fieldNumber, value);

+            }

+            foreach (uint value in fixed32List)

+            {

+                result += CodedOutputStream.ComputeFixed32Size(fieldNumber, value);

+            }

+            foreach (ulong value in fixed64List)

+            {

+                result += CodedOutputStream.ComputeFixed64Size(fieldNumber, value);

+            }

+            foreach (ByteString value in lengthDelimitedList)

+            {

+                result += CodedOutputStream.ComputeBytesSize(fieldNumber, value);

+            }

+            foreach (UnknownFieldSet value in groupList)

+            {

+#pragma warning disable 0612

+                result += CodedOutputStream.ComputeUnknownGroupSize(fieldNumber, value);

+#pragma warning restore 0612

+            }

+            return result;

+        }

+

+        /// <summary>

+        /// Serializes the length-delimited values of the field, including field

+        /// number, and writes them to <paramref name="output"/> using the MessageSet wire format.

+        /// </summary>

+        /// <param name="fieldNumber"></param>

+        /// <param name="output"></param>

+        public void WriteAsMessageSetExtensionTo(int fieldNumber, ICodedOutputStream output)

+        {

+            foreach (ByteString value in lengthDelimitedList)

+            {

+                output.WriteMessageSetExtension(fieldNumber, UnknownFieldName, value);

+            }

+        }

+

+        /// <summary>

+        /// Get the number of bytes required to encode this field, incuding field number,

+        /// using the MessageSet wire format.

+        /// </summary>

+        public int GetSerializedSizeAsMessageSetExtension(int fieldNumber)

+        {

+            int result = 0;

+            foreach (ByteString value in lengthDelimitedList)

+            {

+                result += CodedOutputStream.ComputeRawMessageSetExtensionSize(fieldNumber, value);

+            }

+            return result;

+        }

+

+        /// <summary>

+        /// Used to build instances of UnknownField.

+        /// </summary>

+        public sealed class Builder

+        {

+            private List<ulong> varintList;

+            private List<uint> fixed32List;

+            private List<ulong> fixed64List;

+            private List<ByteString> lengthDelimitedList;

+            private List<UnknownFieldSet> groupList;

+

+            /// <summary>

+            /// Builds the field. After building, the builder is reset to an empty

+            /// state. (This is actually easier than making it unusable.)

+            /// </summary>

+            public UnknownField Build()

+            {

+                return new UnknownField(MakeReadOnly(ref varintList),

+                                        MakeReadOnly(ref fixed32List),

+                                        MakeReadOnly(ref fixed64List),

+                                        MakeReadOnly(ref lengthDelimitedList),

+                                        MakeReadOnly(ref groupList));

+            }

+

+            /// <summary>

+            /// Merge the values in <paramref name="other" /> into this field.  For each list

+            /// of values, <paramref name="other"/>'s values are append to the ones in this

+            /// field.

+            /// </summary>

+            public Builder MergeFrom(UnknownField other)

+            {

+                varintList = AddAll(varintList, other.VarintList);

+                fixed32List = AddAll(fixed32List, other.Fixed32List);

+                fixed64List = AddAll(fixed64List, other.Fixed64List);

+                lengthDelimitedList = AddAll(lengthDelimitedList, other.LengthDelimitedList);

+                groupList = AddAll(groupList, other.GroupList);

+                return this;

+            }

+

+            /// <summary>

+            /// Returns a new list containing all of the given specified values from

+            /// both the <paramref name="current"/> and <paramref name="extras"/> lists.

+            /// If <paramref name="current" /> is null and <paramref name="extras"/> is empty,

+            /// null is returned. Otherwise, either a new list is created (if <paramref name="current" />

+            /// is null) or the elements of <paramref name="extras"/> are added to <paramref name="current" />.

+            /// </summary>

+            private static List<T> AddAll<T>(List<T> current, IList<T> extras)

+            {

+                if (extras.Count == 0)

+                {

+                    return current;

+                }

+                if (current == null)

+                {

+                    current = new List<T>(extras);

+                }

+                else

+                {

+                    current.AddRange(extras);

+                }

+                return current;

+            }

+

+            /// <summary>

+            /// Clears the contents of this builder.

+            /// </summary>

+            public Builder Clear()

+            {

+                varintList = null;

+                fixed32List = null;

+                fixed64List = null;

+                lengthDelimitedList = null;

+                groupList = null;

+                return this;

+            }

+

+            /// <summary>

+            /// Adds a varint value.

+            /// </summary>

+            [CLSCompliant(false)]

+            public Builder AddVarint(ulong value)

+            {

+                varintList = Add(varintList, value);

+                return this;

+            }

+

+            /// <summary>

+            /// Adds a fixed32 value.

+            /// </summary>

+            [CLSCompliant(false)]

+            public Builder AddFixed32(uint value)

+            {

+                fixed32List = Add(fixed32List, value);

+                return this;

+            }

+

+            /// <summary>

+            /// Adds a fixed64 value.

+            /// </summary>

+            [CLSCompliant(false)]

+            public Builder AddFixed64(ulong value)

+            {

+                fixed64List = Add(fixed64List, value);

+                return this;

+            }

+

+            /// <summary>

+            /// Adds a length-delimited value.

+            /// </summary>

+            public Builder AddLengthDelimited(ByteString value)

+            {

+                lengthDelimitedList = Add(lengthDelimitedList, value);

+                return this;

+            }

+

+            /// <summary>

+            /// Adds an embedded group.

+            /// </summary>

+            /// <param name="value"></param>

+            /// <returns></returns>

+            public Builder AddGroup(UnknownFieldSet value)

+            {

+                groupList = Add(groupList, value);

+                return this;

+            }

+

+            /// <summary>

+            /// Adds <paramref name="value"/> to the <paramref name="list"/>, creating

+            /// a new list if <paramref name="list"/> is null. The list is returned - either

+            /// the original reference or the new list.

+            /// </summary>

+            private static List<T> Add<T>(List<T> list, T value)

+            {

+                if (list == null)

+                {

+                    list = new List<T>();

+                }

+                list.Add(value);

+                return list;

+            }

+

+            /// <summary>

+            /// Returns a read-only version of the given IList, and clears

+            /// the field used for <paramref name="list"/>. If the value

+            /// is null, an empty list is produced using Lists.Empty.

+            /// </summary>

+            /// <returns></returns>

+            private static ReadOnlyCollection<T> MakeReadOnly<T>(ref List<T> list)

+            {

+                ReadOnlyCollection<T> ret = list == null ? Lists<T>.Empty : new ReadOnlyCollection<T>(list);

+                list = null;

+                return ret;

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/UnknownFieldSet.cs b/csharp/src/ProtocolBuffers/UnknownFieldSet.cs
new file mode 100644
index 0000000..09ed680
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/UnknownFieldSet.cs
@@ -0,0 +1,1043 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.IO;

+using Google.ProtocolBuffers.Collections;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Used to keep track of fields which were seen when parsing a protocol message

+    /// but whose field numbers or types are unrecognized. This most frequently

+    /// occurs when new fields are added to a message type and then messages containing

+    /// those fields are read by old software that was built before the new types were

+    /// added.

+    /// 

+    /// Every message contains an UnknownFieldSet.

+    /// 

+    /// Most users will never need to use this class directly.

+    /// </summary>

+    public sealed partial class UnknownFieldSet : IMessageLite

+    {

+        private static readonly UnknownFieldSet defaultInstance =

+            new UnknownFieldSet(new Dictionary<int, UnknownField>());

+

+        private readonly IDictionary<int, UnknownField> fields;

+

+        private UnknownFieldSet(IDictionary<int, UnknownField> fields)

+        {

+            this.fields = fields;

+        }

+

+        /// <summary>

+        /// Creates a new unknown field set builder.

+        /// </summary>

+        public static Builder CreateBuilder()

+        {

+            return new Builder();

+        }

+

+        /// <summary>

+        /// Creates a new unknown field set builder 

+        /// and initialize it from <paramref name="original"/>.

+        /// </summary>

+        public static Builder CreateBuilder(UnknownFieldSet original)

+        {

+            return new Builder().MergeFrom(original);

+        }

+

+        public static UnknownFieldSet DefaultInstance

+        {

+            get { return defaultInstance; }

+        }

+

+        /// <summary>

+        /// Returns a read-only view of the mapping from field numbers to values.

+        /// </summary>

+        public IDictionary<int, UnknownField> FieldDictionary

+        {

+            get { return Dictionaries.AsReadOnly(fields); }

+        }

+

+        /// <summary>

+        /// Checks whether or not the given field number is present in the set.

+        /// </summary>

+        public bool HasField(int field)

+        {

+            return fields.ContainsKey(field);

+        }

+

+        /// <summary>

+        /// Fetches a field by number, returning an empty field if not present.

+        /// Never returns null.

+        /// </summary>

+        public UnknownField this[int number]

+        {

+            get

+            {

+                UnknownField ret;

+                if (!fields.TryGetValue(number, out ret))

+                {

+                    ret = UnknownField.DefaultInstance;

+                }

+                return ret;

+            }

+        }

+

+        /// <summary>

+        /// Serializes the set and writes it to <paramref name="output"/>.

+        /// </summary>

+        public void WriteTo(ICodedOutputStream output)

+        {

+            foreach (KeyValuePair<int, UnknownField> entry in fields)

+            {

+                entry.Value.WriteTo(entry.Key, output);

+            }

+        }

+

+        /// <summary>

+        /// Gets the number of bytes required to encode this set.

+        /// </summary>

+        public int SerializedSize

+        {

+            get

+            {

+                int result = 0;

+                foreach (KeyValuePair<int, UnknownField> entry in fields)

+                {

+                    result += entry.Value.GetSerializedSize(entry.Key);

+                }

+                return result;

+            }

+        }

+

+        /// <summary>

+        /// Converts the set to a string in protocol buffer text format. This

+        /// is just a trivial wrapper around TextFormat.PrintToString.

+        /// </summary>

+        public override String ToString()

+        {

+            return TextFormat.PrintToString(this);

+        }

+

+        /// <summary>

+        /// Converts the set to a string in protocol buffer text format. This

+        /// is just a trivial wrapper around TextFormat.PrintToString.

+        /// </summary>

+        public void PrintTo(TextWriter writer)

+        {

+            TextFormat.Print(this, writer);

+        }

+

+        /// <summary>

+        /// Serializes the message to a ByteString and returns it. This is

+        /// just a trivial wrapper around WriteTo(ICodedOutputStream).

+        /// </summary>

+        /// <returns></returns>

+        public ByteString ToByteString()

+        {

+            ByteString.CodedBuilder codedBuilder = new ByteString.CodedBuilder(SerializedSize);

+            WriteTo(codedBuilder.CodedOutput);

+            return codedBuilder.Build();

+        }

+

+        /// <summary>

+        /// Serializes the message to a byte array and returns it. This is

+        /// just a trivial wrapper around WriteTo(ICodedOutputStream).

+        /// </summary>

+        /// <returns></returns>

+        public byte[] ToByteArray()

+        {

+            byte[] data = new byte[SerializedSize];

+            CodedOutputStream output = CodedOutputStream.CreateInstance(data);

+            WriteTo(output);

+            output.CheckNoSpaceLeft();

+            return data;

+        }

+

+        /// <summary>

+        /// Serializes the message and writes it to <paramref name="output"/>. This is

+        /// just a trivial wrapper around WriteTo(ICodedOutputStream).

+        /// </summary>

+        /// <param name="output"></param>

+        public void WriteTo(Stream output)

+        {

+            CodedOutputStream codedOutput = CodedOutputStream.CreateInstance(output);

+            WriteTo(codedOutput);

+            codedOutput.Flush();

+        }

+

+        /// <summary>

+        /// Serializes the set and writes it to <paramref name="output"/> using

+        /// the MessageSet wire format.

+        /// </summary>

+        public void WriteAsMessageSetTo(ICodedOutputStream output)

+        {

+            foreach (KeyValuePair<int, UnknownField> entry in fields)

+            {

+                entry.Value.WriteAsMessageSetExtensionTo(entry.Key, output);

+            }

+        }

+

+        /// <summary>

+        /// Gets the number of bytes required to encode this set using the MessageSet

+        /// wire format.

+        /// </summary>

+        public int SerializedSizeAsMessageSet

+        {

+            get

+            {

+                int result = 0;

+                foreach (KeyValuePair<int, UnknownField> entry in fields)

+                {

+                    result += entry.Value.GetSerializedSizeAsMessageSetExtension(entry.Key);

+                }

+                return result;

+            }

+        }

+

+        public override bool Equals(object other)

+        {

+            if (ReferenceEquals(this, other))

+            {

+                return true;

+            }

+            UnknownFieldSet otherSet = other as UnknownFieldSet;

+            return otherSet != null && Dictionaries.Equals(fields, otherSet.fields);

+        }

+

+        public override int GetHashCode()

+        {

+            return Dictionaries.GetHashCode(fields);

+        }

+

+        /// <summary>

+        /// Parses an UnknownFieldSet from the given input.

+        /// </summary>

+        public static UnknownFieldSet ParseFrom(ICodedInputStream input)

+        {

+            return CreateBuilder().MergeFrom(input).Build();

+        }

+

+        /// <summary>

+        /// Parses an UnknownFieldSet from the given data.

+        /// </summary>

+        public static UnknownFieldSet ParseFrom(ByteString data)

+        {

+            return CreateBuilder().MergeFrom(data).Build();

+        }

+

+        /// <summary>

+        /// Parses an UnknownFieldSet from the given data.

+        /// </summary>

+        public static UnknownFieldSet ParseFrom(byte[] data)

+        {

+            return CreateBuilder().MergeFrom(data).Build();

+        }

+

+        /// <summary>

+        /// Parses an UnknownFieldSet from the given input.

+        /// </summary>

+        public static UnknownFieldSet ParseFrom(Stream input)

+        {

+            return CreateBuilder().MergeFrom(input).Build();

+        }

+

+        #region IMessageLite Members

+

+        public bool IsInitialized

+        {

+            get { return fields != null; }

+        }

+

+        public void WriteDelimitedTo(Stream output)

+        {

+            CodedOutputStream codedOutput = CodedOutputStream.CreateInstance(output);

+            codedOutput.WriteRawVarint32((uint) SerializedSize);

+            WriteTo(codedOutput);

+            codedOutput.Flush();

+        }

+

+        public IBuilderLite WeakCreateBuilderForType()

+        {

+            return new Builder();

+        }

+

+        public IBuilderLite WeakToBuilder()

+        {

+            return new Builder(fields);

+        }

+

+        public IMessageLite WeakDefaultInstanceForType

+        {

+            get { return defaultInstance; }

+        }

+

+        #endregion

+

+        /// <summary>

+        /// Builder for UnknownFieldSets.

+        /// </summary>

+        public sealed partial class Builder : IBuilderLite

+        {

+            /// <summary>

+            /// Mapping from number to field. Note that by using a SortedList we ensure

+            /// that the fields will be serialized in ascending order.

+            /// </summary>

+            private IDictionary<int, UnknownField> fields;

+

+            // Optimization:  We keep around a builder for the last field that was

+            // modified so that we can efficiently add to it multiple times in a

+            // row (important when parsing an unknown repeated field).

+            private int lastFieldNumber;

+            private UnknownField.Builder lastField;

+

+            internal Builder()

+            {

+                fields = new SortedList<int, UnknownField>();

+            }

+

+            internal Builder(IDictionary<int, UnknownField> dictionary)

+            {

+                fields = new SortedList<int, UnknownField>(dictionary);

+            }

+

+            /// <summary>

+            /// Returns a field builder for the specified field number, including any values

+            /// which already exist.

+            /// </summary>

+            private UnknownField.Builder GetFieldBuilder(int number)

+            {

+                if (lastField != null)

+                {

+                    if (number == lastFieldNumber)

+                    {

+                        return lastField;

+                    }

+                    // Note: AddField() will reset lastField and lastFieldNumber.

+                    AddField(lastFieldNumber, lastField.Build());

+                }

+                if (number == 0)

+                {

+                    return null;

+                }

+

+                lastField = UnknownField.CreateBuilder();

+                UnknownField existing;

+                if (fields.TryGetValue(number, out existing))

+                {

+                    lastField.MergeFrom(existing);

+                }

+                lastFieldNumber = number;

+                return lastField;

+            }

+

+            /// <summary>

+            /// Build the UnknownFieldSet and return it. Once this method has been called,

+            /// this instance will no longer be usable. Calling any method after this

+            /// will throw a NullReferenceException.

+            /// </summary>

+            public UnknownFieldSet Build()

+            {

+                GetFieldBuilder(0); // Force lastField to be built.

+                UnknownFieldSet result = fields.Count == 0 ? DefaultInstance : new UnknownFieldSet(fields);

+                fields = null;

+                return result;

+            }

+

+            /// <summary>

+            /// Adds a field to the set. If a field with the same number already exists, it

+            /// is replaced.

+            /// </summary>

+            public Builder AddField(int number, UnknownField field)

+            {

+                if (number == 0)

+                {

+                    throw new ArgumentOutOfRangeException("number", "Zero is not a valid field number.");

+                }

+                if (lastField != null && lastFieldNumber == number)

+                {

+                    // Discard this.

+                    lastField = null;

+                    lastFieldNumber = 0;

+                }

+                fields[number] = field;

+                return this;

+            }

+

+            /// <summary>

+            /// Resets the builder to an empty set.

+            /// </summary>

+            public Builder Clear()

+            {

+                fields.Clear();

+                lastFieldNumber = 0;

+                lastField = null;

+                return this;

+            }

+

+            /// <summary>

+            /// Parse an entire message from <paramref name="input"/> and merge

+            /// its fields into this set.

+            /// </summary>

+            public Builder MergeFrom(ICodedInputStream input)

+            {

+                uint tag;

+                string name;

+                while (input.ReadTag(out tag, out name))

+                {

+                    if (tag == 0)

+                    {

+                        if (input.SkipField())

+                        {

+                            continue; //can't merge unknown without field tag

+                        }

+                        break;

+                    }

+

+                    if (!MergeFieldFrom(tag, input))

+                    {

+                        break;

+                    }

+                }

+                return this;

+            }

+

+            /// <summary>

+            /// Parse a single field from <paramref name="input"/> and merge it

+            /// into this set.

+            /// </summary>

+            /// <param name="tag">The field's tag number, which was already parsed.</param>

+            /// <param name="input">The coded input stream containing the field</param>

+            /// <returns>false if the tag is an "end group" tag, true otherwise</returns>

+            [CLSCompliant(false)]

+            public bool MergeFieldFrom(uint tag, ICodedInputStream input)

+            {

+                if (tag == 0)

+                {

+                    input.SkipField();

+                    return true;

+                }

+

+                int number = WireFormat.GetTagFieldNumber(tag);

+                switch (WireFormat.GetTagWireType(tag))

+                {

+                    case WireFormat.WireType.Varint:

+                        {

+                            ulong uint64 = 0;

+                            if (input.ReadUInt64(ref uint64))

+                            {

+                                GetFieldBuilder(number).AddVarint(uint64);

+                            }

+                            return true;

+                        }

+                    case WireFormat.WireType.Fixed32:

+                        {

+                            uint uint32 = 0;

+                            if (input.ReadFixed32(ref uint32))

+                            {

+                                GetFieldBuilder(number).AddFixed32(uint32);

+                            }

+                            return true;

+                        }

+                    case WireFormat.WireType.Fixed64:

+                        {

+                            ulong uint64 = 0;

+                            if (input.ReadFixed64(ref uint64))

+                            {

+                                GetFieldBuilder(number).AddFixed64(uint64);

+                            }

+                            return true;

+                        }

+                    case WireFormat.WireType.LengthDelimited:

+                        {

+                            ByteString bytes = null;

+                            if (input.ReadBytes(ref bytes))

+                            {

+                                GetFieldBuilder(number).AddLengthDelimited(bytes);

+                            }

+                            return true;

+                        }

+                    case WireFormat.WireType.StartGroup:

+                        {

+                            Builder subBuilder = CreateBuilder();

+#pragma warning disable 0612

+                            input.ReadUnknownGroup(number, subBuilder);

+#pragma warning restore 0612

+                            GetFieldBuilder(number).AddGroup(subBuilder.Build());

+                            return true;

+                        }

+                    case WireFormat.WireType.EndGroup:

+                        return false;

+                    default:

+                        throw InvalidProtocolBufferException.InvalidWireType();

+                }

+            }

+

+            /// <summary>

+            /// Parses <paramref name="input"/> as an UnknownFieldSet and merge it

+            /// with the set being built. This is just a small wrapper around

+            /// MergeFrom(ICodedInputStream).

+            /// </summary>

+            public Builder MergeFrom(Stream input)

+            {

+                CodedInputStream codedInput = CodedInputStream.CreateInstance(input);

+                MergeFrom(codedInput);

+                codedInput.CheckLastTagWas(0);

+                return this;

+            }

+

+            /// <summary>

+            /// Parses <paramref name="data"/> as an UnknownFieldSet and merge it

+            /// with the set being built. This is just a small wrapper around

+            /// MergeFrom(ICodedInputStream).

+            /// </summary>

+            public Builder MergeFrom(ByteString data)

+            {

+                CodedInputStream input = data.CreateCodedInput();

+                MergeFrom(input);

+                input.CheckLastTagWas(0);

+                return this;

+            }

+

+            /// <summary>

+            /// Parses <paramref name="data"/> as an UnknownFieldSet and merge it

+            /// with the set being built. This is just a small wrapper around

+            /// MergeFrom(ICodedInputStream).

+            /// </summary>

+            public Builder MergeFrom(byte[] data)

+            {

+                CodedInputStream input = CodedInputStream.CreateInstance(data);

+                MergeFrom(input);

+                input.CheckLastTagWas(0);

+                return this;

+            }

+

+            /// <summary>

+            /// Convenience method for merging a new field containing a single varint

+            /// value.  This is used in particular when an unknown enum value is

+            /// encountered.

+            /// </summary>

+            [CLSCompliant(false)]

+            public Builder MergeVarintField(int number, ulong value)

+            {

+                if (number == 0)

+                {

+                    throw new ArgumentOutOfRangeException("number", "Zero is not a valid field number.");

+                }

+                GetFieldBuilder(number).AddVarint(value);

+                return this;

+            }

+

+            /// <summary>

+            /// Merges the fields from <paramref name="other"/> into this set.

+            /// If a field number exists in both sets, the values in <paramref name="other"/>

+            /// will be appended to the values in this set.

+            /// </summary>

+            public Builder MergeFrom(UnknownFieldSet other)

+            {

+                if (other != DefaultInstance)

+                {

+                    foreach (KeyValuePair<int, UnknownField> entry in other.fields)

+                    {

+                        MergeField(entry.Key, entry.Value);

+                    }

+                }

+                return this;

+            }

+

+            /// <summary>

+            /// Checks if the given field number is present in the set.

+            /// </summary>

+            public bool HasField(int number)

+            {

+                if (number == 0)

+                {

+                    throw new ArgumentOutOfRangeException("number", "Zero is not a valid field number.");

+                }

+                return number == lastFieldNumber || fields.ContainsKey(number);

+            }

+

+            /// <summary>

+            /// Adds a field to the unknown field set. If a field with the same

+            /// number already exists, the two are merged.

+            /// </summary>

+            public Builder MergeField(int number, UnknownField field)

+            {

+                if (number == 0)

+                {

+                    throw new ArgumentOutOfRangeException("number", "Zero is not a valid field number.");

+                }

+                if (HasField(number))

+                {

+                    GetFieldBuilder(number).MergeFrom(field);

+                }

+                else

+                {

+                    // Optimization:  We could call getFieldBuilder(number).mergeFrom(field)

+                    // in this case, but that would create a copy of the Field object.

+                    // We'd rather reuse the one passed to us, so call AddField() instead.

+                    AddField(number, field);

+                }

+                return this;

+            }

+

+            internal void MergeFrom(ICodedInputStream input, ExtensionRegistry extensionRegistry, IBuilder builder)

+            {

+                uint tag;

+                string name;

+                while (input.ReadTag(out tag, out name))

+                {

+                    if (tag == 0 && name != null)

+                    {

+                        FieldDescriptor fieldByName = builder.DescriptorForType.FindFieldByName(name);

+                        if (fieldByName != null)

+                        {

+                            tag = WireFormat.MakeTag(fieldByName);

+                        }

+                        else

+                        {

+                            ExtensionInfo extension = extensionRegistry.FindByName(builder.DescriptorForType, name);

+                            if (extension != null)

+                            {

+                                tag = WireFormat.MakeTag(extension.Descriptor);

+                            }

+                        }

+                    }

+                    if (tag == 0)

+                    {

+                        if (input.SkipField())

+                        {

+                            continue; //can't merge unknown without field tag

+                        }

+                        break;

+                    }

+

+                    if (!MergeFieldFrom(input, extensionRegistry, builder, tag, name))

+                    {

+                        // end group tag

+                        break;

+                    }

+                }

+            }

+

+            /// <summary>

+            /// Like <see cref="MergeFrom(ICodedInputStream, ExtensionRegistry, IBuilder)" />

+            /// but parses a single field.

+            /// </summary>

+            /// <param name="input">The input to read the field from</param>

+            /// <param name="extensionRegistry">Registry to use when an extension field is encountered</param>

+            /// <param name="builder">Builder to merge field into, if it's a known field</param>

+            /// <param name="tag">The tag, which should already have been read from the input</param>

+            /// <returns>true unless the tag is an end-group tag</returns>

+            internal bool MergeFieldFrom(ICodedInputStream input,

+                                         ExtensionRegistry extensionRegistry, IBuilder builder, uint tag,

+                                         string fieldName)

+            {

+                if (tag == 0 && fieldName != null)

+                {

+                    FieldDescriptor fieldByName = builder.DescriptorForType.FindFieldByName(fieldName);

+                    if (fieldByName != null)

+                    {

+                        tag = WireFormat.MakeTag(fieldByName);

+                    }

+                    else

+                    {

+                        ExtensionInfo extension = extensionRegistry.FindByName(builder.DescriptorForType, fieldName);

+                        if (extension != null)

+                        {

+                            tag = WireFormat.MakeTag(extension.Descriptor);

+                        }

+                    }

+                }

+

+                MessageDescriptor type = builder.DescriptorForType;

+                if (type.Options.MessageSetWireFormat && tag == WireFormat.MessageSetTag.ItemStart)

+                {

+                    MergeMessageSetExtensionFromCodedStream(input, extensionRegistry, builder);

+                    return true;

+                }

+

+                WireFormat.WireType wireType = WireFormat.GetTagWireType(tag);

+                int fieldNumber = WireFormat.GetTagFieldNumber(tag);

+

+                FieldDescriptor field;

+                IMessageLite defaultFieldInstance = null;

+

+                if (type.IsExtensionNumber(fieldNumber))

+                {

+                    ExtensionInfo extension = extensionRegistry[type, fieldNumber];

+                    if (extension == null)

+                    {

+                        field = null;

+                    }

+                    else

+                    {

+                        field = extension.Descriptor;

+                        defaultFieldInstance = extension.DefaultInstance;

+                    }

+                }

+                else

+                {

+                    field = type.FindFieldByNumber(fieldNumber);

+                }

+

+                // Unknown field or wrong wire type. Skip.

+                if (field == null)

+                {

+                    return MergeFieldFrom(tag, input);

+                }

+                if (wireType != WireFormat.GetWireType(field))

+                {

+                    WireFormat.WireType expectedType = WireFormat.GetWireType(field.FieldType);

+                    if (wireType == expectedType)

+                    {

+                        //Allowed as of 2.3, this is unpacked data for a packed array

+                    }

+                    else if (field.IsRepeated && wireType == WireFormat.WireType.LengthDelimited &&

+                             (expectedType == WireFormat.WireType.Varint || expectedType == WireFormat.WireType.Fixed32 ||

+                              expectedType == WireFormat.WireType.Fixed64))

+                    {

+                        //Allowed as of 2.3, this is packed data for an unpacked array

+                    }

+                    else

+                    {

+                        return MergeFieldFrom(tag, input);

+                    }

+                }

+

+                switch (field.FieldType)

+                {

+                    case FieldType.Group:

+                    case FieldType.Message:

+                        {

+                            IBuilderLite subBuilder = (defaultFieldInstance != null)

+                                                          ? defaultFieldInstance.WeakCreateBuilderForType()

+                                                          : builder.CreateBuilderForField(field);

+                            if (!field.IsRepeated)

+                            {

+                                subBuilder.WeakMergeFrom((IMessageLite) builder[field]);

+                                if (field.FieldType == FieldType.Group)

+                                {

+                                    input.ReadGroup(field.FieldNumber, subBuilder, extensionRegistry);

+                                }

+                                else

+                                {

+                                    input.ReadMessage(subBuilder, extensionRegistry);

+                                }

+                                builder[field] = subBuilder.WeakBuild();

+                            }

+                            else

+                            {

+                                List<IMessageLite> list = new List<IMessageLite>();

+                                if (field.FieldType == FieldType.Group)

+                                {

+                                    input.ReadGroupArray(tag, fieldName, list, subBuilder.WeakDefaultInstanceForType,

+                                                         extensionRegistry);

+                                }

+                                else

+                                {

+                                    input.ReadMessageArray(tag, fieldName, list, subBuilder.WeakDefaultInstanceForType,

+                                                           extensionRegistry);

+                                }

+

+                                foreach (IMessageLite m in list)

+                                {

+                                    builder.WeakAddRepeatedField(field, m);

+                                }

+                                return true;

+                            }

+                            break;

+                        }

+                    case FieldType.Enum:

+                        {

+                            if (!field.IsRepeated)

+                            {

+                                object unknown;

+                                IEnumLite value = null;

+                                if (input.ReadEnum(ref value, out unknown, field.EnumType))

+                                {

+                                    builder[field] = value;

+                                }

+                                else if (unknown is int)

+                                {

+                                    MergeVarintField(fieldNumber, (ulong) (int) unknown);

+                                }

+                            }

+                            else

+                            {

+                                ICollection<object> unknown;

+                                List<IEnumLite> list = new List<IEnumLite>();

+                                input.ReadEnumArray(tag, fieldName, list, out unknown, field.EnumType);

+

+                                foreach (IEnumLite en in list)

+                                {

+                                    builder.WeakAddRepeatedField(field, en);

+                                }

+

+                                if (unknown != null)

+                                {

+                                    foreach (object oval in unknown)

+                                    {

+                                        if (oval is int)

+                                        {

+                                            MergeVarintField(fieldNumber, (ulong) (int) oval);

+                                        }

+                                    }

+                                }

+                            }

+                            break;

+                        }

+                    default:

+                        {

+                            if (!field.IsRepeated)

+                            {

+                                object value = null;

+                                if (input.ReadPrimitiveField(field.FieldType, ref value))

+                                {

+                                    builder[field] = value;

+                                }

+                            }

+                            else

+                            {

+                                List<object> list = new List<object>();

+                                input.ReadPrimitiveArray(field.FieldType, tag, fieldName, list);

+                                foreach (object oval in list)

+                                {

+                                    builder.WeakAddRepeatedField(field, oval);

+                                }

+                            }

+                            break;

+                        }

+                }

+                return true;

+            }

+

+            /// <summary>

+            /// Called by MergeFieldFrom to parse a MessageSet extension.

+            /// </summary>

+            private void MergeMessageSetExtensionFromCodedStream(ICodedInputStream input,

+                                                                 ExtensionRegistry extensionRegistry, IBuilder builder)

+            {

+                MessageDescriptor type = builder.DescriptorForType;

+

+                // The wire format for MessageSet is:

+                //   message MessageSet {

+                //     repeated group Item = 1 {

+                //       required int32 typeId = 2;

+                //       required bytes message = 3;

+                //     }

+                //   }

+                // "typeId" is the extension's field number.  The extension can only be

+                // a message type, where "message" contains the encoded bytes of that

+                // message.

+                //

+                // In practice, we will probably never see a MessageSet item in which

+                // the message appears before the type ID, or where either field does not

+                // appear exactly once.  However, in theory such cases are valid, so we

+                // should be prepared to accept them.

+

+                int typeId = 0;

+                ByteString rawBytes = null; // If we encounter "message" before "typeId"

+                IBuilderLite subBuilder = null;

+                FieldDescriptor field = null;

+

+                uint lastTag = WireFormat.MessageSetTag.ItemStart;

+                uint tag;

+                string name;

+                while (input.ReadTag(out tag, out name))

+                {

+                    if (tag == 0 && name != null)

+                    {

+                        if (name == "type_id")

+                        {

+                            tag = WireFormat.MessageSetTag.TypeID;

+                        }

+                        else if (name == "message")

+                        {

+                            tag = WireFormat.MessageSetTag.Message;

+                        }

+                    }

+                    if (tag == 0)

+                    {

+                        if (input.SkipField())

+                        {

+                            continue; //can't merge unknown without field tag

+                        }

+                        break;

+                    }

+

+                    lastTag = tag;

+                    if (tag == WireFormat.MessageSetTag.TypeID)

+                    {

+                        typeId = 0;

+                        // Zero is not a valid type ID.

+                        if (input.ReadInt32(ref typeId) && typeId != 0)

+                        {

+                            ExtensionInfo extension = extensionRegistry[type, typeId];

+                            if (extension != null)

+                            {

+                                field = extension.Descriptor;

+                                subBuilder = extension.DefaultInstance.WeakCreateBuilderForType();

+                                IMessageLite originalMessage = (IMessageLite) builder[field];

+                                if (originalMessage != null)

+                                {

+                                    subBuilder.WeakMergeFrom(originalMessage);

+                                }

+                                if (rawBytes != null)

+                                {

+                                    // We already encountered the message.  Parse it now.

+                                    // TODO(jonskeet): Check this is okay. It's subtly different from the Java, as it doesn't create an input stream from rawBytes.

+                                    // In fact, why don't we just call MergeFrom(rawBytes)? And what about the extension registry?

+                                    subBuilder.WeakMergeFrom(rawBytes.CreateCodedInput());

+                                    rawBytes = null;

+                                }

+                            }

+                            else

+                            {

+                                // Unknown extension number.  If we already saw data, put it

+                                // in rawBytes.

+                                if (rawBytes != null)

+                                {

+                                    MergeField(typeId, UnknownField.CreateBuilder().AddLengthDelimited(rawBytes).Build());

+                                    rawBytes = null;

+                                }

+                            }

+                        }

+                    }

+                    else if (tag == WireFormat.MessageSetTag.Message)

+                    {

+                        if (subBuilder != null)

+                        {

+                            // We already know the type, so we can parse directly from the input

+                            // with no copying.  Hooray!

+                            input.ReadMessage(subBuilder, extensionRegistry);

+                        }

+                        else if (input.ReadBytes(ref rawBytes))

+                        {

+                            if (typeId != 0)

+                            {

+                                // We don't know how to parse this.  Ignore it.

+                                MergeField(typeId,

+                                           UnknownField.CreateBuilder().AddLengthDelimited(rawBytes).Build());

+                            }

+                        }

+                    }

+                    else

+                    {

+                        // Unknown tag.  Skip it.

+                        if (!input.SkipField())

+                        {

+                            break; // end of group

+                        }

+                    }

+                }

+

+                if (lastTag != WireFormat.MessageSetTag.ItemEnd)

+                {

+                    throw InvalidProtocolBufferException.InvalidEndTag();

+                }

+

+                if (subBuilder != null)

+                {

+                    builder[field] = subBuilder.WeakBuild();

+                }

+            }

+

+            #region IBuilderLite Members

+

+            bool IBuilderLite.IsInitialized

+            {

+                get { return fields != null; }

+            }

+

+            IBuilderLite IBuilderLite.WeakClear()

+            {

+                return Clear();

+            }

+

+            IBuilderLite IBuilderLite.WeakMergeFrom(IMessageLite message)

+            {

+                return MergeFrom((UnknownFieldSet) message);

+            }

+

+            IBuilderLite IBuilderLite.WeakMergeFrom(ByteString data)

+            {

+                return MergeFrom(data);

+            }

+

+            IBuilderLite IBuilderLite.WeakMergeFrom(ByteString data, ExtensionRegistry registry)

+            {

+                return MergeFrom(data);

+            }

+

+            IBuilderLite IBuilderLite.WeakMergeFrom(ICodedInputStream input)

+            {

+                return MergeFrom(input);

+            }

+

+            IBuilderLite IBuilderLite.WeakMergeFrom(ICodedInputStream input, ExtensionRegistry registry)

+            {

+                return MergeFrom(input);

+            }

+

+            IMessageLite IBuilderLite.WeakBuild()

+            {

+                return Build();

+            }

+

+            IMessageLite IBuilderLite.WeakBuildPartial()

+            {

+                return Build();

+            }

+

+            IBuilderLite IBuilderLite.WeakClone()

+            {

+                return Build().WeakToBuilder();

+            }

+

+            IMessageLite IBuilderLite.WeakDefaultInstanceForType

+            {

+                get { return DefaultInstance; }

+            }

+

+            #endregion

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffers/WireFormat.cs b/csharp/src/ProtocolBuffers/WireFormat.cs
new file mode 100644
index 0000000..a03f165
--- /dev/null
+++ b/csharp/src/ProtocolBuffers/WireFormat.cs
@@ -0,0 +1,192 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using Google.ProtocolBuffers.Descriptors;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// This class is used internally by the Protocol Buffer Library and generated

+    /// message implementations. It is public only for the sake of those generated

+    /// messages. Others should not use this class directly.

+    /// <para>

+    /// This class contains constants and helper functions useful for dealing with

+    /// the Protocol Buffer wire format.

+    /// </para>

+    /// </summary>

+    public static class WireFormat

+    {

+        #region Fixed sizes.

+

+        // TODO(jonskeet): Move these somewhere else. They're messy. Consider making FieldType a smarter kind of enum

+        public const int Fixed32Size = 4;

+        public const int Fixed64Size = 8;

+        public const int SFixed32Size = 4;

+        public const int SFixed64Size = 8;

+        public const int FloatSize = 4;

+        public const int DoubleSize = 8;

+        public const int BoolSize = 1;

+

+        #endregion

+

+        [CLSCompliant(false)]

+        public enum WireType : uint

+        {

+            Varint = 0,

+            Fixed64 = 1,

+            LengthDelimited = 2,

+            StartGroup = 3,

+            EndGroup = 4,

+            Fixed32 = 5

+        }

+

+        internal static class MessageSetField

+        {

+            internal const int Item = 1;

+            internal const int TypeID = 2;

+            internal const int Message = 3;

+        }

+

+        internal static class MessageSetTag

+        {

+            internal static readonly uint ItemStart = MakeTag(MessageSetField.Item, WireType.StartGroup);

+            internal static readonly uint ItemEnd = MakeTag(MessageSetField.Item, WireType.EndGroup);

+            internal static readonly uint TypeID = MakeTag(MessageSetField.TypeID, WireType.Varint);

+            internal static readonly uint Message = MakeTag(MessageSetField.Message, WireType.LengthDelimited);

+        }

+

+        private const int TagTypeBits = 3;

+        private const uint TagTypeMask = (1 << TagTypeBits) - 1;

+

+        /// <summary>

+        /// Given a tag value, determines the wire type (lower 3 bits).

+        /// </summary>

+        [CLSCompliant(false)]

+        public static WireType GetTagWireType(uint tag)

+        {

+            return (WireType) (tag & TagTypeMask);

+        }

+

+        [CLSCompliant(false)]

+        public static bool IsEndGroupTag(uint tag)

+        {

+            return (WireType) (tag & TagTypeMask) == WireType.EndGroup;

+        }

+

+        /// <summary>

+        /// Given a tag value, determines the field number (the upper 29 bits).

+        /// </summary>

+        [CLSCompliant(false)]

+        public static int GetTagFieldNumber(uint tag)

+        {

+            return (int) tag >> TagTypeBits;

+        }

+

+        /// <summary>

+        /// Makes a tag value given a field number and wire type.

+        /// TODO(jonskeet): Should we just have a Tag structure?

+        /// </summary>

+        [CLSCompliant(false)]

+        public static uint MakeTag(int fieldNumber, WireType wireType)

+        {

+            return (uint) (fieldNumber << TagTypeBits) | (uint) wireType;

+        }

+

+#if !LITE

+        [CLSCompliant(false)]

+        public static uint MakeTag(FieldDescriptor field)

+        {

+            return MakeTag(field.FieldNumber, GetWireType(field));

+        }

+

+        /// <summary>

+        /// Returns the wire type for the given field descriptor. This differs

+        /// from GetWireType(FieldType) for packed repeated fields.

+        /// </summary>

+        internal static WireType GetWireType(FieldDescriptor descriptor)

+        {

+            return descriptor.IsPacked ? WireType.LengthDelimited : GetWireType(descriptor.FieldType);

+        }

+

+#endif

+

+        /// <summary>

+        /// Converts a field type to its wire type. Done with a switch for the sake

+        /// of speed - this is significantly faster than a dictionary lookup.

+        /// </summary>

+        [CLSCompliant(false)]

+        public static WireType GetWireType(FieldType fieldType)

+        {

+            switch (fieldType)

+            {

+                case FieldType.Double:

+                    return WireType.Fixed64;

+                case FieldType.Float:

+                    return WireType.Fixed32;

+                case FieldType.Int64:

+                case FieldType.UInt64:

+                case FieldType.Int32:

+                    return WireType.Varint;

+                case FieldType.Fixed64:

+                    return WireType.Fixed64;

+                case FieldType.Fixed32:

+                    return WireType.Fixed32;

+                case FieldType.Bool:

+                    return WireType.Varint;

+                case FieldType.String:

+                    return WireType.LengthDelimited;

+                case FieldType.Group:

+                    return WireType.StartGroup;

+                case FieldType.Message:

+                case FieldType.Bytes:

+                    return WireType.LengthDelimited;

+                case FieldType.UInt32:

+                    return WireType.Varint;

+                case FieldType.SFixed32:

+                    return WireType.Fixed32;

+                case FieldType.SFixed64:

+                    return WireType.Fixed64;

+                case FieldType.SInt32:

+                case FieldType.SInt64:

+                case FieldType.Enum:

+                    return WireType.Varint;

+                default:

+                    throw new ArgumentOutOfRangeException("No such field type");

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLibrary.CF20.sln b/csharp/src/ProtocolBuffersLibrary.CF20.sln
new file mode 100644
index 0000000..7f1836f
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLibrary.CF20.sln
@@ -0,0 +1,55 @@
+Microsoft Visual Studio Solution File, Format Version 10.00

+# Visual Studio 2008

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers", "ProtocolBuffers\ProtocolBuffers.CF20.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite", "ProtocolBuffers\ProtocolBuffersLite.CF20.csproj", "{6969BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.CF20.csproj", "{231391AF-449C-4A39-986C-AD7F270F4750}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.CF20.csproj", "{E067A59D-9D0A-4A1F-92B1-38E4457241D1}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Test", "ProtocolBuffers.Test\ProtocolBuffers.Test.CF20.csproj", "{DD01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLite.Test.CF20.csproj", "{EE01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLiteMixed.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLiteMixed.Test.CF20.csproj", "{EEFFED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug|Any CPU = Debug|Any CPU

+		Release|Any CPU = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.Build.0 = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.Build.0 = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+EndGlobal

diff --git a/csharp/src/ProtocolBuffersLibrary.CF35.sln b/csharp/src/ProtocolBuffersLibrary.CF35.sln
new file mode 100644
index 0000000..d83e22c
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLibrary.CF35.sln
@@ -0,0 +1,55 @@
+Microsoft Visual Studio Solution File, Format Version 10.00

+# Visual Studio 2008

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers", "ProtocolBuffers\ProtocolBuffers.CF35.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite", "ProtocolBuffers\ProtocolBuffersLite.CF35.csproj", "{6969BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.CF35.csproj", "{231391AF-449C-4A39-986C-AD7F270F4750}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.CF35.csproj", "{E067A59D-9D0A-4A1F-92B1-38E4457241D1}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Test", "ProtocolBuffers.Test\ProtocolBuffers.Test.CF35.csproj", "{DD01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLite.Test.CF35.csproj", "{EE01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLiteMixed.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLiteMixed.Test.CF35.csproj", "{EEFFED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug|Any CPU = Debug|Any CPU

+		Release|Any CPU = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.Build.0 = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.Build.0 = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+EndGlobal

diff --git a/csharp/src/ProtocolBuffersLibrary.NET20.sln b/csharp/src/ProtocolBuffersLibrary.NET20.sln
new file mode 100644
index 0000000..2de8ed2
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLibrary.NET20.sln
@@ -0,0 +1,55 @@
+Microsoft Visual Studio Solution File, Format Version 10.00

+# Visual Studio 2008

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers", "ProtocolBuffers\ProtocolBuffers.NET20.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite", "ProtocolBuffers\ProtocolBuffersLite.NET20.csproj", "{6969BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.NET20.csproj", "{231391AF-449C-4A39-986C-AD7F270F4750}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.NET20.csproj", "{E067A59D-9D0A-4A1F-92B1-38E4457241D1}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Test", "ProtocolBuffers.Test\ProtocolBuffers.Test.NET20.csproj", "{DD01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLite.Test.NET20.csproj", "{EE01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLiteMixed.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLiteMixed.Test.NET20.csproj", "{EEFFED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug|Any CPU = Debug|Any CPU

+		Release|Any CPU = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.Build.0 = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.Build.0 = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+EndGlobal

diff --git a/csharp/src/ProtocolBuffersLibrary.NET35.sln b/csharp/src/ProtocolBuffersLibrary.NET35.sln
new file mode 100644
index 0000000..639ab17
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLibrary.NET35.sln
@@ -0,0 +1,55 @@
+Microsoft Visual Studio Solution File, Format Version 10.00

+# Visual Studio 2008

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers", "ProtocolBuffers\ProtocolBuffers.NET35.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite", "ProtocolBuffers\ProtocolBuffersLite.NET35.csproj", "{6969BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.NET35.csproj", "{231391AF-449C-4A39-986C-AD7F270F4750}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.NET35.csproj", "{E067A59D-9D0A-4A1F-92B1-38E4457241D1}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Test", "ProtocolBuffers.Test\ProtocolBuffers.Test.NET35.csproj", "{DD01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLite.Test.NET35.csproj", "{EE01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLiteMixed.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLiteMixed.Test.NET35.csproj", "{EEFFED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug|Any CPU = Debug|Any CPU

+		Release|Any CPU = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.Build.0 = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.Build.0 = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+EndGlobal

diff --git a/csharp/src/ProtocolBuffersLibrary.NET40.sln b/csharp/src/ProtocolBuffersLibrary.NET40.sln
new file mode 100644
index 0000000..8492645
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLibrary.NET40.sln
@@ -0,0 +1,55 @@
+Microsoft Visual Studio Solution File, Format Version 11.00

+# Visual Studio 2010

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers", "ProtocolBuffers\ProtocolBuffers.NET40.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite", "ProtocolBuffers\ProtocolBuffersLite.NET40.csproj", "{6969BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.NET40.csproj", "{231391AF-449C-4A39-986C-AD7F270F4750}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.NET40.csproj", "{E067A59D-9D0A-4A1F-92B1-38E4457241D1}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Test", "ProtocolBuffers.Test\ProtocolBuffers.Test.NET40.csproj", "{DD01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLite.Test.NET40.csproj", "{EE01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLiteMixed.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLiteMixed.Test.NET40.csproj", "{EEFFED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug|Any CPU = Debug|Any CPU

+		Release|Any CPU = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.Build.0 = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.Build.0 = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+EndGlobal

diff --git a/csharp/src/ProtocolBuffersLibrary.PL40.sln b/csharp/src/ProtocolBuffersLibrary.PL40.sln
new file mode 100644
index 0000000..aca83c2
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLibrary.PL40.sln
@@ -0,0 +1,55 @@
+Microsoft Visual Studio Solution File, Format Version 11.00

+# Visual Studio 2010

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers", "ProtocolBuffers\ProtocolBuffers.PL40.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite", "ProtocolBuffers\ProtocolBuffersLite.PL40.csproj", "{6969BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.PL40.csproj", "{231391AF-449C-4A39-986C-AD7F270F4750}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.PL40.csproj", "{E067A59D-9D0A-4A1F-92B1-38E4457241D1}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Test", "ProtocolBuffers.Test\ProtocolBuffers.Test.PL40.csproj", "{DD01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLite.Test.PL40.csproj", "{EE01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLiteMixed.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLiteMixed.Test.PL40.csproj", "{EEFFED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug|Any CPU = Debug|Any CPU

+		Release|Any CPU = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.Build.0 = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.Build.0 = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+EndGlobal

diff --git a/csharp/src/ProtocolBuffersLibrary.SL20.sln b/csharp/src/ProtocolBuffersLibrary.SL20.sln
new file mode 100644
index 0000000..bba4ada
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLibrary.SL20.sln
@@ -0,0 +1,55 @@
+Microsoft Visual Studio Solution File, Format Version 10.00

+# Visual Studio 2008

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers", "ProtocolBuffers\ProtocolBuffers.SL20.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite", "ProtocolBuffers\ProtocolBuffersLite.SL20.csproj", "{6969BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.SL20.csproj", "{231391AF-449C-4A39-986C-AD7F270F4750}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.SL20.csproj", "{E067A59D-9D0A-4A1F-92B1-38E4457241D1}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Test", "ProtocolBuffers.Test\ProtocolBuffers.Test.SL20.csproj", "{DD01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLite.Test.SL20.csproj", "{EE01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLiteMixed.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLiteMixed.Test.SL20.csproj", "{EEFFED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug|Any CPU = Debug|Any CPU

+		Release|Any CPU = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.Build.0 = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.Build.0 = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+EndGlobal

diff --git a/csharp/src/ProtocolBuffersLibrary.SL30.sln b/csharp/src/ProtocolBuffersLibrary.SL30.sln
new file mode 100644
index 0000000..080c22e
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLibrary.SL30.sln
@@ -0,0 +1,55 @@
+Microsoft Visual Studio Solution File, Format Version 10.00

+# Visual Studio 2008

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers", "ProtocolBuffers\ProtocolBuffers.SL30.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite", "ProtocolBuffers\ProtocolBuffersLite.SL30.csproj", "{6969BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.SL30.csproj", "{231391AF-449C-4A39-986C-AD7F270F4750}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.SL30.csproj", "{E067A59D-9D0A-4A1F-92B1-38E4457241D1}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Test", "ProtocolBuffers.Test\ProtocolBuffers.Test.SL30.csproj", "{DD01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLite.Test.SL30.csproj", "{EE01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLiteMixed.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLiteMixed.Test.SL30.csproj", "{EEFFED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug|Any CPU = Debug|Any CPU

+		Release|Any CPU = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.Build.0 = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.Build.0 = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+EndGlobal

diff --git a/csharp/src/ProtocolBuffersLibrary.SL40.sln b/csharp/src/ProtocolBuffersLibrary.SL40.sln
new file mode 100644
index 0000000..01ea574
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLibrary.SL40.sln
@@ -0,0 +1,55 @@
+Microsoft Visual Studio Solution File, Format Version 11.00

+# Visual Studio 2010

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers", "ProtocolBuffers\ProtocolBuffers.SL40.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite", "ProtocolBuffers\ProtocolBuffersLite.SL40.csproj", "{6969BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.SL40.csproj", "{231391AF-449C-4A39-986C-AD7F270F4750}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.SL40.csproj", "{E067A59D-9D0A-4A1F-92B1-38E4457241D1}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Test", "ProtocolBuffers.Test\ProtocolBuffers.Test.SL40.csproj", "{DD01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLite.Test.SL40.csproj", "{EE01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLiteMixed.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLiteMixed.Test.SL40.csproj", "{EEFFED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug|Any CPU = Debug|Any CPU

+		Release|Any CPU = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.Build.0 = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.Build.0 = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+EndGlobal

diff --git a/csharp/src/ProtocolBuffersLibrary.sln b/csharp/src/ProtocolBuffersLibrary.sln
new file mode 100644
index 0000000..c91314a
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLibrary.sln
@@ -0,0 +1,55 @@
+Microsoft Visual Studio Solution File, Format Version 10.00

+# Visual Studio 2008

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers", "ProtocolBuffers\ProtocolBuffers.csproj", "{6908BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite", "ProtocolBuffers\ProtocolBuffersLite.csproj", "{6969BDCE-D925-43F3-94AC-A531E6DF2591}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffers.Serialization.csproj", "{231391AF-449C-4A39-986C-AD7F270F4750}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Serialization", "ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.csproj", "{E067A59D-9D0A-4A1F-92B1-38E4457241D1}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffers.Test", "ProtocolBuffers.Test\ProtocolBuffers.Test.csproj", "{DD01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLite.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLite.Test.csproj", "{EE01ED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProtocolBuffersLiteMixed.Test", "ProtocolBuffersLite.Test\ProtocolBuffersLiteMixed.Test.csproj", "{EEFFED24-3750-4567-9A23-1DB676A15610}"

+EndProject

+Global

+	GlobalSection(SolutionConfigurationPlatforms) = preSolution

+		Debug|Any CPU = Debug|Any CPU

+		Release|Any CPU = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(ProjectConfigurationPlatforms) = postSolution

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6908BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{6969BDCE-D925-43F3-94AC-A531E6DF2591}.Release|Any CPU.Build.0 = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{231391AF-449C-4A39-986C-AD7F270F4750}.Release|Any CPU.Build.0 = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{E067A59D-9D0A-4A1F-92B1-38E4457241D1}.Release|Any CPU.Build.0 = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{DD01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EE01ED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Debug|Any CPU.Build.0 = Debug|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.ActiveCfg = Release|Any CPU

+		{EEFFED24-3750-4567-9A23-1DB676A15610}.Release|Any CPU.Build.0 = Release|Any CPU

+	EndGlobalSection

+	GlobalSection(SolutionProperties) = preSolution

+		HideSolutionNode = FALSE

+	EndGlobalSection

+EndGlobal

diff --git a/csharp/src/ProtocolBuffersLite.Test/AbstractBuilderLiteTest.cs b/csharp/src/ProtocolBuffersLite.Test/AbstractBuilderLiteTest.cs
new file mode 100644
index 0000000..66791af
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/AbstractBuilderLiteTest.cs
@@ -0,0 +1,340 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.IO;

+using Google.ProtocolBuffers;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class AbstractBuilderLiteTest

+    {

+        [TestMethod]

+        public void TestMergeFromCodedInputStream()

+        {

+            TestAllTypesLite copy,

+                             msg = TestAllTypesLite.CreateBuilder()

+                                 .SetOptionalUint32(uint.MaxValue).Build();

+

+            copy = TestAllTypesLite.DefaultInstance;

+            Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            using (MemoryStream ms = new MemoryStream(msg.ToByteArray()))

+            {

+                CodedInputStream ci = CodedInputStream.CreateInstance(ms);

+                copy = copy.ToBuilder().MergeFrom(ci).Build();

+            }

+

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestIBuilderLiteWeakClear()

+        {

+            TestAllTypesLite copy, msg = TestAllTypesLite.DefaultInstance;

+

+            copy = msg.ToBuilder().SetOptionalString("Should be removed.").Build();

+            Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            copy = (TestAllTypesLite) ((IBuilderLite) copy.ToBuilder()).WeakClear().WeakBuild();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestBuilderLiteMergeFromCodedInputStream()

+        {

+            TestAllTypesLite copy,

+                             msg = TestAllTypesLite.CreateBuilder()

+                                 .SetOptionalString("Should be merged.").Build();

+

+            copy = TestAllTypesLite.DefaultInstance;

+            Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            copy =

+                copy.ToBuilder().MergeFrom(CodedInputStream.CreateInstance(new MemoryStream(msg.ToByteArray()))).Build();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestBuilderLiteMergeDelimitedFrom()

+        {

+            TestAllTypesLite copy,

+                             msg = TestAllTypesLite.CreateBuilder()

+                                 .SetOptionalString("Should be merged.").Build();

+

+            copy = TestAllTypesLite.DefaultInstance;

+            Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());

+            Stream s = new MemoryStream();

+            msg.WriteDelimitedTo(s);

+            s.Position = 0;

+            copy = copy.ToBuilder().MergeDelimitedFrom(s).Build();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestBuilderLiteMergeDelimitedFromExtensions()

+        {

+            TestAllExtensionsLite copy,

+                                  msg = TestAllExtensionsLite.CreateBuilder()

+                                      .SetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite,

+                                                    "Should be merged.").Build();

+

+            copy = TestAllExtensionsLite.DefaultInstance;

+            Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            Stream s = new MemoryStream();

+            msg.WriteDelimitedTo(s);

+            s.Position = 0;

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestLiteProtoFile.RegisterAllExtensions(registry);

+

+            copy = copy.ToBuilder().MergeDelimitedFrom(s, registry).Build();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+            Assert.AreEqual("Should be merged.", copy.GetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite));

+        }

+

+        [TestMethod]

+        public void TestBuilderLiteMergeFromStream()

+        {

+            TestAllTypesLite copy,

+                             msg = TestAllTypesLite.CreateBuilder()

+                                 .SetOptionalString("Should be merged.").Build();

+

+            copy = TestAllTypesLite.DefaultInstance;

+            Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());

+            Stream s = new MemoryStream();

+            msg.WriteTo(s);

+            s.Position = 0;

+            copy = copy.ToBuilder().MergeFrom(s).Build();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestBuilderLiteMergeFromStreamExtensions()

+        {

+            TestAllExtensionsLite copy,

+                                  msg = TestAllExtensionsLite.CreateBuilder()

+                                      .SetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite,

+                                                    "Should be merged.").Build();

+

+            copy = TestAllExtensionsLite.DefaultInstance;

+            Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            Stream s = new MemoryStream();

+            msg.WriteTo(s);

+            s.Position = 0;

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestLiteProtoFile.RegisterAllExtensions(registry);

+

+            copy = copy.ToBuilder().MergeFrom(s, registry).Build();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+            Assert.AreEqual("Should be merged.", copy.GetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite));

+        }

+

+        [TestMethod]

+        public void TestIBuilderLiteWeakMergeFromIMessageLite()

+        {

+            TestAllTypesLite copy,

+                             msg = TestAllTypesLite.CreateBuilder()

+                                 .SetOptionalString("Should be merged.").Build();

+

+            copy = TestAllTypesLite.DefaultInstance;

+            Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            copy = (TestAllTypesLite) ((IBuilderLite) copy.ToBuilder()).WeakMergeFrom((IMessageLite) msg).WeakBuild();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestIBuilderLiteWeakMergeFromByteString()

+        {

+            TestAllTypesLite copy,

+                             msg = TestAllTypesLite.CreateBuilder()

+                                 .SetOptionalString("Should be merged.").Build();

+

+            copy = TestAllTypesLite.DefaultInstance;

+            Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            copy = (TestAllTypesLite) ((IBuilderLite) copy.ToBuilder()).WeakMergeFrom(msg.ToByteString()).WeakBuild();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestIBuilderLiteWeakMergeFromByteStringExtensions()

+        {

+            TestAllExtensionsLite copy,

+                                  msg = TestAllExtensionsLite.CreateBuilder()

+                                      .SetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite,

+                                                    "Should be merged.").Build();

+

+            copy = TestAllExtensionsLite.DefaultInstance;

+            Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            copy =

+                (TestAllExtensionsLite)

+                ((IBuilderLite) copy.ToBuilder()).WeakMergeFrom(msg.ToByteString(), ExtensionRegistry.Empty).WeakBuild();

+            Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestLiteProtoFile.RegisterAllExtensions(registry);

+

+            copy =

+                (TestAllExtensionsLite)

+                ((IBuilderLite) copy.ToBuilder()).WeakMergeFrom(msg.ToByteString(), registry).WeakBuild();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+            Assert.AreEqual("Should be merged.", copy.GetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite));

+        }

+

+        [TestMethod]

+        public void TestIBuilderLiteWeakMergeFromCodedInputStream()

+        {

+            TestAllTypesLite copy,

+                             msg = TestAllTypesLite.CreateBuilder()

+                                 .SetOptionalUint32(uint.MaxValue).Build();

+

+            copy = TestAllTypesLite.DefaultInstance;

+            Assert.AreNotEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            using (MemoryStream ms = new MemoryStream(msg.ToByteArray()))

+            {

+                CodedInputStream ci = CodedInputStream.CreateInstance(ms);

+                copy = (TestAllTypesLite) ((IBuilderLite) copy.ToBuilder()).WeakMergeFrom(ci).WeakBuild();

+            }

+

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestIBuilderLiteWeakBuildPartial()

+        {

+            IBuilderLite builder = TestRequiredLite.CreateBuilder();

+            Assert.IsFalse(builder.IsInitialized);

+

+            IMessageLite msg = builder.WeakBuildPartial();

+            Assert.IsFalse(msg.IsInitialized);

+

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), TestRequiredLite.DefaultInstance.ToByteArray());

+        }

+

+        [TestMethod, ExpectedException(typeof(UninitializedMessageException))]

+        public void TestIBuilderLiteWeakBuildUninitialized()

+        {

+            IBuilderLite builder = TestRequiredLite.CreateBuilder();

+            Assert.IsFalse(builder.IsInitialized);

+            builder.WeakBuild();

+        }

+

+        [TestMethod]

+        public void TestIBuilderLiteWeakBuild()

+        {

+            IBuilderLite builder = TestRequiredLite.CreateBuilder()

+                .SetD(0)

+                .SetEn(ExtraEnum.EXLITE_BAZ);

+            Assert.IsTrue(builder.IsInitialized);

+            builder.WeakBuild();

+        }

+

+        [TestMethod]

+        public void TestIBuilderLiteWeakClone()

+        {

+            TestRequiredLite msg = TestRequiredLite.CreateBuilder()

+                .SetD(1).SetEn(ExtraEnum.EXLITE_BAR).Build();

+            Assert.IsTrue(msg.IsInitialized);

+

+            IMessageLite copy = ((IBuilderLite) msg.ToBuilder()).WeakClone().WeakBuild();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestIBuilderLiteWeakDefaultInstance()

+        {

+            Assert.IsTrue(ReferenceEquals(TestRequiredLite.DefaultInstance,

+                                          ((IBuilderLite) TestRequiredLite.CreateBuilder()).WeakDefaultInstanceForType));

+        }

+

+        [TestMethod]

+        public void TestGeneratedBuilderLiteAddRange()

+        {

+            TestAllTypesLite copy,

+                             msg = TestAllTypesLite.CreateBuilder()

+                                 .SetOptionalUint32(123)

+                                 .AddRepeatedInt32(1)

+                                 .AddRepeatedInt32(2)

+                                 .AddRepeatedInt32(3)

+                                 .Build();

+

+            copy = msg.DefaultInstanceForType.ToBuilder().MergeFrom(msg).Build();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+

+        // ROK 5/7/2013 Issue #54: should retire all bytes in buffer (bufferSize)

+        [TestMethod]

+        public void TestBufferRefillIssue()

+        {

+            var ms = new MemoryStream();

+            BucketOfBytes.CreateBuilder()

+                .SetValue(ByteString.CopyFrom(new byte[3000]))

+                .Build().WriteDelimitedTo(ms);

+            BucketOfBytesEx.CreateBuilder()

+                .SetValue(ByteString.CopyFrom(new byte[1000]))

+                .SetValue2(ByteString.CopyFrom(new byte[1100]))

+                .Build().WriteDelimitedTo(ms);

+            BucketOfBytes.CreateBuilder()

+                .SetValue(ByteString.CopyFrom(new byte[100]))

+                .Build().WriteDelimitedTo(ms);

+

+            ms.Position = 0;

+            var input = CodedInputStream.CreateInstance(ms);

+            var builder = BucketOfBytes.CreateBuilder();

+            input.ReadMessage(builder, ExtensionRegistry.Empty);

+            Assert.AreEqual(3005L, input.Position);

+            Assert.AreEqual(3000, builder.Value.Length);

+            input.ReadMessage(builder, ExtensionRegistry.Empty);

+            Assert.AreEqual(5114, input.Position);

+            Assert.AreEqual(1000, builder.Value.Length);

+            input.ReadMessage(builder, ExtensionRegistry.Empty);

+            Assert.AreEqual(5217L, input.Position);

+            Assert.AreEqual(input.Position, ms.Length);

+            Assert.AreEqual(100, builder.Value.Length);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/AbstractMessageLiteTest.cs b/csharp/src/ProtocolBuffersLite.Test/AbstractMessageLiteTest.cs
new file mode 100644
index 0000000..bead60f
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/AbstractMessageLiteTest.cs
@@ -0,0 +1,136 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.IO;

+using Google.ProtocolBuffers;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class AbstractMessageLiteTest

+    {

+        [TestMethod]

+        public void TestMessageLiteToByteString()

+        {

+            TestRequiredLite msg = TestRequiredLite.CreateBuilder()

+                .SetD(42)

+                .SetEn(ExtraEnum.EXLITE_BAZ)

+                .Build();

+

+            ByteString b = msg.ToByteString();

+            Assert.AreEqual(4, b.Length);

+            Assert.AreEqual(TestRequiredLite.DFieldNumber << 3, b[0]);

+            Assert.AreEqual(42, b[1]);

+            Assert.AreEqual(TestRequiredLite.EnFieldNumber << 3, b[2]);

+            Assert.AreEqual((int) ExtraEnum.EXLITE_BAZ, b[3]);

+        }

+

+        [TestMethod]

+        public void TestMessageLiteToByteArray()

+        {

+            TestRequiredLite msg = TestRequiredLite.CreateBuilder()

+                .SetD(42)

+                .SetEn(ExtraEnum.EXLITE_BAZ)

+                .Build();

+

+            ByteString b = msg.ToByteString();

+            ByteString copy = ByteString.CopyFrom(msg.ToByteArray());

+            Assert.AreEqual(b, copy);

+        }

+

+        [TestMethod]

+        public void TestMessageLiteWriteTo()

+        {

+            TestRequiredLite msg = TestRequiredLite.CreateBuilder()

+                .SetD(42)

+                .SetEn(ExtraEnum.EXLITE_BAZ)

+                .Build();

+

+            MemoryStream ms = new MemoryStream();

+            msg.WriteTo(ms);

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), ms.ToArray());

+        }

+

+        [TestMethod]

+        public void TestMessageLiteWriteDelimitedTo()

+        {

+            TestRequiredLite msg = TestRequiredLite.CreateBuilder()

+                .SetD(42)

+                .SetEn(ExtraEnum.EXLITE_BAZ)

+                .Build();

+

+            MemoryStream ms = new MemoryStream();

+            msg.WriteDelimitedTo(ms);

+            byte[] buffer = ms.ToArray();

+

+            Assert.AreEqual(5, buffer.Length);

+            Assert.AreEqual(4, buffer[0]);

+            byte[] msgBytes = new byte[4];

+            Array.Copy(buffer, 1, msgBytes, 0, 4);

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), msgBytes);

+        }

+

+        [TestMethod]

+        public void TestIMessageLiteWeakCreateBuilderForType()

+        {

+            IMessageLite msg = TestRequiredLite.DefaultInstance;

+            Assert.AreEqual(typeof(TestRequiredLite.Builder), msg.WeakCreateBuilderForType().GetType());

+        }

+

+        [TestMethod]

+        public void TestMessageLiteWeakToBuilder()

+        {

+            IMessageLite msg = TestRequiredLite.CreateBuilder()

+                .SetD(42)

+                .SetEn(ExtraEnum.EXLITE_BAZ)

+                .Build();

+

+            IMessageLite copy = msg.WeakToBuilder().WeakBuild();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestMessageLiteWeakDefaultInstanceForType()

+        {

+            IMessageLite msg = TestRequiredLite.DefaultInstance;

+            Assert.IsTrue(Object.ReferenceEquals(TestRequiredLite.DefaultInstance, msg.WeakDefaultInstanceForType));

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/App.xaml b/csharp/src/ProtocolBuffersLite.Test/App.xaml
new file mode 100644
index 0000000..d4f1f2e
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/App.xaml
@@ -0,0 +1,8 @@
+<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

+             x:Class="ProtocolBuffers.SilverlightTest.App"

+             >

+    <Application.Resources>

+        

+    </Application.Resources>

+</Application>

diff --git a/csharp/src/ProtocolBuffersLite.Test/App.xaml.cs b/csharp/src/ProtocolBuffersLite.Test/App.xaml.cs
new file mode 100644
index 0000000..0c9fd9e
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/App.xaml.cs
@@ -0,0 +1,60 @@
+using System;

+using System.Windows;

+using Microsoft.Silverlight.Testing;

+

+namespace Google.ProtocolBuffers

+{

+    public partial class App : Application

+    {

+

+        public App()

+        {

+            this.Startup += this.Application_Startup;

+            this.Exit += this.Application_Exit;

+            this.UnhandledException += this.Application_UnhandledException;

+

+            //InitializeComponent();

+        }

+

+        private void Application_Startup(object sender, StartupEventArgs e)

+        {

+            this.RootVisual = UnitTestSystem.CreateTestPage();

+        }

+

+        private void Application_Exit(object sender, EventArgs e)

+        {

+

+        }

+        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)

+        {

+            // If the app is running outside of the debugger then report the exception using

+            // the browser's exception mechanism. On IE this will display it a yellow alert 

+            // icon in the status bar and Firefox will display a script error.

+            if (!System.Diagnostics.Debugger.IsAttached)

+            {

+

+                // NOTE: This will allow the application to continue running after an exception has been thrown

+                // but not handled. 

+                // For production applications this error handling should be replaced with something that will 

+                // report the error to the website and stop the application.

+                e.Handled = true;

+                Deployment.Current.Dispatcher.BeginInvoke(

+                    new EventHandler<ApplicationUnhandledExceptionEventArgs>(ReportErrorToDOM), 

+                    new object[] { sender, e } );

+            }

+        }

+        private void ReportErrorToDOM(object sender, ApplicationUnhandledExceptionEventArgs e)

+        {

+            try

+            {

+                string errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace;

+                errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n");

+

+                System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight 2 Application " + errorMsg + "\");");

+            }

+            catch (Exception)

+            {

+            }

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ExtendableBuilderLiteTest.cs b/csharp/src/ProtocolBuffersLite.Test/ExtendableBuilderLiteTest.cs
new file mode 100644
index 0000000..910ebaf
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ExtendableBuilderLiteTest.cs
@@ -0,0 +1,289 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections;

+using System.Collections.Generic;

+using Google.ProtocolBuffers;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class ExtendableBuilderLiteTest

+    {

+        [TestMethod]

+        public void TestHasExtensionT()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder()

+                .SetExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite, 123);

+

+            Assert.IsTrue(builder.HasExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite));

+        }

+

+        [TestMethod]

+        public void TestHasExtensionTMissing()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder();

+            Assert.IsFalse(builder.HasExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite));

+        }

+

+        [TestMethod]

+        public void TestGetExtensionCountT()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder()

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 1)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 2)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 3);

+

+            Assert.AreEqual(3, builder.GetExtensionCount(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite));

+        }

+

+        [TestMethod]

+        public void TestGetExtensionCountTEmpty()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder();

+            Assert.AreEqual(0, builder.GetExtensionCount(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite));

+        }

+

+        [TestMethod]

+        public void TestGetExtensionTNull()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder();

+            string value = builder.GetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite);

+            Assert.IsNull(value);

+        }

+

+        [TestMethod]

+        public void TestGetExtensionTValue()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder()

+                .SetExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite, 3);

+

+            Assert.AreEqual(3, builder.GetExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite));

+        }

+

+        [TestMethod]

+        public void TestGetExtensionTEmpty()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder();

+            Assert.AreEqual(0, builder.GetExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite).Count);

+        }

+

+        [TestMethod]

+        public void TestGetExtensionTList()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder()

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 1)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 2)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 3);

+

+            IList<int> values = builder.GetExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite);

+            Assert.AreEqual(3, values.Count);

+        }

+

+        [TestMethod]

+        public void TestGetExtensionTIndex()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder()

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 0)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 1)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 2);

+

+            for (int i = 0; i < 3; i++)

+                Assert.AreEqual(i, builder.GetExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, i));

+        }

+

+        [TestMethod, ExpectedException(typeof(ArgumentOutOfRangeException))]

+        public void TestGetExtensionTIndexOutOfRange()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder();

+            builder.GetExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 0);

+        }

+

+        [TestMethod]

+        public void TestSetExtensionTIndex()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder()

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 0)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 1)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 2);

+

+            for (int i = 0; i < 3; i++)

+                Assert.AreEqual(i, builder.GetExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, i));

+

+            builder.SetExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 0, 5);

+            builder.SetExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 1, 6);

+            builder.SetExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 2, 7);

+

+            for (int i = 0; i < 3; i++)

+                Assert.AreEqual(5 + i, builder.GetExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, i));

+        }

+

+        [TestMethod, ExpectedException(typeof(ArgumentOutOfRangeException))]

+        public void TestSetExtensionTIndexOutOfRange()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder();

+            builder.SetExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 0, -1);

+        }

+

+        [TestMethod]

+        public void TestClearExtensionTList()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder()

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 0);

+            Assert.AreEqual(1, builder.GetExtensionCount(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite));

+

+            builder.ClearExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite);

+            Assert.AreEqual(0, builder.GetExtensionCount(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite));

+        }

+

+        [TestMethod]

+        public void TestClearExtensionTValue()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder()

+                .SetExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite, 0);

+            Assert.IsTrue(builder.HasExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite));

+

+            builder.ClearExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite);

+            Assert.IsFalse(builder.HasExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite));

+        }

+

+        [TestMethod]

+        public void TestIndexedByDescriptor()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder();

+            Assert.IsFalse(builder.HasExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite));

+

+            builder[UnitTestLiteProtoFile.OptionalInt32ExtensionLite.Descriptor] = 123;

+

+            Assert.IsTrue(builder.HasExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite));

+            Assert.AreEqual(123, builder.GetExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite));

+        }

+

+        [TestMethod]

+        public void TestIndexedByDescriptorAndOrdinal()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder()

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 0);

+            Assert.AreEqual(1, builder.GetExtensionCount(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite));

+

+            IFieldDescriptorLite f = UnitTestLiteProtoFile.RepeatedInt32ExtensionLite.Descriptor;

+            builder[f, 0] = 123;

+

+            Assert.AreEqual(1, builder.GetExtensionCount(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite));

+            Assert.AreEqual(123, builder.GetExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 0));

+        }

+

+        [TestMethod, ExpectedException(typeof(ArgumentOutOfRangeException))]

+        public void TestIndexedByDescriptorAndOrdinalOutOfRange()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder();

+            Assert.AreEqual(0, builder.GetExtensionCount(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite));

+

+            IFieldDescriptorLite f = UnitTestLiteProtoFile.RepeatedInt32ExtensionLite.Descriptor;

+            builder[f, 0] = 123;

+        }

+

+        [TestMethod]

+        public void TestClearFieldByDescriptor()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder()

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 0);

+            Assert.AreEqual(1, builder.GetExtensionCount(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite));

+

+            IFieldDescriptorLite f = UnitTestLiteProtoFile.RepeatedInt32ExtensionLite.Descriptor;

+            builder.ClearField(f);

+            Assert.AreEqual(0, builder.GetExtensionCount(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite));

+        }

+

+        [TestMethod]

+        public void TestAddRepeatedFieldByDescriptor()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder()

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 0);

+            Assert.AreEqual(1, builder.GetExtensionCount(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite));

+

+            IFieldDescriptorLite f = UnitTestLiteProtoFile.RepeatedInt32ExtensionLite.Descriptor;

+            builder.AddRepeatedField(f, 123);

+            Assert.AreEqual(2, builder.GetExtensionCount(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite));

+            Assert.AreEqual(123, builder.GetExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 1));

+        }

+

+        [TestMethod]

+        public void TestMissingExtensionsLite()

+        {

+            const int optionalInt32 = 12345678;

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder();

+            builder.SetExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite, optionalInt32);

+            builder.AddExtension(UnitTestLiteProtoFile.RepeatedDoubleExtensionLite, 1.1);

+            builder.AddExtension(UnitTestLiteProtoFile.RepeatedDoubleExtensionLite, 1.2);

+            builder.AddExtension(UnitTestLiteProtoFile.RepeatedDoubleExtensionLite, 1.3);

+            TestAllExtensionsLite msg = builder.Build();

+

+            Assert.IsTrue(msg.HasExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite));

+            Assert.AreEqual(3, msg.GetExtensionCount(UnitTestLiteProtoFile.RepeatedDoubleExtensionLite));

+

+            byte[] bits = msg.ToByteArray();

+            TestAllExtensionsLite copy = TestAllExtensionsLite.ParseFrom(bits);

+            Assert.IsFalse(copy.HasExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite));

+            Assert.AreEqual(0, copy.GetExtensionCount(UnitTestLiteProtoFile.RepeatedDoubleExtensionLite));

+            Assert.AreNotEqual(msg, copy);

+

+            //The lite runtime removes all unknown fields and extensions

+            byte[] copybits = copy.ToByteArray();

+            Assert.AreEqual(0, copybits.Length);

+        }

+

+        [TestMethod]

+        public void TestMissingFieldsLite()

+        {

+            TestAllTypesLite msg = TestAllTypesLite.CreateBuilder()

+                .SetOptionalInt32(123)

+                .SetOptionalString("123")

+                .Build();

+

+            byte[] bits = msg.ToByteArray();

+            TestAllExtensionsLite copy = TestAllExtensionsLite.ParseFrom(bits);

+            Assert.AreNotEqual(msg, copy);

+

+            //The lite runtime removes all unknown fields and extensions

+            byte[] copybits = copy.ToByteArray();

+            Assert.AreEqual(0, copybits.Length);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ExtendableMessageLiteTest.cs b/csharp/src/ProtocolBuffersLite.Test/ExtendableMessageLiteTest.cs
new file mode 100644
index 0000000..5c236aa
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ExtendableMessageLiteTest.cs
@@ -0,0 +1,379 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.Text;

+using Google.ProtocolBuffers;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class ExtendableMessageLiteTest

+    {

+        //The lite framework does not make this assertion

+        //[TestMethod, Ignore, ExpectedException(typeof(ArgumentException))]

+        //public void ExtensionWriterInvalidExtension()

+        //{

+        //    TestPackedExtensionsLite.CreateBuilder()[

+        //        UnitTestLiteProtoFile.OptionalForeignMessageExtensionLite.Descriptor] =

+        //        ForeignMessageLite.DefaultInstance;

+        //}

+

+        [TestMethod]

+        public void ExtensionWriterTestMessages()

+        {

+            TestAllExtensionsLite.Builder b = TestAllExtensionsLite.CreateBuilder().SetExtension(

+                UnitTestLiteProtoFile.OptionalForeignMessageExtensionLite,

+                ForeignMessageLite.CreateBuilder().SetC(123).Build());

+            TestAllExtensionsLite copy, msg = b.Build();

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestLiteProtoFile.RegisterAllExtensions(registry);

+

+            copy = TestAllExtensionsLite.ParseFrom(msg.ToByteArray(), registry);

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void ExtensionWriterIsInitialized()

+        {

+            Assert.IsTrue(ForeignMessageLite.DefaultInstance.IsInitialized);

+            Assert.IsTrue(TestPackedExtensionsLite.CreateBuilder().IsInitialized);

+            Assert.IsTrue(TestAllExtensionsLite.CreateBuilder().SetExtension(

+                UnitTestLiteProtoFile.OptionalForeignMessageExtensionLite, ForeignMessageLite.DefaultInstance)

+                              .IsInitialized);

+        }

+

+        [TestMethod]

+        public void ExtensionWriterTestSetExtensionLists()

+        {

+            TestAllExtensionsLite msg, copy;

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder()

+                .SetExtension(UnitTestLiteProtoFile.RepeatedBoolExtensionLite, new[] {true, false})

+                .SetExtension(UnitTestLiteProtoFile.RepeatedCordExtensionLite, new[] {"123", "456"})

+                .SetExtension(UnitTestLiteProtoFile.RepeatedForeignEnumExtensionLite,

+                              new[] {ForeignEnumLite.FOREIGN_LITE_BAZ, ForeignEnumLite.FOREIGN_LITE_FOO})

+                ;

+

+            msg = builder.Build();

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestLiteProtoFile.RegisterAllExtensions(registry);

+

+            copy = TestAllExtensionsLite.ParseFrom(msg.ToByteArray(), registry);

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            Assert.AreEqual(ForeignEnumLite.FOREIGN_LITE_FOO,

+                            copy.GetExtension(UnitTestLiteProtoFile.RepeatedForeignEnumExtensionLite, 1));

+        }

+

+        [TestMethod]

+        public void ExtensionWriterTest()

+        {

+            TestAllExtensionsLite.Builder builder = TestAllExtensionsLite.CreateBuilder()

+                .SetExtension(UnitTestLiteProtoFile.DefaultBoolExtensionLite, true)

+                .SetExtension(UnitTestLiteProtoFile.DefaultBytesExtensionLite, ByteString.CopyFromUtf8("123"))

+                .SetExtension(UnitTestLiteProtoFile.DefaultCordExtensionLite, "123")

+                .SetExtension(UnitTestLiteProtoFile.DefaultDoubleExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.DefaultFixed32ExtensionLite, 123u)

+                .SetExtension(UnitTestLiteProtoFile.DefaultFixed64ExtensionLite, 123u)

+                .SetExtension(UnitTestLiteProtoFile.DefaultFloatExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.DefaultForeignEnumExtensionLite, ForeignEnumLite.FOREIGN_LITE_BAZ)

+                .SetExtension(UnitTestLiteProtoFile.DefaultImportEnumExtensionLite, ImportEnumLite.IMPORT_LITE_BAZ)

+                .SetExtension(UnitTestLiteProtoFile.DefaultInt32ExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.DefaultInt64ExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.DefaultNestedEnumExtensionLite,

+                              TestAllTypesLite.Types.NestedEnum.FOO)

+                .SetExtension(UnitTestLiteProtoFile.DefaultSfixed32ExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.DefaultSfixed64ExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.DefaultSint32ExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.DefaultSint64ExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.DefaultStringExtensionLite, "123")

+                .SetExtension(UnitTestLiteProtoFile.DefaultStringPieceExtensionLite, "123")

+                .SetExtension(UnitTestLiteProtoFile.DefaultUint32ExtensionLite, 123u)

+                .SetExtension(UnitTestLiteProtoFile.DefaultUint64ExtensionLite, 123u)

+                //Optional

+                .SetExtension(UnitTestLiteProtoFile.OptionalBoolExtensionLite, true)

+                .SetExtension(UnitTestLiteProtoFile.OptionalBytesExtensionLite, ByteString.CopyFromUtf8("123"))

+                .SetExtension(UnitTestLiteProtoFile.OptionalCordExtensionLite, "123")

+                .SetExtension(UnitTestLiteProtoFile.OptionalDoubleExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.OptionalFixed32ExtensionLite, 123u)

+                .SetExtension(UnitTestLiteProtoFile.OptionalFixed64ExtensionLite, 123u)

+                .SetExtension(UnitTestLiteProtoFile.OptionalFloatExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.OptionalForeignEnumExtensionLite, ForeignEnumLite.FOREIGN_LITE_BAZ)

+                .SetExtension(UnitTestLiteProtoFile.OptionalImportEnumExtensionLite, ImportEnumLite.IMPORT_LITE_BAZ)

+                .SetExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.OptionalInt64ExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.OptionalNestedEnumExtensionLite,

+                              TestAllTypesLite.Types.NestedEnum.FOO)

+                .SetExtension(UnitTestLiteProtoFile.OptionalSfixed32ExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.OptionalSfixed64ExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.OptionalSint32ExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.OptionalSint64ExtensionLite, 123)

+                .SetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite, "123")

+                .SetExtension(UnitTestLiteProtoFile.OptionalStringPieceExtensionLite, "123")

+                .SetExtension(UnitTestLiteProtoFile.OptionalUint32ExtensionLite, 123u)

+                .SetExtension(UnitTestLiteProtoFile.OptionalUint64ExtensionLite, 123u)

+                //Repeated

+                .AddExtension(UnitTestLiteProtoFile.RepeatedBoolExtensionLite, true)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedBytesExtensionLite, ByteString.CopyFromUtf8("123"))

+                .AddExtension(UnitTestLiteProtoFile.RepeatedCordExtensionLite, "123")

+                .AddExtension(UnitTestLiteProtoFile.RepeatedDoubleExtensionLite, 123)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedFixed32ExtensionLite, 123u)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedFixed64ExtensionLite, 123u)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedFloatExtensionLite, 123)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedForeignEnumExtensionLite, ForeignEnumLite.FOREIGN_LITE_BAZ)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedImportEnumExtensionLite, ImportEnumLite.IMPORT_LITE_BAZ)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 123)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedInt64ExtensionLite, 123)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedNestedEnumExtensionLite,

+                              TestAllTypesLite.Types.NestedEnum.FOO)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedSfixed32ExtensionLite, 123)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedSfixed64ExtensionLite, 123)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedSint32ExtensionLite, 123)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedSint64ExtensionLite, 123)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedStringExtensionLite, "123")

+                .AddExtension(UnitTestLiteProtoFile.RepeatedStringPieceExtensionLite, "123")

+                .AddExtension(UnitTestLiteProtoFile.RepeatedUint32ExtensionLite, 123u)

+                .AddExtension(UnitTestLiteProtoFile.RepeatedUint64ExtensionLite, 123u)

+                ;

+            TestAllExtensionsLite msg = builder.Build();

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestLiteProtoFile.RegisterAllExtensions(registry);

+

+            TestAllExtensionsLite.Builder copyBuilder =

+                TestAllExtensionsLite.CreateBuilder().MergeFrom(msg.ToByteArray(), registry);

+            TestAllExtensionsLite copy = copyBuilder.Build();

+

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            Assert.AreEqual(true, copy.GetExtension(UnitTestLiteProtoFile.DefaultBoolExtensionLite));

+            Assert.AreEqual(ByteString.CopyFromUtf8("123"),

+                            copy.GetExtension(UnitTestLiteProtoFile.DefaultBytesExtensionLite));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestLiteProtoFile.DefaultCordExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.DefaultDoubleExtensionLite));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.DefaultFixed32ExtensionLite));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.DefaultFixed64ExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.DefaultFloatExtensionLite));

+            Assert.AreEqual(ForeignEnumLite.FOREIGN_LITE_BAZ,

+                            copy.GetExtension(UnitTestLiteProtoFile.DefaultForeignEnumExtensionLite));

+            Assert.AreEqual(ImportEnumLite.IMPORT_LITE_BAZ,

+                            copy.GetExtension(UnitTestLiteProtoFile.DefaultImportEnumExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.DefaultInt32ExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.DefaultInt64ExtensionLite));

+            Assert.AreEqual(TestAllTypesLite.Types.NestedEnum.FOO,

+                            copy.GetExtension(UnitTestLiteProtoFile.DefaultNestedEnumExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.DefaultSfixed32ExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.DefaultSfixed64ExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.DefaultSint32ExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.DefaultSint64ExtensionLite));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestLiteProtoFile.DefaultStringExtensionLite));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestLiteProtoFile.DefaultStringPieceExtensionLite));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.DefaultUint32ExtensionLite));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.DefaultUint64ExtensionLite));

+

+            Assert.AreEqual(true, copy.GetExtension(UnitTestLiteProtoFile.OptionalBoolExtensionLite));

+            Assert.AreEqual(ByteString.CopyFromUtf8("123"),

+                            copy.GetExtension(UnitTestLiteProtoFile.OptionalBytesExtensionLite));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestLiteProtoFile.OptionalCordExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.OptionalDoubleExtensionLite));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.OptionalFixed32ExtensionLite));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.OptionalFixed64ExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.OptionalFloatExtensionLite));

+            Assert.AreEqual(ForeignEnumLite.FOREIGN_LITE_BAZ,

+                            copy.GetExtension(UnitTestLiteProtoFile.OptionalForeignEnumExtensionLite));

+            Assert.AreEqual(ImportEnumLite.IMPORT_LITE_BAZ,

+                            copy.GetExtension(UnitTestLiteProtoFile.OptionalImportEnumExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.OptionalInt64ExtensionLite));

+            Assert.AreEqual(TestAllTypesLite.Types.NestedEnum.FOO,

+                            copy.GetExtension(UnitTestLiteProtoFile.OptionalNestedEnumExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.OptionalSfixed32ExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.OptionalSfixed64ExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.OptionalSint32ExtensionLite));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.OptionalSint64ExtensionLite));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestLiteProtoFile.OptionalStringPieceExtensionLite));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.OptionalUint32ExtensionLite));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.OptionalUint64ExtensionLite));

+

+            Assert.AreEqual(true, copy.GetExtension(UnitTestLiteProtoFile.RepeatedBoolExtensionLite, 0));

+            Assert.AreEqual(ByteString.CopyFromUtf8("123"),

+                            copy.GetExtension(UnitTestLiteProtoFile.RepeatedBytesExtensionLite, 0));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestLiteProtoFile.RepeatedCordExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.RepeatedDoubleExtensionLite, 0));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.RepeatedFixed32ExtensionLite, 0));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.RepeatedFixed64ExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.RepeatedFloatExtensionLite, 0));

+            Assert.AreEqual(ForeignEnumLite.FOREIGN_LITE_BAZ,

+                            copy.GetExtension(UnitTestLiteProtoFile.RepeatedForeignEnumExtensionLite, 0));

+            Assert.AreEqual(ImportEnumLite.IMPORT_LITE_BAZ,

+                            copy.GetExtension(UnitTestLiteProtoFile.RepeatedImportEnumExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.RepeatedInt32ExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.RepeatedInt64ExtensionLite, 0));

+            Assert.AreEqual(TestAllTypesLite.Types.NestedEnum.FOO,

+                            copy.GetExtension(UnitTestLiteProtoFile.RepeatedNestedEnumExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.RepeatedSfixed32ExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.RepeatedSfixed64ExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.RepeatedSint32ExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.RepeatedSint64ExtensionLite, 0));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestLiteProtoFile.RepeatedStringExtensionLite, 0));

+            Assert.AreEqual("123", copy.GetExtension(UnitTestLiteProtoFile.RepeatedStringPieceExtensionLite, 0));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.RepeatedUint32ExtensionLite, 0));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.RepeatedUint64ExtensionLite, 0));

+        }

+

+        private TestPackedExtensionsLite BuildPackedExtensions()

+        {

+            TestPackedExtensionsLite.Builder builder = TestPackedExtensionsLite.CreateBuilder()

+                   .AddExtension(UnitTestLiteProtoFile.PackedBoolExtensionLite, true)

+                   .AddExtension(UnitTestLiteProtoFile.PackedDoubleExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedFixed32ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedFixed64ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedFloatExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedInt32ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedInt64ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSfixed32ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSfixed64ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSint32ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSint64ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedUint32ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedUint64ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedBoolExtensionLite, true)

+                   .AddExtension(UnitTestLiteProtoFile.PackedDoubleExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedFixed32ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedFixed64ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedFloatExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedInt32ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedInt64ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSfixed32ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSfixed64ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSint32ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedSint64ExtensionLite, 123)

+                   .AddExtension(UnitTestLiteProtoFile.PackedUint32ExtensionLite, 123u)

+                   .AddExtension(UnitTestLiteProtoFile.PackedUint64ExtensionLite, 123u);

+

+            TestPackedExtensionsLite msg = builder.Build();

+            return msg;

+        }

+

+        private void AssertPackedExtensions(TestPackedExtensionsLite copy)

+        {

+            Assert.AreEqual(true, copy.GetExtension(UnitTestLiteProtoFile.PackedBoolExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedDoubleExtensionLite, 0));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.PackedFixed32ExtensionLite, 0));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.PackedFixed64ExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedFloatExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedInt32ExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedInt64ExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedSfixed32ExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedSfixed64ExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedSint32ExtensionLite, 0));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedSint64ExtensionLite, 0));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.PackedUint32ExtensionLite, 0));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.PackedUint64ExtensionLite, 0));

+

+            Assert.AreEqual(true, copy.GetExtension(UnitTestLiteProtoFile.PackedBoolExtensionLite, 1));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedDoubleExtensionLite, 1));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.PackedFixed32ExtensionLite, 1));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.PackedFixed64ExtensionLite, 1));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedFloatExtensionLite, 1));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedInt32ExtensionLite, 1));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedInt64ExtensionLite, 1));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedSfixed32ExtensionLite, 1));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedSfixed64ExtensionLite, 1));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedSint32ExtensionLite, 1));

+            Assert.AreEqual(123, copy.GetExtension(UnitTestLiteProtoFile.PackedSint64ExtensionLite, 1));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.PackedUint32ExtensionLite, 1));

+            Assert.AreEqual(123u, copy.GetExtension(UnitTestLiteProtoFile.PackedUint64ExtensionLite, 1));

+        }

+

+        [TestMethod]

+        public void ExtensionWriterTestPacked()

+        {

+            TestPackedExtensionsLite msg = BuildPackedExtensions();

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestLiteProtoFile.RegisterAllExtensions(registry);

+

+            TestPackedExtensionsLite.Builder copyBuilder =

+                TestPackedExtensionsLite.CreateBuilder().MergeFrom(msg.ToByteArray(), registry);

+            TestPackedExtensionsLite copy = copyBuilder.Build();

+

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+

+            AssertPackedExtensions(copy);

+        }

+

+        [TestMethod]

+        public void TestUnpackedAndPackedExtensions()

+        {

+            TestPackedExtensionsLite original = BuildPackedExtensions();

+            AssertPackedExtensions(original);

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestLiteProtoFile.RegisterAllExtensions(registry);

+            UnitTestExtrasLiteProtoFile.RegisterAllExtensions(registry);

+

+            TestUnpackedExtensionsLite unpacked = TestUnpackedExtensionsLite.ParseFrom(original.ToByteArray(), registry);

+

+            TestPackedExtensionsLite packed = TestPackedExtensionsLite.ParseFrom(unpacked.ToByteArray(), registry);

+

+            Assert.AreEqual(original, packed);

+            TestUtil.AssertBytesEqual(original.ToByteArray(), packed.ToByteArray());

+            AssertPackedExtensions(packed);

+        }

+

+        [TestMethod]

+        public void TestUnpackedFromPackedInput()

+        {

+            byte[] packedData = BuildPackedExtensions().ToByteArray();

+

+            TestUnpackedTypesLite unpacked = TestUnpackedTypesLite.ParseFrom(packedData);

+            TestPackedTypesLite packed = TestPackedTypesLite.ParseFrom(unpacked.ToByteArray());

+            TestUtil.AssertBytesEqual(packedData, packed.ToByteArray());

+            

+            unpacked = TestUnpackedTypesLite.ParseFrom(packed.ToByteArray());

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestLiteProtoFile.RegisterAllExtensions(registry);

+            AssertPackedExtensions(TestPackedExtensionsLite.ParseFrom(unpacked.ToByteArray(), registry));

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/InteropLiteTest.cs b/csharp/src/ProtocolBuffersLite.Test/InteropLiteTest.cs
new file mode 100644
index 0000000..37739d2
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/InteropLiteTest.cs
@@ -0,0 +1,186 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using Google.ProtocolBuffers;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class InteropLiteTest

+    {

+        [TestMethod]

+        public void TestConvertFromFullMinimal()

+        {

+            TestInteropPerson person = TestInteropPerson.CreateBuilder()

+                .SetId(123)

+                .SetName("abc")

+                .Build();

+            Assert.IsTrue(person.IsInitialized);

+

+            TestInteropPersonLite copy = TestInteropPersonLite.ParseFrom(person.ToByteArray());

+

+            TestUtil.AssertBytesEqual(person.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestConvertFromFullComplete()

+        {

+            TestInteropPerson person = TestInteropPerson.CreateBuilder()

+                .SetId(123)

+                .SetName("abc")

+                .SetEmail("abc@123.com")

+                .AddRangeCodes(new[] {1, 2, 3})

+                .AddPhone(TestInteropPerson.Types.PhoneNumber.CreateBuilder().SetNumber("555-1234").Build())

+                .AddPhone(TestInteropPerson.Types.PhoneNumber.CreateBuilder().SetNumber("555-5678").Build())

+                .AddAddresses(

+                    TestInteropPerson.Types.Addresses.CreateBuilder().SetAddress("123 Seseme").SetCity("Wonderland").

+                        SetState("NA").SetZip(12345).Build())

+                .SetExtension(UnitTestExtrasFullProtoFile.EmployeeId,

+                              TestInteropEmployeeId.CreateBuilder().SetNumber("123").Build())

+                .Build();

+            Assert.IsTrue(person.IsInitialized);

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestExtrasLiteProtoFile.RegisterAllExtensions(registry);

+

+            TestInteropPersonLite copy = TestInteropPersonLite.ParseFrom(person.ToByteArray(), registry);

+

+            TestUtil.AssertBytesEqual(person.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestConvertFromLiteMinimal()

+        {

+            TestInteropPersonLite person = TestInteropPersonLite.CreateBuilder()

+                .SetId(123)

+                .SetName("abc")

+                .Build();

+            Assert.IsTrue(person.IsInitialized);

+

+            TestInteropPerson copy = TestInteropPerson.ParseFrom(person.ToByteArray());

+

+            TestUtil.AssertBytesEqual(person.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestConvertFromLiteComplete()

+        {

+            TestInteropPersonLite person = TestInteropPersonLite.CreateBuilder()

+                .SetId(123)

+                .SetName("abc")

+                .SetEmail("abc@123.com")

+                .AddRangeCodes(new[] {1, 2, 3})

+                .AddPhone(TestInteropPersonLite.Types.PhoneNumber.CreateBuilder().SetNumber("555-1234").Build())

+                .AddPhone(TestInteropPersonLite.Types.PhoneNumber.CreateBuilder().SetNumber("555-5678").Build())

+                .AddAddresses(

+                    TestInteropPersonLite.Types.Addresses.CreateBuilder().SetAddress("123 Seseme").SetCity("Wonderland")

+                        .SetState("NA").SetZip(12345).Build())

+                .SetExtension(UnitTestExtrasLiteProtoFile.EmployeeIdLite,

+                              TestInteropEmployeeIdLite.CreateBuilder().SetNumber("123").Build())

+                .Build();

+            Assert.IsTrue(person.IsInitialized);

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestExtrasFullProtoFile.RegisterAllExtensions(registry);

+

+            TestInteropPerson copy = TestInteropPerson.ParseFrom(person.ToByteArray(), registry);

+

+            TestUtil.AssertBytesEqual(person.ToByteArray(), copy.ToByteArray());

+        }

+

+        public ByteString AllBytes

+        {

+            get

+            {

+                byte[] bytes = new byte[256];

+                for (int i = 0; i < bytes.Length; i++)

+                    bytes[i] = (byte) i;

+                return ByteString.CopyFrom(bytes);

+            }

+        }

+

+        [TestMethod]

+        public void TestCompareStringValues()

+        {

+            TestInteropPersonLite person = TestInteropPersonLite.CreateBuilder()

+                .SetId(123)

+                .SetName("abc")

+                .SetEmail("abc@123.com")

+                .AddRangeCodes(new[] {1, 2, 3})

+                .AddPhone(TestInteropPersonLite.Types.PhoneNumber.CreateBuilder().SetNumber("555-1234").Build())

+                .AddPhone(

+                    TestInteropPersonLite.Types.PhoneNumber.CreateBuilder().SetNumber(

+                        System.Text.Encoding.UTF8.GetString(AllBytes.ToByteArray(), 0, AllBytes.Length)).Build())

+                .AddAddresses(

+                    TestInteropPersonLite.Types.Addresses.CreateBuilder().SetAddress("123 Seseme").SetCity("Wonderland")

+                        .SetState("NA").SetZip(12345).Build())

+                .SetExtension(UnitTestExtrasLiteProtoFile.EmployeeIdLite,

+                              TestInteropEmployeeIdLite.CreateBuilder().SetNumber("123").Build())

+                .Build();

+            Assert.IsTrue(person.IsInitialized);

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestExtrasFullProtoFile.RegisterAllExtensions(registry);

+

+            TestInteropPerson copy = TestInteropPerson.ParseFrom(person.ToByteArray(), registry);

+

+            TestUtil.AssertBytesEqual(person.ToByteArray(), copy.ToByteArray());

+

+            TestInteropPerson.Builder copyBuilder = TestInteropPerson.CreateBuilder();

+            TextFormat.Merge(

+                person.ToString().Replace("[protobuf_unittest_extra.employee_id_lite]",

+                                          "[protobuf_unittest_extra.employee_id]"), registry, copyBuilder);

+

+            copy = copyBuilder.Build();

+            TestUtil.AssertBytesEqual(person.ToByteArray(), copy.ToByteArray());

+

+            string liteText = person.ToString().TrimEnd().Replace("\r", "");

+            string fullText = copy.ToString().TrimEnd().Replace("\r", "");

+            //map the extension type

+            liteText = liteText.Replace("[protobuf_unittest_extra.employee_id_lite]",

+                                        "[protobuf_unittest_extra.employee_id]");

+            //lite version does not indent

+            while (fullText.IndexOf("\n ") >= 0)

+                fullText = fullText.Replace("\n ", "\n");

+

+            Assert.AreEqual(fullText, liteText);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/LiteTest.cs b/csharp/src/ProtocolBuffersLite.Test/LiteTest.cs
new file mode 100644
index 0000000..3561876
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/LiteTest.cs
@@ -0,0 +1,118 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System;

+using System.Collections.Generic;

+using System.IO;

+using Google.ProtocolBuffers.Descriptors;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    /// <summary>

+    /// Miscellaneous tests for message operations that apply to both

+    /// generated and dynamic messages.

+    /// </summary>

+    [TestClass]

+    public class LiteTest

+    {

+        [TestMethod]

+        public void TestLite()

+        {

+            // Since lite messages are a subset of regular messages, we can mostly

+            // assume that the functionality of lite messages is already thoroughly

+            // tested by the regular tests.  All this test really verifies is that

+            // a proto with optimize_for = LITE_RUNTIME compiles correctly when

+            // linked only against the lite library.  That is all tested at compile

+            // time, leaving not much to do in this method.  Let's just do some random

+            // stuff to make sure the lite message is actually here and usable.

+

+            TestAllTypesLite message =

+                TestAllTypesLite.CreateBuilder()

+                    .SetOptionalInt32(123)

+                    .AddRepeatedString("hello")

+                    .SetOptionalNestedMessage(

+                        TestAllTypesLite.Types.NestedMessage.CreateBuilder().SetBb(7))

+                    .Build();

+

+            ByteString data = message.ToByteString();

+

+            TestAllTypesLite message2 = TestAllTypesLite.ParseFrom(data);

+

+            Assert.AreEqual(123, message2.OptionalInt32);

+            Assert.AreEqual(1, message2.RepeatedStringCount);

+            Assert.AreEqual("hello", message2.RepeatedStringList[0]);

+            Assert.AreEqual(7, message2.OptionalNestedMessage.Bb);

+        }

+

+        [TestMethod]

+        public void TestLiteExtensions()

+        {

+            // TODO(kenton):  Unlike other features of the lite library, extensions are

+            //   implemented completely differently from the regular library.  We

+            //   should probably test them more thoroughly.

+

+            TestAllExtensionsLite message =

+                TestAllExtensionsLite.CreateBuilder()

+                    .SetExtension(UnitTestLiteProtoFile.OptionalInt32ExtensionLite, 123)

+                    .AddExtension(UnitTestLiteProtoFile.RepeatedStringExtensionLite, "hello")

+                    .SetExtension(UnitTestLiteProtoFile.OptionalNestedEnumExtensionLite,

+                                  TestAllTypesLite.Types.NestedEnum.BAZ)

+                    .SetExtension(UnitTestLiteProtoFile.OptionalNestedMessageExtensionLite,

+                                  TestAllTypesLite.Types.NestedMessage.CreateBuilder().SetBb(7).Build())

+                    .Build();

+

+            // Test copying a message, since coping extensions actually does use a

+            // different code path between lite and regular libraries, and as of this

+            // writing, parsing hasn't been implemented yet.

+            TestAllExtensionsLite message2 = message.ToBuilder().Build();

+

+            Assert.AreEqual(123, (int) message2.GetExtension(

+                UnitTestLiteProtoFile.OptionalInt32ExtensionLite));

+            Assert.AreEqual(1, message2.GetExtensionCount(

+                UnitTestLiteProtoFile.RepeatedStringExtensionLite));

+            Assert.AreEqual(1, message2.GetExtension(

+                UnitTestLiteProtoFile.RepeatedStringExtensionLite).Count);

+            Assert.AreEqual("hello", message2.GetExtension(

+                UnitTestLiteProtoFile.RepeatedStringExtensionLite, 0));

+            Assert.AreEqual(TestAllTypesLite.Types.NestedEnum.BAZ, message2.GetExtension(

+                UnitTestLiteProtoFile.OptionalNestedEnumExtensionLite));

+            Assert.AreEqual(7, message2.GetExtension(

+                UnitTestLiteProtoFile.OptionalNestedMessageExtensionLite).Bb);

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/MissingFieldAndExtensionTest.cs b/csharp/src/ProtocolBuffersLite.Test/MissingFieldAndExtensionTest.cs
new file mode 100644
index 0000000..c65cb7f
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/MissingFieldAndExtensionTest.cs
@@ -0,0 +1,240 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using System.IO;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+using System.Collections.Generic;

+using Google.ProtocolBuffers.TestProtos;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class MissingFieldAndExtensionTest

+    {

+        [TestMethod]

+        public void TestRecoverMissingExtensions()

+        {

+            const int optionalInt32 = 12345678;

+            TestAllExtensions.Builder builder = TestAllExtensions.CreateBuilder();

+            builder.SetExtension(UnitTestProtoFile.OptionalInt32Extension, optionalInt32);

+            builder.AddExtension(UnitTestProtoFile.RepeatedDoubleExtension, 1.1);

+            builder.AddExtension(UnitTestProtoFile.RepeatedDoubleExtension, 1.2);

+            builder.AddExtension(UnitTestProtoFile.RepeatedDoubleExtension, 1.3);

+            TestAllExtensions msg = builder.Build();

+

+            Assert.IsTrue(msg.HasExtension(UnitTestProtoFile.OptionalInt32Extension));

+            Assert.AreEqual(3, msg.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension));

+

+            byte[] bits = msg.ToByteArray();

+            TestAllExtensions copy = TestAllExtensions.ParseFrom(bits);

+            Assert.IsFalse(copy.HasExtension(UnitTestProtoFile.OptionalInt32Extension));

+            Assert.AreEqual(0, copy.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension));

+            Assert.AreNotEqual(msg, copy);

+

+            //Even though copy does not understand the typees they serialize correctly

+            byte[] copybits = copy.ToByteArray();

+            TestUtil.AssertBytesEqual(bits, copybits);

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestProtoFile.RegisterAllExtensions(registry);

+

+            //Now we can take those copy bits and restore the full message with extensions

+            copy = TestAllExtensions.ParseFrom(copybits, registry);

+            Assert.IsTrue(copy.HasExtension(UnitTestProtoFile.OptionalInt32Extension));

+            Assert.AreEqual(3, copy.GetExtensionCount(UnitTestProtoFile.RepeatedDoubleExtension));

+

+            Assert.AreEqual(msg, copy);

+            TestUtil.AssertBytesEqual(bits, copy.ToByteArray());

+

+            //If we modify the object this should all continue to work as before

+            copybits = copy.ToBuilder().Build().ToByteArray();

+            TestUtil.AssertBytesEqual(bits, copybits);

+

+            //If we replace extension the object this should all continue to work as before

+            copybits = copy.ToBuilder()

+                .SetExtension(UnitTestProtoFile.OptionalInt32Extension, optionalInt32)

+                .Build().ToByteArray();

+            TestUtil.AssertBytesEqual(bits, copybits);

+        }

+

+        [TestMethod]

+        public void TestRecoverMissingFields()

+        {

+            TestMissingFieldsA msga = TestMissingFieldsA.CreateBuilder()

+                .SetId(1001)

+                .SetName("Name")

+                .SetEmail("missing@field.value")

+                .Build();

+

+            //serialize to type B and verify all fields exist

+            TestMissingFieldsB msgb = TestMissingFieldsB.ParseFrom(msga.ToByteArray());

+            Assert.AreEqual(1001, msgb.Id);

+            Assert.AreEqual("Name", msgb.Name);

+            Assert.IsFalse(msgb.HasWebsite);

+            Assert.AreEqual(1, msgb.UnknownFields.FieldDictionary.Count);

+            Assert.AreEqual("missing@field.value",

+                            msgb.UnknownFields[TestMissingFieldsA.EmailFieldNumber].LengthDelimitedList[0].ToStringUtf8());

+

+            //serializes exactly the same (at least for this simple example)

+            TestUtil.AssertBytesEqual(msga.ToByteArray(), msgb.ToByteArray());

+            Assert.AreEqual(msga, TestMissingFieldsA.ParseFrom(msgb.ToByteArray()));

+

+            //now re-create an exact copy of A from serialized B

+            TestMissingFieldsA copya = TestMissingFieldsA.ParseFrom(msgb.ToByteArray());

+            Assert.AreEqual(msga, copya);

+            Assert.AreEqual(1001, copya.Id);

+            Assert.AreEqual("Name", copya.Name);

+            Assert.AreEqual("missing@field.value", copya.Email);

+

+            //Now we modify B... and try again

+            msgb = msgb.ToBuilder().SetWebsite("http://new.missing.field").Build();

+            //Does B still have the missing field?

+            Assert.AreEqual(1, msgb.UnknownFields.FieldDictionary.Count);

+

+            //Convert back to A and see if all fields are there?

+            copya = TestMissingFieldsA.ParseFrom(msgb.ToByteArray());

+            Assert.AreNotEqual(msga, copya);

+            Assert.AreEqual(1001, copya.Id);

+            Assert.AreEqual("Name", copya.Name);

+            Assert.AreEqual("missing@field.value", copya.Email);

+            Assert.AreEqual(1, copya.UnknownFields.FieldDictionary.Count);

+            Assert.AreEqual("http://new.missing.field",

+                            copya.UnknownFields[TestMissingFieldsB.WebsiteFieldNumber].LengthDelimitedList[0].

+                                ToStringUtf8());

+

+            //Lastly we can even still trip back to type B and see all fields:

+            TestMissingFieldsB copyb = TestMissingFieldsB.ParseFrom(copya.ToByteArray());

+            Assert.AreEqual(copya.ToByteArray().Length, copyb.ToByteArray().Length); //not exact order.

+            Assert.AreEqual(1001, copyb.Id);

+            Assert.AreEqual("Name", copyb.Name);

+            Assert.AreEqual("http://new.missing.field", copyb.Website);

+            Assert.AreEqual(1, copyb.UnknownFields.FieldDictionary.Count);

+            Assert.AreEqual("missing@field.value",

+                            copyb.UnknownFields[TestMissingFieldsA.EmailFieldNumber].LengthDelimitedList[0].ToStringUtf8

+                                ());

+        }

+

+        [TestMethod]

+        public void TestRecoverMissingMessage()

+        {

+            TestMissingFieldsA.Types.SubA suba =

+                TestMissingFieldsA.Types.SubA.CreateBuilder().SetCount(3).AddValues("a").AddValues("b").AddValues("c").

+                    Build();

+            TestMissingFieldsA msga = TestMissingFieldsA.CreateBuilder()

+                .SetId(1001)

+                .SetName("Name")

+                .SetTestA(suba)

+                .Build();

+

+            //serialize to type B and verify all fields exist

+            TestMissingFieldsB msgb = TestMissingFieldsB.ParseFrom(msga.ToByteArray());

+            Assert.AreEqual(1001, msgb.Id);

+            Assert.AreEqual("Name", msgb.Name);

+            Assert.AreEqual(1, msgb.UnknownFields.FieldDictionary.Count);

+            Assert.AreEqual(suba.ToString(),

+                            TestMissingFieldsA.Types.SubA.ParseFrom(

+                                msgb.UnknownFields[TestMissingFieldsA.TestAFieldNumber].LengthDelimitedList[0]).ToString

+                                ());

+

+            //serializes exactly the same (at least for this simple example)

+            TestUtil.AssertBytesEqual(msga.ToByteArray(), msgb.ToByteArray());

+            Assert.AreEqual(msga, TestMissingFieldsA.ParseFrom(msgb.ToByteArray()));

+

+            //now re-create an exact copy of A from serialized B

+            TestMissingFieldsA copya = TestMissingFieldsA.ParseFrom(msgb.ToByteArray());

+            Assert.AreEqual(msga, copya);

+            Assert.AreEqual(1001, copya.Id);

+            Assert.AreEqual("Name", copya.Name);

+            Assert.AreEqual(suba, copya.TestA);

+

+            //Now we modify B... and try again

+            TestMissingFieldsB.Types.SubB subb =

+                TestMissingFieldsB.Types.SubB.CreateBuilder().AddValues("test-b").Build();

+            msgb = msgb.ToBuilder().SetTestB(subb).Build();

+            //Does B still have the missing field?

+            Assert.AreEqual(1, msgb.UnknownFields.FieldDictionary.Count);

+

+            //Convert back to A and see if all fields are there?

+            copya = TestMissingFieldsA.ParseFrom(msgb.ToByteArray());

+            Assert.AreNotEqual(msga, copya);

+            Assert.AreEqual(1001, copya.Id);

+            Assert.AreEqual("Name", copya.Name);

+            Assert.AreEqual(suba, copya.TestA);

+            Assert.AreEqual(1, copya.UnknownFields.FieldDictionary.Count);

+            TestUtil.AssertBytesEqual(subb.ToByteArray(),

+                            copya.UnknownFields[TestMissingFieldsB.TestBFieldNumber].LengthDelimitedList[0].ToByteArray());

+

+            //Lastly we can even still trip back to type B and see all fields:

+            TestMissingFieldsB copyb = TestMissingFieldsB.ParseFrom(copya.ToByteArray());

+            Assert.AreEqual(copya.ToByteArray().Length, copyb.ToByteArray().Length); //not exact order.

+            Assert.AreEqual(1001, copyb.Id);

+            Assert.AreEqual("Name", copyb.Name);

+            Assert.AreEqual(subb, copyb.TestB);

+            Assert.AreEqual(1, copyb.UnknownFields.FieldDictionary.Count);

+        }

+

+        [TestMethod]

+        public void TestRestoreFromOtherType()

+        {

+            TestInteropPerson person = TestInteropPerson.CreateBuilder()

+                .SetId(123)

+                .SetName("abc")

+                .SetEmail("abc@123.com")

+                .AddRangeCodes(new[] {1, 2, 3})

+                .AddPhone(TestInteropPerson.Types.PhoneNumber.CreateBuilder().SetNumber("555-1234").Build())

+                .AddPhone(TestInteropPerson.Types.PhoneNumber.CreateBuilder().SetNumber("555-5678").Build())

+                .AddAddresses(

+                    TestInteropPerson.Types.Addresses.CreateBuilder().SetAddress("123 Seseme").SetCity("Wonderland").

+                        SetState("NA").SetZip(12345).Build())

+                .SetExtension(UnitTestExtrasFullProtoFile.EmployeeId,

+                              TestInteropEmployeeId.CreateBuilder().SetNumber("123").Build())

+                .Build();

+            Assert.IsTrue(person.IsInitialized);

+

+            TestEmptyMessage temp = TestEmptyMessage.ParseFrom(person.ToByteArray());

+            Assert.AreEqual(7, temp.UnknownFields.FieldDictionary.Count);

+            temp = temp.ToBuilder().Build();

+            Assert.AreEqual(7, temp.UnknownFields.FieldDictionary.Count);

+

+            ExtensionRegistry registry = ExtensionRegistry.CreateInstance();

+            UnitTestExtrasFullProtoFile.RegisterAllExtensions(registry);

+

+            TestInteropPerson copy = TestInteropPerson.ParseFrom(temp.ToByteArray(), registry);

+            Assert.AreEqual(person, copy);

+            TestUtil.AssertBytesEqual(person.ToByteArray(), copy.ToByteArray());

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/Properties/AppManifest.xml b/csharp/src/ProtocolBuffersLite.Test/Properties/AppManifest.xml
new file mode 100644
index 0000000..a955232
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/Properties/AppManifest.xml
@@ -0,0 +1,6 @@
+<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"

+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

+>

+    <Deployment.Parts>

+    </Deployment.Parts>

+</Deployment>

diff --git a/csharp/src/ProtocolBuffersLite.Test/Properties/OutOfBrowserSettings.xml b/csharp/src/ProtocolBuffersLite.Test/Properties/OutOfBrowserSettings.xml
new file mode 100644
index 0000000..634f44b
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/Properties/OutOfBrowserSettings.xml
@@ -0,0 +1,7 @@
+<OutOfBrowserSettings ShortName="ProtocolBuffers.Test" EnableGPUAcceleration="False" ShowInstallMenuItem="False">

+  <OutOfBrowserSettings.Blurb>ProtocolBuffers.Test</OutOfBrowserSettings.Blurb>

+  <OutOfBrowserSettings.WindowSettings>

+    <WindowSettings Title="ProtocolBuffers.Test" />

+  </OutOfBrowserSettings.WindowSettings>

+  <OutOfBrowserSettings.Icons />

+</OutOfBrowserSettings>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.CF20.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.CF20.csproj
new file mode 100644
index 0000000..abb9f61
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.CF20.csproj
@@ -0,0 +1,133 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF20</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EE01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF20\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcForMimeTypes.cs">

+      <Link>TestRpcForMimeTypes.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcGenerator.cs">

+      <Link>TestRpcGenerator.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="SerializableLiteTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInteropLite.cs" />

+    <Compile Include="TestUtil.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.CF20.csproj">

+      <Project>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</Project>

+      <Name>ProtocolBuffersLite.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.CF20.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>True</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.CF35.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.CF35.csproj
new file mode 100644
index 0000000..74edad1
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.CF35.csproj
@@ -0,0 +1,134 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF35</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EE01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF35\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcForMimeTypes.cs">

+      <Link>TestRpcForMimeTypes.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcGenerator.cs">

+      <Link>TestRpcGenerator.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="SerializableLiteTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInteropLite.cs" />

+    <Compile Include="TestUtil.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.CF35.csproj">

+      <Project>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</Project>

+      <Name>ProtocolBuffersLite.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.CF35.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>True</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.NET20.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.NET20.csproj
new file mode 100644
index 0000000..59f9375
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.NET20.csproj
@@ -0,0 +1,121 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET20</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EE01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET20\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcForMimeTypes.cs">

+      <Link>TestRpcForMimeTypes.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcGenerator.cs">

+      <Link>TestRpcGenerator.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="SerializableLiteTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInteropLite.cs" />

+    <Compile Include="TestUtil.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.NET20.csproj">

+      <Project>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</Project>

+      <Name>ProtocolBuffersLite.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.NET20.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>True</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.NET35.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.NET35.csproj
new file mode 100644
index 0000000..e4ebfe1
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.NET35.csproj
@@ -0,0 +1,122 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EE01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcForMimeTypes.cs">

+      <Link>TestRpcForMimeTypes.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcGenerator.cs">

+      <Link>TestRpcGenerator.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="SerializableLiteTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInteropLite.cs" />

+    <Compile Include="TestUtil.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.NET35.csproj">

+      <Project>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</Project>

+      <Name>ProtocolBuffersLite.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.NET35.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>True</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.NET40.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.NET40.csproj
new file mode 100644
index 0000000..d02ac77
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.NET40.csproj
@@ -0,0 +1,122 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET40</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EE01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET40\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcForMimeTypes.cs">

+      <Link>TestRpcForMimeTypes.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcGenerator.cs">

+      <Link>TestRpcGenerator.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="SerializableLiteTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInteropLite.cs" />

+    <Compile Include="TestUtil.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.NET40.csproj">

+      <Project>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</Project>

+      <Name>ProtocolBuffersLite.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.NET40.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>True</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.PL40.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.PL40.csproj
new file mode 100644
index 0000000..b645a01
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.PL40.csproj
@@ -0,0 +1,156 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>PORTABLE_LIBRARY</EnvironmentFlavor>

+    <EnvironmentTemplate>PL40</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EE01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <TargetFrameworkProfile />

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <SilverlightApplication>true</SilverlightApplication>

+    <XapOutputs>true</XapOutputs>

+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>

+    <XapFilename>Google.ProtocolBuffersLite.Test.xap</XapFilename>

+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>

+    <SilverlightAppEntry>Google.ProtocolBuffers.App</SilverlightAppEntry>

+    <TestPageFileName>TestPage.html</TestPageFileName>

+    <CreateTestPage>true</CreateTestPage>

+    <SilverlightVersion>v4.0</SilverlightVersion>

+    <OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>

+    <EnableOutOfBrowser>true</EnableOutOfBrowser>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\PL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\PL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+    <Reference Include="System.Windows" />

+    <Reference Include="System.Windows.Browser" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcForMimeTypes.cs">

+      <Link>TestRpcForMimeTypes.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcGenerator.cs">

+      <Link>TestRpcGenerator.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="SerializableLiteTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInteropLite.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+    </Compile>

+    <None Include="Properties\AppManifest.xml" />

+    <None Include="Properties\OutOfBrowserSettings.xml" />

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.PL40.csproj">

+      <Project>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</Project>

+      <Name>ProtocolBuffersLite.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.PL40.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>True</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.SL20.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.SL20.csproj
new file mode 100644
index 0000000..b4ad946
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.SL20.csproj
@@ -0,0 +1,157 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL20</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EE01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>true</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <XapOutputs>true</XapOutputs>

+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>

+    <XapFilename>Google.ProtocolBuffersLite.Test.xap</XapFilename>

+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>

+    <SilverlightAppEntry>Google.ProtocolBuffers.App</SilverlightAppEntry>

+    <TestPageFileName>TestPage.html</TestPageFileName>

+    <CreateTestPage>true</CreateTestPage>

+    <SilverlightVersion>v2.0</SilverlightVersion>

+    <OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>

+    <EnableOutOfBrowser>true</EnableOutOfBrowser>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL20\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Windows" />

+    <Reference Include="System.Windows.Browser" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcForMimeTypes.cs">

+      <Link>TestRpcForMimeTypes.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcGenerator.cs">

+      <Link>TestRpcGenerator.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="SerializableLiteTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInteropLite.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+    </Compile>

+    <None Include="Properties\AppManifest.xml" />

+    <None Include="Properties\OutOfBrowserSettings.xml" />

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.SL20.csproj">

+      <Project>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</Project>

+      <Name>ProtocolBuffersLite.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.SL20.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>True</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.SL30.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.SL30.csproj
new file mode 100644
index 0000000..b5870ed
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.SL30.csproj
@@ -0,0 +1,158 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL30</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EE01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>true</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <XapOutputs>true</XapOutputs>

+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>

+    <XapFilename>Google.ProtocolBuffersLite.Test.xap</XapFilename>

+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>

+    <SilverlightAppEntry>Google.ProtocolBuffers.App</SilverlightAppEntry>

+    <TestPageFileName>TestPage.html</TestPageFileName>

+    <CreateTestPage>true</CreateTestPage>

+    <SilverlightVersion>v3.5</SilverlightVersion>

+    <OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>

+    <EnableOutOfBrowser>true</EnableOutOfBrowser>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL30\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL30\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+    <Reference Include="System.Windows" />

+    <Reference Include="System.Windows.Browser" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcForMimeTypes.cs">

+      <Link>TestRpcForMimeTypes.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcGenerator.cs">

+      <Link>TestRpcGenerator.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="SerializableLiteTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInteropLite.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+    </Compile>

+    <None Include="Properties\AppManifest.xml" />

+    <None Include="Properties\OutOfBrowserSettings.xml" />

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.SL30.csproj">

+      <Project>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</Project>

+      <Name>ProtocolBuffersLite.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.SL30.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>True</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.SL40.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.SL40.csproj
new file mode 100644
index 0000000..ef1543e
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.SL40.csproj
@@ -0,0 +1,158 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL40</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EE01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>true</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <SilverlightVersion>v4.0</SilverlightVersion>

+    <XapOutputs>true</XapOutputs>

+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>

+    <XapFilename>Google.ProtocolBuffersLite.Test.xap</XapFilename>

+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>

+    <SilverlightAppEntry>Google.ProtocolBuffers.App</SilverlightAppEntry>

+    <TestPageFileName>TestPage.html</TestPageFileName>

+    <CreateTestPage>true</CreateTestPage>

+    <OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>

+    <EnableOutOfBrowser>true</EnableOutOfBrowser>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+    <Reference Include="System.Windows" />

+    <Reference Include="System.Windows.Browser" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcForMimeTypes.cs">

+      <Link>TestRpcForMimeTypes.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcGenerator.cs">

+      <Link>TestRpcGenerator.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="SerializableLiteTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInteropLite.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+    </Compile>

+    <None Include="Properties\AppManifest.xml" />

+    <None Include="Properties\OutOfBrowserSettings.xml" />

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.SL40.csproj">

+      <Project>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</Project>

+      <Name>ProtocolBuffersLite.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.SL40.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>True</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj
new file mode 100644
index 0000000..451aaf8
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLite.Test.csproj
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EE01ED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcForMimeTypes.cs">

+      <Link>TestRpcForMimeTypes.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\TestRpcGenerator.cs">

+      <Link>TestRpcGenerator.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="SerializableLiteTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestRpcInteropLite.cs" />

+    <Compile Include="TestUtil.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers.Serialization\ProtocolBuffersLite.Serialization.csproj">

+      <Project>{E067A59D-9D0A-4A1F-92B1-38E4457241D1}</Project>

+      <Name>ProtocolBuffersLite.Serialization</Name>

+    </ProjectReference>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffersLite.csproj">

+      <Project>{6969BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffersLite</Name>

+      <Private>True</Private>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.CF20.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.CF20.csproj
new file mode 100644
index 0000000..0ed3b36
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.CF20.csproj
@@ -0,0 +1,126 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF20</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EEFFED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersMixedLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF20\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF20\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="InteropLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="MissingFieldAndExtensionTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasFullProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteImportNonLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestUtil.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.CF20.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.CF35.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.CF35.csproj
new file mode 100644
index 0000000..50d4e64
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.CF35.csproj
@@ -0,0 +1,127 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>COMPACT_FRAMEWORK</EnvironmentFlavor>

+    <EnvironmentTemplate>CF35</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EEFFED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersMixedLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

+    <PlatformFamilyName>Smartphone</PlatformFamilyName>

+    <PlatformID>f27da329-3269-4191-98e0-c87d3d7f1db9</PlatformID>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\CF35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\CF35\Release</OutputPath>

+    <IntermediateOutputPath>obj\CF35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOFILEVERSION</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="InteropLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="MissingFieldAndExtensionTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasFullProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteImportNonLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestUtil.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.CF35.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildBinPath)\Microsoft.CompactFramework.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}">

+        <HostingProcess disable="1" />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.NET20.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.NET20.csproj
new file mode 100644
index 0000000..80593a4
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.NET20.csproj
@@ -0,0 +1,114 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET20</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EEFFED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersMixedLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET20\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET20\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="InteropLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="MissingFieldAndExtensionTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasFullProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteImportNonLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestUtil.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.NET20.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.NET35.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.NET35.csproj
new file mode 100644
index 0000000..e8b6d09
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.NET35.csproj
@@ -0,0 +1,115 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EEFFED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersMixedLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="InteropLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="MissingFieldAndExtensionTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasFullProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteImportNonLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestUtil.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.NET35.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.NET40.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.NET40.csproj
new file mode 100644
index 0000000..16ffefd
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.NET40.csproj
@@ -0,0 +1,115 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET40</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EEFFED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersMixedLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET40\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET40\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="InteropLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="MissingFieldAndExtensionTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasFullProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteImportNonLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestUtil.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.NET40.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.PL40.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.PL40.csproj
new file mode 100644
index 0000000..3d1a77b
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.PL40.csproj
@@ -0,0 +1,149 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>PORTABLE_LIBRARY</EnvironmentFlavor>

+    <EnvironmentTemplate>PL40</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EEFFED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersMixedLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <MinimumVisualStudioVersion>10.0</MinimumVisualStudioVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <TargetFrameworkProfile />

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <SilverlightApplication>true</SilverlightApplication>

+    <XapOutputs>true</XapOutputs>

+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>

+    <XapFilename>Google.ProtocolBuffersMixedLite.Test.xap</XapFilename>

+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>

+    <SilverlightAppEntry>Google.ProtocolBuffers.App</SilverlightAppEntry>

+    <TestPageFileName>TestPage.html</TestPageFileName>

+    <CreateTestPage>true</CreateTestPage>

+    <SilverlightVersion>v4.0</SilverlightVersion>

+    <OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>

+    <EnableOutOfBrowser>true</EnableOutOfBrowser>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\PL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\PL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\PL40\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+    <Reference Include="System.Windows" />

+    <Reference Include="System.Windows.Browser" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="InteropLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="MissingFieldAndExtensionTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasFullProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteImportNonLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+    </Compile>

+    <None Include="Properties\AppManifest.xml" />

+    <None Include="Properties\OutOfBrowserSettings.xml" />

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.PL40.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties />

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.SL20.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.SL20.csproj
new file mode 100644
index 0000000..22b2c27
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.SL20.csproj
@@ -0,0 +1,150 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL20</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EEFFED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersMixedLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>true</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <XapOutputs>true</XapOutputs>

+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>

+    <XapFilename>Google.ProtocolBuffersMixedLite.Test.xap</XapFilename>

+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>

+    <SilverlightAppEntry>Google.ProtocolBuffers.App</SilverlightAppEntry>

+    <TestPageFileName>TestPage.html</TestPageFileName>

+    <CreateTestPage>true</CreateTestPage>

+    <SilverlightVersion>v2.0</SilverlightVersion>

+    <OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>

+    <EnableOutOfBrowser>true</EnableOutOfBrowser>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL20\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL20\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL20\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST;NOEXTENSIONS</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Windows" />

+    <Reference Include="System.Windows.Browser" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="InteropLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="MissingFieldAndExtensionTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasFullProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteImportNonLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+    </Compile>

+    <None Include="Properties\AppManifest.xml" />

+    <None Include="Properties\OutOfBrowserSettings.xml" />

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.SL20.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v2.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.SL30.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.SL30.csproj
new file mode 100644
index 0000000..3627b76
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.SL30.csproj
@@ -0,0 +1,151 @@
+<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL30</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EEFFED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersMixedLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>true</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <XapOutputs>true</XapOutputs>

+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>

+    <XapFilename>Google.ProtocolBuffersMixedLite.Test.xap</XapFilename>

+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>

+    <SilverlightAppEntry>Google.ProtocolBuffers.App</SilverlightAppEntry>

+    <TestPageFileName>TestPage.html</TestPageFileName>

+    <CreateTestPage>true</CreateTestPage>

+    <SilverlightVersion>v3.5</SilverlightVersion>

+    <OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>

+    <EnableOutOfBrowser>true</EnableOutOfBrowser>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL30\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL30\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL30\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+    <Reference Include="System.Windows" />

+    <Reference Include="System.Windows.Browser" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="InteropLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="MissingFieldAndExtensionTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasFullProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteImportNonLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+    </Compile>

+    <None Include="Properties\AppManifest.xml" />

+    <None Include="Properties\OutOfBrowserSettings.xml" />

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.SL30.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\v3.0\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.SL40.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.SL40.csproj
new file mode 100644
index 0000000..a98c4d3
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.SL40.csproj
@@ -0,0 +1,151 @@
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" xmlns:cs="urn:schemas-csharp-project:template">

+  <PropertyGroup>

+    <EnvironmentFlavor>SILVERLIGHT</EnvironmentFlavor>

+    <EnvironmentTemplate>SL40</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EEFFED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersMixedLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+    <ProjectTypeGuids>{A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

+    <SilverlightApplication>true</SilverlightApplication>

+    <ValidateXaml>false</ValidateXaml>

+    <ThrowErrorsInValidation>false</ThrowErrorsInValidation>

+    <SilverlightVersion>v4.0</SilverlightVersion>

+    <XapOutputs>true</XapOutputs>

+    <GenerateSilverlightManifest>true</GenerateSilverlightManifest>

+    <XapFilename>Google.ProtocolBuffersMixedLite.Test.xap</XapFilename>

+    <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate>

+    <SilverlightAppEntry>Google.ProtocolBuffers.App</SilverlightAppEntry>

+    <TestPageFileName>TestPage.html</TestPageFileName>

+    <CreateTestPage>true</CreateTestPage>

+    <OutOfBrowserSettingsFile>Properties\OutOfBrowserSettings.xml</OutOfBrowserSettingsFile>

+    <EnableOutOfBrowser>true</EnableOutOfBrowser>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\SL40\Debug</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\SL40\Release</OutputPath>

+    <IntermediateOutputPath>obj\SL40\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate);NOSERIALIZABLE;NOSORTEDLIST</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+    <NoConfig>true</NoConfig>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+    <Reference Include="System.Core" />

+    <Reference Include="System.Windows" />

+    <Reference Include="System.Windows.Browser" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="InteropLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="MissingFieldAndExtensionTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasFullProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteImportNonLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestUtil.cs" />

+    <Compile Include="App.xaml.cs">

+      <DependentUpon>App.xaml</DependentUpon>

+    </Compile>

+    <None Include="Properties\AppManifest.xml" />

+    <None Include="Properties\OutOfBrowserSettings.xml" />

+    <ApplicationDefinition Include="App.xaml">

+      <Generator>MSBuild:Compile</Generator>

+      <SubType>Designer</SubType>

+    </ApplicationDefinition>

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.SL40.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Silverlight\$(SilverlightVersion)\Microsoft.Silverlight.CSharp.targets" />

+  <ProjectExtensions>

+    <VisualStudio>

+      <FlavorProperties GUID="{A1591282-1198-4647-A2B1-27E5FF5F6F3B}">

+        <SilverlightProjectProperties>

+          <StartAction>OfflineApplication</StartAction>

+        </SilverlightProjectProperties>

+      </FlavorProperties>

+    </VisualStudio>

+  </ProjectExtensions>

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.csproj b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.csproj
new file mode 100644
index 0000000..7abd0ab
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/ProtocolBuffersLiteMixed.Test.csproj
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>

+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

+  <PropertyGroup>

+    <EnvironmentFlavor>CLIENTPROFILE</EnvironmentFlavor>

+    <EnvironmentTemplate>NET35</EnvironmentTemplate>

+    <EnvironmentProjectType>TEST</EnvironmentProjectType>

+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

+    <ProductVersion>9.0.30729</ProductVersion>

+    <SchemaVersion>2.0</SchemaVersion>

+    <ProjectGuid>{EEFFED24-3750-4567-9A23-1DB676A15610}</ProjectGuid>

+    <OutputType>Library</OutputType>

+    <AppDesignerFolder>Properties</AppDesignerFolder>

+    <RootNamespace>Google.ProtocolBuffers</RootNamespace>

+    <AssemblyName>Google.ProtocolBuffersMixedLite.Test</AssemblyName>

+    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

+    <FileAlignment>512</FileAlignment>

+    <SignAssembly>true</SignAssembly>

+    <AssemblyOriginatorKeyFile>..\..\keys\Google.ProtocolBuffers.snk</AssemblyOriginatorKeyFile>

+    <OldToolsVersion>3.5</OldToolsVersion>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

+    <DebugSymbols>true</DebugSymbols>

+    <DebugType>full</DebugType>

+    <Optimize>false</Optimize>

+    <OutputPath>bin\NET35\Debug</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Debug\</IntermediateOutputPath>

+    <DefineConstants>DEBUG;TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">

+    <DebugType>pdbonly</DebugType>

+    <Optimize>true</Optimize>

+    <OutputPath>bin\NET35\Release</OutputPath>

+    <IntermediateOutputPath>obj\NET35\Release\</IntermediateOutputPath>

+    <DefineConstants>TRACE;$(EnvironmentFlavor);$(EnvironmentTemplate)</DefineConstants>

+    <ErrorReport>prompt</ErrorReport>

+    <WarningLevel>4</WarningLevel>

+    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>

+    <NoStdLib>true</NoStdLib>

+    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

+  </PropertyGroup>

+  <ItemGroup>

+    <Reference Include="mscorlib" />

+    <Reference Include="System" />

+    <Reference Include="System.Xml" />

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <Reference Include="nunit.framework">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\NUnit\lib\nunit.framework.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup Condition=" '$(EnvironmentFlavor)' != 'CLIENTPROFILE' ">

+    <Reference Include="Microsoft.Silverlight.Testing, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.Silverlight.Testing.dll</HintPath>

+    </Reference>

+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

+      <SpecificVersion>False</SpecificVersion>

+      <HintPath>..\..\lib\Microsoft.Silverlight.Testing\April2010\Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll</HintPath>

+    </Reference>

+  </ItemGroup>

+  <ItemGroup>

+    <Compile Include="..\..\lib\NUnit-config\Microsoft.VisualStudio.TestTools.cs">

+      <Link>Microsoft.VisualStudio.TestTools.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\Properties\AssemblyInfo.cs">

+      <Link>Properties\AssemblyInfo.cs</Link>

+    </Compile>

+    <Compile Include="..\ProtocolBuffers.Test\SerializableAttribute.cs">

+      <Link>SerializableAttribute.cs</Link>

+    </Compile>

+    <Compile Include="AbstractBuilderLiteTest.cs" />

+    <Compile Include="AbstractMessageLiteTest.cs" />

+    <Compile Include="ExtendableBuilderLiteTest.cs" />

+    <Compile Include="ExtendableMessageLiteTest.cs" />

+    <Compile Include="InteropLiteTest.cs" />

+    <Compile Include="LiteTest.cs" />

+    <Compile Include="MissingFieldAndExtensionTest.cs" />

+    <Compile Include="TestLiteByApi.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasFullProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestExtrasLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestImportProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteImportNonLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestLiteProtoFile.cs" />

+    <Compile Include="TestProtos\UnitTestProtoFile.cs" />

+    <Compile Include="TestUtil.cs" />

+  </ItemGroup>

+  <ItemGroup>

+    <ProjectReference Include="..\ProtocolBuffers\ProtocolBuffers.csproj">

+      <Project>{6908BDCE-D925-43F3-94AC-A531E6DF2591}</Project>

+      <Name>ProtocolBuffers</Name>

+    </ProjectReference>

+  </ItemGroup>

+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 

+       Other similar extension points exist, see Microsoft.Common.targets.

+  <Target Name="BeforeBuild">

+  </Target>

+  <Target Name="AfterBuild">

+  </Target>

+  -->

+  <PropertyGroup Condition=" '$(EnvironmentFlavor)' == 'CLIENTPROFILE' ">

+    <StartAction>Program</StartAction>

+    <StartProgram>$(ProjectDir)..\..\lib\NUnit\tools\nunit-console.exe</StartProgram>

+    <StartArguments>/nologo /noshadow /labels /wait $(AssemblyName).dll</StartArguments>

+    <StartWorkingDirectory>$(ProjectDir)$(OutputPath)</StartWorkingDirectory>

+  </PropertyGroup>

+</Project>
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/SerializableLiteTest.cs b/csharp/src/ProtocolBuffersLite.Test/SerializableLiteTest.cs
new file mode 100644
index 0000000..3efb917
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/SerializableLiteTest.cs
@@ -0,0 +1,55 @@
+using System;

+#if !NOSERIALIZABLE

+using System.Collections.Generic;

+using System.IO;

+using System.Runtime.Serialization;

+using System.Runtime.Serialization.Formatters.Binary;

+using System.Text;

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class SerializableLiteTest

+    {

+        /// <summary>

+        /// Just keep it from even compiling if we these objects don't implement the expected interface.

+        /// </summary>

+        public static readonly ISerializable CompileTimeCheckSerializableMessage = TestRequiredLite.DefaultInstance;

+        public static readonly ISerializable CompileTimeCheckSerializableBuilder = new TestRequiredLite.Builder();

+

+        [TestMethod]

+        public void TestPlainMessage()

+        {

+            TestRequiredLite message = TestRequiredLite.CreateBuilder()

+                .SetD(42)

+                .BuildPartial();

+

+            MemoryStream ms = new MemoryStream();

+            new BinaryFormatter().Serialize(ms, message);

+

+            ms.Position = 0;

+            TestRequiredLite copy = (TestRequiredLite)new BinaryFormatter().Deserialize(ms);

+

+            Assert.AreEqual(message, copy);

+        }

+

+        [TestMethod]

+        public void TestPlainBuilder()

+        {

+            TestRequiredLite.Builder builder = TestRequiredLite.CreateBuilder()

+                .SetD(42)

+                ;

+

+            MemoryStream ms = new MemoryStream();

+            new BinaryFormatter().Serialize(ms, builder);

+

+            ms.Position = 0;

+            TestRequiredLite.Builder copy = (TestRequiredLite.Builder)new BinaryFormatter().Deserialize(ms);

+

+            Assert.AreEqual(builder.BuildPartial(), copy.BuildPartial());

+        }

+    }

+}

+#endif
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/TestLiteByApi.cs b/csharp/src/ProtocolBuffersLite.Test/TestLiteByApi.cs
new file mode 100644
index 0000000..ce37302
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/TestLiteByApi.cs
@@ -0,0 +1,121 @@
+#region Copyright notice and license

+

+// Protocol Buffers - Google's data interchange format

+// Copyright 2008 Google Inc.  All rights reserved.

+// http://github.com/jskeet/dotnet-protobufs/

+// Original C++/Java/Python code:

+// http://code.google.com/p/protobuf/

+//

+// Redistribution and use in source and binary forms, with or without

+// modification, are permitted provided that the following conditions are

+// met:

+//

+//     * Redistributions of source code must retain the above copyright

+// notice, this list of conditions and the following disclaimer.

+//     * Redistributions in binary form must reproduce the above

+// copyright notice, this list of conditions and the following disclaimer

+// in the documentation and/or other materials provided with the

+// distribution.

+//     * Neither the name of Google Inc. nor the names of its

+// contributors may be used to endorse or promote products derived from

+// this software without specific prior written permission.

+//

+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+

+#endregion

+

+using Google.ProtocolBuffers.TestProtos;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    [TestClass]

+    public class TestLiteByApi

+    {

+        [TestMethod]

+        public void TestAllTypesEquality()

+        {

+            TestAllTypesLite msg = TestAllTypesLite.DefaultInstance;

+            TestAllTypesLite copy = msg.ToBuilder().Build();

+            Assert.AreEqual(msg.GetHashCode(), copy.GetHashCode());

+            Assert.IsTrue(msg.Equals(copy));

+            msg = msg.ToBuilder().SetOptionalString("Hi").Build();

+            Assert.AreNotEqual(msg.GetHashCode(), copy.GetHashCode());

+            Assert.IsFalse(msg.Equals(copy));

+            copy = copy.ToBuilder().SetOptionalString("Hi").Build();

+            Assert.AreEqual(msg.GetHashCode(), copy.GetHashCode());

+            Assert.IsTrue(msg.Equals(copy));

+        }

+

+        [TestMethod]

+        public void TestEqualityOnExtensions()

+        {

+            TestAllExtensionsLite msg = TestAllExtensionsLite.DefaultInstance;

+            TestAllExtensionsLite copy = msg.ToBuilder().Build();

+            Assert.AreEqual(msg.GetHashCode(), copy.GetHashCode());

+            Assert.IsTrue(msg.Equals(copy));

+            msg = msg.ToBuilder().SetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite, "Hi").Build();

+            Assert.AreNotEqual(msg.GetHashCode(), copy.GetHashCode());

+            Assert.IsFalse(msg.Equals(copy));

+            copy = copy.ToBuilder().SetExtension(UnitTestLiteProtoFile.OptionalStringExtensionLite, "Hi").Build();

+            Assert.AreEqual(msg.GetHashCode(), copy.GetHashCode());

+            Assert.IsTrue(msg.Equals(copy));

+        }

+

+        [TestMethod]

+        public void TestAllTypesToString()

+        {

+            TestAllTypesLite msg = TestAllTypesLite.DefaultInstance;

+            TestAllTypesLite copy = msg.ToBuilder().Build();

+            Assert.AreEqual(msg.ToString(), copy.ToString());

+            Assert.AreEqual(0, msg.ToString().Length);

+            msg = msg.ToBuilder().SetOptionalInt32(-1).Build();

+            Assert.AreEqual("optional_int32: -1", msg.ToString().TrimEnd());

+            msg = msg.ToBuilder().SetOptionalString("abc123").Build();

+            Assert.AreEqual("optional_int32: -1\noptional_string: \"abc123\"",

+                            msg.ToString().Replace("\r", "").TrimEnd());

+        }

+

+        [TestMethod]

+        public void TestAllTypesDefaultedRoundTrip()

+        {

+            TestAllTypesLite msg = TestAllTypesLite.DefaultInstance;

+            Assert.IsTrue(msg.IsInitialized);

+            TestAllTypesLite copy = TestAllTypesLite.CreateBuilder().MergeFrom(msg.ToByteArray()).Build();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+

+        [TestMethod]

+        public void TestAllTypesModifiedRoundTrip()

+        {

+            TestAllTypesLite msg = TestAllTypesLite.DefaultInstance;

+            msg.ToBuilder()

+                .SetOptionalBool(true)

+                .SetOptionalCord("Hi")

+                .SetOptionalDouble(1.123)

+                .SetOptionalForeignEnum(ForeignEnumLite.FOREIGN_LITE_FOO)

+                .SetOptionalForeignMessage(ForeignMessageLite.CreateBuilder().SetC('c').Build())

+                .SetOptionalGroup(TestAllTypesLite.Types.OptionalGroup.CreateBuilder().SetA('a').Build())

+                .SetOptionalImportEnum(ImportEnumLite.IMPORT_LITE_BAR)

+                .SetOptionalInt32(32)

+                .SetOptionalInt64(64)

+                .SetOptionalNestedEnum(TestAllTypesLite.Types.NestedEnum.FOO)

+                .SetOptionalString("SetOptionalString")

+                .AddRepeatedGroup(TestAllTypesLite.Types.RepeatedGroup.CreateBuilder().SetA('a').Build())

+                .AddRepeatedGroup(TestAllTypesLite.Types.RepeatedGroup.CreateBuilder().SetA('A').Build())

+                ;

+            TestAllTypesLite copy = TestAllTypesLite.CreateBuilder().MergeFrom(msg.ToByteArray()).Build();

+            TestUtil.AssertBytesEqual(msg.ToByteArray(), copy.ToByteArray());

+        }

+    }

+}
\ No newline at end of file
diff --git a/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasFullProtoFile.cs b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasFullProtoFile.cs
new file mode 100644
index 0000000..42ef030
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasFullProtoFile.cs
@@ -0,0 +1,2144 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestExtrasFullProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.EmployeeId);

+    }

+    #endregion

+    #region Extensions

+    public const int EmployeeIdFieldNumber = 126;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestInteropEmployeeId> EmployeeId;

+    #endregion

+    

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestInteropPerson__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson, global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Builder> internal__static_protobuf_unittest_extra_TestInteropPerson__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestInteropPerson_PhoneNumber__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber, global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber.Builder> internal__static_protobuf_unittest_extra_TestInteropPerson_PhoneNumber__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestInteropPerson_Addresses__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses, global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses.Builder> internal__static_protobuf_unittest_extra_TestInteropPerson_Addresses__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestInteropEmployeeId__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestInteropEmployeeId, global::Google.ProtocolBuffers.TestProtos.TestInteropEmployeeId.Builder> internal__static_protobuf_unittest_extra_TestInteropEmployeeId__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestMissingFieldsA__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA, global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Builder> internal__static_protobuf_unittest_extra_TestMissingFieldsA__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestMissingFieldsA_SubA__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA, global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA.Builder> internal__static_protobuf_unittest_extra_TestMissingFieldsA_SubA__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestMissingFieldsB__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB, global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Builder> internal__static_protobuf_unittest_extra_TestMissingFieldsB__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_extra_TestMissingFieldsB_SubB__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB, global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB.Builder> internal__static_protobuf_unittest_extra_TestMissingFieldsB_SubB__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestExtrasFullProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CiFleHRlc3QvdW5pdHRlc3RfZXh0cmFzX2Z1bGwucHJvdG8SF3Byb3RvYnVm", 

+            "X3VuaXR0ZXN0X2V4dHJhGiRnb29nbGUvcHJvdG9idWYvY3NoYXJwX29wdGlv", 

+            "bnMucHJvdG8i1gMKEVRlc3RJbnRlcm9wUGVyc29uEgwKBG5hbWUYASACKAkS", 

+            "CgoCaWQYAiACKAUSDQoFZW1haWwYAyABKAkSEQoFY29kZXMYCiADKAVCAhAB", 

+            "EkUKBXBob25lGAQgAygLMjYucHJvdG9idWZfdW5pdHRlc3RfZXh0cmEuVGVz", 

+            "dEludGVyb3BQZXJzb24uUGhvbmVOdW1iZXISRwoJYWRkcmVzc2VzGAUgAygK", 

+            "MjQucHJvdG9idWZfdW5pdHRlc3RfZXh0cmEuVGVzdEludGVyb3BQZXJzb24u", 

+            "QWRkcmVzc2VzGmcKC1Bob25lTnVtYmVyEg4KBm51bWJlchgBIAIoCRJICgR0", 

+            "eXBlGAIgASgOMjQucHJvdG9idWZfdW5pdHRlc3RfZXh0cmEuVGVzdEludGVy", 

+            "b3BQZXJzb24uUGhvbmVUeXBlOgRIT01FGlgKCUFkZHJlc3NlcxIPCgdhZGRy", 

+            "ZXNzGAEgAigJEhAKCGFkZHJlc3MyGAIgASgJEgwKBGNpdHkYAyACKAkSDQoF", 

+            "c3RhdGUYBCACKAkSCwoDemlwGAUgAigHIisKCVBob25lVHlwZRIKCgZNT0JJ", 

+            "TEUQABIICgRIT01FEAESCAoEV09SSxACKgUIZBDIASInChVUZXN0SW50ZXJv", 

+            "cEVtcGxveWVlSWQSDgoGbnVtYmVyGAEgAigJIqUBChJUZXN0TWlzc2luZ0Zp", 

+            "ZWxkc0ESDAoEbmFtZRgBIAIoCRIKCgJpZBgCIAIoBRINCgVlbWFpbBgDIAEo", 

+            "CRI/CgV0ZXN0QRgLIAEoCzIwLnByb3RvYnVmX3VuaXR0ZXN0X2V4dHJhLlRl", 

+            "c3RNaXNzaW5nRmllbGRzQS5TdWJBGiUKBFN1YkESDQoFY291bnQYBSACKAUS", 

+            "DgoGdmFsdWVzGAYgAygJIpgBChJUZXN0TWlzc2luZ0ZpZWxkc0ISDAoEbmFt", 

+            "ZRgBIAIoCRIKCgJpZBgCIAIoBRIPCgd3ZWJzaXRlGAQgASgJEj8KBXRlc3RC", 

+            "GAwgASgLMjAucHJvdG9idWZfdW5pdHRlc3RfZXh0cmEuVGVzdE1pc3NpbmdG", 

+            "aWVsZHNCLlN1YkIaFgoEU3ViQhIOCgZ2YWx1ZXMYByADKAk6bwoLZW1wbG95", 

+            "ZWVfaWQSKi5wcm90b2J1Zl91bml0dGVzdF9leHRyYS5UZXN0SW50ZXJvcFBl", 

+            "cnNvbhh+IAIoCzIuLnByb3RvYnVmX3VuaXR0ZXN0X2V4dHJhLlRlc3RJbnRl", 

+            "cm9wRW1wbG95ZWVJZEJaChNjb20uZ29vZ2xlLnByb3RvYnVmSALCPkAKIUdv", 

+            "b2dsZS5Qcm90b2NvbEJ1ZmZlcnMuVGVzdFByb3RvcxIbVW5pdFRlc3RFeHRy", 

+          "YXNGdWxsUHJvdG9GaWxl"));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_extra_TestInteropPerson__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_extra_TestInteropPerson__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson, global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Builder>(internal__static_protobuf_unittest_extra_TestInteropPerson__Descriptor,

+                new string[] { "Name", "Id", "Email", "Codes", "Phone", "Addresses", });

+        internal__static_protobuf_unittest_extra_TestInteropPerson_PhoneNumber__Descriptor = internal__static_protobuf_unittest_extra_TestInteropPerson__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_extra_TestInteropPerson_PhoneNumber__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber, global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber.Builder>(internal__static_protobuf_unittest_extra_TestInteropPerson_PhoneNumber__Descriptor,

+                new string[] { "Number", "Type", });

+        internal__static_protobuf_unittest_extra_TestInteropPerson_Addresses__Descriptor = internal__static_protobuf_unittest_extra_TestInteropPerson__Descriptor.NestedTypes[1];

+        internal__static_protobuf_unittest_extra_TestInteropPerson_Addresses__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses, global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses.Builder>(internal__static_protobuf_unittest_extra_TestInteropPerson_Addresses__Descriptor,

+                new string[] { "Address", "Address2", "City", "State", "Zip", });

+        internal__static_protobuf_unittest_extra_TestInteropEmployeeId__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_protobuf_unittest_extra_TestInteropEmployeeId__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestInteropEmployeeId, global::Google.ProtocolBuffers.TestProtos.TestInteropEmployeeId.Builder>(internal__static_protobuf_unittest_extra_TestInteropEmployeeId__Descriptor,

+                new string[] { "Number", });

+        internal__static_protobuf_unittest_extra_TestMissingFieldsA__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_protobuf_unittest_extra_TestMissingFieldsA__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA, global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Builder>(internal__static_protobuf_unittest_extra_TestMissingFieldsA__Descriptor,

+                new string[] { "Name", "Id", "Email", "TestA", });

+        internal__static_protobuf_unittest_extra_TestMissingFieldsA_SubA__Descriptor = internal__static_protobuf_unittest_extra_TestMissingFieldsA__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_extra_TestMissingFieldsA_SubA__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA, global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA.Builder>(internal__static_protobuf_unittest_extra_TestMissingFieldsA_SubA__Descriptor,

+                new string[] { "Count", "Values", });

+        internal__static_protobuf_unittest_extra_TestMissingFieldsB__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_protobuf_unittest_extra_TestMissingFieldsB__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB, global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Builder>(internal__static_protobuf_unittest_extra_TestMissingFieldsB__Descriptor,

+                new string[] { "Name", "Id", "Website", "TestB", });

+        internal__static_protobuf_unittest_extra_TestMissingFieldsB_SubB__Descriptor = internal__static_protobuf_unittest_extra_TestMissingFieldsB__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_extra_TestMissingFieldsB_SubB__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB, global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB.Builder>(internal__static_protobuf_unittest_extra_TestMissingFieldsB_SubB__Descriptor,

+                new string[] { "Values", });

+        global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.EmployeeId = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestInteropEmployeeId>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.Descriptor.Extensions[0]);

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestInteropPerson : pb::ExtendableMessage<TestInteropPerson, TestInteropPerson.Builder> {

+    private TestInteropPerson() { }

+    private static readonly TestInteropPerson defaultInstance = new TestInteropPerson().MakeReadOnly();

+    public static TestInteropPerson DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestInteropPerson DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestInteropPerson ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestInteropPerson__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestInteropPerson, TestInteropPerson.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestInteropPerson__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum PhoneType {

+        MOBILE = 0,

+        HOME = 1,

+        WORK = 2,

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class PhoneNumber : pb::GeneratedMessage<PhoneNumber, PhoneNumber.Builder> {

+        private PhoneNumber() { }

+        private static readonly PhoneNumber defaultInstance = new PhoneNumber().MakeReadOnly();

+        public static PhoneNumber DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override PhoneNumber DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override PhoneNumber ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestInteropPerson_PhoneNumber__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<PhoneNumber, PhoneNumber.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestInteropPerson_PhoneNumber__FieldAccessorTable; }

+        }

+        

+        public const int NumberFieldNumber = 1;

+        private bool hasNumber;

+        private string number_ = "";

+        public bool HasNumber {

+          get { return hasNumber; }

+        }

+        public string Number {

+          get { return number_; }

+        }

+        

+        public const int TypeFieldNumber = 2;

+        private bool hasType;

+        private global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneType type_ = global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneType.HOME;

+        public bool HasType {

+          get { return hasType; }

+        }

+        public global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneType Type {

+          get { return type_; }

+        }

+        

+        public static PhoneNumber ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static PhoneNumber ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static PhoneNumber ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private PhoneNumber MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(PhoneNumber prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<PhoneNumber, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(PhoneNumber cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private PhoneNumber result;

+          

+          private PhoneNumber PrepareBuilder() {

+            if (resultIsReadOnly) {

+              PhoneNumber original = result;

+              result = new PhoneNumber();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override PhoneNumber MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber.Descriptor; }

+          }

+          

+          public override PhoneNumber DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber.DefaultInstance; }

+          }

+          

+          public override PhoneNumber BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          

+          public bool HasNumber {

+            get { return result.hasNumber; }

+          }

+          public string Number {

+            get { return result.Number; }

+            set { SetNumber(value); }

+          }

+          public Builder SetNumber(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasNumber = true;

+            result.number_ = value;

+            return this;

+          }

+          public Builder ClearNumber() {

+            PrepareBuilder();

+            result.hasNumber = false;

+            result.number_ = "";

+            return this;

+          }

+          

+          public bool HasType {

+           get { return result.hasType; }

+          }

+          public global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneType Type {

+            get { return result.Type; }

+            set { SetType(value); }

+          }

+          public Builder SetType(global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneType value) {

+            PrepareBuilder();

+            result.hasType = true;

+            result.type_ = value;

+            return this;

+          }

+          public Builder ClearType() {

+            PrepareBuilder();

+            result.hasType = false;

+            result.type_ = global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneType.HOME;

+            return this;

+          }

+        }

+        static PhoneNumber() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.Descriptor, null);

+        }

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Addresses : pb::GeneratedMessage<Addresses, Addresses.Builder> {

+        private Addresses() { }

+        private static readonly Addresses defaultInstance = new Addresses().MakeReadOnly();

+        public static Addresses DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Addresses DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Addresses ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestInteropPerson_Addresses__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Addresses, Addresses.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestInteropPerson_Addresses__FieldAccessorTable; }

+        }

+        

+        public const int AddressFieldNumber = 1;

+        private bool hasAddress;

+        private string address_ = "";

+        public bool HasAddress {

+          get { return hasAddress; }

+        }

+        public string Address {

+          get { return address_; }

+        }

+        

+        public const int Address2FieldNumber = 2;

+        private bool hasAddress2;

+        private string address2_ = "";

+        public bool HasAddress2 {

+          get { return hasAddress2; }

+        }

+        public string Address2 {

+          get { return address2_; }

+        }

+        

+        public const int CityFieldNumber = 3;

+        private bool hasCity;

+        private string city_ = "";

+        public bool HasCity {

+          get { return hasCity; }

+        }

+        public string City {

+          get { return city_; }

+        }

+        

+        public const int StateFieldNumber = 4;

+        private bool hasState;

+        private string state_ = "";

+        public bool HasState {

+          get { return hasState; }

+        }

+        public string State {

+          get { return state_; }

+        }

+        

+        public const int ZipFieldNumber = 5;

+        private bool hasZip;

+        private uint zip_;

+        public bool HasZip {

+          get { return hasZip; }

+        }

+        [global::System.CLSCompliant(false)]

+        public uint Zip {

+          get { return zip_; }

+        }

+        

+        public static Addresses ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Addresses ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Addresses ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Addresses ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Addresses ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Addresses ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Addresses ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Addresses ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Addresses ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Addresses ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Addresses MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Addresses prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Addresses, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Addresses cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Addresses result;

+          

+          private Addresses PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Addresses original = result;

+              result = new Addresses();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Addresses MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses.Descriptor; }

+          }

+          

+          public override Addresses DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses.DefaultInstance; }

+          }

+          

+          public override Addresses BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          

+          public bool HasAddress {

+            get { return result.hasAddress; }

+          }

+          public string Address {

+            get { return result.Address; }

+            set { SetAddress(value); }

+          }

+          public Builder SetAddress(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasAddress = true;

+            result.address_ = value;

+            return this;

+          }

+          public Builder ClearAddress() {

+            PrepareBuilder();

+            result.hasAddress = false;

+            result.address_ = "";

+            return this;

+          }

+          

+          public bool HasAddress2 {

+            get { return result.hasAddress2; }

+          }

+          public string Address2 {

+            get { return result.Address2; }

+            set { SetAddress2(value); }

+          }

+          public Builder SetAddress2(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasAddress2 = true;

+            result.address2_ = value;

+            return this;

+          }

+          public Builder ClearAddress2() {

+            PrepareBuilder();

+            result.hasAddress2 = false;

+            result.address2_ = "";

+            return this;

+          }

+          

+          public bool HasCity {

+            get { return result.hasCity; }

+          }

+          public string City {

+            get { return result.City; }

+            set { SetCity(value); }

+          }

+          public Builder SetCity(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasCity = true;

+            result.city_ = value;

+            return this;

+          }

+          public Builder ClearCity() {

+            PrepareBuilder();

+            result.hasCity = false;

+            result.city_ = "";

+            return this;

+          }

+          

+          public bool HasState {

+            get { return result.hasState; }

+          }

+          public string State {

+            get { return result.State; }

+            set { SetState(value); }

+          }

+          public Builder SetState(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasState = true;

+            result.state_ = value;

+            return this;

+          }

+          public Builder ClearState() {

+            PrepareBuilder();

+            result.hasState = false;

+            result.state_ = "";

+            return this;

+          }

+          

+          public bool HasZip {

+            get { return result.hasZip; }

+          }

+          [global::System.CLSCompliant(false)]

+          public uint Zip {

+            get { return result.Zip; }

+            set { SetZip(value); }

+          }

+          [global::System.CLSCompliant(false)]

+          public Builder SetZip(uint value) {

+            PrepareBuilder();

+            result.hasZip = true;

+            result.zip_ = value;

+            return this;

+          }

+          public Builder ClearZip() {

+            PrepareBuilder();

+            result.hasZip = false;

+            result.zip_ = 0;

+            return this;

+          }

+        }

+        static Addresses() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int NameFieldNumber = 1;

+    private bool hasName;

+    private string name_ = "";

+    public bool HasName {

+      get { return hasName; }

+    }

+    public string Name {

+      get { return name_; }

+    }

+    

+    public const int IdFieldNumber = 2;

+    private bool hasId;

+    private int id_;

+    public bool HasId {

+      get { return hasId; }

+    }

+    public int Id {

+      get { return id_; }

+    }

+    

+    public const int EmailFieldNumber = 3;

+    private bool hasEmail;

+    private string email_ = "";

+    public bool HasEmail {

+      get { return hasEmail; }

+    }

+    public string Email {

+      get { return email_; }

+    }

+    

+    public const int CodesFieldNumber = 10;

+    private pbc::PopsicleList<int> codes_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> CodesList {

+      get { return pbc::Lists.AsReadOnly(codes_); }

+    }

+    public int CodesCount {

+      get { return codes_.Count; }

+    }

+    public int GetCodes(int index) {

+      return codes_[index];

+    }

+    

+    public const int PhoneFieldNumber = 4;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber> phone_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber> PhoneList {

+      get { return phone_; }

+    }

+    public int PhoneCount {

+      get { return phone_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber GetPhone(int index) {

+      return phone_[index];

+    }

+    

+    public const int AddressesFieldNumber = 5;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses> addresses_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses> AddressesList {

+      get { return addresses_; }

+    }

+    public int AddressesCount {

+      get { return addresses_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses GetAddresses(int index) {

+      return addresses_[index];

+    }

+    

+    public static TestInteropPerson ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestInteropPerson ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestInteropPerson ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestInteropPerson ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestInteropPerson ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestInteropPerson ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestInteropPerson ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestInteropPerson ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestInteropPerson ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestInteropPerson ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestInteropPerson MakeReadOnly() {

+      codes_.MakeReadOnly();

+      phone_.MakeReadOnly();

+      addresses_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestInteropPerson prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestInteropPerson, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestInteropPerson cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestInteropPerson result;

+      

+      private TestInteropPerson PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestInteropPerson original = result;

+          result = new TestInteropPerson();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestInteropPerson MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Descriptor; }

+      }

+      

+      public override TestInteropPerson DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.DefaultInstance; }

+      }

+      

+      public override TestInteropPerson BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasName {

+        get { return result.hasName; }

+      }

+      public string Name {

+        get { return result.Name; }

+        set { SetName(value); }

+      }

+      public Builder SetName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasName = true;

+        result.name_ = value;

+        return this;

+      }

+      public Builder ClearName() {

+        PrepareBuilder();

+        result.hasName = false;

+        result.name_ = "";

+        return this;

+      }

+      

+      public bool HasId {

+        get { return result.hasId; }

+      }

+      public int Id {

+        get { return result.Id; }

+        set { SetId(value); }

+      }

+      public Builder SetId(int value) {

+        PrepareBuilder();

+        result.hasId = true;

+        result.id_ = value;

+        return this;

+      }

+      public Builder ClearId() {

+        PrepareBuilder();

+        result.hasId = false;

+        result.id_ = 0;

+        return this;

+      }

+      

+      public bool HasEmail {

+        get { return result.hasEmail; }

+      }

+      public string Email {

+        get { return result.Email; }

+        set { SetEmail(value); }

+      }

+      public Builder SetEmail(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasEmail = true;

+        result.email_ = value;

+        return this;

+      }

+      public Builder ClearEmail() {

+        PrepareBuilder();

+        result.hasEmail = false;

+        result.email_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> CodesList {

+        get { return PrepareBuilder().codes_; }

+      }

+      public int CodesCount {

+        get { return result.CodesCount; }

+      }

+      public int GetCodes(int index) {

+        return result.GetCodes(index);

+      }

+      public Builder SetCodes(int index, int value) {

+        PrepareBuilder();

+        result.codes_[index] = value;

+        return this;

+      }

+      public Builder AddCodes(int value) {

+        PrepareBuilder();

+        result.codes_.Add(value);

+        return this;

+      }

+      public Builder AddRangeCodes(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.codes_.Add(values);

+        return this;

+      }

+      public Builder ClearCodes() {

+        PrepareBuilder();

+        result.codes_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber> PhoneList {

+        get { return PrepareBuilder().phone_; }

+      }

+      public int PhoneCount {

+        get { return result.PhoneCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber GetPhone(int index) {

+        return result.GetPhone(index);

+      }

+      public Builder SetPhone(int index, global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.phone_[index] = value;

+        return this;

+      }

+      public Builder SetPhone(int index, global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.phone_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddPhone(global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.phone_.Add(value);

+        return this;

+      }

+      public Builder AddPhone(global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.phone_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangePhone(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.PhoneNumber> values) {

+        PrepareBuilder();

+        result.phone_.Add(values);

+        return this;

+      }

+      public Builder ClearPhone() {

+        PrepareBuilder();

+        result.phone_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses> AddressesList {

+        get { return PrepareBuilder().addresses_; }

+      }

+      public int AddressesCount {

+        get { return result.AddressesCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses GetAddresses(int index) {

+        return result.GetAddresses(index);

+      }

+      public Builder SetAddresses(int index, global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.addresses_[index] = value;

+        return this;

+      }

+      public Builder SetAddresses(int index, global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.addresses_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddAddresses(global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.addresses_.Add(value);

+        return this;

+      }

+      public Builder AddAddresses(global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.addresses_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeAddresses(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestInteropPerson.Types.Addresses> values) {

+        PrepareBuilder();

+        result.addresses_.Add(values);

+        return this;

+      }

+      public Builder ClearAddresses() {

+        PrepareBuilder();

+        result.addresses_.Clear();

+        return this;

+      }

+    }

+    static TestInteropPerson() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestInteropEmployeeId : pb::GeneratedMessage<TestInteropEmployeeId, TestInteropEmployeeId.Builder> {

+    private TestInteropEmployeeId() { }

+    private static readonly TestInteropEmployeeId defaultInstance = new TestInteropEmployeeId().MakeReadOnly();

+    public static TestInteropEmployeeId DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestInteropEmployeeId DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestInteropEmployeeId ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestInteropEmployeeId__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestInteropEmployeeId, TestInteropEmployeeId.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestInteropEmployeeId__FieldAccessorTable; }

+    }

+    

+    public const int NumberFieldNumber = 1;

+    private bool hasNumber;

+    private string number_ = "";

+    public bool HasNumber {

+      get { return hasNumber; }

+    }

+    public string Number {

+      get { return number_; }

+    }

+    

+    public static TestInteropEmployeeId ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestInteropEmployeeId ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestInteropEmployeeId ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestInteropEmployeeId ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestInteropEmployeeId ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestInteropEmployeeId ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestInteropEmployeeId ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestInteropEmployeeId ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestInteropEmployeeId ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestInteropEmployeeId ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestInteropEmployeeId MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestInteropEmployeeId prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestInteropEmployeeId, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestInteropEmployeeId cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestInteropEmployeeId result;

+      

+      private TestInteropEmployeeId PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestInteropEmployeeId original = result;

+          result = new TestInteropEmployeeId();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestInteropEmployeeId MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestInteropEmployeeId.Descriptor; }

+      }

+      

+      public override TestInteropEmployeeId DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestInteropEmployeeId.DefaultInstance; }

+      }

+      

+      public override TestInteropEmployeeId BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasNumber {

+        get { return result.hasNumber; }

+      }

+      public string Number {

+        get { return result.Number; }

+        set { SetNumber(value); }

+      }

+      public Builder SetNumber(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasNumber = true;

+        result.number_ = value;

+        return this;

+      }

+      public Builder ClearNumber() {

+        PrepareBuilder();

+        result.hasNumber = false;

+        result.number_ = "";

+        return this;

+      }

+    }

+    static TestInteropEmployeeId() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMissingFieldsA : pb::GeneratedMessage<TestMissingFieldsA, TestMissingFieldsA.Builder> {

+    private TestMissingFieldsA() { }

+    private static readonly TestMissingFieldsA defaultInstance = new TestMissingFieldsA().MakeReadOnly();

+    public static TestMissingFieldsA DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMissingFieldsA DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMissingFieldsA ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestMissingFieldsA__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMissingFieldsA, TestMissingFieldsA.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestMissingFieldsA__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class SubA : pb::GeneratedMessage<SubA, SubA.Builder> {

+        private SubA() { }

+        private static readonly SubA defaultInstance = new SubA().MakeReadOnly();

+        public static SubA DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override SubA DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override SubA ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestMissingFieldsA_SubA__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<SubA, SubA.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestMissingFieldsA_SubA__FieldAccessorTable; }

+        }

+        

+        public const int CountFieldNumber = 5;

+        private bool hasCount;

+        private int count_;

+        public bool HasCount {

+          get { return hasCount; }

+        }

+        public int Count {

+          get { return count_; }

+        }

+        

+        public const int ValuesFieldNumber = 6;

+        private pbc::PopsicleList<string> values_ = new pbc::PopsicleList<string>();

+        public scg::IList<string> ValuesList {

+          get { return pbc::Lists.AsReadOnly(values_); }

+        }

+        public int ValuesCount {

+          get { return values_.Count; }

+        }

+        public string GetValues(int index) {

+          return values_[index];

+        }

+        

+        public static SubA ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static SubA ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static SubA ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static SubA ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static SubA ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static SubA ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static SubA ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static SubA ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static SubA ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static SubA ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private SubA MakeReadOnly() {

+          values_.MakeReadOnly();

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(SubA prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<SubA, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(SubA cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private SubA result;

+          

+          private SubA PrepareBuilder() {

+            if (resultIsReadOnly) {

+              SubA original = result;

+              result = new SubA();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override SubA MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA.Descriptor; }

+          }

+          

+          public override SubA DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA.DefaultInstance; }

+          }

+          

+          public override SubA BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          

+          public bool HasCount {

+            get { return result.hasCount; }

+          }

+          public int Count {

+            get { return result.Count; }

+            set { SetCount(value); }

+          }

+          public Builder SetCount(int value) {

+            PrepareBuilder();

+            result.hasCount = true;

+            result.count_ = value;

+            return this;

+          }

+          public Builder ClearCount() {

+            PrepareBuilder();

+            result.hasCount = false;

+            result.count_ = 0;

+            return this;

+          }

+          

+          public pbc::IPopsicleList<string> ValuesList {

+            get { return PrepareBuilder().values_; }

+          }

+          public int ValuesCount {

+            get { return result.ValuesCount; }

+          }

+          public string GetValues(int index) {

+            return result.GetValues(index);

+          }

+          public Builder SetValues(int index, string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.values_[index] = value;

+            return this;

+          }

+          public Builder AddValues(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.values_.Add(value);

+            return this;

+          }

+          public Builder AddRangeValues(scg::IEnumerable<string> values) {

+            PrepareBuilder();

+            result.values_.Add(values);

+            return this;

+          }

+          public Builder ClearValues() {

+            PrepareBuilder();

+            result.values_.Clear();

+            return this;

+          }

+        }

+        static SubA() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int NameFieldNumber = 1;

+    private bool hasName;

+    private string name_ = "";

+    public bool HasName {

+      get { return hasName; }

+    }

+    public string Name {

+      get { return name_; }

+    }

+    

+    public const int IdFieldNumber = 2;

+    private bool hasId;

+    private int id_;

+    public bool HasId {

+      get { return hasId; }

+    }

+    public int Id {

+      get { return id_; }

+    }

+    

+    public const int EmailFieldNumber = 3;

+    private bool hasEmail;

+    private string email_ = "";

+    public bool HasEmail {

+      get { return hasEmail; }

+    }

+    public string Email {

+      get { return email_; }

+    }

+    

+    public const int TestAFieldNumber = 11;

+    private bool hasTestA;

+    private global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA testA_;

+    public bool HasTestA {

+      get { return hasTestA; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA TestA {

+      get { return testA_ ?? global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA.DefaultInstance; }

+    }

+    

+    public static TestMissingFieldsA ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMissingFieldsA ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMissingFieldsA ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMissingFieldsA ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMissingFieldsA ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMissingFieldsA ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMissingFieldsA ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMissingFieldsA ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMissingFieldsA ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMissingFieldsA ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMissingFieldsA MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMissingFieldsA prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestMissingFieldsA, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMissingFieldsA cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMissingFieldsA result;

+      

+      private TestMissingFieldsA PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMissingFieldsA original = result;

+          result = new TestMissingFieldsA();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMissingFieldsA MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Descriptor; }

+      }

+      

+      public override TestMissingFieldsA DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.DefaultInstance; }

+      }

+      

+      public override TestMissingFieldsA BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasName {

+        get { return result.hasName; }

+      }

+      public string Name {

+        get { return result.Name; }

+        set { SetName(value); }

+      }

+      public Builder SetName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasName = true;

+        result.name_ = value;

+        return this;

+      }

+      public Builder ClearName() {

+        PrepareBuilder();

+        result.hasName = false;

+        result.name_ = "";

+        return this;

+      }

+      

+      public bool HasId {

+        get { return result.hasId; }

+      }

+      public int Id {

+        get { return result.Id; }

+        set { SetId(value); }

+      }

+      public Builder SetId(int value) {

+        PrepareBuilder();

+        result.hasId = true;

+        result.id_ = value;

+        return this;

+      }

+      public Builder ClearId() {

+        PrepareBuilder();

+        result.hasId = false;

+        result.id_ = 0;

+        return this;

+      }

+      

+      public bool HasEmail {

+        get { return result.hasEmail; }

+      }

+      public string Email {

+        get { return result.Email; }

+        set { SetEmail(value); }

+      }

+      public Builder SetEmail(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasEmail = true;

+        result.email_ = value;

+        return this;

+      }

+      public Builder ClearEmail() {

+        PrepareBuilder();

+        result.hasEmail = false;

+        result.email_ = "";

+        return this;

+      }

+      

+      public bool HasTestA {

+       get { return result.hasTestA; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA TestA {

+        get { return result.TestA; }

+        set { SetTestA(value); }

+      }

+      public Builder SetTestA(global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasTestA = true;

+        result.testA_ = value;

+        return this;

+      }

+      public Builder SetTestA(global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasTestA = true;

+        result.testA_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeTestA(global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasTestA &&

+            result.testA_ != global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA.DefaultInstance) {

+            result.testA_ = global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsA.Types.SubA.CreateBuilder(result.testA_).MergeFrom(value).BuildPartial();

+        } else {

+          result.testA_ = value;

+        }

+        result.hasTestA = true;

+        return this;

+      }

+      public Builder ClearTestA() {

+        PrepareBuilder();

+        result.hasTestA = false;

+        result.testA_ = null;

+        return this;

+      }

+    }

+    static TestMissingFieldsA() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMissingFieldsB : pb::GeneratedMessage<TestMissingFieldsB, TestMissingFieldsB.Builder> {

+    private TestMissingFieldsB() { }

+    private static readonly TestMissingFieldsB defaultInstance = new TestMissingFieldsB().MakeReadOnly();

+    public static TestMissingFieldsB DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMissingFieldsB DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMissingFieldsB ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestMissingFieldsB__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMissingFieldsB, TestMissingFieldsB.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestMissingFieldsB__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class SubB : pb::GeneratedMessage<SubB, SubB.Builder> {

+        private SubB() { }

+        private static readonly SubB defaultInstance = new SubB().MakeReadOnly();

+        public static SubB DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override SubB DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override SubB ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestMissingFieldsB_SubB__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<SubB, SubB.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.internal__static_protobuf_unittest_extra_TestMissingFieldsB_SubB__FieldAccessorTable; }

+        }

+        

+        public const int ValuesFieldNumber = 7;

+        private pbc::PopsicleList<string> values_ = new pbc::PopsicleList<string>();

+        public scg::IList<string> ValuesList {

+          get { return pbc::Lists.AsReadOnly(values_); }

+        }

+        public int ValuesCount {

+          get { return values_.Count; }

+        }

+        public string GetValues(int index) {

+          return values_[index];

+        }

+        

+        public static SubB ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static SubB ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static SubB ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static SubB ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static SubB ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static SubB ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static SubB ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static SubB ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static SubB ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static SubB ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private SubB MakeReadOnly() {

+          values_.MakeReadOnly();

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(SubB prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<SubB, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(SubB cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private SubB result;

+          

+          private SubB PrepareBuilder() {

+            if (resultIsReadOnly) {

+              SubB original = result;

+              result = new SubB();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override SubB MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB.Descriptor; }

+          }

+          

+          public override SubB DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB.DefaultInstance; }

+          }

+          

+          public override SubB BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          

+          public pbc::IPopsicleList<string> ValuesList {

+            get { return PrepareBuilder().values_; }

+          }

+          public int ValuesCount {

+            get { return result.ValuesCount; }

+          }

+          public string GetValues(int index) {

+            return result.GetValues(index);

+          }

+          public Builder SetValues(int index, string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.values_[index] = value;

+            return this;

+          }

+          public Builder AddValues(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.values_.Add(value);

+            return this;

+          }

+          public Builder AddRangeValues(scg::IEnumerable<string> values) {

+            PrepareBuilder();

+            result.values_.Add(values);

+            return this;

+          }

+          public Builder ClearValues() {

+            PrepareBuilder();

+            result.values_.Clear();

+            return this;

+          }

+        }

+        static SubB() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int NameFieldNumber = 1;

+    private bool hasName;

+    private string name_ = "";

+    public bool HasName {

+      get { return hasName; }

+    }

+    public string Name {

+      get { return name_; }

+    }

+    

+    public const int IdFieldNumber = 2;

+    private bool hasId;

+    private int id_;

+    public bool HasId {

+      get { return hasId; }

+    }

+    public int Id {

+      get { return id_; }

+    }

+    

+    public const int WebsiteFieldNumber = 4;

+    private bool hasWebsite;

+    private string website_ = "";

+    public bool HasWebsite {

+      get { return hasWebsite; }

+    }

+    public string Website {

+      get { return website_; }

+    }

+    

+    public const int TestBFieldNumber = 12;

+    private bool hasTestB;

+    private global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB testB_;

+    public bool HasTestB {

+      get { return hasTestB; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB TestB {

+      get { return testB_ ?? global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB.DefaultInstance; }

+    }

+    

+    public static TestMissingFieldsB ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMissingFieldsB ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMissingFieldsB ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMissingFieldsB ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMissingFieldsB ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMissingFieldsB ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMissingFieldsB ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMissingFieldsB ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMissingFieldsB ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMissingFieldsB ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMissingFieldsB MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMissingFieldsB prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestMissingFieldsB, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMissingFieldsB cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMissingFieldsB result;

+      

+      private TestMissingFieldsB PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMissingFieldsB original = result;

+          result = new TestMissingFieldsB();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMissingFieldsB MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Descriptor; }

+      }

+      

+      public override TestMissingFieldsB DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.DefaultInstance; }

+      }

+      

+      public override TestMissingFieldsB BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      

+      public bool HasName {

+        get { return result.hasName; }

+      }

+      public string Name {

+        get { return result.Name; }

+        set { SetName(value); }

+      }

+      public Builder SetName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasName = true;

+        result.name_ = value;

+        return this;

+      }

+      public Builder ClearName() {

+        PrepareBuilder();

+        result.hasName = false;

+        result.name_ = "";

+        return this;

+      }

+      

+      public bool HasId {

+        get { return result.hasId; }

+      }

+      public int Id {

+        get { return result.Id; }

+        set { SetId(value); }

+      }

+      public Builder SetId(int value) {

+        PrepareBuilder();

+        result.hasId = true;

+        result.id_ = value;

+        return this;

+      }

+      public Builder ClearId() {

+        PrepareBuilder();

+        result.hasId = false;

+        result.id_ = 0;

+        return this;

+      }

+      

+      public bool HasWebsite {

+        get { return result.hasWebsite; }

+      }

+      public string Website {

+        get { return result.Website; }

+        set { SetWebsite(value); }

+      }

+      public Builder SetWebsite(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasWebsite = true;

+        result.website_ = value;

+        return this;

+      }

+      public Builder ClearWebsite() {

+        PrepareBuilder();

+        result.hasWebsite = false;

+        result.website_ = "";

+        return this;

+      }

+      

+      public bool HasTestB {

+       get { return result.hasTestB; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB TestB {

+        get { return result.TestB; }

+        set { SetTestB(value); }

+      }

+      public Builder SetTestB(global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasTestB = true;

+        result.testB_ = value;

+        return this;

+      }

+      public Builder SetTestB(global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasTestB = true;

+        result.testB_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeTestB(global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasTestB &&

+            result.testB_ != global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB.DefaultInstance) {

+            result.testB_ = global::Google.ProtocolBuffers.TestProtos.TestMissingFieldsB.Types.SubB.CreateBuilder(result.testB_).MergeFrom(value).BuildPartial();

+        } else {

+          result.testB_ = value;

+        }

+        result.hasTestB = true;

+        return this;

+      }

+      public Builder ClearTestB() {

+        PrepareBuilder();

+        result.hasTestB = false;

+        result.testB_ = null;

+        return this;

+      }

+    }

+    static TestMissingFieldsB() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasFullProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs
new file mode 100644
index 0000000..caeb5ba
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestExtrasLiteProtoFile.cs
@@ -0,0 +1,4226 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestExtrasLiteProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.EmployeeIdLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedInt32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedInt64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedUint32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedUint64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedSint32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedSint64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedFixed32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedFixed64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedSfixed32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedSfixed64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedFloatExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedDoubleExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedBoolExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedEnumExtensionLite);

+    }

+    #endregion

+    #region Extensions

+    public const int EmployeeIdLiteFieldNumber = 126;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite, global::Google.ProtocolBuffers.TestProtos.TestInteropEmployeeIdLite> EmployeeIdLite;

+    public const int UnpackedInt32ExtensionLiteFieldNumber = 90;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, int> UnpackedInt32ExtensionLite;

+    public const int UnpackedInt64ExtensionLiteFieldNumber = 91;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, long> UnpackedInt64ExtensionLite;

+    public const int UnpackedUint32ExtensionLiteFieldNumber = 92;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, uint> UnpackedUint32ExtensionLite;

+    public const int UnpackedUint64ExtensionLiteFieldNumber = 93;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, ulong> UnpackedUint64ExtensionLite;

+    public const int UnpackedSint32ExtensionLiteFieldNumber = 94;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, int> UnpackedSint32ExtensionLite;

+    public const int UnpackedSint64ExtensionLiteFieldNumber = 95;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, long> UnpackedSint64ExtensionLite;

+    public const int UnpackedFixed32ExtensionLiteFieldNumber = 96;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, uint> UnpackedFixed32ExtensionLite;

+    public const int UnpackedFixed64ExtensionLiteFieldNumber = 97;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, ulong> UnpackedFixed64ExtensionLite;

+    public const int UnpackedSfixed32ExtensionLiteFieldNumber = 98;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, int> UnpackedSfixed32ExtensionLite;

+    public const int UnpackedSfixed64ExtensionLiteFieldNumber = 99;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, long> UnpackedSfixed64ExtensionLite;

+    public const int UnpackedFloatExtensionLiteFieldNumber = 100;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, float> UnpackedFloatExtensionLite;

+    public const int UnpackedDoubleExtensionLiteFieldNumber = 101;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, double> UnpackedDoubleExtensionLite;

+    public const int UnpackedBoolExtensionLiteFieldNumber = 102;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, bool> UnpackedBoolExtensionLite;

+    public const int UnpackedEnumExtensionLiteFieldNumber = 103;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite> UnpackedEnumExtensionLite;

+    #endregion

+    

+    #region Static variables

+    #endregion

+    #region Extensions

+    internal static readonly object Descriptor;

+    static UnitTestExtrasLiteProtoFile() {

+      Descriptor = null;

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.EmployeeIdLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite, global::Google.ProtocolBuffers.TestProtos.TestInteropEmployeeIdLite>(

+          "protobuf_unittest_extra.employee_id_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.TestInteropEmployeeIdLite.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.EmployeeIdLiteFieldNumber,

+          pbd::FieldType.Message);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedInt32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, int>(

+          "protobuf_unittest_extra.unpacked_int32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedInt32ExtensionLiteFieldNumber,

+          pbd::FieldType.Int32,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedInt64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, long>(

+          "protobuf_unittest_extra.unpacked_int64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedInt64ExtensionLiteFieldNumber,

+          pbd::FieldType.Int64,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedUint32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, uint>(

+          "protobuf_unittest_extra.unpacked_uint32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedUint32ExtensionLiteFieldNumber,

+          pbd::FieldType.UInt32,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedUint64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, ulong>(

+          "protobuf_unittest_extra.unpacked_uint64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedUint64ExtensionLiteFieldNumber,

+          pbd::FieldType.UInt64,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedSint32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, int>(

+          "protobuf_unittest_extra.unpacked_sint32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedSint32ExtensionLiteFieldNumber,

+          pbd::FieldType.SInt32,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedSint64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, long>(

+          "protobuf_unittest_extra.unpacked_sint64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedSint64ExtensionLiteFieldNumber,

+          pbd::FieldType.SInt64,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedFixed32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, uint>(

+          "protobuf_unittest_extra.unpacked_fixed32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedFixed32ExtensionLiteFieldNumber,

+          pbd::FieldType.Fixed32,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedFixed64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, ulong>(

+          "protobuf_unittest_extra.unpacked_fixed64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedFixed64ExtensionLiteFieldNumber,

+          pbd::FieldType.Fixed64,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedSfixed32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, int>(

+          "protobuf_unittest_extra.unpacked_sfixed32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedSfixed32ExtensionLiteFieldNumber,

+          pbd::FieldType.SFixed32,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedSfixed64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, long>(

+          "protobuf_unittest_extra.unpacked_sfixed64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedSfixed64ExtensionLiteFieldNumber,

+          pbd::FieldType.SFixed64,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedFloatExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, float>(

+          "protobuf_unittest_extra.unpacked_float_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedFloatExtensionLiteFieldNumber,

+          pbd::FieldType.Float,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedDoubleExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, double>(

+          "protobuf_unittest_extra.unpacked_double_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedDoubleExtensionLiteFieldNumber,

+          pbd::FieldType.Double,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedBoolExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, bool>(

+          "protobuf_unittest_extra.unpacked_bool_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedBoolExtensionLiteFieldNumber,

+          pbd::FieldType.Bool,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedEnumExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite, global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite>(

+          "protobuf_unittest_extra.unpacked_enum_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance,

+          null,

+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite>(),

+          global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.UnpackedEnumExtensionLiteFieldNumber,

+          pbd::FieldType.Enum,

+          false);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum ExtraEnum {

+    DEFAULT = 10,

+    EXLITE_FOO = 7,

+    EXLITE_BAR = 8,

+    EXLITE_BAZ = 9,

+  }

+  

+  public enum UnpackedTypesForeignEnumLite {

+    FOREIGN_LITE_FOO = 4,

+    FOREIGN_LITE_BAR = 5,

+    FOREIGN_LITE_BAZ = 6,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.SerializableAttribute()]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRequiredLite : pb::GeneratedMessageLite<TestRequiredLite, TestRequiredLite.Builder> {

+    private TestRequiredLite() { }

+    private static readonly TestRequiredLite defaultInstance = new TestRequiredLite().MakeReadOnly();

+    private static readonly string[] _testRequiredLiteFieldNames = new string[] { "d", "en" };

+    private static readonly uint[] _testRequiredLiteFieldTags = new uint[] { 8, 16 };

+    public static TestRequiredLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRequiredLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRequiredLite ThisMessage {

+      get { return this; }

+    }

+    

+    public const int DFieldNumber = 1;

+    private bool hasD;

+    private int d_;

+    public bool HasD {

+      get { return hasD; }

+    }

+    public int D {

+      get { return d_; }

+    }

+    

+    public const int EnFieldNumber = 2;

+    private bool hasEn;

+    private global::Google.ProtocolBuffers.TestProtos.ExtraEnum en_ = global::Google.ProtocolBuffers.TestProtos.ExtraEnum.DEFAULT;

+    public bool HasEn {

+      get { return hasEn; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ExtraEnum En {

+      get { return en_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasD) return false;

+        if (!hasEn) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testRequiredLiteFieldNames;

+      if (hasD) {

+        output.WriteInt32(1, field_names[0], D);

+      }

+      if (hasEn) {

+        output.WriteEnum(2, field_names[1], (int) En, En);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasD) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, D);

+      }

+      if (hasEn) {

+        size += pb::CodedOutputStream.ComputeEnumSize(2, (int) En);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      if (hasD) hash ^= d_.GetHashCode();

+      if (hasEn) hash ^= en_.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      TestRequiredLite other = obj as TestRequiredLite;

+      if (other == null) return false;

+      if (hasD != other.hasD || (hasD && !d_.Equals(other.d_))) return false;

+      if (hasEn != other.hasEn || (hasEn && !en_.Equals(other.en_))) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("d", hasD, d_, writer);

+      PrintField("en", hasEn, en_, writer);

+    }

+    #endregion

+    

+    public static TestRequiredLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequiredLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequiredLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequiredLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRequiredLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRequiredLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequiredLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRequiredLite MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRequiredLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.SerializableAttribute()]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<TestRequiredLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRequiredLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRequiredLite result;

+      

+      private TestRequiredLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRequiredLite original = result;

+          result = new TestRequiredLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRequiredLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override TestRequiredLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredLite.DefaultInstance; }

+      }

+      

+      public override TestRequiredLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is TestRequiredLite) {

+          return MergeFrom((TestRequiredLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestRequiredLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestRequiredLite.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasD) {

+          D = other.D;

+        }

+        if (other.HasEn) {

+          En = other.En;

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testRequiredLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testRequiredLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasD = input.ReadInt32(ref result.d_);

+              break;

+            }

+            case 16: {

+              object unknown;

+              if(input.ReadEnum(ref result.en_, out unknown)) {

+                result.hasEn = true;

+              } else if(unknown is int) {

+              }

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public bool HasD {

+        get { return result.hasD; }

+      }

+      public int D {

+        get { return result.D; }

+        set { SetD(value); }

+      }

+      public Builder SetD(int value) {

+        PrepareBuilder();

+        result.hasD = true;

+        result.d_ = value;

+        return this;

+      }

+      public Builder ClearD() {

+        PrepareBuilder();

+        result.hasD = false;

+        result.d_ = 0;

+        return this;

+      }

+      

+      public bool HasEn {

+       get { return result.hasEn; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ExtraEnum En {

+        get { return result.En; }

+        set { SetEn(value); }

+      }

+      public Builder SetEn(global::Google.ProtocolBuffers.TestProtos.ExtraEnum value) {

+        PrepareBuilder();

+        result.hasEn = true;

+        result.en_ = value;

+        return this;

+      }

+      public Builder ClearEn() {

+        PrepareBuilder();

+        result.hasEn = false;

+        result.en_ = global::Google.ProtocolBuffers.TestProtos.ExtraEnum.DEFAULT;

+        return this;

+      }

+    }

+    static TestRequiredLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.SerializableAttribute()]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestInteropPersonLite : pb::ExtendableMessageLite<TestInteropPersonLite, TestInteropPersonLite.Builder> {

+    private TestInteropPersonLite() { }

+    private static readonly TestInteropPersonLite defaultInstance = new TestInteropPersonLite().MakeReadOnly();

+    private static readonly string[] _testInteropPersonLiteFieldNames = new string[] { "addresses", "codes", "email", "id", "name", "phone" };

+    private static readonly uint[] _testInteropPersonLiteFieldTags = new uint[] { 43, 82, 26, 16, 10, 34 };

+    public static TestInteropPersonLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestInteropPersonLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestInteropPersonLite ThisMessage {

+      get { return this; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum PhoneType {

+        MOBILE = 0,

+        HOME = 1,

+        WORK = 2,

+      }

+      

+      [global::System.SerializableAttribute()]

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class PhoneNumber : pb::GeneratedMessageLite<PhoneNumber, PhoneNumber.Builder> {

+        private PhoneNumber() { }

+        private static readonly PhoneNumber defaultInstance = new PhoneNumber().MakeReadOnly();

+        private static readonly string[] _phoneNumberFieldNames = new string[] { "number", "type" };

+        private static readonly uint[] _phoneNumberFieldTags = new uint[] { 10, 16 };

+        public static PhoneNumber DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override PhoneNumber DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override PhoneNumber ThisMessage {

+          get { return this; }

+        }

+        

+        public const int NumberFieldNumber = 1;

+        private bool hasNumber;

+        private string number_ = "";

+        public bool HasNumber {

+          get { return hasNumber; }

+        }

+        public string Number {

+          get { return number_; }

+        }

+        

+        public const int TypeFieldNumber = 2;

+        private bool hasType;

+        private global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneType type_ = global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneType.HOME;

+        public bool HasType {

+          get { return hasType; }

+        }

+        public global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneType Type {

+          get { return type_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            if (!hasNumber) return false;

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _phoneNumberFieldNames;

+          if (hasNumber) {

+            output.WriteString(1, field_names[0], Number);

+          }

+          if (hasType) {

+            output.WriteEnum(2, field_names[1], (int) Type, Type);

+          }

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasNumber) {

+            size += pb::CodedOutputStream.ComputeStringSize(1, Number);

+          }

+          if (hasType) {

+            size += pb::CodedOutputStream.ComputeEnumSize(2, (int) Type);

+          }

+          memoizedSerializedSize = size;

+          return size;

+        }

+        #region Lite runtime methods

+        public override int GetHashCode() {

+          int hash = GetType().GetHashCode();

+          if (hasNumber) hash ^= number_.GetHashCode();

+          if (hasType) hash ^= type_.GetHashCode();

+          return hash;

+        }

+        

+        public override bool Equals(object obj) {

+          PhoneNumber other = obj as PhoneNumber;

+          if (other == null) return false;

+          if (hasNumber != other.hasNumber || (hasNumber && !number_.Equals(other.number_))) return false;

+          if (hasType != other.hasType || (hasType && !type_.Equals(other.type_))) return false;

+          return true;

+        }

+        

+        public override void PrintTo(global::System.IO.TextWriter writer) {

+          PrintField("number", hasNumber, number_, writer);

+          PrintField("type", hasType, type_, writer);

+        }

+        #endregion

+        

+        public static PhoneNumber ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static PhoneNumber ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static PhoneNumber ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static PhoneNumber ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private PhoneNumber MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(PhoneNumber prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.SerializableAttribute()]

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilderLite<PhoneNumber, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(PhoneNumber cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private PhoneNumber result;

+          

+          private PhoneNumber PrepareBuilder() {

+            if (resultIsReadOnly) {

+              PhoneNumber original = result;

+              result = new PhoneNumber();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override PhoneNumber MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override PhoneNumber DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber.DefaultInstance; }

+          }

+          

+          public override PhoneNumber BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessageLite other) {

+            if (other is PhoneNumber) {

+              return MergeFrom((PhoneNumber) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(PhoneNumber other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasNumber) {

+              Number = other.Number;

+            }

+            if (other.HasType) {

+              Type = other.Type;

+            }

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_phoneNumberFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _phoneNumberFieldTags[field_ordinal];

+                else {

+                  ParseUnknownField(input, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    return this;

+                  }

+                  ParseUnknownField(input, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 10: {

+                  result.hasNumber = input.ReadString(ref result.number_);

+                  break;

+                }

+                case 16: {

+                  object unknown;

+                  if(input.ReadEnum(ref result.type_, out unknown)) {

+                    result.hasType = true;

+                  } else if(unknown is int) {

+                  }

+                  break;

+                }

+              }

+            }

+            

+            return this;

+          }

+          

+          

+          public bool HasNumber {

+            get { return result.hasNumber; }

+          }

+          public string Number {

+            get { return result.Number; }

+            set { SetNumber(value); }

+          }

+          public Builder SetNumber(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasNumber = true;

+            result.number_ = value;

+            return this;

+          }

+          public Builder ClearNumber() {

+            PrepareBuilder();

+            result.hasNumber = false;

+            result.number_ = "";

+            return this;

+          }

+          

+          public bool HasType {

+           get { return result.hasType; }

+          }

+          public global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneType Type {

+            get { return result.Type; }

+            set { SetType(value); }

+          }

+          public Builder SetType(global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneType value) {

+            PrepareBuilder();

+            result.hasType = true;

+            result.type_ = value;

+            return this;

+          }

+          public Builder ClearType() {

+            PrepareBuilder();

+            result.hasType = false;

+            result.type_ = global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneType.HOME;

+            return this;

+          }

+        }

+        static PhoneNumber() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.Descriptor, null);

+        }

+      }

+      

+      [global::System.SerializableAttribute()]

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Addresses : pb::GeneratedMessageLite<Addresses, Addresses.Builder> {

+        private Addresses() { }

+        private static readonly Addresses defaultInstance = new Addresses().MakeReadOnly();

+        private static readonly string[] _addressesFieldNames = new string[] { "address", "address2", "city", "state", "zip" };

+        private static readonly uint[] _addressesFieldTags = new uint[] { 10, 18, 26, 34, 45 };

+        public static Addresses DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Addresses DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Addresses ThisMessage {

+          get { return this; }

+        }

+        

+        public const int AddressFieldNumber = 1;

+        private bool hasAddress;

+        private string address_ = "";

+        public bool HasAddress {

+          get { return hasAddress; }

+        }

+        public string Address {

+          get { return address_; }

+        }

+        

+        public const int Address2FieldNumber = 2;

+        private bool hasAddress2;

+        private string address2_ = "";

+        public bool HasAddress2 {

+          get { return hasAddress2; }

+        }

+        public string Address2 {

+          get { return address2_; }

+        }

+        

+        public const int CityFieldNumber = 3;

+        private bool hasCity;

+        private string city_ = "";

+        public bool HasCity {

+          get { return hasCity; }

+        }

+        public string City {

+          get { return city_; }

+        }

+        

+        public const int StateFieldNumber = 4;

+        private bool hasState;

+        private string state_ = "";

+        public bool HasState {

+          get { return hasState; }

+        }

+        public string State {

+          get { return state_; }

+        }

+        

+        public const int ZipFieldNumber = 5;

+        private bool hasZip;

+        private uint zip_;

+        public bool HasZip {

+          get { return hasZip; }

+        }

+        [global::System.CLSCompliant(false)]

+        public uint Zip {

+          get { return zip_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            if (!hasAddress) return false;

+            if (!hasCity) return false;

+            if (!hasState) return false;

+            if (!hasZip) return false;

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _addressesFieldNames;

+          if (hasAddress) {

+            output.WriteString(1, field_names[0], Address);

+          }

+          if (hasAddress2) {

+            output.WriteString(2, field_names[1], Address2);

+          }

+          if (hasCity) {

+            output.WriteString(3, field_names[2], City);

+          }

+          if (hasState) {

+            output.WriteString(4, field_names[3], State);

+          }

+          if (hasZip) {

+            output.WriteFixed32(5, field_names[4], Zip);

+          }

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasAddress) {

+            size += pb::CodedOutputStream.ComputeStringSize(1, Address);

+          }

+          if (hasAddress2) {

+            size += pb::CodedOutputStream.ComputeStringSize(2, Address2);

+          }

+          if (hasCity) {

+            size += pb::CodedOutputStream.ComputeStringSize(3, City);

+          }

+          if (hasState) {

+            size += pb::CodedOutputStream.ComputeStringSize(4, State);

+          }

+          if (hasZip) {

+            size += pb::CodedOutputStream.ComputeFixed32Size(5, Zip);

+          }

+          memoizedSerializedSize = size;

+          return size;

+        }

+        #region Lite runtime methods

+        public override int GetHashCode() {

+          int hash = GetType().GetHashCode();

+          if (hasAddress) hash ^= address_.GetHashCode();

+          if (hasAddress2) hash ^= address2_.GetHashCode();

+          if (hasCity) hash ^= city_.GetHashCode();

+          if (hasState) hash ^= state_.GetHashCode();

+          if (hasZip) hash ^= zip_.GetHashCode();

+          return hash;

+        }

+        

+        public override bool Equals(object obj) {

+          Addresses other = obj as Addresses;

+          if (other == null) return false;

+          if (hasAddress != other.hasAddress || (hasAddress && !address_.Equals(other.address_))) return false;

+          if (hasAddress2 != other.hasAddress2 || (hasAddress2 && !address2_.Equals(other.address2_))) return false;

+          if (hasCity != other.hasCity || (hasCity && !city_.Equals(other.city_))) return false;

+          if (hasState != other.hasState || (hasState && !state_.Equals(other.state_))) return false;

+          if (hasZip != other.hasZip || (hasZip && !zip_.Equals(other.zip_))) return false;

+          return true;

+        }

+        

+        public override void PrintTo(global::System.IO.TextWriter writer) {

+          PrintField("address", hasAddress, address_, writer);

+          PrintField("address2", hasAddress2, address2_, writer);

+          PrintField("city", hasCity, city_, writer);

+          PrintField("state", hasState, state_, writer);

+          PrintField("zip", hasZip, zip_, writer);

+        }

+        #endregion

+        

+        public static Addresses ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Addresses ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Addresses ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Addresses ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Addresses ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Addresses ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Addresses ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Addresses ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Addresses ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Addresses ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Addresses MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Addresses prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.SerializableAttribute()]

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilderLite<Addresses, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Addresses cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Addresses result;

+          

+          private Addresses PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Addresses original = result;

+              result = new Addresses();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Addresses MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override Addresses DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses.DefaultInstance; }

+          }

+          

+          public override Addresses BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessageLite other) {

+            if (other is Addresses) {

+              return MergeFrom((Addresses) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(Addresses other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasAddress) {

+              Address = other.Address;

+            }

+            if (other.HasAddress2) {

+              Address2 = other.Address2;

+            }

+            if (other.HasCity) {

+              City = other.City;

+            }

+            if (other.HasState) {

+              State = other.State;

+            }

+            if (other.HasZip) {

+              Zip = other.Zip;

+            }

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_addressesFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _addressesFieldTags[field_ordinal];

+                else {

+                  ParseUnknownField(input, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    return this;

+                  }

+                  ParseUnknownField(input, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 10: {

+                  result.hasAddress = input.ReadString(ref result.address_);

+                  break;

+                }

+                case 18: {

+                  result.hasAddress2 = input.ReadString(ref result.address2_);

+                  break;

+                }

+                case 26: {

+                  result.hasCity = input.ReadString(ref result.city_);

+                  break;

+                }

+                case 34: {

+                  result.hasState = input.ReadString(ref result.state_);

+                  break;

+                }

+                case 45: {

+                  result.hasZip = input.ReadFixed32(ref result.zip_);

+                  break;

+                }

+              }

+            }

+            

+            return this;

+          }

+          

+          

+          public bool HasAddress {

+            get { return result.hasAddress; }

+          }

+          public string Address {

+            get { return result.Address; }

+            set { SetAddress(value); }

+          }

+          public Builder SetAddress(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasAddress = true;

+            result.address_ = value;

+            return this;

+          }

+          public Builder ClearAddress() {

+            PrepareBuilder();

+            result.hasAddress = false;

+            result.address_ = "";

+            return this;

+          }

+          

+          public bool HasAddress2 {

+            get { return result.hasAddress2; }

+          }

+          public string Address2 {

+            get { return result.Address2; }

+            set { SetAddress2(value); }

+          }

+          public Builder SetAddress2(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasAddress2 = true;

+            result.address2_ = value;

+            return this;

+          }

+          public Builder ClearAddress2() {

+            PrepareBuilder();

+            result.hasAddress2 = false;

+            result.address2_ = "";

+            return this;

+          }

+          

+          public bool HasCity {

+            get { return result.hasCity; }

+          }

+          public string City {

+            get { return result.City; }

+            set { SetCity(value); }

+          }

+          public Builder SetCity(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasCity = true;

+            result.city_ = value;

+            return this;

+          }

+          public Builder ClearCity() {

+            PrepareBuilder();

+            result.hasCity = false;

+            result.city_ = "";

+            return this;

+          }

+          

+          public bool HasState {

+            get { return result.hasState; }

+          }

+          public string State {

+            get { return result.State; }

+            set { SetState(value); }

+          }

+          public Builder SetState(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasState = true;

+            result.state_ = value;

+            return this;

+          }

+          public Builder ClearState() {

+            PrepareBuilder();

+            result.hasState = false;

+            result.state_ = "";

+            return this;

+          }

+          

+          public bool HasZip {

+            get { return result.hasZip; }

+          }

+          [global::System.CLSCompliant(false)]

+          public uint Zip {

+            get { return result.Zip; }

+            set { SetZip(value); }

+          }

+          [global::System.CLSCompliant(false)]

+          public Builder SetZip(uint value) {

+            PrepareBuilder();

+            result.hasZip = true;

+            result.zip_ = value;

+            return this;

+          }

+          public Builder ClearZip() {

+            PrepareBuilder();

+            result.hasZip = false;

+            result.zip_ = 0;

+            return this;

+          }

+        }

+        static Addresses() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int NameFieldNumber = 1;

+    private bool hasName;

+    private string name_ = "";

+    public bool HasName {

+      get { return hasName; }

+    }

+    public string Name {

+      get { return name_; }

+    }

+    

+    public const int IdFieldNumber = 2;

+    private bool hasId;

+    private int id_;

+    public bool HasId {

+      get { return hasId; }

+    }

+    public int Id {

+      get { return id_; }

+    }

+    

+    public const int EmailFieldNumber = 3;

+    private bool hasEmail;

+    private string email_ = "";

+    public bool HasEmail {

+      get { return hasEmail; }

+    }

+    public string Email {

+      get { return email_; }

+    }

+    

+    public const int CodesFieldNumber = 10;

+    private int codesMemoizedSerializedSize;

+    private pbc::PopsicleList<int> codes_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> CodesList {

+      get { return pbc::Lists.AsReadOnly(codes_); }

+    }

+    public int CodesCount {

+      get { return codes_.Count; }

+    }

+    public int GetCodes(int index) {

+      return codes_[index];

+    }

+    

+    public const int PhoneFieldNumber = 4;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber> phone_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber> PhoneList {

+      get { return phone_; }

+    }

+    public int PhoneCount {

+      get { return phone_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber GetPhone(int index) {

+      return phone_[index];

+    }

+    

+    public const int AddressesFieldNumber = 5;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses> addresses_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses> AddressesList {

+      get { return addresses_; }

+    }

+    public int AddressesCount {

+      get { return addresses_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses GetAddresses(int index) {

+      return addresses_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasName) return false;

+        if (!hasId) return false;

+        foreach (global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber element in PhoneList) {

+          if (!element.IsInitialized) return false;

+        }

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testInteropPersonLiteFieldNames;

+      pb::ExtendableMessageLite<TestInteropPersonLite, TestInteropPersonLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (hasName) {

+        output.WriteString(1, field_names[4], Name);

+      }

+      if (hasId) {

+        output.WriteInt32(2, field_names[3], Id);

+      }

+      if (hasEmail) {

+        output.WriteString(3, field_names[2], Email);

+      }

+      if (phone_.Count > 0) {

+        output.WriteMessageArray(4, field_names[5], phone_);

+      }

+      if (addresses_.Count > 0) {

+        output.WriteGroupArray(5, field_names[0], addresses_);

+      }

+      if (codes_.Count > 0) {

+        output.WritePackedInt32Array(10, field_names[1], codesMemoizedSerializedSize, codes_);

+      }

+      extensionWriter.WriteUntil(200, output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasName) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Name);

+      }

+      if (hasId) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, Id);

+      }

+      if (hasEmail) {

+        size += pb::CodedOutputStream.ComputeStringSize(3, Email);

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in CodesList) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (codes_.Count != 0) {

+          size += 1 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        codesMemoizedSerializedSize = dataSize;

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber element in PhoneList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(4, element);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses element in AddressesList) {

+        size += pb::CodedOutputStream.ComputeGroupSize(5, element);

+      }

+      size += ExtensionsSerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      if (hasName) hash ^= name_.GetHashCode();

+      if (hasId) hash ^= id_.GetHashCode();

+      if (hasEmail) hash ^= email_.GetHashCode();

+      foreach(int i in codes_)

+        hash ^= i.GetHashCode();

+      foreach(global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber i in phone_)

+        hash ^= i.GetHashCode();

+      foreach(global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses i in addresses_)

+        hash ^= i.GetHashCode();

+      hash ^= base.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      TestInteropPersonLite other = obj as TestInteropPersonLite;

+      if (other == null) return false;

+      if (hasName != other.hasName || (hasName && !name_.Equals(other.name_))) return false;

+      if (hasId != other.hasId || (hasId && !id_.Equals(other.id_))) return false;

+      if (hasEmail != other.hasEmail || (hasEmail && !email_.Equals(other.email_))) return false;

+      if(codes_.Count != other.codes_.Count) return false;

+      for(int ix=0; ix < codes_.Count; ix++)

+        if(!codes_[ix].Equals(other.codes_[ix])) return false;

+      if(phone_.Count != other.phone_.Count) return false;

+      for(int ix=0; ix < phone_.Count; ix++)

+        if(!phone_[ix].Equals(other.phone_[ix])) return false;

+      if(addresses_.Count != other.addresses_.Count) return false;

+      for(int ix=0; ix < addresses_.Count; ix++)

+        if(!addresses_[ix].Equals(other.addresses_[ix])) return false;

+      if (!base.Equals(other)) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("name", hasName, name_, writer);

+      PrintField("id", hasId, id_, writer);

+      PrintField("email", hasEmail, email_, writer);

+      PrintField("phone", phone_, writer);

+      PrintField("Addresses", addresses_, writer);

+      PrintField("codes", codes_, writer);

+      base.PrintTo(writer);

+    }

+    #endregion

+    

+    public static TestInteropPersonLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestInteropPersonLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestInteropPersonLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestInteropPersonLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestInteropPersonLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestInteropPersonLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestInteropPersonLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestInteropPersonLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestInteropPersonLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestInteropPersonLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestInteropPersonLite MakeReadOnly() {

+      codes_.MakeReadOnly();

+      phone_.MakeReadOnly();

+      addresses_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestInteropPersonLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.SerializableAttribute()]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilderLite<TestInteropPersonLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestInteropPersonLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestInteropPersonLite result;

+      

+      private TestInteropPersonLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestInteropPersonLite original = result;

+          result = new TestInteropPersonLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestInteropPersonLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override TestInteropPersonLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.DefaultInstance; }

+      }

+      

+      public override TestInteropPersonLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is TestInteropPersonLite) {

+          return MergeFrom((TestInteropPersonLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestInteropPersonLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasName) {

+          Name = other.Name;

+        }

+        if (other.HasId) {

+          Id = other.Id;

+        }

+        if (other.HasEmail) {

+          Email = other.Email;

+        }

+        if (other.codes_.Count != 0) {

+          result.codes_.Add(other.codes_);

+        }

+        if (other.phone_.Count != 0) {

+          result.phone_.Add(other.phone_);

+        }

+        if (other.addresses_.Count != 0) {

+          result.addresses_.Add(other.addresses_);

+        }

+          this.MergeExtensionFields(other);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testInteropPersonLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testInteropPersonLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasName = input.ReadString(ref result.name_);

+              break;

+            }

+            case 16: {

+              result.hasId = input.ReadInt32(ref result.id_);

+              break;

+            }

+            case 26: {

+              result.hasEmail = input.ReadString(ref result.email_);

+              break;

+            }

+            case 34: {

+              input.ReadMessageArray(tag, field_name, result.phone_, global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 43: {

+              input.ReadGroupArray(tag, field_name, result.addresses_, global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 82:

+            case 80: {

+              input.ReadInt32Array(tag, field_name, result.codes_);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public bool HasName {

+        get { return result.hasName; }

+      }

+      public string Name {

+        get { return result.Name; }

+        set { SetName(value); }

+      }

+      public Builder SetName(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasName = true;

+        result.name_ = value;

+        return this;

+      }

+      public Builder ClearName() {

+        PrepareBuilder();

+        result.hasName = false;

+        result.name_ = "";

+        return this;

+      }

+      

+      public bool HasId {

+        get { return result.hasId; }

+      }

+      public int Id {

+        get { return result.Id; }

+        set { SetId(value); }

+      }

+      public Builder SetId(int value) {

+        PrepareBuilder();

+        result.hasId = true;

+        result.id_ = value;

+        return this;

+      }

+      public Builder ClearId() {

+        PrepareBuilder();

+        result.hasId = false;

+        result.id_ = 0;

+        return this;

+      }

+      

+      public bool HasEmail {

+        get { return result.hasEmail; }

+      }

+      public string Email {

+        get { return result.Email; }

+        set { SetEmail(value); }

+      }

+      public Builder SetEmail(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasEmail = true;

+        result.email_ = value;

+        return this;

+      }

+      public Builder ClearEmail() {

+        PrepareBuilder();

+        result.hasEmail = false;

+        result.email_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> CodesList {

+        get { return PrepareBuilder().codes_; }

+      }

+      public int CodesCount {

+        get { return result.CodesCount; }

+      }

+      public int GetCodes(int index) {

+        return result.GetCodes(index);

+      }

+      public Builder SetCodes(int index, int value) {

+        PrepareBuilder();

+        result.codes_[index] = value;

+        return this;

+      }

+      public Builder AddCodes(int value) {

+        PrepareBuilder();

+        result.codes_.Add(value);

+        return this;

+      }

+      public Builder AddRangeCodes(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.codes_.Add(values);

+        return this;

+      }

+      public Builder ClearCodes() {

+        PrepareBuilder();

+        result.codes_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber> PhoneList {

+        get { return PrepareBuilder().phone_; }

+      }

+      public int PhoneCount {

+        get { return result.PhoneCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber GetPhone(int index) {

+        return result.GetPhone(index);

+      }

+      public Builder SetPhone(int index, global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.phone_[index] = value;

+        return this;

+      }

+      public Builder SetPhone(int index, global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.phone_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddPhone(global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.phone_.Add(value);

+        return this;

+      }

+      public Builder AddPhone(global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.phone_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangePhone(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.PhoneNumber> values) {

+        PrepareBuilder();

+        result.phone_.Add(values);

+        return this;

+      }

+      public Builder ClearPhone() {

+        PrepareBuilder();

+        result.phone_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses> AddressesList {

+        get { return PrepareBuilder().addresses_; }

+      }

+      public int AddressesCount {

+        get { return result.AddressesCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses GetAddresses(int index) {

+        return result.GetAddresses(index);

+      }

+      public Builder SetAddresses(int index, global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.addresses_[index] = value;

+        return this;

+      }

+      public Builder SetAddresses(int index, global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.addresses_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddAddresses(global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.addresses_.Add(value);

+        return this;

+      }

+      public Builder AddAddresses(global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.addresses_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeAddresses(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestInteropPersonLite.Types.Addresses> values) {

+        PrepareBuilder();

+        result.addresses_.Add(values);

+        return this;

+      }

+      public Builder ClearAddresses() {

+        PrepareBuilder();

+        result.addresses_.Clear();

+        return this;

+      }

+    }

+    static TestInteropPersonLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.SerializableAttribute()]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestInteropEmployeeIdLite : pb::GeneratedMessageLite<TestInteropEmployeeIdLite, TestInteropEmployeeIdLite.Builder> {

+    private TestInteropEmployeeIdLite() { }

+    private static readonly TestInteropEmployeeIdLite defaultInstance = new TestInteropEmployeeIdLite().MakeReadOnly();

+    private static readonly string[] _testInteropEmployeeIdLiteFieldNames = new string[] { "number" };

+    private static readonly uint[] _testInteropEmployeeIdLiteFieldTags = new uint[] { 10 };

+    public static TestInteropEmployeeIdLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestInteropEmployeeIdLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestInteropEmployeeIdLite ThisMessage {

+      get { return this; }

+    }

+    

+    public const int NumberFieldNumber = 1;

+    private bool hasNumber;

+    private string number_ = "";

+    public bool HasNumber {

+      get { return hasNumber; }

+    }

+    public string Number {

+      get { return number_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasNumber) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testInteropEmployeeIdLiteFieldNames;

+      if (hasNumber) {

+        output.WriteString(1, field_names[0], Number);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasNumber) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Number);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      if (hasNumber) hash ^= number_.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      TestInteropEmployeeIdLite other = obj as TestInteropEmployeeIdLite;

+      if (other == null) return false;

+      if (hasNumber != other.hasNumber || (hasNumber && !number_.Equals(other.number_))) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("number", hasNumber, number_, writer);

+    }

+    #endregion

+    

+    public static TestInteropEmployeeIdLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestInteropEmployeeIdLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestInteropEmployeeIdLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestInteropEmployeeIdLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestInteropEmployeeIdLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestInteropEmployeeIdLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestInteropEmployeeIdLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestInteropEmployeeIdLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestInteropEmployeeIdLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestInteropEmployeeIdLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestInteropEmployeeIdLite MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestInteropEmployeeIdLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.SerializableAttribute()]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<TestInteropEmployeeIdLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestInteropEmployeeIdLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestInteropEmployeeIdLite result;

+      

+      private TestInteropEmployeeIdLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestInteropEmployeeIdLite original = result;

+          result = new TestInteropEmployeeIdLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestInteropEmployeeIdLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override TestInteropEmployeeIdLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestInteropEmployeeIdLite.DefaultInstance; }

+      }

+      

+      public override TestInteropEmployeeIdLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is TestInteropEmployeeIdLite) {

+          return MergeFrom((TestInteropEmployeeIdLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestInteropEmployeeIdLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestInteropEmployeeIdLite.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasNumber) {

+          Number = other.Number;

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testInteropEmployeeIdLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testInteropEmployeeIdLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasNumber = input.ReadString(ref result.number_);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public bool HasNumber {

+        get { return result.hasNumber; }

+      }

+      public string Number {

+        get { return result.Number; }

+        set { SetNumber(value); }

+      }

+      public Builder SetNumber(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasNumber = true;

+        result.number_ = value;

+        return this;

+      }

+      public Builder ClearNumber() {

+        PrepareBuilder();

+        result.hasNumber = false;

+        result.number_ = "";

+        return this;

+      }

+    }

+    static TestInteropEmployeeIdLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.SerializableAttribute()]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestUnpackedExtensionsLite : pb::ExtendableMessageLite<TestUnpackedExtensionsLite, TestUnpackedExtensionsLite.Builder> {

+    private TestUnpackedExtensionsLite() { }

+    private static readonly TestUnpackedExtensionsLite defaultInstance = new TestUnpackedExtensionsLite().MakeReadOnly();

+    private static readonly string[] _testUnpackedExtensionsLiteFieldNames = new string[] {  };

+    private static readonly uint[] _testUnpackedExtensionsLiteFieldTags = new uint[] {  };

+    public static TestUnpackedExtensionsLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestUnpackedExtensionsLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestUnpackedExtensionsLite ThisMessage {

+      get { return this; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testUnpackedExtensionsLiteFieldNames;

+      pb::ExtendableMessageLite<TestUnpackedExtensionsLite, TestUnpackedExtensionsLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      hash ^= base.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      TestUnpackedExtensionsLite other = obj as TestUnpackedExtensionsLite;

+      if (other == null) return false;

+      if (!base.Equals(other)) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      base.PrintTo(writer);

+    }

+    #endregion

+    

+    public static TestUnpackedExtensionsLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestUnpackedExtensionsLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedExtensionsLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestUnpackedExtensionsLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedExtensionsLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestUnpackedExtensionsLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedExtensionsLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestUnpackedExtensionsLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestUnpackedExtensionsLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestUnpackedExtensionsLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestUnpackedExtensionsLite MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestUnpackedExtensionsLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.SerializableAttribute()]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilderLite<TestUnpackedExtensionsLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestUnpackedExtensionsLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestUnpackedExtensionsLite result;

+      

+      private TestUnpackedExtensionsLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestUnpackedExtensionsLite original = result;

+          result = new TestUnpackedExtensionsLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestUnpackedExtensionsLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override TestUnpackedExtensionsLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance; }

+      }

+      

+      public override TestUnpackedExtensionsLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is TestUnpackedExtensionsLite) {

+          return MergeFrom((TestUnpackedExtensionsLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestUnpackedExtensionsLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestUnpackedExtensionsLite.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testUnpackedExtensionsLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testUnpackedExtensionsLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+    }

+    static TestUnpackedExtensionsLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.SerializableAttribute()]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestUnpackedTypesLite : pb::GeneratedMessageLite<TestUnpackedTypesLite, TestUnpackedTypesLite.Builder> {

+    private TestUnpackedTypesLite() { }

+    private static readonly TestUnpackedTypesLite defaultInstance = new TestUnpackedTypesLite().MakeReadOnly();

+    private static readonly string[] _testUnpackedTypesLiteFieldNames = new string[] { "unpacked_bool", "unpacked_double", "unpacked_enum", "unpacked_fixed32", "unpacked_fixed64", "unpacked_float", "unpacked_int32", "unpacked_int64", "unpacked_sfixed32", "unpacked_sfixed64", "unpacked_sint32", "unpacked_sint64", "unpacked_uint32", "unpacked_uint64" };

+    private static readonly uint[] _testUnpackedTypesLiteFieldTags = new uint[] { 816, 809, 824, 773, 777, 805, 720, 728, 789, 793, 752, 760, 736, 744 };

+    public static TestUnpackedTypesLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestUnpackedTypesLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestUnpackedTypesLite ThisMessage {

+      get { return this; }

+    }

+    

+    public const int UnpackedInt32FieldNumber = 90;

+    private pbc::PopsicleList<int> unpackedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> UnpackedInt32List {

+      get { return pbc::Lists.AsReadOnly(unpackedInt32_); }

+    }

+    public int UnpackedInt32Count {

+      get { return unpackedInt32_.Count; }

+    }

+    public int GetUnpackedInt32(int index) {

+      return unpackedInt32_[index];

+    }

+    

+    public const int UnpackedInt64FieldNumber = 91;

+    private pbc::PopsicleList<long> unpackedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> UnpackedInt64List {

+      get { return pbc::Lists.AsReadOnly(unpackedInt64_); }

+    }

+    public int UnpackedInt64Count {

+      get { return unpackedInt64_.Count; }

+    }

+    public long GetUnpackedInt64(int index) {

+      return unpackedInt64_[index];

+    }

+    

+    public const int UnpackedUint32FieldNumber = 92;

+    private pbc::PopsicleList<uint> unpackedUint32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> UnpackedUint32List {

+      get { return pbc::Lists.AsReadOnly(unpackedUint32_); }

+    }

+    public int UnpackedUint32Count {

+      get { return unpackedUint32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetUnpackedUint32(int index) {

+      return unpackedUint32_[index];

+    }

+    

+    public const int UnpackedUint64FieldNumber = 93;

+    private pbc::PopsicleList<ulong> unpackedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> UnpackedUint64List {

+      get { return pbc::Lists.AsReadOnly(unpackedUint64_); }

+    }

+    public int UnpackedUint64Count {

+      get { return unpackedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetUnpackedUint64(int index) {

+      return unpackedUint64_[index];

+    }

+    

+    public const int UnpackedSint32FieldNumber = 94;

+    private pbc::PopsicleList<int> unpackedSint32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> UnpackedSint32List {

+      get { return pbc::Lists.AsReadOnly(unpackedSint32_); }

+    }

+    public int UnpackedSint32Count {

+      get { return unpackedSint32_.Count; }

+    }

+    public int GetUnpackedSint32(int index) {

+      return unpackedSint32_[index];

+    }

+    

+    public const int UnpackedSint64FieldNumber = 95;

+    private pbc::PopsicleList<long> unpackedSint64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> UnpackedSint64List {

+      get { return pbc::Lists.AsReadOnly(unpackedSint64_); }

+    }

+    public int UnpackedSint64Count {

+      get { return unpackedSint64_.Count; }

+    }

+    public long GetUnpackedSint64(int index) {

+      return unpackedSint64_[index];

+    }

+    

+    public const int UnpackedFixed32FieldNumber = 96;

+    private pbc::PopsicleList<uint> unpackedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> UnpackedFixed32List {

+      get { return pbc::Lists.AsReadOnly(unpackedFixed32_); }

+    }

+    public int UnpackedFixed32Count {

+      get { return unpackedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetUnpackedFixed32(int index) {

+      return unpackedFixed32_[index];

+    }

+    

+    public const int UnpackedFixed64FieldNumber = 97;

+    private pbc::PopsicleList<ulong> unpackedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> UnpackedFixed64List {

+      get { return pbc::Lists.AsReadOnly(unpackedFixed64_); }

+    }

+    public int UnpackedFixed64Count {

+      get { return unpackedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetUnpackedFixed64(int index) {

+      return unpackedFixed64_[index];

+    }

+    

+    public const int UnpackedSfixed32FieldNumber = 98;

+    private pbc::PopsicleList<int> unpackedSfixed32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> UnpackedSfixed32List {

+      get { return pbc::Lists.AsReadOnly(unpackedSfixed32_); }

+    }

+    public int UnpackedSfixed32Count {

+      get { return unpackedSfixed32_.Count; }

+    }

+    public int GetUnpackedSfixed32(int index) {

+      return unpackedSfixed32_[index];

+    }

+    

+    public const int UnpackedSfixed64FieldNumber = 99;

+    private pbc::PopsicleList<long> unpackedSfixed64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> UnpackedSfixed64List {

+      get { return pbc::Lists.AsReadOnly(unpackedSfixed64_); }

+    }

+    public int UnpackedSfixed64Count {

+      get { return unpackedSfixed64_.Count; }

+    }

+    public long GetUnpackedSfixed64(int index) {

+      return unpackedSfixed64_[index];

+    }

+    

+    public const int UnpackedFloatFieldNumber = 100;

+    private pbc::PopsicleList<float> unpackedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> UnpackedFloatList {

+      get { return pbc::Lists.AsReadOnly(unpackedFloat_); }

+    }

+    public int UnpackedFloatCount {

+      get { return unpackedFloat_.Count; }

+    }

+    public float GetUnpackedFloat(int index) {

+      return unpackedFloat_[index];

+    }

+    

+    public const int UnpackedDoubleFieldNumber = 101;

+    private pbc::PopsicleList<double> unpackedDouble_ = new pbc::PopsicleList<double>();

+    public scg::IList<double> UnpackedDoubleList {

+      get { return pbc::Lists.AsReadOnly(unpackedDouble_); }

+    }

+    public int UnpackedDoubleCount {

+      get { return unpackedDouble_.Count; }

+    }

+    public double GetUnpackedDouble(int index) {

+      return unpackedDouble_[index];

+    }

+    

+    public const int UnpackedBoolFieldNumber = 102;

+    private pbc::PopsicleList<bool> unpackedBool_ = new pbc::PopsicleList<bool>();

+    public scg::IList<bool> UnpackedBoolList {

+      get { return pbc::Lists.AsReadOnly(unpackedBool_); }

+    }

+    public int UnpackedBoolCount {

+      get { return unpackedBool_.Count; }

+    }

+    public bool GetUnpackedBool(int index) {

+      return unpackedBool_[index];

+    }

+    

+    public const int UnpackedEnumFieldNumber = 103;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite> unpackedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite> UnpackedEnumList {

+      get { return pbc::Lists.AsReadOnly(unpackedEnum_); }

+    }

+    public int UnpackedEnumCount {

+      get { return unpackedEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite GetUnpackedEnum(int index) {

+      return unpackedEnum_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testUnpackedTypesLiteFieldNames;

+      if (unpackedInt32_.Count > 0) {

+        output.WriteInt32Array(90, field_names[6], unpackedInt32_);

+      }

+      if (unpackedInt64_.Count > 0) {

+        output.WriteInt64Array(91, field_names[7], unpackedInt64_);

+      }

+      if (unpackedUint32_.Count > 0) {

+        output.WriteUInt32Array(92, field_names[12], unpackedUint32_);

+      }

+      if (unpackedUint64_.Count > 0) {

+        output.WriteUInt64Array(93, field_names[13], unpackedUint64_);

+      }

+      if (unpackedSint32_.Count > 0) {

+        output.WriteSInt32Array(94, field_names[10], unpackedSint32_);

+      }

+      if (unpackedSint64_.Count > 0) {

+        output.WriteSInt64Array(95, field_names[11], unpackedSint64_);

+      }

+      if (unpackedFixed32_.Count > 0) {

+        output.WriteFixed32Array(96, field_names[3], unpackedFixed32_);

+      }

+      if (unpackedFixed64_.Count > 0) {

+        output.WriteFixed64Array(97, field_names[4], unpackedFixed64_);

+      }

+      if (unpackedSfixed32_.Count > 0) {

+        output.WriteSFixed32Array(98, field_names[8], unpackedSfixed32_);

+      }

+      if (unpackedSfixed64_.Count > 0) {

+        output.WriteSFixed64Array(99, field_names[9], unpackedSfixed64_);

+      }

+      if (unpackedFloat_.Count > 0) {

+        output.WriteFloatArray(100, field_names[5], unpackedFloat_);

+      }

+      if (unpackedDouble_.Count > 0) {

+        output.WriteDoubleArray(101, field_names[1], unpackedDouble_);

+      }

+      if (unpackedBool_.Count > 0) {

+        output.WriteBoolArray(102, field_names[0], unpackedBool_);

+      }

+      if (unpackedEnum_.Count > 0) {

+        output.WriteEnumArray(103, field_names[2], unpackedEnum_);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        foreach (int element in UnpackedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedInt32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in UnpackedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedInt64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (uint element in UnpackedUint32List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedUint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in UnpackedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedUint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in UnpackedSint32List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedSint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in UnpackedSint64List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedSint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * unpackedFixed32_.Count;

+        size += dataSize;

+        size += 2 * unpackedFixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * unpackedFixed64_.Count;

+        size += dataSize;

+        size += 2 * unpackedFixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * unpackedSfixed32_.Count;

+        size += dataSize;

+        size += 2 * unpackedSfixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * unpackedSfixed64_.Count;

+        size += dataSize;

+        size += 2 * unpackedSfixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * unpackedFloat_.Count;

+        size += dataSize;

+        size += 2 * unpackedFloat_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * unpackedDouble_.Count;

+        size += dataSize;

+        size += 2 * unpackedDouble_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 1 * unpackedBool_.Count;

+        size += dataSize;

+        size += 2 * unpackedBool_.Count;

+      }

+      {

+        int dataSize = 0;

+        if (unpackedEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite element in unpackedEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * unpackedEnum_.Count;

+        }

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      foreach(int i in unpackedInt32_)

+        hash ^= i.GetHashCode();

+      foreach(long i in unpackedInt64_)

+        hash ^= i.GetHashCode();

+      foreach(uint i in unpackedUint32_)

+        hash ^= i.GetHashCode();

+      foreach(ulong i in unpackedUint64_)

+        hash ^= i.GetHashCode();

+      foreach(int i in unpackedSint32_)

+        hash ^= i.GetHashCode();

+      foreach(long i in unpackedSint64_)

+        hash ^= i.GetHashCode();

+      foreach(uint i in unpackedFixed32_)

+        hash ^= i.GetHashCode();

+      foreach(ulong i in unpackedFixed64_)

+        hash ^= i.GetHashCode();

+      foreach(int i in unpackedSfixed32_)

+        hash ^= i.GetHashCode();

+      foreach(long i in unpackedSfixed64_)

+        hash ^= i.GetHashCode();

+      foreach(float i in unpackedFloat_)

+        hash ^= i.GetHashCode();

+      foreach(double i in unpackedDouble_)

+        hash ^= i.GetHashCode();

+      foreach(bool i in unpackedBool_)

+        hash ^= i.GetHashCode();

+      foreach(global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite i in unpackedEnum_)

+        hash ^= i.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      TestUnpackedTypesLite other = obj as TestUnpackedTypesLite;

+      if (other == null) return false;

+      if(unpackedInt32_.Count != other.unpackedInt32_.Count) return false;

+      for(int ix=0; ix < unpackedInt32_.Count; ix++)

+        if(!unpackedInt32_[ix].Equals(other.unpackedInt32_[ix])) return false;

+      if(unpackedInt64_.Count != other.unpackedInt64_.Count) return false;

+      for(int ix=0; ix < unpackedInt64_.Count; ix++)

+        if(!unpackedInt64_[ix].Equals(other.unpackedInt64_[ix])) return false;

+      if(unpackedUint32_.Count != other.unpackedUint32_.Count) return false;

+      for(int ix=0; ix < unpackedUint32_.Count; ix++)

+        if(!unpackedUint32_[ix].Equals(other.unpackedUint32_[ix])) return false;

+      if(unpackedUint64_.Count != other.unpackedUint64_.Count) return false;

+      for(int ix=0; ix < unpackedUint64_.Count; ix++)

+        if(!unpackedUint64_[ix].Equals(other.unpackedUint64_[ix])) return false;

+      if(unpackedSint32_.Count != other.unpackedSint32_.Count) return false;

+      for(int ix=0; ix < unpackedSint32_.Count; ix++)

+        if(!unpackedSint32_[ix].Equals(other.unpackedSint32_[ix])) return false;

+      if(unpackedSint64_.Count != other.unpackedSint64_.Count) return false;

+      for(int ix=0; ix < unpackedSint64_.Count; ix++)

+        if(!unpackedSint64_[ix].Equals(other.unpackedSint64_[ix])) return false;

+      if(unpackedFixed32_.Count != other.unpackedFixed32_.Count) return false;

+      for(int ix=0; ix < unpackedFixed32_.Count; ix++)

+        if(!unpackedFixed32_[ix].Equals(other.unpackedFixed32_[ix])) return false;

+      if(unpackedFixed64_.Count != other.unpackedFixed64_.Count) return false;

+      for(int ix=0; ix < unpackedFixed64_.Count; ix++)

+        if(!unpackedFixed64_[ix].Equals(other.unpackedFixed64_[ix])) return false;

+      if(unpackedSfixed32_.Count != other.unpackedSfixed32_.Count) return false;

+      for(int ix=0; ix < unpackedSfixed32_.Count; ix++)

+        if(!unpackedSfixed32_[ix].Equals(other.unpackedSfixed32_[ix])) return false;

+      if(unpackedSfixed64_.Count != other.unpackedSfixed64_.Count) return false;

+      for(int ix=0; ix < unpackedSfixed64_.Count; ix++)

+        if(!unpackedSfixed64_[ix].Equals(other.unpackedSfixed64_[ix])) return false;

+      if(unpackedFloat_.Count != other.unpackedFloat_.Count) return false;

+      for(int ix=0; ix < unpackedFloat_.Count; ix++)

+        if(!unpackedFloat_[ix].Equals(other.unpackedFloat_[ix])) return false;

+      if(unpackedDouble_.Count != other.unpackedDouble_.Count) return false;

+      for(int ix=0; ix < unpackedDouble_.Count; ix++)

+        if(!unpackedDouble_[ix].Equals(other.unpackedDouble_[ix])) return false;

+      if(unpackedBool_.Count != other.unpackedBool_.Count) return false;

+      for(int ix=0; ix < unpackedBool_.Count; ix++)

+        if(!unpackedBool_[ix].Equals(other.unpackedBool_[ix])) return false;

+      if(unpackedEnum_.Count != other.unpackedEnum_.Count) return false;

+      for(int ix=0; ix < unpackedEnum_.Count; ix++)

+        if(!unpackedEnum_[ix].Equals(other.unpackedEnum_[ix])) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("unpacked_int32", unpackedInt32_, writer);

+      PrintField("unpacked_int64", unpackedInt64_, writer);

+      PrintField("unpacked_uint32", unpackedUint32_, writer);

+      PrintField("unpacked_uint64", unpackedUint64_, writer);

+      PrintField("unpacked_sint32", unpackedSint32_, writer);

+      PrintField("unpacked_sint64", unpackedSint64_, writer);

+      PrintField("unpacked_fixed32", unpackedFixed32_, writer);

+      PrintField("unpacked_fixed64", unpackedFixed64_, writer);

+      PrintField("unpacked_sfixed32", unpackedSfixed32_, writer);

+      PrintField("unpacked_sfixed64", unpackedSfixed64_, writer);

+      PrintField("unpacked_float", unpackedFloat_, writer);

+      PrintField("unpacked_double", unpackedDouble_, writer);

+      PrintField("unpacked_bool", unpackedBool_, writer);

+      PrintField("unpacked_enum", unpackedEnum_, writer);

+    }

+    #endregion

+    

+    public static TestUnpackedTypesLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestUnpackedTypesLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedTypesLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestUnpackedTypesLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedTypesLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestUnpackedTypesLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedTypesLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestUnpackedTypesLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestUnpackedTypesLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestUnpackedTypesLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestUnpackedTypesLite MakeReadOnly() {

+      unpackedInt32_.MakeReadOnly();

+      unpackedInt64_.MakeReadOnly();

+      unpackedUint32_.MakeReadOnly();

+      unpackedUint64_.MakeReadOnly();

+      unpackedSint32_.MakeReadOnly();

+      unpackedSint64_.MakeReadOnly();

+      unpackedFixed32_.MakeReadOnly();

+      unpackedFixed64_.MakeReadOnly();

+      unpackedSfixed32_.MakeReadOnly();

+      unpackedSfixed64_.MakeReadOnly();

+      unpackedFloat_.MakeReadOnly();

+      unpackedDouble_.MakeReadOnly();

+      unpackedBool_.MakeReadOnly();

+      unpackedEnum_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestUnpackedTypesLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.SerializableAttribute()]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<TestUnpackedTypesLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestUnpackedTypesLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestUnpackedTypesLite result;

+      

+      private TestUnpackedTypesLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestUnpackedTypesLite original = result;

+          result = new TestUnpackedTypesLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestUnpackedTypesLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override TestUnpackedTypesLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypesLite.DefaultInstance; }

+      }

+      

+      public override TestUnpackedTypesLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is TestUnpackedTypesLite) {

+          return MergeFrom((TestUnpackedTypesLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestUnpackedTypesLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypesLite.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.unpackedInt32_.Count != 0) {

+          result.unpackedInt32_.Add(other.unpackedInt32_);

+        }

+        if (other.unpackedInt64_.Count != 0) {

+          result.unpackedInt64_.Add(other.unpackedInt64_);

+        }

+        if (other.unpackedUint32_.Count != 0) {

+          result.unpackedUint32_.Add(other.unpackedUint32_);

+        }

+        if (other.unpackedUint64_.Count != 0) {

+          result.unpackedUint64_.Add(other.unpackedUint64_);

+        }

+        if (other.unpackedSint32_.Count != 0) {

+          result.unpackedSint32_.Add(other.unpackedSint32_);

+        }

+        if (other.unpackedSint64_.Count != 0) {

+          result.unpackedSint64_.Add(other.unpackedSint64_);

+        }

+        if (other.unpackedFixed32_.Count != 0) {

+          result.unpackedFixed32_.Add(other.unpackedFixed32_);

+        }

+        if (other.unpackedFixed64_.Count != 0) {

+          result.unpackedFixed64_.Add(other.unpackedFixed64_);

+        }

+        if (other.unpackedSfixed32_.Count != 0) {

+          result.unpackedSfixed32_.Add(other.unpackedSfixed32_);

+        }

+        if (other.unpackedSfixed64_.Count != 0) {

+          result.unpackedSfixed64_.Add(other.unpackedSfixed64_);

+        }

+        if (other.unpackedFloat_.Count != 0) {

+          result.unpackedFloat_.Add(other.unpackedFloat_);

+        }

+        if (other.unpackedDouble_.Count != 0) {

+          result.unpackedDouble_.Add(other.unpackedDouble_);

+        }

+        if (other.unpackedBool_.Count != 0) {

+          result.unpackedBool_.Add(other.unpackedBool_);

+        }

+        if (other.unpackedEnum_.Count != 0) {

+          result.unpackedEnum_.Add(other.unpackedEnum_);

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testUnpackedTypesLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testUnpackedTypesLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 722:

+            case 720: {

+              input.ReadInt32Array(tag, field_name, result.unpackedInt32_);

+              break;

+            }

+            case 730:

+            case 728: {

+              input.ReadInt64Array(tag, field_name, result.unpackedInt64_);

+              break;

+            }

+            case 738:

+            case 736: {

+              input.ReadUInt32Array(tag, field_name, result.unpackedUint32_);

+              break;

+            }

+            case 746:

+            case 744: {

+              input.ReadUInt64Array(tag, field_name, result.unpackedUint64_);

+              break;

+            }

+            case 754:

+            case 752: {

+              input.ReadSInt32Array(tag, field_name, result.unpackedSint32_);

+              break;

+            }

+            case 762:

+            case 760: {

+              input.ReadSInt64Array(tag, field_name, result.unpackedSint64_);

+              break;

+            }

+            case 770:

+            case 773: {

+              input.ReadFixed32Array(tag, field_name, result.unpackedFixed32_);

+              break;

+            }

+            case 778:

+            case 777: {

+              input.ReadFixed64Array(tag, field_name, result.unpackedFixed64_);

+              break;

+            }

+            case 786:

+            case 789: {

+              input.ReadSFixed32Array(tag, field_name, result.unpackedSfixed32_);

+              break;

+            }

+            case 794:

+            case 793: {

+              input.ReadSFixed64Array(tag, field_name, result.unpackedSfixed64_);

+              break;

+            }

+            case 802:

+            case 805: {

+              input.ReadFloatArray(tag, field_name, result.unpackedFloat_);

+              break;

+            }

+            case 810:

+            case 809: {

+              input.ReadDoubleArray(tag, field_name, result.unpackedDouble_);

+              break;

+            }

+            case 818:

+            case 816: {

+              input.ReadBoolArray(tag, field_name, result.unpackedBool_);

+              break;

+            }

+            case 826:

+            case 824: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite>(tag, field_name, result.unpackedEnum_, out unknownItems);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<int> UnpackedInt32List {

+        get { return PrepareBuilder().unpackedInt32_; }

+      }

+      public int UnpackedInt32Count {

+        get { return result.UnpackedInt32Count; }

+      }

+      public int GetUnpackedInt32(int index) {

+        return result.GetUnpackedInt32(index);

+      }

+      public Builder SetUnpackedInt32(int index, int value) {

+        PrepareBuilder();

+        result.unpackedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedInt32(int value) {

+        PrepareBuilder();

+        result.unpackedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.unpackedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedInt32() {

+        PrepareBuilder();

+        result.unpackedInt32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> UnpackedInt64List {

+        get { return PrepareBuilder().unpackedInt64_; }

+      }

+      public int UnpackedInt64Count {

+        get { return result.UnpackedInt64Count; }

+      }

+      public long GetUnpackedInt64(int index) {

+        return result.GetUnpackedInt64(index);

+      }

+      public Builder SetUnpackedInt64(int index, long value) {

+        PrepareBuilder();

+        result.unpackedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedInt64(long value) {

+        PrepareBuilder();

+        result.unpackedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.unpackedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedInt64() {

+        PrepareBuilder();

+        result.unpackedInt64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> UnpackedUint32List {

+        get { return PrepareBuilder().unpackedUint32_; }

+      }

+      public int UnpackedUint32Count {

+        get { return result.UnpackedUint32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetUnpackedUint32(int index) {

+        return result.GetUnpackedUint32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedUint32(int index, uint value) {

+        PrepareBuilder();

+        result.unpackedUint32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedUint32(uint value) {

+        PrepareBuilder();

+        result.unpackedUint32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedUint32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.unpackedUint32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedUint32() {

+        PrepareBuilder();

+        result.unpackedUint32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> UnpackedUint64List {

+        get { return PrepareBuilder().unpackedUint64_; }

+      }

+      public int UnpackedUint64Count {

+        get { return result.UnpackedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetUnpackedUint64(int index) {

+        return result.GetUnpackedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.unpackedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedUint64(ulong value) {

+        PrepareBuilder();

+        result.unpackedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.unpackedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedUint64() {

+        PrepareBuilder();

+        result.unpackedUint64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> UnpackedSint32List {

+        get { return PrepareBuilder().unpackedSint32_; }

+      }

+      public int UnpackedSint32Count {

+        get { return result.UnpackedSint32Count; }

+      }

+      public int GetUnpackedSint32(int index) {

+        return result.GetUnpackedSint32(index);

+      }

+      public Builder SetUnpackedSint32(int index, int value) {

+        PrepareBuilder();

+        result.unpackedSint32_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSint32(int value) {

+        PrepareBuilder();

+        result.unpackedSint32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSint32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.unpackedSint32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSint32() {

+        PrepareBuilder();

+        result.unpackedSint32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> UnpackedSint64List {

+        get { return PrepareBuilder().unpackedSint64_; }

+      }

+      public int UnpackedSint64Count {

+        get { return result.UnpackedSint64Count; }

+      }

+      public long GetUnpackedSint64(int index) {

+        return result.GetUnpackedSint64(index);

+      }

+      public Builder SetUnpackedSint64(int index, long value) {

+        PrepareBuilder();

+        result.unpackedSint64_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSint64(long value) {

+        PrepareBuilder();

+        result.unpackedSint64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSint64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.unpackedSint64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSint64() {

+        PrepareBuilder();

+        result.unpackedSint64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> UnpackedFixed32List {

+        get { return PrepareBuilder().unpackedFixed32_; }

+      }

+      public int UnpackedFixed32Count {

+        get { return result.UnpackedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetUnpackedFixed32(int index) {

+        return result.GetUnpackedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.unpackedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedFixed32(uint value) {

+        PrepareBuilder();

+        result.unpackedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.unpackedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedFixed32() {

+        PrepareBuilder();

+        result.unpackedFixed32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> UnpackedFixed64List {

+        get { return PrepareBuilder().unpackedFixed64_; }

+      }

+      public int UnpackedFixed64Count {

+        get { return result.UnpackedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetUnpackedFixed64(int index) {

+        return result.GetUnpackedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.unpackedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedFixed64(ulong value) {

+        PrepareBuilder();

+        result.unpackedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.unpackedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedFixed64() {

+        PrepareBuilder();

+        result.unpackedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> UnpackedSfixed32List {

+        get { return PrepareBuilder().unpackedSfixed32_; }

+      }

+      public int UnpackedSfixed32Count {

+        get { return result.UnpackedSfixed32Count; }

+      }

+      public int GetUnpackedSfixed32(int index) {

+        return result.GetUnpackedSfixed32(index);

+      }

+      public Builder SetUnpackedSfixed32(int index, int value) {

+        PrepareBuilder();

+        result.unpackedSfixed32_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSfixed32(int value) {

+        PrepareBuilder();

+        result.unpackedSfixed32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSfixed32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.unpackedSfixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSfixed32() {

+        PrepareBuilder();

+        result.unpackedSfixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> UnpackedSfixed64List {

+        get { return PrepareBuilder().unpackedSfixed64_; }

+      }

+      public int UnpackedSfixed64Count {

+        get { return result.UnpackedSfixed64Count; }

+      }

+      public long GetUnpackedSfixed64(int index) {

+        return result.GetUnpackedSfixed64(index);

+      }

+      public Builder SetUnpackedSfixed64(int index, long value) {

+        PrepareBuilder();

+        result.unpackedSfixed64_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSfixed64(long value) {

+        PrepareBuilder();

+        result.unpackedSfixed64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSfixed64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.unpackedSfixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSfixed64() {

+        PrepareBuilder();

+        result.unpackedSfixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> UnpackedFloatList {

+        get { return PrepareBuilder().unpackedFloat_; }

+      }

+      public int UnpackedFloatCount {

+        get { return result.UnpackedFloatCount; }

+      }

+      public float GetUnpackedFloat(int index) {

+        return result.GetUnpackedFloat(index);

+      }

+      public Builder SetUnpackedFloat(int index, float value) {

+        PrepareBuilder();

+        result.unpackedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedFloat(float value) {

+        PrepareBuilder();

+        result.unpackedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.unpackedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedFloat() {

+        PrepareBuilder();

+        result.unpackedFloat_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<double> UnpackedDoubleList {

+        get { return PrepareBuilder().unpackedDouble_; }

+      }

+      public int UnpackedDoubleCount {

+        get { return result.UnpackedDoubleCount; }

+      }

+      public double GetUnpackedDouble(int index) {

+        return result.GetUnpackedDouble(index);

+      }

+      public Builder SetUnpackedDouble(int index, double value) {

+        PrepareBuilder();

+        result.unpackedDouble_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedDouble(double value) {

+        PrepareBuilder();

+        result.unpackedDouble_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedDouble(scg::IEnumerable<double> values) {

+        PrepareBuilder();

+        result.unpackedDouble_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedDouble() {

+        PrepareBuilder();

+        result.unpackedDouble_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<bool> UnpackedBoolList {

+        get { return PrepareBuilder().unpackedBool_; }

+      }

+      public int UnpackedBoolCount {

+        get { return result.UnpackedBoolCount; }

+      }

+      public bool GetUnpackedBool(int index) {

+        return result.GetUnpackedBool(index);

+      }

+      public Builder SetUnpackedBool(int index, bool value) {

+        PrepareBuilder();

+        result.unpackedBool_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedBool(bool value) {

+        PrepareBuilder();

+        result.unpackedBool_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedBool(scg::IEnumerable<bool> values) {

+        PrepareBuilder();

+        result.unpackedBool_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedBool() {

+        PrepareBuilder();

+        result.unpackedBool_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite> UnpackedEnumList {

+        get { return PrepareBuilder().unpackedEnum_; }

+      }

+      public int UnpackedEnumCount {

+        get { return result.UnpackedEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite GetUnpackedEnum(int index) {

+        return result.GetUnpackedEnum(index);

+      }

+      public Builder SetUnpackedEnum(int index, global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite value) {

+        PrepareBuilder();

+        result.unpackedEnum_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedEnum(global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite value) {

+        PrepareBuilder();

+        result.unpackedEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.UnpackedTypesForeignEnumLite> values) {

+        PrepareBuilder();

+        result.unpackedEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedEnum() {

+        PrepareBuilder();

+        result.unpackedEnum_.Clear();

+        return this;

+      }

+    }

+    static TestUnpackedTypesLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.SerializableAttribute()]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class BucketOfBytes : pb::GeneratedMessageLite<BucketOfBytes, BucketOfBytes.Builder> {

+    private BucketOfBytes() { }

+    private static readonly BucketOfBytes defaultInstance = new BucketOfBytes().MakeReadOnly();

+    private static readonly string[] _bucketOfBytesFieldNames = new string[] { "value" };

+    private static readonly uint[] _bucketOfBytesFieldTags = new uint[] { 10 };

+    public static BucketOfBytes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override BucketOfBytes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override BucketOfBytes ThisMessage {

+      get { return this; }

+    }

+    

+    public const int ValueFieldNumber = 1;

+    private bool hasValue;

+    private pb::ByteString value_ = pb::ByteString.Empty;

+    public bool HasValue {

+      get { return hasValue; }

+    }

+    public pb::ByteString Value {

+      get { return value_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _bucketOfBytesFieldNames;

+      if (hasValue) {

+        output.WriteBytes(1, field_names[0], Value);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasValue) {

+        size += pb::CodedOutputStream.ComputeBytesSize(1, Value);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      if (hasValue) hash ^= value_.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      BucketOfBytes other = obj as BucketOfBytes;

+      if (other == null) return false;

+      if (hasValue != other.hasValue || (hasValue && !value_.Equals(other.value_))) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("value", hasValue, value_, writer);

+    }

+    #endregion

+    

+    public static BucketOfBytes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BucketOfBytes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BucketOfBytes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BucketOfBytes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BucketOfBytes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BucketOfBytes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static BucketOfBytes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static BucketOfBytes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static BucketOfBytes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BucketOfBytes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private BucketOfBytes MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(BucketOfBytes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.SerializableAttribute()]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<BucketOfBytes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(BucketOfBytes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private BucketOfBytes result;

+      

+      private BucketOfBytes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          BucketOfBytes original = result;

+          result = new BucketOfBytes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override BucketOfBytes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override BucketOfBytes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BucketOfBytes.DefaultInstance; }

+      }

+      

+      public override BucketOfBytes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is BucketOfBytes) {

+          return MergeFrom((BucketOfBytes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(BucketOfBytes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.BucketOfBytes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasValue) {

+          Value = other.Value;

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_bucketOfBytesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _bucketOfBytesFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasValue = input.ReadBytes(ref result.value_);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public bool HasValue {

+        get { return result.hasValue; }

+      }

+      public pb::ByteString Value {

+        get { return result.Value; }

+        set { SetValue(value); }

+      }

+      public Builder SetValue(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasValue = true;

+        result.value_ = value;

+        return this;

+      }

+      public Builder ClearValue() {

+        PrepareBuilder();

+        result.hasValue = false;

+        result.value_ = pb::ByteString.Empty;

+        return this;

+      }

+    }

+    static BucketOfBytes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.SerializableAttribute()]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class BucketOfBytesEx : pb::GeneratedMessageLite<BucketOfBytesEx, BucketOfBytesEx.Builder> {

+    private BucketOfBytesEx() { }

+    private static readonly BucketOfBytesEx defaultInstance = new BucketOfBytesEx().MakeReadOnly();

+    private static readonly string[] _bucketOfBytesExFieldNames = new string[] { "value", "value2" };

+    private static readonly uint[] _bucketOfBytesExFieldTags = new uint[] { 10, 2042 };

+    public static BucketOfBytesEx DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override BucketOfBytesEx DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override BucketOfBytesEx ThisMessage {

+      get { return this; }

+    }

+    

+    public const int ValueFieldNumber = 1;

+    private bool hasValue;

+    private pb::ByteString value_ = pb::ByteString.Empty;

+    public bool HasValue {

+      get { return hasValue; }

+    }

+    public pb::ByteString Value {

+      get { return value_; }

+    }

+    

+    public const int Value2FieldNumber = 255;

+    private bool hasValue2;

+    private pb::ByteString value2_ = pb::ByteString.Empty;

+    public bool HasValue2 {

+      get { return hasValue2; }

+    }

+    public pb::ByteString Value2 {

+      get { return value2_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _bucketOfBytesExFieldNames;

+      if (hasValue) {

+        output.WriteBytes(1, field_names[0], Value);

+      }

+      if (hasValue2) {

+        output.WriteBytes(255, field_names[1], Value2);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasValue) {

+        size += pb::CodedOutputStream.ComputeBytesSize(1, Value);

+      }

+      if (hasValue2) {

+        size += pb::CodedOutputStream.ComputeBytesSize(255, Value2);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      if (hasValue) hash ^= value_.GetHashCode();

+      if (hasValue2) hash ^= value2_.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      BucketOfBytesEx other = obj as BucketOfBytesEx;

+      if (other == null) return false;

+      if (hasValue != other.hasValue || (hasValue && !value_.Equals(other.value_))) return false;

+      if (hasValue2 != other.hasValue2 || (hasValue2 && !value2_.Equals(other.value2_))) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("value", hasValue, value_, writer);

+      PrintField("value2", hasValue2, value2_, writer);

+    }

+    #endregion

+    

+    public static BucketOfBytesEx ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BucketOfBytesEx ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BucketOfBytesEx ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BucketOfBytesEx ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BucketOfBytesEx ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BucketOfBytesEx ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static BucketOfBytesEx ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static BucketOfBytesEx ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static BucketOfBytesEx ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BucketOfBytesEx ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private BucketOfBytesEx MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(BucketOfBytesEx prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.SerializableAttribute()]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<BucketOfBytesEx, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(BucketOfBytesEx cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private BucketOfBytesEx result;

+      

+      private BucketOfBytesEx PrepareBuilder() {

+        if (resultIsReadOnly) {

+          BucketOfBytesEx original = result;

+          result = new BucketOfBytesEx();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override BucketOfBytesEx MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override BucketOfBytesEx DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BucketOfBytesEx.DefaultInstance; }

+      }

+      

+      public override BucketOfBytesEx BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is BucketOfBytesEx) {

+          return MergeFrom((BucketOfBytesEx) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(BucketOfBytesEx other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.BucketOfBytesEx.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasValue) {

+          Value = other.Value;

+        }

+        if (other.HasValue2) {

+          Value2 = other.Value2;

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_bucketOfBytesExFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _bucketOfBytesExFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasValue = input.ReadBytes(ref result.value_);

+              break;

+            }

+            case 2042: {

+              result.hasValue2 = input.ReadBytes(ref result.value2_);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public bool HasValue {

+        get { return result.hasValue; }

+      }

+      public pb::ByteString Value {

+        get { return result.Value; }

+        set { SetValue(value); }

+      }

+      public Builder SetValue(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasValue = true;

+        result.value_ = value;

+        return this;

+      }

+      public Builder ClearValue() {

+        PrepareBuilder();

+        result.hasValue = false;

+        result.value_ = pb::ByteString.Empty;

+        return this;

+      }

+      

+      public bool HasValue2 {

+        get { return result.hasValue2; }

+      }

+      public pb::ByteString Value2 {

+        get { return result.Value2; }

+        set { SetValue2(value); }

+      }

+      public Builder SetValue2(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasValue2 = true;

+        result.value2_ = value;

+        return this;

+      }

+      public Builder ClearValue2() {

+        PrepareBuilder();

+        result.hasValue2 = false;

+        result.value2_ = pb::ByteString.Empty;

+        return this;

+      }

+    }

+    static BucketOfBytesEx() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestExtrasLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestImportLiteProtoFile.cs b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestImportLiteProtoFile.cs
new file mode 100644
index 0000000..fe1f408
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestImportLiteProtoFile.cs
@@ -0,0 +1,308 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestImportLiteProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    #endregion

+    #region Extensions

+    internal static readonly object Descriptor;

+    static UnitTestImportLiteProtoFile() {

+      Descriptor = null;

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum ImportEnumLite {

+    IMPORT_LITE_FOO = 7,

+    IMPORT_LITE_BAR = 8,

+    IMPORT_LITE_BAZ = 9,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ImportMessageLite : pb::GeneratedMessageLite<ImportMessageLite, ImportMessageLite.Builder> {

+    private ImportMessageLite() { }

+    private static readonly ImportMessageLite defaultInstance = new ImportMessageLite().MakeReadOnly();

+    private static readonly string[] _importMessageLiteFieldNames = new string[] { "d" };

+    private static readonly uint[] _importMessageLiteFieldTags = new uint[] { 8 };

+    public static ImportMessageLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ImportMessageLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ImportMessageLite ThisMessage {

+      get { return this; }

+    }

+    

+    public const int DFieldNumber = 1;

+    private bool hasD;

+    private int d_;

+    public bool HasD {

+      get { return hasD; }

+    }

+    public int D {

+      get { return d_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _importMessageLiteFieldNames;

+      if (hasD) {

+        output.WriteInt32(1, field_names[0], D);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasD) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, D);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      if (hasD) hash ^= d_.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      ImportMessageLite other = obj as ImportMessageLite;

+      if (other == null) return false;

+      if (hasD != other.hasD || (hasD && !d_.Equals(other.d_))) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("d", hasD, d_, writer);

+    }

+    #endregion

+    

+    public static ImportMessageLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessageLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ImportMessageLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ImportMessageLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ImportMessageLite MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ImportMessageLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<ImportMessageLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ImportMessageLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ImportMessageLite result;

+      

+      private ImportMessageLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ImportMessageLite original = result;

+          result = new ImportMessageLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ImportMessageLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override ImportMessageLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance; }

+      }

+      

+      public override ImportMessageLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is ImportMessageLite) {

+          return MergeFrom((ImportMessageLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ImportMessageLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasD) {

+          D = other.D;

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_importMessageLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _importMessageLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasD = input.ReadInt32(ref result.d_);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public bool HasD {

+        get { return result.hasD; }

+      }

+      public int D {

+        get { return result.D; }

+        set { SetD(value); }

+      }

+      public Builder SetD(int value) {

+        PrepareBuilder();

+        result.hasD = true;

+        result.d_ = value;

+        return this;

+      }

+      public Builder ClearD() {

+        PrepareBuilder();

+        result.hasD = false;

+        result.d_ = 0;

+        return this;

+      }

+    }

+    static ImportMessageLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestImportLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestImportProtoFile.cs b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestImportProtoFile.cs
new file mode 100644
index 0000000..4cae2b8
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestImportProtoFile.cs
@@ -0,0 +1,346 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestImportProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_import_ImportMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ImportMessage, global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder> internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestImportProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "CiVnb29nbGUvcHJvdG9idWYvdW5pdHRlc3RfaW1wb3J0LnByb3RvEhhwcm90", 

+            "b2J1Zl91bml0dGVzdF9pbXBvcnQaJGdvb2dsZS9wcm90b2J1Zi9jc2hhcnBf", 

+            "b3B0aW9ucy5wcm90byIaCg1JbXBvcnRNZXNzYWdlEgkKAWQYASABKAUqPAoK", 

+            "SW1wb3J0RW51bRIOCgpJTVBPUlRfRk9PEAcSDgoKSU1QT1JUX0JBUhAIEg4K", 

+            "CklNUE9SVF9CQVoQCUJbChhjb20uZ29vZ2xlLnByb3RvYnVmLnRlc3RIAcI+", 

+            "PAohR29vZ2xlLlByb3RvY29sQnVmZmVycy5UZXN0UHJvdG9zEhdVbml0VGVz", 

+          "dEltcG9ydFByb3RvRmlsZQ=="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_import_ImportMessage__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ImportMessage, global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder>(internal__static_protobuf_unittest_import_ImportMessage__Descriptor,

+                new string[] { "D", });

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum ImportEnum {

+    IMPORT_FOO = 7,

+    IMPORT_BAR = 8,

+    IMPORT_BAZ = 9,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ImportMessage : pb::GeneratedMessage<ImportMessage, ImportMessage.Builder> {

+    private ImportMessage() { }

+    private static readonly ImportMessage defaultInstance = new ImportMessage().MakeReadOnly();

+    private static readonly string[] _importMessageFieldNames = new string[] { "d" };

+    private static readonly uint[] _importMessageFieldTags = new uint[] { 8 };

+    public static ImportMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ImportMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ImportMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.internal__static_protobuf_unittest_import_ImportMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<ImportMessage, ImportMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.internal__static_protobuf_unittest_import_ImportMessage__FieldAccessorTable; }

+    }

+    

+    public const int DFieldNumber = 1;

+    private bool hasD;

+    private int d_;

+    public bool HasD {

+      get { return hasD; }

+    }

+    public int D {

+      get { return d_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _importMessageFieldNames;

+      if (hasD) {

+        output.WriteInt32(1, field_names[0], D);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasD) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, D);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static ImportMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ImportMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ImportMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ImportMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ImportMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ImportMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<ImportMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ImportMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ImportMessage result;

+      

+      private ImportMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ImportMessage original = result;

+          result = new ImportMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ImportMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ImportMessage.Descriptor; }

+      }

+      

+      public override ImportMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance; }

+      }

+      

+      public override ImportMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is ImportMessage) {

+          return MergeFrom((ImportMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ImportMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasD) {

+          D = other.D;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_importMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _importMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasD = input.ReadInt32(ref result.d_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasD {

+        get { return result.hasD; }

+      }

+      public int D {

+        get { return result.D; }

+        set { SetD(value); }

+      }

+      public Builder SetD(int value) {

+        PrepareBuilder();

+        result.hasD = true;

+        result.d_ = value;

+        return this;

+      }

+      public Builder ClearD() {

+        PrepareBuilder();

+        result.hasD = false;

+        result.d_ = 0;

+        return this;

+      }

+    }

+    static ImportMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteImportNonLiteProtoFile.cs b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteImportNonLiteProtoFile.cs
new file mode 100644
index 0000000..1ed2969
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteImportNonLiteProtoFile.cs
@@ -0,0 +1,324 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestLiteImportNonLiteProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    #endregion

+    #region Extensions

+    internal static readonly object Descriptor;

+    static UnitTestLiteImportNonLiteProtoFile() {

+      Descriptor = null;

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestLiteImportsNonlite : pb::GeneratedMessageLite<TestLiteImportsNonlite, TestLiteImportsNonlite.Builder> {

+    private TestLiteImportsNonlite() { }

+    private static readonly TestLiteImportsNonlite defaultInstance = new TestLiteImportsNonlite().MakeReadOnly();

+    private static readonly string[] _testLiteImportsNonliteFieldNames = new string[] { "message" };

+    private static readonly uint[] _testLiteImportsNonliteFieldTags = new uint[] { 10 };

+    public static TestLiteImportsNonlite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestLiteImportsNonlite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestLiteImportsNonlite ThisMessage {

+      get { return this; }

+    }

+    

+    public const int MessageFieldNumber = 1;

+    private bool hasMessage;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes message_;

+    public bool HasMessage {

+      get { return hasMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes Message {

+      get { return message_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testLiteImportsNonliteFieldNames;

+      if (hasMessage) {

+        output.WriteMessage(1, field_names[0], Message);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, Message);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      if (hasMessage) hash ^= message_.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      TestLiteImportsNonlite other = obj as TestLiteImportsNonlite;

+      if (other == null) return false;

+      if (hasMessage != other.hasMessage || (hasMessage && !message_.Equals(other.message_))) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("message", hasMessage, message_, writer);

+    }

+    #endregion

+    

+    public static TestLiteImportsNonlite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestLiteImportsNonlite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestLiteImportsNonlite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestLiteImportsNonlite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestLiteImportsNonlite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestLiteImportsNonlite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestLiteImportsNonlite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestLiteImportsNonlite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestLiteImportsNonlite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestLiteImportsNonlite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestLiteImportsNonlite MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestLiteImportsNonlite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<TestLiteImportsNonlite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestLiteImportsNonlite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestLiteImportsNonlite result;

+      

+      private TestLiteImportsNonlite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestLiteImportsNonlite original = result;

+          result = new TestLiteImportsNonlite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestLiteImportsNonlite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override TestLiteImportsNonlite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestLiteImportsNonlite.DefaultInstance; }

+      }

+      

+      public override TestLiteImportsNonlite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is TestLiteImportsNonlite) {

+          return MergeFrom((TestLiteImportsNonlite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestLiteImportsNonlite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestLiteImportsNonlite.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasMessage) {

+          MergeMessage(other.Message);

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testLiteImportsNonliteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testLiteImportsNonliteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder();

+              if (result.hasMessage) {

+                subBuilder.MergeFrom(Message);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Message = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public bool HasMessage {

+       get { return result.hasMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes Message {

+        get { return result.Message; }

+        set { SetMessage(value); }

+      }

+      public Builder SetMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMessage = true;

+        result.message_ = value;

+        return this;

+      }

+      public Builder SetMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasMessage = true;

+        result.message_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasMessage &&

+            result.message_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) {

+            result.message_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.CreateBuilder(result.message_).MergeFrom(value).BuildPartial();

+        } else {

+          result.message_ = value;

+        }

+        result.hasMessage = true;

+        return this;

+      }

+      public Builder ClearMessage() {

+        PrepareBuilder();

+        result.hasMessage = false;

+        result.message_ = null;

+        return this;

+      }

+    }

+    static TestLiteImportsNonlite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteImportNonLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteProtoFile.cs b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteProtoFile.cs
new file mode 100644
index 0000000..5ddc727
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestLiteProtoFile.cs
@@ -0,0 +1,8948 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestLiteProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalInt32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalInt64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalUint32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalUint64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSint32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSint64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFixed32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFixed64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSfixed32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSfixed64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFloatExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalDoubleExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalBoolExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalStringExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalBytesExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalGroupExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalNestedMessageExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalForeignMessageExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalImportMessageExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalNestedEnumExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalForeignEnumExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalImportEnumExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalStringPieceExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalCordExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedInt32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedInt64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedUint32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedUint64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSint32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSint64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFixed32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFixed64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSfixed32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSfixed64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFloatExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedDoubleExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedBoolExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedStringExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedBytesExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedGroupExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedNestedMessageExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedForeignMessageExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedImportMessageExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedNestedEnumExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedForeignEnumExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedImportEnumExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedStringPieceExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedCordExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultInt32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultInt64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultUint32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultUint64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSint32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSint64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFixed32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFixed64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSfixed32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSfixed64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFloatExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultDoubleExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultBoolExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultStringExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultBytesExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultNestedEnumExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultForeignEnumExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultImportEnumExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultStringPieceExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultCordExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedInt32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedInt64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedUint32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedUint64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSint32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSint64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFixed32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFixed64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSfixed32ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSfixed64ExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFloatExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedDoubleExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedBoolExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedEnumExtensionLite);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.NestedExtension);

+    }

+    #endregion

+    #region Extensions

+    public const int OptionalInt32ExtensionLiteFieldNumber = 1;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> OptionalInt32ExtensionLite;

+    public const int OptionalInt64ExtensionLiteFieldNumber = 2;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> OptionalInt64ExtensionLite;

+    public const int OptionalUint32ExtensionLiteFieldNumber = 3;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> OptionalUint32ExtensionLite;

+    public const int OptionalUint64ExtensionLiteFieldNumber = 4;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> OptionalUint64ExtensionLite;

+    public const int OptionalSint32ExtensionLiteFieldNumber = 5;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> OptionalSint32ExtensionLite;

+    public const int OptionalSint64ExtensionLiteFieldNumber = 6;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> OptionalSint64ExtensionLite;

+    public const int OptionalFixed32ExtensionLiteFieldNumber = 7;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> OptionalFixed32ExtensionLite;

+    public const int OptionalFixed64ExtensionLiteFieldNumber = 8;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> OptionalFixed64ExtensionLite;

+    public const int OptionalSfixed32ExtensionLiteFieldNumber = 9;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> OptionalSfixed32ExtensionLite;

+    public const int OptionalSfixed64ExtensionLiteFieldNumber = 10;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> OptionalSfixed64ExtensionLite;

+    public const int OptionalFloatExtensionLiteFieldNumber = 11;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float> OptionalFloatExtensionLite;

+    public const int OptionalDoubleExtensionLiteFieldNumber = 12;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double> OptionalDoubleExtensionLite;

+    public const int OptionalBoolExtensionLiteFieldNumber = 13;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool> OptionalBoolExtensionLite;

+    public const int OptionalStringExtensionLiteFieldNumber = 14;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> OptionalStringExtensionLite;

+    public const int OptionalBytesExtensionLiteFieldNumber = 15;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString> OptionalBytesExtensionLite;

+    public const int OptionalGroupExtensionLiteFieldNumber = 16;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite> OptionalGroupExtensionLite;

+    public const int OptionalNestedMessageExtensionLiteFieldNumber = 18;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> OptionalNestedMessageExtensionLite;

+    public const int OptionalForeignMessageExtensionLiteFieldNumber = 19;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> OptionalForeignMessageExtensionLite;

+    public const int OptionalImportMessageExtensionLiteFieldNumber = 20;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> OptionalImportMessageExtensionLite;

+    public const int OptionalNestedEnumExtensionLiteFieldNumber = 21;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> OptionalNestedEnumExtensionLite;

+    public const int OptionalForeignEnumExtensionLiteFieldNumber = 22;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> OptionalForeignEnumExtensionLite;

+    public const int OptionalImportEnumExtensionLiteFieldNumber = 23;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> OptionalImportEnumExtensionLite;

+    public const int OptionalStringPieceExtensionLiteFieldNumber = 24;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> OptionalStringPieceExtensionLite;

+    public const int OptionalCordExtensionLiteFieldNumber = 25;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> OptionalCordExtensionLite;

+    public const int RepeatedInt32ExtensionLiteFieldNumber = 31;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> RepeatedInt32ExtensionLite;

+    public const int RepeatedInt64ExtensionLiteFieldNumber = 32;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> RepeatedInt64ExtensionLite;

+    public const int RepeatedUint32ExtensionLiteFieldNumber = 33;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> RepeatedUint32ExtensionLite;

+    public const int RepeatedUint64ExtensionLiteFieldNumber = 34;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> RepeatedUint64ExtensionLite;

+    public const int RepeatedSint32ExtensionLiteFieldNumber = 35;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> RepeatedSint32ExtensionLite;

+    public const int RepeatedSint64ExtensionLiteFieldNumber = 36;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> RepeatedSint64ExtensionLite;

+    public const int RepeatedFixed32ExtensionLiteFieldNumber = 37;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> RepeatedFixed32ExtensionLite;

+    public const int RepeatedFixed64ExtensionLiteFieldNumber = 38;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> RepeatedFixed64ExtensionLite;

+    public const int RepeatedSfixed32ExtensionLiteFieldNumber = 39;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> RepeatedSfixed32ExtensionLite;

+    public const int RepeatedSfixed64ExtensionLiteFieldNumber = 40;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> RepeatedSfixed64ExtensionLite;

+    public const int RepeatedFloatExtensionLiteFieldNumber = 41;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float> RepeatedFloatExtensionLite;

+    public const int RepeatedDoubleExtensionLiteFieldNumber = 42;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double> RepeatedDoubleExtensionLite;

+    public const int RepeatedBoolExtensionLiteFieldNumber = 43;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool> RepeatedBoolExtensionLite;

+    public const int RepeatedStringExtensionLiteFieldNumber = 44;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> RepeatedStringExtensionLite;

+    public const int RepeatedBytesExtensionLiteFieldNumber = 45;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString> RepeatedBytesExtensionLite;

+    public const int RepeatedGroupExtensionLiteFieldNumber = 46;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite> RepeatedGroupExtensionLite;

+    public const int RepeatedNestedMessageExtensionLiteFieldNumber = 48;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> RepeatedNestedMessageExtensionLite;

+    public const int RepeatedForeignMessageExtensionLiteFieldNumber = 49;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> RepeatedForeignMessageExtensionLite;

+    public const int RepeatedImportMessageExtensionLiteFieldNumber = 50;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> RepeatedImportMessageExtensionLite;

+    public const int RepeatedNestedEnumExtensionLiteFieldNumber = 51;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> RepeatedNestedEnumExtensionLite;

+    public const int RepeatedForeignEnumExtensionLiteFieldNumber = 52;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> RepeatedForeignEnumExtensionLite;

+    public const int RepeatedImportEnumExtensionLiteFieldNumber = 53;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> RepeatedImportEnumExtensionLite;

+    public const int RepeatedStringPieceExtensionLiteFieldNumber = 54;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> RepeatedStringPieceExtensionLite;

+    public const int RepeatedCordExtensionLiteFieldNumber = 55;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> RepeatedCordExtensionLite;

+    public const int DefaultInt32ExtensionLiteFieldNumber = 61;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> DefaultInt32ExtensionLite;

+    public const int DefaultInt64ExtensionLiteFieldNumber = 62;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> DefaultInt64ExtensionLite;

+    public const int DefaultUint32ExtensionLiteFieldNumber = 63;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> DefaultUint32ExtensionLite;

+    public const int DefaultUint64ExtensionLiteFieldNumber = 64;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> DefaultUint64ExtensionLite;

+    public const int DefaultSint32ExtensionLiteFieldNumber = 65;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> DefaultSint32ExtensionLite;

+    public const int DefaultSint64ExtensionLiteFieldNumber = 66;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> DefaultSint64ExtensionLite;

+    public const int DefaultFixed32ExtensionLiteFieldNumber = 67;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint> DefaultFixed32ExtensionLite;

+    public const int DefaultFixed64ExtensionLiteFieldNumber = 68;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong> DefaultFixed64ExtensionLite;

+    public const int DefaultSfixed32ExtensionLiteFieldNumber = 69;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> DefaultSfixed32ExtensionLite;

+    public const int DefaultSfixed64ExtensionLiteFieldNumber = 70;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long> DefaultSfixed64ExtensionLite;

+    public const int DefaultFloatExtensionLiteFieldNumber = 71;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float> DefaultFloatExtensionLite;

+    public const int DefaultDoubleExtensionLiteFieldNumber = 72;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double> DefaultDoubleExtensionLite;

+    public const int DefaultBoolExtensionLiteFieldNumber = 73;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool> DefaultBoolExtensionLite;

+    public const int DefaultStringExtensionLiteFieldNumber = 74;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> DefaultStringExtensionLite;

+    public const int DefaultBytesExtensionLiteFieldNumber = 75;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString> DefaultBytesExtensionLite;

+    public const int DefaultNestedEnumExtensionLiteFieldNumber = 81;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> DefaultNestedEnumExtensionLite;

+    public const int DefaultForeignEnumExtensionLiteFieldNumber = 82;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> DefaultForeignEnumExtensionLite;

+    public const int DefaultImportEnumExtensionLiteFieldNumber = 83;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> DefaultImportEnumExtensionLite;

+    public const int DefaultStringPieceExtensionLiteFieldNumber = 84;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> DefaultStringPieceExtensionLite;

+    public const int DefaultCordExtensionLiteFieldNumber = 85;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string> DefaultCordExtensionLite;

+    public const int PackedInt32ExtensionLiteFieldNumber = 90;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int> PackedInt32ExtensionLite;

+    public const int PackedInt64ExtensionLiteFieldNumber = 91;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long> PackedInt64ExtensionLite;

+    public const int PackedUint32ExtensionLiteFieldNumber = 92;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, uint> PackedUint32ExtensionLite;

+    public const int PackedUint64ExtensionLiteFieldNumber = 93;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, ulong> PackedUint64ExtensionLite;

+    public const int PackedSint32ExtensionLiteFieldNumber = 94;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int> PackedSint32ExtensionLite;

+    public const int PackedSint64ExtensionLiteFieldNumber = 95;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long> PackedSint64ExtensionLite;

+    public const int PackedFixed32ExtensionLiteFieldNumber = 96;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, uint> PackedFixed32ExtensionLite;

+    public const int PackedFixed64ExtensionLiteFieldNumber = 97;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, ulong> PackedFixed64ExtensionLite;

+    public const int PackedSfixed32ExtensionLiteFieldNumber = 98;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int> PackedSfixed32ExtensionLite;

+    public const int PackedSfixed64ExtensionLiteFieldNumber = 99;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long> PackedSfixed64ExtensionLite;

+    public const int PackedFloatExtensionLiteFieldNumber = 100;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, float> PackedFloatExtensionLite;

+    public const int PackedDoubleExtensionLiteFieldNumber = 101;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, double> PackedDoubleExtensionLite;

+    public const int PackedBoolExtensionLiteFieldNumber = 102;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, bool> PackedBoolExtensionLite;

+    public const int PackedEnumExtensionLiteFieldNumber = 103;

+    public static pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> PackedEnumExtensionLite;

+    #endregion

+    

+    #region Static variables

+    #endregion

+    #region Extensions

+    internal static readonly object Descriptor;

+    static UnitTestLiteProtoFile() {

+      Descriptor = null;

+      global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.NestedExtension = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(

+          "protobuf_unittest.TestNestedExtensionLite.nested_extension",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(int),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.NestedExtensionFieldNumber,

+          pbd::FieldType.Int32);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalInt32ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(

+          "protobuf_unittest.optional_int32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(int),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalInt32ExtensionLiteFieldNumber,

+          pbd::FieldType.Int32);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalInt64ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(

+          "protobuf_unittest.optional_int64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(long),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalInt64ExtensionLiteFieldNumber,

+          pbd::FieldType.Int64);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalUint32ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(

+          "protobuf_unittest.optional_uint32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(uint),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalUint32ExtensionLiteFieldNumber,

+          pbd::FieldType.UInt32);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalUint64ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(

+          "protobuf_unittest.optional_uint64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(ulong),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalUint64ExtensionLiteFieldNumber,

+          pbd::FieldType.UInt64);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSint32ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(

+          "protobuf_unittest.optional_sint32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(int),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSint32ExtensionLiteFieldNumber,

+          pbd::FieldType.SInt32);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSint64ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(

+          "protobuf_unittest.optional_sint64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(long),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSint64ExtensionLiteFieldNumber,

+          pbd::FieldType.SInt64);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFixed32ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(

+          "protobuf_unittest.optional_fixed32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(uint),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFixed32ExtensionLiteFieldNumber,

+          pbd::FieldType.Fixed32);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFixed64ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(

+          "protobuf_unittest.optional_fixed64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(ulong),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFixed64ExtensionLiteFieldNumber,

+          pbd::FieldType.Fixed64);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSfixed32ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(

+          "protobuf_unittest.optional_sfixed32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(int),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSfixed32ExtensionLiteFieldNumber,

+          pbd::FieldType.SFixed32);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSfixed64ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(

+          "protobuf_unittest.optional_sfixed64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(long),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalSfixed64ExtensionLiteFieldNumber,

+          pbd::FieldType.SFixed64);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFloatExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float>(

+          "protobuf_unittest.optional_float_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(float),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalFloatExtensionLiteFieldNumber,

+          pbd::FieldType.Float);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalDoubleExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double>(

+          "protobuf_unittest.optional_double_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(double),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalDoubleExtensionLiteFieldNumber,

+          pbd::FieldType.Double);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalBoolExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool>(

+          "protobuf_unittest.optional_bool_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(bool),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalBoolExtensionLiteFieldNumber,

+          pbd::FieldType.Bool);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalStringExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(

+          "protobuf_unittest.optional_string_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalStringExtensionLiteFieldNumber,

+          pbd::FieldType.String);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalBytesExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString>(

+          "protobuf_unittest.optional_bytes_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalBytesExtensionLiteFieldNumber,

+          pbd::FieldType.Bytes);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalGroupExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite>(

+          "protobuf_unittest.optionalgroup_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalGroupExtensionLiteFieldNumber,

+          pbd::FieldType.Group);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalNestedMessageExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>(

+          "protobuf_unittest.optional_nested_message_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalNestedMessageExtensionLiteFieldNumber,

+          pbd::FieldType.Message);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalForeignMessageExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite>(

+          "protobuf_unittest.optional_foreign_message_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalForeignMessageExtensionLiteFieldNumber,

+          pbd::FieldType.Message);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalImportMessageExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite>(

+          "protobuf_unittest.optional_import_message_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalImportMessageExtensionLiteFieldNumber,

+          pbd::FieldType.Message);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalNestedEnumExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(

+          "protobuf_unittest.optional_nested_enum_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum),

+          null,

+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(),

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalNestedEnumExtensionLiteFieldNumber,

+          pbd::FieldType.Enum);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalForeignEnumExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(

+          "protobuf_unittest.optional_foreign_enum_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite),

+          null,

+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(),

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalForeignEnumExtensionLiteFieldNumber,

+          pbd::FieldType.Enum);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalImportEnumExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(

+          "protobuf_unittest.optional_import_enum_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          default(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite),

+          null,

+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(),

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalImportEnumExtensionLiteFieldNumber,

+          pbd::FieldType.Enum);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalStringPieceExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(

+          "protobuf_unittest.optional_string_piece_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalStringPieceExtensionLiteFieldNumber,

+          pbd::FieldType.String);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalCordExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(

+          "protobuf_unittest.optional_cord_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.OptionalCordExtensionLiteFieldNumber,

+          pbd::FieldType.String);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedInt32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(

+          "protobuf_unittest.repeated_int32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedInt32ExtensionLiteFieldNumber,

+          pbd::FieldType.Int32,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedInt64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(

+          "protobuf_unittest.repeated_int64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedInt64ExtensionLiteFieldNumber,

+          pbd::FieldType.Int64,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedUint32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(

+          "protobuf_unittest.repeated_uint32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedUint32ExtensionLiteFieldNumber,

+          pbd::FieldType.UInt32,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedUint64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(

+          "protobuf_unittest.repeated_uint64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedUint64ExtensionLiteFieldNumber,

+          pbd::FieldType.UInt64,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSint32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(

+          "protobuf_unittest.repeated_sint32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSint32ExtensionLiteFieldNumber,

+          pbd::FieldType.SInt32,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSint64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(

+          "protobuf_unittest.repeated_sint64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSint64ExtensionLiteFieldNumber,

+          pbd::FieldType.SInt64,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFixed32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(

+          "protobuf_unittest.repeated_fixed32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFixed32ExtensionLiteFieldNumber,

+          pbd::FieldType.Fixed32,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFixed64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(

+          "protobuf_unittest.repeated_fixed64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFixed64ExtensionLiteFieldNumber,

+          pbd::FieldType.Fixed64,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSfixed32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(

+          "protobuf_unittest.repeated_sfixed32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSfixed32ExtensionLiteFieldNumber,

+          pbd::FieldType.SFixed32,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSfixed64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(

+          "protobuf_unittest.repeated_sfixed64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedSfixed64ExtensionLiteFieldNumber,

+          pbd::FieldType.SFixed64,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFloatExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float>(

+          "protobuf_unittest.repeated_float_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedFloatExtensionLiteFieldNumber,

+          pbd::FieldType.Float,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedDoubleExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double>(

+          "protobuf_unittest.repeated_double_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedDoubleExtensionLiteFieldNumber,

+          pbd::FieldType.Double,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedBoolExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool>(

+          "protobuf_unittest.repeated_bool_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedBoolExtensionLiteFieldNumber,

+          pbd::FieldType.Bool,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedStringExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(

+          "protobuf_unittest.repeated_string_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedStringExtensionLiteFieldNumber,

+          pbd::FieldType.String,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedBytesExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString>(

+          "protobuf_unittest.repeated_bytes_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedBytesExtensionLiteFieldNumber,

+          pbd::FieldType.Bytes,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedGroupExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite>(

+          "protobuf_unittest.repeatedgroup_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedGroupExtensionLiteFieldNumber,

+          pbd::FieldType.Group,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedNestedMessageExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>(

+          "protobuf_unittest.repeated_nested_message_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedNestedMessageExtensionLiteFieldNumber,

+          pbd::FieldType.Message,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedForeignMessageExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite>(

+          "protobuf_unittest.repeated_foreign_message_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedForeignMessageExtensionLiteFieldNumber,

+          pbd::FieldType.Message,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedImportMessageExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite>(

+          "protobuf_unittest.repeated_import_message_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedImportMessageExtensionLiteFieldNumber,

+          pbd::FieldType.Message,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedNestedEnumExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(

+          "protobuf_unittest.repeated_nested_enum_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(),

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedNestedEnumExtensionLiteFieldNumber,

+          pbd::FieldType.Enum,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedForeignEnumExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(

+          "protobuf_unittest.repeated_foreign_enum_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(),

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedForeignEnumExtensionLiteFieldNumber,

+          pbd::FieldType.Enum,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedImportEnumExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(

+          "protobuf_unittest.repeated_import_enum_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(),

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedImportEnumExtensionLiteFieldNumber,

+          pbd::FieldType.Enum,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedStringPieceExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(

+          "protobuf_unittest.repeated_string_piece_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedStringPieceExtensionLiteFieldNumber,

+          pbd::FieldType.String,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedCordExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(

+          "protobuf_unittest.repeated_cord_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.RepeatedCordExtensionLiteFieldNumber,

+          pbd::FieldType.String,

+          false);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultInt32ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(

+          "protobuf_unittest.default_int32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          41,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultInt32ExtensionLiteFieldNumber,

+          pbd::FieldType.Int32);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultInt64ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(

+          "protobuf_unittest.default_int64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          42L,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultInt64ExtensionLiteFieldNumber,

+          pbd::FieldType.Int64);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultUint32ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(

+          "protobuf_unittest.default_uint32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          43,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultUint32ExtensionLiteFieldNumber,

+          pbd::FieldType.UInt32);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultUint64ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(

+          "protobuf_unittest.default_uint64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          44UL,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultUint64ExtensionLiteFieldNumber,

+          pbd::FieldType.UInt64);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSint32ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(

+          "protobuf_unittest.default_sint32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          -45,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSint32ExtensionLiteFieldNumber,

+          pbd::FieldType.SInt32);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSint64ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(

+          "protobuf_unittest.default_sint64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          46,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSint64ExtensionLiteFieldNumber,

+          pbd::FieldType.SInt64);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFixed32ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, uint>(

+          "protobuf_unittest.default_fixed32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          47,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFixed32ExtensionLiteFieldNumber,

+          pbd::FieldType.Fixed32);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFixed64ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, ulong>(

+          "protobuf_unittest.default_fixed64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          48,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFixed64ExtensionLiteFieldNumber,

+          pbd::FieldType.Fixed64);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSfixed32ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int>(

+          "protobuf_unittest.default_sfixed32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          49,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSfixed32ExtensionLiteFieldNumber,

+          pbd::FieldType.SFixed32);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSfixed64ExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, long>(

+          "protobuf_unittest.default_sfixed64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          -50,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultSfixed64ExtensionLiteFieldNumber,

+          pbd::FieldType.SFixed64);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFloatExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, float>(

+          "protobuf_unittest.default_float_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          51.5F,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultFloatExtensionLiteFieldNumber,

+          pbd::FieldType.Float);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultDoubleExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, double>(

+          "protobuf_unittest.default_double_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          52000D,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultDoubleExtensionLiteFieldNumber,

+          pbd::FieldType.Double);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultBoolExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, bool>(

+          "protobuf_unittest.default_bool_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          true,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultBoolExtensionLiteFieldNumber,

+          pbd::FieldType.Bool);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultStringExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(

+          "protobuf_unittest.default_string_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          "hello",

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultStringExtensionLiteFieldNumber,

+          pbd::FieldType.String);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultBytesExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, pb::ByteString>(

+          "protobuf_unittest.default_bytes_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          pb::ByteString.FromBase64("d29ybGQ="),

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultBytesExtensionLiteFieldNumber,

+          pbd::FieldType.Bytes);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultNestedEnumExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(

+          "protobuf_unittest.default_nested_enum_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum.BAR,

+          null,

+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(),

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultNestedEnumExtensionLiteFieldNumber,

+          pbd::FieldType.Enum);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultForeignEnumExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(

+          "protobuf_unittest.default_foreign_enum_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite.FOREIGN_LITE_BAR,

+          null,

+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(),

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultForeignEnumExtensionLiteFieldNumber,

+          pbd::FieldType.Enum);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultImportEnumExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(

+          "protobuf_unittest.default_import_enum_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          global::Google.ProtocolBuffers.TestProtos.ImportEnumLite.IMPORT_LITE_BAR,

+          null,

+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(),

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultImportEnumExtensionLiteFieldNumber,

+          pbd::FieldType.Enum);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultStringPieceExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(

+          "protobuf_unittest.default_string_piece_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          "abc",

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultStringPieceExtensionLiteFieldNumber,

+          pbd::FieldType.String);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultCordExtensionLite = 

+        new pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, string>(

+          "protobuf_unittest.default_cord_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance,

+          "123",

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.DefaultCordExtensionLiteFieldNumber,

+          pbd::FieldType.String);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedInt32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int>(

+          "protobuf_unittest.packed_int32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedInt32ExtensionLiteFieldNumber,

+          pbd::FieldType.Int32,

+          true);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedInt64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long>(

+          "protobuf_unittest.packed_int64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedInt64ExtensionLiteFieldNumber,

+          pbd::FieldType.Int64,

+          true);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedUint32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, uint>(

+          "protobuf_unittest.packed_uint32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedUint32ExtensionLiteFieldNumber,

+          pbd::FieldType.UInt32,

+          true);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedUint64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, ulong>(

+          "protobuf_unittest.packed_uint64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedUint64ExtensionLiteFieldNumber,

+          pbd::FieldType.UInt64,

+          true);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSint32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int>(

+          "protobuf_unittest.packed_sint32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSint32ExtensionLiteFieldNumber,

+          pbd::FieldType.SInt32,

+          true);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSint64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long>(

+          "protobuf_unittest.packed_sint64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSint64ExtensionLiteFieldNumber,

+          pbd::FieldType.SInt64,

+          true);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFixed32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, uint>(

+          "protobuf_unittest.packed_fixed32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFixed32ExtensionLiteFieldNumber,

+          pbd::FieldType.Fixed32,

+          true);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFixed64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, ulong>(

+          "protobuf_unittest.packed_fixed64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFixed64ExtensionLiteFieldNumber,

+          pbd::FieldType.Fixed64,

+          true);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSfixed32ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, int>(

+          "protobuf_unittest.packed_sfixed32_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSfixed32ExtensionLiteFieldNumber,

+          pbd::FieldType.SFixed32,

+          true);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSfixed64ExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, long>(

+          "protobuf_unittest.packed_sfixed64_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedSfixed64ExtensionLiteFieldNumber,

+          pbd::FieldType.SFixed64,

+          true);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFloatExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, float>(

+          "protobuf_unittest.packed_float_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedFloatExtensionLiteFieldNumber,

+          pbd::FieldType.Float,

+          true);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedDoubleExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, double>(

+          "protobuf_unittest.packed_double_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedDoubleExtensionLiteFieldNumber,

+          pbd::FieldType.Double,

+          true);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedBoolExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, bool>(

+          "protobuf_unittest.packed_bool_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          null,

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedBoolExtensionLiteFieldNumber,

+          pbd::FieldType.Bool,

+          true);

+      global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedEnumExtensionLite = 

+        new pb::GeneratedRepeatExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(

+          "protobuf_unittest.packed_enum_extension_lite",

+          global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance,

+          null,

+          new EnumLiteMap<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(),

+          global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.PackedEnumExtensionLiteFieldNumber,

+          pbd::FieldType.Enum,

+          true);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum ForeignEnumLite {

+    FOREIGN_LITE_FOO = 4,

+    FOREIGN_LITE_BAR = 5,

+    FOREIGN_LITE_BAZ = 6,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestAllTypesLite : pb::GeneratedMessageLite<TestAllTypesLite, TestAllTypesLite.Builder> {

+    private TestAllTypesLite() { }

+    private static readonly TestAllTypesLite defaultInstance = new TestAllTypesLite().MakeReadOnly();

+    private static readonly string[] _testAllTypesLiteFieldNames = new string[] { "default_bool", "default_bytes", "default_cord", "default_double", "default_fixed32", "default_fixed64", "default_float", "default_foreign_enum", "default_import_enum", "default_int32", "default_int64", "default_nested_enum", "default_sfixed32", "default_sfixed64", "default_sint32", "default_sint64", "default_string", "default_string_piece", "default_uint32", "default_uint64", "optional_bool", "optional_bytes", "optional_cord", "optional_double", "optional_fixed32", "optional_fixed64", "optional_float", "optional_foreign_enum", "optional_foreign_message", "optional_import_enum", "optional_import_message", "optional_int32", "optional_int64", "optional_nested_enum", "optional_nested_message", "optional_sfixed32", "optional_sfixed64", "optional_sint32", "optional_sint64", "optional_string", "optional_string_piece", "optional_uint32", "optional_uint64", "optionalgroup", "repeated_bool", "repeated_bytes", "repeated_cord", "repeated_double", "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_foreign_enum", "repeated_foreign_message", "repeated_import_enum", "repeated_import_message", "repeated_int32", "repeated_int64", "repeated_nested_enum", "repeated_nested_message", "repeated_sfixed32", "repeated_sfixed64", "repeated_sint32", "repeated_sint64", "repeated_string", "repeated_string_piece", "repeated_uint32", "repeated_uint64", "repeatedgroup" };

+    private static readonly uint[] _testAllTypesLiteFieldTags = new uint[] { 584, 602, 682, 577, 541, 545, 573, 656, 664, 488, 496, 648, 557, 561, 520, 528, 594, 674, 504, 512, 104, 122, 202, 97, 61, 65, 93, 176, 154, 184, 162, 8, 16, 168, 146, 77, 81, 40, 48, 114, 194, 24, 32, 131, 344, 362, 442, 337, 301, 305, 333, 416, 394, 424, 402, 248, 256, 408, 386, 317, 321, 280, 288, 354, 434, 264, 272, 371 };

+    public static TestAllTypesLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestAllTypesLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestAllTypesLite ThisMessage {

+      get { return this; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum NestedEnum {

+        FOO = 1,

+        BAR = 2,

+        BAZ = 3,

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class NestedMessage : pb::GeneratedMessageLite<NestedMessage, NestedMessage.Builder> {

+        private NestedMessage() { }

+        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();

+        private static readonly string[] _nestedMessageFieldNames = new string[] { "bb" };

+        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 8 };

+        public static NestedMessage DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override NestedMessage DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override NestedMessage ThisMessage {

+          get { return this; }

+        }

+        

+        public const int BbFieldNumber = 1;

+        private bool hasBb;

+        private int bb_;

+        public bool HasBb {

+          get { return hasBb; }

+        }

+        public int Bb {

+          get { return bb_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _nestedMessageFieldNames;

+          if (hasBb) {

+            output.WriteInt32(1, field_names[0], Bb);

+          }

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasBb) {

+            size += pb::CodedOutputStream.ComputeInt32Size(1, Bb);

+          }

+          memoizedSerializedSize = size;

+          return size;

+        }

+        #region Lite runtime methods

+        public override int GetHashCode() {

+          int hash = GetType().GetHashCode();

+          if (hasBb) hash ^= bb_.GetHashCode();

+          return hash;

+        }

+        

+        public override bool Equals(object obj) {

+          NestedMessage other = obj as NestedMessage;

+          if (other == null) return false;

+          if (hasBb != other.hasBb || (hasBb && !bb_.Equals(other.bb_))) return false;

+          return true;

+        }

+        

+        public override void PrintTo(global::System.IO.TextWriter writer) {

+          PrintField("bb", hasBb, bb_, writer);

+        }

+        #endregion

+        

+        public static NestedMessage ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private NestedMessage MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(NestedMessage prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilderLite<NestedMessage, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(NestedMessage cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private NestedMessage result;

+          

+          private NestedMessage PrepareBuilder() {

+            if (resultIsReadOnly) {

+              NestedMessage original = result;

+              result = new NestedMessage();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override NestedMessage MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override NestedMessage DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance; }

+          }

+          

+          public override NestedMessage BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessageLite other) {

+            if (other is NestedMessage) {

+              return MergeFrom((NestedMessage) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(NestedMessage other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasBb) {

+              Bb = other.Bb;

+            }

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _nestedMessageFieldTags[field_ordinal];

+                else {

+                  ParseUnknownField(input, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    return this;

+                  }

+                  ParseUnknownField(input, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 8: {

+                  result.hasBb = input.ReadInt32(ref result.bb_);

+                  break;

+                }

+              }

+            }

+            

+            return this;

+          }

+          

+          

+          public bool HasBb {

+            get { return result.hasBb; }

+          }

+          public int Bb {

+            get { return result.Bb; }

+            set { SetBb(value); }

+          }

+          public Builder SetBb(int value) {

+            PrepareBuilder();

+            result.hasBb = true;

+            result.bb_ = value;

+            return this;

+          }

+          public Builder ClearBb() {

+            PrepareBuilder();

+            result.hasBb = false;

+            result.bb_ = 0;

+            return this;

+          }

+        }

+        static NestedMessage() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);

+        }

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class OptionalGroup : pb::GeneratedMessageLite<OptionalGroup, OptionalGroup.Builder> {

+        private OptionalGroup() { }

+        private static readonly OptionalGroup defaultInstance = new OptionalGroup().MakeReadOnly();

+        private static readonly string[] _optionalGroupFieldNames = new string[] { "a" };

+        private static readonly uint[] _optionalGroupFieldTags = new uint[] { 136 };

+        public static OptionalGroup DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override OptionalGroup DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override OptionalGroup ThisMessage {

+          get { return this; }

+        }

+        

+        public const int AFieldNumber = 17;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _optionalGroupFieldNames;

+          if (hasA) {

+            output.WriteInt32(17, field_names[0], A);

+          }

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(17, A);

+          }

+          memoizedSerializedSize = size;

+          return size;

+        }

+        #region Lite runtime methods

+        public override int GetHashCode() {

+          int hash = GetType().GetHashCode();

+          if (hasA) hash ^= a_.GetHashCode();

+          return hash;

+        }

+        

+        public override bool Equals(object obj) {

+          OptionalGroup other = obj as OptionalGroup;

+          if (other == null) return false;

+          if (hasA != other.hasA || (hasA && !a_.Equals(other.a_))) return false;

+          return true;

+        }

+        

+        public override void PrintTo(global::System.IO.TextWriter writer) {

+          PrintField("a", hasA, a_, writer);

+        }

+        #endregion

+        

+        public static OptionalGroup ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private OptionalGroup MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(OptionalGroup prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilderLite<OptionalGroup, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(OptionalGroup cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private OptionalGroup result;

+          

+          private OptionalGroup PrepareBuilder() {

+            if (resultIsReadOnly) {

+              OptionalGroup original = result;

+              result = new OptionalGroup();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override OptionalGroup MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override OptionalGroup DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.DefaultInstance; }

+          }

+          

+          public override OptionalGroup BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessageLite other) {

+            if (other is OptionalGroup) {

+              return MergeFrom((OptionalGroup) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(OptionalGroup other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_optionalGroupFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _optionalGroupFieldTags[field_ordinal];

+                else {

+                  ParseUnknownField(input, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    return this;

+                  }

+                  ParseUnknownField(input, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 136: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static OptionalGroup() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);

+        }

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class RepeatedGroup : pb::GeneratedMessageLite<RepeatedGroup, RepeatedGroup.Builder> {

+        private RepeatedGroup() { }

+        private static readonly RepeatedGroup defaultInstance = new RepeatedGroup().MakeReadOnly();

+        private static readonly string[] _repeatedGroupFieldNames = new string[] { "a" };

+        private static readonly uint[] _repeatedGroupFieldTags = new uint[] { 376 };

+        public static RepeatedGroup DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override RepeatedGroup DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override RepeatedGroup ThisMessage {

+          get { return this; }

+        }

+        

+        public const int AFieldNumber = 47;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _repeatedGroupFieldNames;

+          if (hasA) {

+            output.WriteInt32(47, field_names[0], A);

+          }

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(47, A);

+          }

+          memoizedSerializedSize = size;

+          return size;

+        }

+        #region Lite runtime methods

+        public override int GetHashCode() {

+          int hash = GetType().GetHashCode();

+          if (hasA) hash ^= a_.GetHashCode();

+          return hash;

+        }

+        

+        public override bool Equals(object obj) {

+          RepeatedGroup other = obj as RepeatedGroup;

+          if (other == null) return false;

+          if (hasA != other.hasA || (hasA && !a_.Equals(other.a_))) return false;

+          return true;

+        }

+        

+        public override void PrintTo(global::System.IO.TextWriter writer) {

+          PrintField("a", hasA, a_, writer);

+        }

+        #endregion

+        

+        public static RepeatedGroup ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private RepeatedGroup MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(RepeatedGroup prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilderLite<RepeatedGroup, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(RepeatedGroup cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private RepeatedGroup result;

+          

+          private RepeatedGroup PrepareBuilder() {

+            if (resultIsReadOnly) {

+              RepeatedGroup original = result;

+              result = new RepeatedGroup();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override RepeatedGroup MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override RepeatedGroup DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.DefaultInstance; }

+          }

+          

+          public override RepeatedGroup BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessageLite other) {

+            if (other is RepeatedGroup) {

+              return MergeFrom((RepeatedGroup) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(RepeatedGroup other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _repeatedGroupFieldTags[field_ordinal];

+                else {

+                  ParseUnknownField(input, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    return this;

+                  }

+                  ParseUnknownField(input, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 376: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static RepeatedGroup() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int OptionalInt32FieldNumber = 1;

+    private bool hasOptionalInt32;

+    private int optionalInt32_;

+    public bool HasOptionalInt32 {

+      get { return hasOptionalInt32; }

+    }

+    public int OptionalInt32 {

+      get { return optionalInt32_; }

+    }

+    

+    public const int OptionalInt64FieldNumber = 2;

+    private bool hasOptionalInt64;

+    private long optionalInt64_;

+    public bool HasOptionalInt64 {

+      get { return hasOptionalInt64; }

+    }

+    public long OptionalInt64 {

+      get { return optionalInt64_; }

+    }

+    

+    public const int OptionalUint32FieldNumber = 3;

+    private bool hasOptionalUint32;

+    private uint optionalUint32_;

+    public bool HasOptionalUint32 {

+      get { return hasOptionalUint32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint OptionalUint32 {

+      get { return optionalUint32_; }

+    }

+    

+    public const int OptionalUint64FieldNumber = 4;

+    private bool hasOptionalUint64;

+    private ulong optionalUint64_;

+    public bool HasOptionalUint64 {

+      get { return hasOptionalUint64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong OptionalUint64 {

+      get { return optionalUint64_; }

+    }

+    

+    public const int OptionalSint32FieldNumber = 5;

+    private bool hasOptionalSint32;

+    private int optionalSint32_;

+    public bool HasOptionalSint32 {

+      get { return hasOptionalSint32; }

+    }

+    public int OptionalSint32 {

+      get { return optionalSint32_; }

+    }

+    

+    public const int OptionalSint64FieldNumber = 6;

+    private bool hasOptionalSint64;

+    private long optionalSint64_;

+    public bool HasOptionalSint64 {

+      get { return hasOptionalSint64; }

+    }

+    public long OptionalSint64 {

+      get { return optionalSint64_; }

+    }

+    

+    public const int OptionalFixed32FieldNumber = 7;

+    private bool hasOptionalFixed32;

+    private uint optionalFixed32_;

+    public bool HasOptionalFixed32 {

+      get { return hasOptionalFixed32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint OptionalFixed32 {

+      get { return optionalFixed32_; }

+    }

+    

+    public const int OptionalFixed64FieldNumber = 8;

+    private bool hasOptionalFixed64;

+    private ulong optionalFixed64_;

+    public bool HasOptionalFixed64 {

+      get { return hasOptionalFixed64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong OptionalFixed64 {

+      get { return optionalFixed64_; }

+    }

+    

+    public const int OptionalSfixed32FieldNumber = 9;

+    private bool hasOptionalSfixed32;

+    private int optionalSfixed32_;

+    public bool HasOptionalSfixed32 {

+      get { return hasOptionalSfixed32; }

+    }

+    public int OptionalSfixed32 {

+      get { return optionalSfixed32_; }

+    }

+    

+    public const int OptionalSfixed64FieldNumber = 10;

+    private bool hasOptionalSfixed64;

+    private long optionalSfixed64_;

+    public bool HasOptionalSfixed64 {

+      get { return hasOptionalSfixed64; }

+    }

+    public long OptionalSfixed64 {

+      get { return optionalSfixed64_; }

+    }

+    

+    public const int OptionalFloatFieldNumber = 11;

+    private bool hasOptionalFloat;

+    private float optionalFloat_;

+    public bool HasOptionalFloat {

+      get { return hasOptionalFloat; }

+    }

+    public float OptionalFloat {

+      get { return optionalFloat_; }

+    }

+    

+    public const int OptionalDoubleFieldNumber = 12;

+    private bool hasOptionalDouble;

+    private double optionalDouble_;

+    public bool HasOptionalDouble {

+      get { return hasOptionalDouble; }

+    }

+    public double OptionalDouble {

+      get { return optionalDouble_; }

+    }

+    

+    public const int OptionalBoolFieldNumber = 13;

+    private bool hasOptionalBool;

+    private bool optionalBool_;

+    public bool HasOptionalBool {

+      get { return hasOptionalBool; }

+    }

+    public bool OptionalBool {

+      get { return optionalBool_; }

+    }

+    

+    public const int OptionalStringFieldNumber = 14;

+    private bool hasOptionalString;

+    private string optionalString_ = "";

+    public bool HasOptionalString {

+      get { return hasOptionalString; }

+    }

+    public string OptionalString {

+      get { return optionalString_; }

+    }

+    

+    public const int OptionalBytesFieldNumber = 15;

+    private bool hasOptionalBytes;

+    private pb::ByteString optionalBytes_ = pb::ByteString.Empty;

+    public bool HasOptionalBytes {

+      get { return hasOptionalBytes; }

+    }

+    public pb::ByteString OptionalBytes {

+      get { return optionalBytes_; }

+    }

+    

+    public const int OptionalGroupFieldNumber = 16;

+    private bool hasOptionalGroup;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup optionalGroup_;

+    public bool HasOptionalGroup {

+      get { return hasOptionalGroup; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup OptionalGroup {

+      get { return optionalGroup_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.DefaultInstance; }

+    }

+    

+    public const int OptionalNestedMessageFieldNumber = 18;

+    private bool hasOptionalNestedMessage;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage optionalNestedMessage_;

+    public bool HasOptionalNestedMessage {

+      get { return hasOptionalNestedMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage OptionalNestedMessage {

+      get { return optionalNestedMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance; }

+    }

+    

+    public const int OptionalForeignMessageFieldNumber = 19;

+    private bool hasOptionalForeignMessage;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite optionalForeignMessage_;

+    public bool HasOptionalForeignMessage {

+      get { return hasOptionalForeignMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite OptionalForeignMessage {

+      get { return optionalForeignMessage_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance; }

+    }

+    

+    public const int OptionalImportMessageFieldNumber = 20;

+    private bool hasOptionalImportMessage;

+    private global::Google.ProtocolBuffers.TestProtos.ImportMessageLite optionalImportMessage_;

+    public bool HasOptionalImportMessage {

+      get { return hasOptionalImportMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportMessageLite OptionalImportMessage {

+      get { return optionalImportMessage_ ?? global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance; }

+    }

+    

+    public const int OptionalNestedEnumFieldNumber = 21;

+    private bool hasOptionalNestedEnum;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum.FOO;

+    public bool HasOptionalNestedEnum {

+      get { return hasOptionalNestedEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum OptionalNestedEnum {

+      get { return optionalNestedEnum_; }

+    }

+    

+    public const int OptionalForeignEnumFieldNumber = 22;

+    private bool hasOptionalForeignEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite.FOREIGN_LITE_FOO;

+    public bool HasOptionalForeignEnum {

+      get { return hasOptionalForeignEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite OptionalForeignEnum {

+      get { return optionalForeignEnum_; }

+    }

+    

+    public const int OptionalImportEnumFieldNumber = 23;

+    private bool hasOptionalImportEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ImportEnumLite optionalImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnumLite.IMPORT_LITE_FOO;

+    public bool HasOptionalImportEnum {

+      get { return hasOptionalImportEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportEnumLite OptionalImportEnum {

+      get { return optionalImportEnum_; }

+    }

+    

+    public const int OptionalStringPieceFieldNumber = 24;

+    private bool hasOptionalStringPiece;

+    private string optionalStringPiece_ = "";

+    public bool HasOptionalStringPiece {

+      get { return hasOptionalStringPiece; }

+    }

+    public string OptionalStringPiece {

+      get { return optionalStringPiece_; }

+    }

+    

+    public const int OptionalCordFieldNumber = 25;

+    private bool hasOptionalCord;

+    private string optionalCord_ = "";

+    public bool HasOptionalCord {

+      get { return hasOptionalCord; }

+    }

+    public string OptionalCord {

+      get { return optionalCord_; }

+    }

+    

+    public const int RepeatedInt32FieldNumber = 31;

+    private pbc::PopsicleList<int> repeatedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedInt32List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt32_); }

+    }

+    public int RepeatedInt32Count {

+      get { return repeatedInt32_.Count; }

+    }

+    public int GetRepeatedInt32(int index) {

+      return repeatedInt32_[index];

+    }

+    

+    public const int RepeatedInt64FieldNumber = 32;

+    private pbc::PopsicleList<long> repeatedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedInt64List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt64_); }

+    }

+    public int RepeatedInt64Count {

+      get { return repeatedInt64_.Count; }

+    }

+    public long GetRepeatedInt64(int index) {

+      return repeatedInt64_[index];

+    }

+    

+    public const int RepeatedUint32FieldNumber = 33;

+    private pbc::PopsicleList<uint> repeatedUint32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> RepeatedUint32List {

+      get { return pbc::Lists.AsReadOnly(repeatedUint32_); }

+    }

+    public int RepeatedUint32Count {

+      get { return repeatedUint32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetRepeatedUint32(int index) {

+      return repeatedUint32_[index];

+    }

+    

+    public const int RepeatedUint64FieldNumber = 34;

+    private pbc::PopsicleList<ulong> repeatedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedUint64List {

+      get { return pbc::Lists.AsReadOnly(repeatedUint64_); }

+    }

+    public int RepeatedUint64Count {

+      get { return repeatedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedUint64(int index) {

+      return repeatedUint64_[index];

+    }

+    

+    public const int RepeatedSint32FieldNumber = 35;

+    private pbc::PopsicleList<int> repeatedSint32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedSint32List {

+      get { return pbc::Lists.AsReadOnly(repeatedSint32_); }

+    }

+    public int RepeatedSint32Count {

+      get { return repeatedSint32_.Count; }

+    }

+    public int GetRepeatedSint32(int index) {

+      return repeatedSint32_[index];

+    }

+    

+    public const int RepeatedSint64FieldNumber = 36;

+    private pbc::PopsicleList<long> repeatedSint64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedSint64List {

+      get { return pbc::Lists.AsReadOnly(repeatedSint64_); }

+    }

+    public int RepeatedSint64Count {

+      get { return repeatedSint64_.Count; }

+    }

+    public long GetRepeatedSint64(int index) {

+      return repeatedSint64_[index];

+    }

+    

+    public const int RepeatedFixed32FieldNumber = 37;

+    private pbc::PopsicleList<uint> repeatedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> RepeatedFixed32List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed32_); }

+    }

+    public int RepeatedFixed32Count {

+      get { return repeatedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetRepeatedFixed32(int index) {

+      return repeatedFixed32_[index];

+    }

+    

+    public const int RepeatedFixed64FieldNumber = 38;

+    private pbc::PopsicleList<ulong> repeatedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedFixed64List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed64_); }

+    }

+    public int RepeatedFixed64Count {

+      get { return repeatedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedFixed64(int index) {

+      return repeatedFixed64_[index];

+    }

+    

+    public const int RepeatedSfixed32FieldNumber = 39;

+    private pbc::PopsicleList<int> repeatedSfixed32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedSfixed32List {

+      get { return pbc::Lists.AsReadOnly(repeatedSfixed32_); }

+    }

+    public int RepeatedSfixed32Count {

+      get { return repeatedSfixed32_.Count; }

+    }

+    public int GetRepeatedSfixed32(int index) {

+      return repeatedSfixed32_[index];

+    }

+    

+    public const int RepeatedSfixed64FieldNumber = 40;

+    private pbc::PopsicleList<long> repeatedSfixed64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedSfixed64List {

+      get { return pbc::Lists.AsReadOnly(repeatedSfixed64_); }

+    }

+    public int RepeatedSfixed64Count {

+      get { return repeatedSfixed64_.Count; }

+    }

+    public long GetRepeatedSfixed64(int index) {

+      return repeatedSfixed64_[index];

+    }

+    

+    public const int RepeatedFloatFieldNumber = 41;

+    private pbc::PopsicleList<float> repeatedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> RepeatedFloatList {

+      get { return pbc::Lists.AsReadOnly(repeatedFloat_); }

+    }

+    public int RepeatedFloatCount {

+      get { return repeatedFloat_.Count; }

+    }

+    public float GetRepeatedFloat(int index) {

+      return repeatedFloat_[index];

+    }

+    

+    public const int RepeatedDoubleFieldNumber = 42;

+    private pbc::PopsicleList<double> repeatedDouble_ = new pbc::PopsicleList<double>();

+    public scg::IList<double> RepeatedDoubleList {

+      get { return pbc::Lists.AsReadOnly(repeatedDouble_); }

+    }

+    public int RepeatedDoubleCount {

+      get { return repeatedDouble_.Count; }

+    }

+    public double GetRepeatedDouble(int index) {

+      return repeatedDouble_[index];

+    }

+    

+    public const int RepeatedBoolFieldNumber = 43;

+    private pbc::PopsicleList<bool> repeatedBool_ = new pbc::PopsicleList<bool>();

+    public scg::IList<bool> RepeatedBoolList {

+      get { return pbc::Lists.AsReadOnly(repeatedBool_); }

+    }

+    public int RepeatedBoolCount {

+      get { return repeatedBool_.Count; }

+    }

+    public bool GetRepeatedBool(int index) {

+      return repeatedBool_[index];

+    }

+    

+    public const int RepeatedStringFieldNumber = 44;

+    private pbc::PopsicleList<string> repeatedString_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringList {

+      get { return pbc::Lists.AsReadOnly(repeatedString_); }

+    }

+    public int RepeatedStringCount {

+      get { return repeatedString_.Count; }

+    }

+    public string GetRepeatedString(int index) {

+      return repeatedString_[index];

+    }

+    

+    public const int RepeatedBytesFieldNumber = 45;

+    private pbc::PopsicleList<pb::ByteString> repeatedBytes_ = new pbc::PopsicleList<pb::ByteString>();

+    public scg::IList<pb::ByteString> RepeatedBytesList {

+      get { return pbc::Lists.AsReadOnly(repeatedBytes_); }

+    }

+    public int RepeatedBytesCount {

+      get { return repeatedBytes_.Count; }

+    }

+    public pb::ByteString GetRepeatedBytes(int index) {

+      return repeatedBytes_[index];

+    }

+    

+    public const int RepeatedGroupFieldNumber = 46;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup> repeatedGroup_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup> RepeatedGroupList {

+      get { return repeatedGroup_; }

+    }

+    public int RepeatedGroupCount {

+      get { return repeatedGroup_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup GetRepeatedGroup(int index) {

+      return repeatedGroup_[index];

+    }

+    

+    public const int RepeatedNestedMessageFieldNumber = 48;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> repeatedNestedMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> RepeatedNestedMessageList {

+      get { return repeatedNestedMessage_; }

+    }

+    public int RepeatedNestedMessageCount {

+      get { return repeatedNestedMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage GetRepeatedNestedMessage(int index) {

+      return repeatedNestedMessage_[index];

+    }

+    

+    public const int RepeatedForeignMessageFieldNumber = 49;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> repeatedForeignMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> RepeatedForeignMessageList {

+      get { return repeatedForeignMessage_; }

+    }

+    public int RepeatedForeignMessageCount {

+      get { return repeatedForeignMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite GetRepeatedForeignMessage(int index) {

+      return repeatedForeignMessage_[index];

+    }

+    

+    public const int RepeatedImportMessageFieldNumber = 50;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> repeatedImportMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> RepeatedImportMessageList {

+      get { return repeatedImportMessage_; }

+    }

+    public int RepeatedImportMessageCount {

+      get { return repeatedImportMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportMessageLite GetRepeatedImportMessage(int index) {

+      return repeatedImportMessage_[index];

+    }

+    

+    public const int RepeatedNestedEnumFieldNumber = 51;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> repeatedNestedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> RepeatedNestedEnumList {

+      get { return pbc::Lists.AsReadOnly(repeatedNestedEnum_); }

+    }

+    public int RepeatedNestedEnumCount {

+      get { return repeatedNestedEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum GetRepeatedNestedEnum(int index) {

+      return repeatedNestedEnum_[index];

+    }

+    

+    public const int RepeatedForeignEnumFieldNumber = 52;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> repeatedForeignEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> RepeatedForeignEnumList {

+      get { return pbc::Lists.AsReadOnly(repeatedForeignEnum_); }

+    }

+    public int RepeatedForeignEnumCount {

+      get { return repeatedForeignEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite GetRepeatedForeignEnum(int index) {

+      return repeatedForeignEnum_[index];

+    }

+    

+    public const int RepeatedImportEnumFieldNumber = 53;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> repeatedImportEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> RepeatedImportEnumList {

+      get { return pbc::Lists.AsReadOnly(repeatedImportEnum_); }

+    }

+    public int RepeatedImportEnumCount {

+      get { return repeatedImportEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportEnumLite GetRepeatedImportEnum(int index) {

+      return repeatedImportEnum_[index];

+    }

+    

+    public const int RepeatedStringPieceFieldNumber = 54;

+    private pbc::PopsicleList<string> repeatedStringPiece_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringPieceList {

+      get { return pbc::Lists.AsReadOnly(repeatedStringPiece_); }

+    }

+    public int RepeatedStringPieceCount {

+      get { return repeatedStringPiece_.Count; }

+    }

+    public string GetRepeatedStringPiece(int index) {

+      return repeatedStringPiece_[index];

+    }

+    

+    public const int RepeatedCordFieldNumber = 55;

+    private pbc::PopsicleList<string> repeatedCord_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedCordList {

+      get { return pbc::Lists.AsReadOnly(repeatedCord_); }

+    }

+    public int RepeatedCordCount {

+      get { return repeatedCord_.Count; }

+    }

+    public string GetRepeatedCord(int index) {

+      return repeatedCord_[index];

+    }

+    

+    public const int DefaultInt32FieldNumber = 61;

+    private bool hasDefaultInt32;

+    private int defaultInt32_ = 41;

+    public bool HasDefaultInt32 {

+      get { return hasDefaultInt32; }

+    }

+    public int DefaultInt32 {

+      get { return defaultInt32_; }

+    }

+    

+    public const int DefaultInt64FieldNumber = 62;

+    private bool hasDefaultInt64;

+    private long defaultInt64_ = 42L;

+    public bool HasDefaultInt64 {

+      get { return hasDefaultInt64; }

+    }

+    public long DefaultInt64 {

+      get { return defaultInt64_; }

+    }

+    

+    public const int DefaultUint32FieldNumber = 63;

+    private bool hasDefaultUint32;

+    private uint defaultUint32_ = 43;

+    public bool HasDefaultUint32 {

+      get { return hasDefaultUint32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint DefaultUint32 {

+      get { return defaultUint32_; }

+    }

+    

+    public const int DefaultUint64FieldNumber = 64;

+    private bool hasDefaultUint64;

+    private ulong defaultUint64_ = 44UL;

+    public bool HasDefaultUint64 {

+      get { return hasDefaultUint64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong DefaultUint64 {

+      get { return defaultUint64_; }

+    }

+    

+    public const int DefaultSint32FieldNumber = 65;

+    private bool hasDefaultSint32;

+    private int defaultSint32_ = -45;

+    public bool HasDefaultSint32 {

+      get { return hasDefaultSint32; }

+    }

+    public int DefaultSint32 {

+      get { return defaultSint32_; }

+    }

+    

+    public const int DefaultSint64FieldNumber = 66;

+    private bool hasDefaultSint64;

+    private long defaultSint64_ = 46;

+    public bool HasDefaultSint64 {

+      get { return hasDefaultSint64; }

+    }

+    public long DefaultSint64 {

+      get { return defaultSint64_; }

+    }

+    

+    public const int DefaultFixed32FieldNumber = 67;

+    private bool hasDefaultFixed32;

+    private uint defaultFixed32_ = 47;

+    public bool HasDefaultFixed32 {

+      get { return hasDefaultFixed32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint DefaultFixed32 {

+      get { return defaultFixed32_; }

+    }

+    

+    public const int DefaultFixed64FieldNumber = 68;

+    private bool hasDefaultFixed64;

+    private ulong defaultFixed64_ = 48;

+    public bool HasDefaultFixed64 {

+      get { return hasDefaultFixed64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong DefaultFixed64 {

+      get { return defaultFixed64_; }

+    }

+    

+    public const int DefaultSfixed32FieldNumber = 69;

+    private bool hasDefaultSfixed32;

+    private int defaultSfixed32_ = 49;

+    public bool HasDefaultSfixed32 {

+      get { return hasDefaultSfixed32; }

+    }

+    public int DefaultSfixed32 {

+      get { return defaultSfixed32_; }

+    }

+    

+    public const int DefaultSfixed64FieldNumber = 70;

+    private bool hasDefaultSfixed64;

+    private long defaultSfixed64_ = -50;

+    public bool HasDefaultSfixed64 {

+      get { return hasDefaultSfixed64; }

+    }

+    public long DefaultSfixed64 {

+      get { return defaultSfixed64_; }

+    }

+    

+    public const int DefaultFloatFieldNumber = 71;

+    private bool hasDefaultFloat;

+    private float defaultFloat_ = 51.5F;

+    public bool HasDefaultFloat {

+      get { return hasDefaultFloat; }

+    }

+    public float DefaultFloat {

+      get { return defaultFloat_; }

+    }

+    

+    public const int DefaultDoubleFieldNumber = 72;

+    private bool hasDefaultDouble;

+    private double defaultDouble_ = 52000D;

+    public bool HasDefaultDouble {

+      get { return hasDefaultDouble; }

+    }

+    public double DefaultDouble {

+      get { return defaultDouble_; }

+    }

+    

+    public const int DefaultBoolFieldNumber = 73;

+    private bool hasDefaultBool;

+    private bool defaultBool_ = true;

+    public bool HasDefaultBool {

+      get { return hasDefaultBool; }

+    }

+    public bool DefaultBool {

+      get { return defaultBool_; }

+    }

+    

+    public const int DefaultStringFieldNumber = 74;

+    private bool hasDefaultString;

+    private string defaultString_ = "hello";

+    public bool HasDefaultString {

+      get { return hasDefaultString; }

+    }

+    public string DefaultString {

+      get { return defaultString_; }

+    }

+    

+    public const int DefaultBytesFieldNumber = 75;

+    private bool hasDefaultBytes;

+    private pb::ByteString defaultBytes_ = pb::ByteString.FromBase64("d29ybGQ=");

+    public bool HasDefaultBytes {

+      get { return hasDefaultBytes; }

+    }

+    public pb::ByteString DefaultBytes {

+      get { return defaultBytes_; }

+    }

+    

+    public const int DefaultNestedEnumFieldNumber = 81;

+    private bool hasDefaultNestedEnum;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum defaultNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum.BAR;

+    public bool HasDefaultNestedEnum {

+      get { return hasDefaultNestedEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum DefaultNestedEnum {

+      get { return defaultNestedEnum_; }

+    }

+    

+    public const int DefaultForeignEnumFieldNumber = 82;

+    private bool hasDefaultForeignEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite defaultForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite.FOREIGN_LITE_BAR;

+    public bool HasDefaultForeignEnum {

+      get { return hasDefaultForeignEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite DefaultForeignEnum {

+      get { return defaultForeignEnum_; }

+    }

+    

+    public const int DefaultImportEnumFieldNumber = 83;

+    private bool hasDefaultImportEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ImportEnumLite defaultImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnumLite.IMPORT_LITE_BAR;

+    public bool HasDefaultImportEnum {

+      get { return hasDefaultImportEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportEnumLite DefaultImportEnum {

+      get { return defaultImportEnum_; }

+    }

+    

+    public const int DefaultStringPieceFieldNumber = 84;

+    private bool hasDefaultStringPiece;

+    private string defaultStringPiece_ = "abc";

+    public bool HasDefaultStringPiece {

+      get { return hasDefaultStringPiece; }

+    }

+    public string DefaultStringPiece {

+      get { return defaultStringPiece_; }

+    }

+    

+    public const int DefaultCordFieldNumber = 85;

+    private bool hasDefaultCord;

+    private string defaultCord_ = "123";

+    public bool HasDefaultCord {

+      get { return hasDefaultCord; }

+    }

+    public string DefaultCord {

+      get { return defaultCord_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testAllTypesLiteFieldNames;

+      if (hasOptionalInt32) {

+        output.WriteInt32(1, field_names[31], OptionalInt32);

+      }

+      if (hasOptionalInt64) {

+        output.WriteInt64(2, field_names[32], OptionalInt64);

+      }

+      if (hasOptionalUint32) {

+        output.WriteUInt32(3, field_names[41], OptionalUint32);

+      }

+      if (hasOptionalUint64) {

+        output.WriteUInt64(4, field_names[42], OptionalUint64);

+      }

+      if (hasOptionalSint32) {

+        output.WriteSInt32(5, field_names[37], OptionalSint32);

+      }

+      if (hasOptionalSint64) {

+        output.WriteSInt64(6, field_names[38], OptionalSint64);

+      }

+      if (hasOptionalFixed32) {

+        output.WriteFixed32(7, field_names[24], OptionalFixed32);

+      }

+      if (hasOptionalFixed64) {

+        output.WriteFixed64(8, field_names[25], OptionalFixed64);

+      }

+      if (hasOptionalSfixed32) {

+        output.WriteSFixed32(9, field_names[35], OptionalSfixed32);

+      }

+      if (hasOptionalSfixed64) {

+        output.WriteSFixed64(10, field_names[36], OptionalSfixed64);

+      }

+      if (hasOptionalFloat) {

+        output.WriteFloat(11, field_names[26], OptionalFloat);

+      }

+      if (hasOptionalDouble) {

+        output.WriteDouble(12, field_names[23], OptionalDouble);

+      }

+      if (hasOptionalBool) {

+        output.WriteBool(13, field_names[20], OptionalBool);

+      }

+      if (hasOptionalString) {

+        output.WriteString(14, field_names[39], OptionalString);

+      }

+      if (hasOptionalBytes) {

+        output.WriteBytes(15, field_names[21], OptionalBytes);

+      }

+      if (hasOptionalGroup) {

+        output.WriteGroup(16, field_names[43], OptionalGroup);

+      }

+      if (hasOptionalNestedMessage) {

+        output.WriteMessage(18, field_names[34], OptionalNestedMessage);

+      }

+      if (hasOptionalForeignMessage) {

+        output.WriteMessage(19, field_names[28], OptionalForeignMessage);

+      }

+      if (hasOptionalImportMessage) {

+        output.WriteMessage(20, field_names[30], OptionalImportMessage);

+      }

+      if (hasOptionalNestedEnum) {

+        output.WriteEnum(21, field_names[33], (int) OptionalNestedEnum, OptionalNestedEnum);

+      }

+      if (hasOptionalForeignEnum) {

+        output.WriteEnum(22, field_names[27], (int) OptionalForeignEnum, OptionalForeignEnum);

+      }

+      if (hasOptionalImportEnum) {

+        output.WriteEnum(23, field_names[29], (int) OptionalImportEnum, OptionalImportEnum);

+      }

+      if (hasOptionalStringPiece) {

+        output.WriteString(24, field_names[40], OptionalStringPiece);

+      }

+      if (hasOptionalCord) {

+        output.WriteString(25, field_names[22], OptionalCord);

+      }

+      if (repeatedInt32_.Count > 0) {

+        output.WriteInt32Array(31, field_names[55], repeatedInt32_);

+      }

+      if (repeatedInt64_.Count > 0) {

+        output.WriteInt64Array(32, field_names[56], repeatedInt64_);

+      }

+      if (repeatedUint32_.Count > 0) {

+        output.WriteUInt32Array(33, field_names[65], repeatedUint32_);

+      }

+      if (repeatedUint64_.Count > 0) {

+        output.WriteUInt64Array(34, field_names[66], repeatedUint64_);

+      }

+      if (repeatedSint32_.Count > 0) {

+        output.WriteSInt32Array(35, field_names[61], repeatedSint32_);

+      }

+      if (repeatedSint64_.Count > 0) {

+        output.WriteSInt64Array(36, field_names[62], repeatedSint64_);

+      }

+      if (repeatedFixed32_.Count > 0) {

+        output.WriteFixed32Array(37, field_names[48], repeatedFixed32_);

+      }

+      if (repeatedFixed64_.Count > 0) {

+        output.WriteFixed64Array(38, field_names[49], repeatedFixed64_);

+      }

+      if (repeatedSfixed32_.Count > 0) {

+        output.WriteSFixed32Array(39, field_names[59], repeatedSfixed32_);

+      }

+      if (repeatedSfixed64_.Count > 0) {

+        output.WriteSFixed64Array(40, field_names[60], repeatedSfixed64_);

+      }

+      if (repeatedFloat_.Count > 0) {

+        output.WriteFloatArray(41, field_names[50], repeatedFloat_);

+      }

+      if (repeatedDouble_.Count > 0) {

+        output.WriteDoubleArray(42, field_names[47], repeatedDouble_);

+      }

+      if (repeatedBool_.Count > 0) {

+        output.WriteBoolArray(43, field_names[44], repeatedBool_);

+      }

+      if (repeatedString_.Count > 0) {

+        output.WriteStringArray(44, field_names[63], repeatedString_);

+      }

+      if (repeatedBytes_.Count > 0) {

+        output.WriteBytesArray(45, field_names[45], repeatedBytes_);

+      }

+      if (repeatedGroup_.Count > 0) {

+        output.WriteGroupArray(46, field_names[67], repeatedGroup_);

+      }

+      if (repeatedNestedMessage_.Count > 0) {

+        output.WriteMessageArray(48, field_names[58], repeatedNestedMessage_);

+      }

+      if (repeatedForeignMessage_.Count > 0) {

+        output.WriteMessageArray(49, field_names[52], repeatedForeignMessage_);

+      }

+      if (repeatedImportMessage_.Count > 0) {

+        output.WriteMessageArray(50, field_names[54], repeatedImportMessage_);

+      }

+      if (repeatedNestedEnum_.Count > 0) {

+        output.WriteEnumArray(51, field_names[57], repeatedNestedEnum_);

+      }

+      if (repeatedForeignEnum_.Count > 0) {

+        output.WriteEnumArray(52, field_names[51], repeatedForeignEnum_);

+      }

+      if (repeatedImportEnum_.Count > 0) {

+        output.WriteEnumArray(53, field_names[53], repeatedImportEnum_);

+      }

+      if (repeatedStringPiece_.Count > 0) {

+        output.WriteStringArray(54, field_names[64], repeatedStringPiece_);

+      }

+      if (repeatedCord_.Count > 0) {

+        output.WriteStringArray(55, field_names[46], repeatedCord_);

+      }

+      if (hasDefaultInt32) {

+        output.WriteInt32(61, field_names[9], DefaultInt32);

+      }

+      if (hasDefaultInt64) {

+        output.WriteInt64(62, field_names[10], DefaultInt64);

+      }

+      if (hasDefaultUint32) {

+        output.WriteUInt32(63, field_names[18], DefaultUint32);

+      }

+      if (hasDefaultUint64) {

+        output.WriteUInt64(64, field_names[19], DefaultUint64);

+      }

+      if (hasDefaultSint32) {

+        output.WriteSInt32(65, field_names[14], DefaultSint32);

+      }

+      if (hasDefaultSint64) {

+        output.WriteSInt64(66, field_names[15], DefaultSint64);

+      }

+      if (hasDefaultFixed32) {

+        output.WriteFixed32(67, field_names[4], DefaultFixed32);

+      }

+      if (hasDefaultFixed64) {

+        output.WriteFixed64(68, field_names[5], DefaultFixed64);

+      }

+      if (hasDefaultSfixed32) {

+        output.WriteSFixed32(69, field_names[12], DefaultSfixed32);

+      }

+      if (hasDefaultSfixed64) {

+        output.WriteSFixed64(70, field_names[13], DefaultSfixed64);

+      }

+      if (hasDefaultFloat) {

+        output.WriteFloat(71, field_names[6], DefaultFloat);

+      }

+      if (hasDefaultDouble) {

+        output.WriteDouble(72, field_names[3], DefaultDouble);

+      }

+      if (hasDefaultBool) {

+        output.WriteBool(73, field_names[0], DefaultBool);

+      }

+      if (hasDefaultString) {

+        output.WriteString(74, field_names[16], DefaultString);

+      }

+      if (hasDefaultBytes) {

+        output.WriteBytes(75, field_names[1], DefaultBytes);

+      }

+      if (hasDefaultNestedEnum) {

+        output.WriteEnum(81, field_names[11], (int) DefaultNestedEnum, DefaultNestedEnum);

+      }

+      if (hasDefaultForeignEnum) {

+        output.WriteEnum(82, field_names[7], (int) DefaultForeignEnum, DefaultForeignEnum);

+      }

+      if (hasDefaultImportEnum) {

+        output.WriteEnum(83, field_names[8], (int) DefaultImportEnum, DefaultImportEnum);

+      }

+      if (hasDefaultStringPiece) {

+        output.WriteString(84, field_names[17], DefaultStringPiece);

+      }

+      if (hasDefaultCord) {

+        output.WriteString(85, field_names[2], DefaultCord);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasOptionalInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, OptionalInt32);

+      }

+      if (hasOptionalInt64) {

+        size += pb::CodedOutputStream.ComputeInt64Size(2, OptionalInt64);

+      }

+      if (hasOptionalUint32) {

+        size += pb::CodedOutputStream.ComputeUInt32Size(3, OptionalUint32);

+      }

+      if (hasOptionalUint64) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(4, OptionalUint64);

+      }

+      if (hasOptionalSint32) {

+        size += pb::CodedOutputStream.ComputeSInt32Size(5, OptionalSint32);

+      }

+      if (hasOptionalSint64) {

+        size += pb::CodedOutputStream.ComputeSInt64Size(6, OptionalSint64);

+      }

+      if (hasOptionalFixed32) {

+        size += pb::CodedOutputStream.ComputeFixed32Size(7, OptionalFixed32);

+      }

+      if (hasOptionalFixed64) {

+        size += pb::CodedOutputStream.ComputeFixed64Size(8, OptionalFixed64);

+      }

+      if (hasOptionalSfixed32) {

+        size += pb::CodedOutputStream.ComputeSFixed32Size(9, OptionalSfixed32);

+      }

+      if (hasOptionalSfixed64) {

+        size += pb::CodedOutputStream.ComputeSFixed64Size(10, OptionalSfixed64);

+      }

+      if (hasOptionalFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(11, OptionalFloat);

+      }

+      if (hasOptionalDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(12, OptionalDouble);

+      }

+      if (hasOptionalBool) {

+        size += pb::CodedOutputStream.ComputeBoolSize(13, OptionalBool);

+      }

+      if (hasOptionalString) {

+        size += pb::CodedOutputStream.ComputeStringSize(14, OptionalString);

+      }

+      if (hasOptionalBytes) {

+        size += pb::CodedOutputStream.ComputeBytesSize(15, OptionalBytes);

+      }

+      if (hasOptionalGroup) {

+        size += pb::CodedOutputStream.ComputeGroupSize(16, OptionalGroup);

+      }

+      if (hasOptionalNestedMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(18, OptionalNestedMessage);

+      }

+      if (hasOptionalForeignMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(19, OptionalForeignMessage);

+      }

+      if (hasOptionalImportMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(20, OptionalImportMessage);

+      }

+      if (hasOptionalNestedEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(21, (int) OptionalNestedEnum);

+      }

+      if (hasOptionalForeignEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(22, (int) OptionalForeignEnum);

+      }

+      if (hasOptionalImportEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(23, (int) OptionalImportEnum);

+      }

+      if (hasOptionalStringPiece) {

+        size += pb::CodedOutputStream.ComputeStringSize(24, OptionalStringPiece);

+      }

+      if (hasOptionalCord) {

+        size += pb::CodedOutputStream.ComputeStringSize(25, OptionalCord);

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedInt32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in RepeatedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedInt64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (uint element in RepeatedUint32List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedUint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in RepeatedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedUint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedSint32List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedSint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in RepeatedSint64List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedSint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFixed32_.Count;

+        size += dataSize;

+        size += 2 * repeatedFixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedFixed64_.Count;

+        size += dataSize;

+        size += 2 * repeatedFixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedSfixed32_.Count;

+        size += dataSize;

+        size += 2 * repeatedSfixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedSfixed64_.Count;

+        size += dataSize;

+        size += 2 * repeatedSfixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFloat_.Count;

+        size += dataSize;

+        size += 2 * repeatedFloat_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedDouble_.Count;

+        size += dataSize;

+        size += 2 * repeatedDouble_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 1 * repeatedBool_.Count;

+        size += dataSize;

+        size += 2 * repeatedBool_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedString_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (pb::ByteString element in RepeatedBytesList) {

+          dataSize += pb::CodedOutputStream.ComputeBytesSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedBytes_.Count;

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup element in RepeatedGroupList) {

+        size += pb::CodedOutputStream.ComputeGroupSize(46, element);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage element in RepeatedNestedMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(48, element);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite element in RepeatedForeignMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(49, element);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.ImportMessageLite element in RepeatedImportMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(50, element);

+      }

+      {

+        int dataSize = 0;

+        if (repeatedNestedEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum element in repeatedNestedEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * repeatedNestedEnum_.Count;

+        }

+      }

+      {

+        int dataSize = 0;

+        if (repeatedForeignEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite element in repeatedForeignEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * repeatedForeignEnum_.Count;

+        }

+      }

+      {

+        int dataSize = 0;

+        if (repeatedImportEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ImportEnumLite element in repeatedImportEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * repeatedImportEnum_.Count;

+        }

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringPieceList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedStringPiece_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedCordList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedCord_.Count;

+      }

+      if (hasDefaultInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(61, DefaultInt32);

+      }

+      if (hasDefaultInt64) {

+        size += pb::CodedOutputStream.ComputeInt64Size(62, DefaultInt64);

+      }

+      if (hasDefaultUint32) {

+        size += pb::CodedOutputStream.ComputeUInt32Size(63, DefaultUint32);

+      }

+      if (hasDefaultUint64) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(64, DefaultUint64);

+      }

+      if (hasDefaultSint32) {

+        size += pb::CodedOutputStream.ComputeSInt32Size(65, DefaultSint32);

+      }

+      if (hasDefaultSint64) {

+        size += pb::CodedOutputStream.ComputeSInt64Size(66, DefaultSint64);

+      }

+      if (hasDefaultFixed32) {

+        size += pb::CodedOutputStream.ComputeFixed32Size(67, DefaultFixed32);

+      }

+      if (hasDefaultFixed64) {

+        size += pb::CodedOutputStream.ComputeFixed64Size(68, DefaultFixed64);

+      }

+      if (hasDefaultSfixed32) {

+        size += pb::CodedOutputStream.ComputeSFixed32Size(69, DefaultSfixed32);

+      }

+      if (hasDefaultSfixed64) {

+        size += pb::CodedOutputStream.ComputeSFixed64Size(70, DefaultSfixed64);

+      }

+      if (hasDefaultFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(71, DefaultFloat);

+      }

+      if (hasDefaultDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(72, DefaultDouble);

+      }

+      if (hasDefaultBool) {

+        size += pb::CodedOutputStream.ComputeBoolSize(73, DefaultBool);

+      }

+      if (hasDefaultString) {

+        size += pb::CodedOutputStream.ComputeStringSize(74, DefaultString);

+      }

+      if (hasDefaultBytes) {

+        size += pb::CodedOutputStream.ComputeBytesSize(75, DefaultBytes);

+      }

+      if (hasDefaultNestedEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(81, (int) DefaultNestedEnum);

+      }

+      if (hasDefaultForeignEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(82, (int) DefaultForeignEnum);

+      }

+      if (hasDefaultImportEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(83, (int) DefaultImportEnum);

+      }

+      if (hasDefaultStringPiece) {

+        size += pb::CodedOutputStream.ComputeStringSize(84, DefaultStringPiece);

+      }

+      if (hasDefaultCord) {

+        size += pb::CodedOutputStream.ComputeStringSize(85, DefaultCord);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      if (hasOptionalInt32) hash ^= optionalInt32_.GetHashCode();

+      if (hasOptionalInt64) hash ^= optionalInt64_.GetHashCode();

+      if (hasOptionalUint32) hash ^= optionalUint32_.GetHashCode();

+      if (hasOptionalUint64) hash ^= optionalUint64_.GetHashCode();

+      if (hasOptionalSint32) hash ^= optionalSint32_.GetHashCode();

+      if (hasOptionalSint64) hash ^= optionalSint64_.GetHashCode();

+      if (hasOptionalFixed32) hash ^= optionalFixed32_.GetHashCode();

+      if (hasOptionalFixed64) hash ^= optionalFixed64_.GetHashCode();

+      if (hasOptionalSfixed32) hash ^= optionalSfixed32_.GetHashCode();

+      if (hasOptionalSfixed64) hash ^= optionalSfixed64_.GetHashCode();

+      if (hasOptionalFloat) hash ^= optionalFloat_.GetHashCode();

+      if (hasOptionalDouble) hash ^= optionalDouble_.GetHashCode();

+      if (hasOptionalBool) hash ^= optionalBool_.GetHashCode();

+      if (hasOptionalString) hash ^= optionalString_.GetHashCode();

+      if (hasOptionalBytes) hash ^= optionalBytes_.GetHashCode();

+      if (hasOptionalGroup) hash ^= optionalGroup_.GetHashCode();

+      if (hasOptionalNestedMessage) hash ^= optionalNestedMessage_.GetHashCode();

+      if (hasOptionalForeignMessage) hash ^= optionalForeignMessage_.GetHashCode();

+      if (hasOptionalImportMessage) hash ^= optionalImportMessage_.GetHashCode();

+      if (hasOptionalNestedEnum) hash ^= optionalNestedEnum_.GetHashCode();

+      if (hasOptionalForeignEnum) hash ^= optionalForeignEnum_.GetHashCode();

+      if (hasOptionalImportEnum) hash ^= optionalImportEnum_.GetHashCode();

+      if (hasOptionalStringPiece) hash ^= optionalStringPiece_.GetHashCode();

+      if (hasOptionalCord) hash ^= optionalCord_.GetHashCode();

+      foreach(int i in repeatedInt32_)

+        hash ^= i.GetHashCode();

+      foreach(long i in repeatedInt64_)

+        hash ^= i.GetHashCode();

+      foreach(uint i in repeatedUint32_)

+        hash ^= i.GetHashCode();

+      foreach(ulong i in repeatedUint64_)

+        hash ^= i.GetHashCode();

+      foreach(int i in repeatedSint32_)

+        hash ^= i.GetHashCode();

+      foreach(long i in repeatedSint64_)

+        hash ^= i.GetHashCode();

+      foreach(uint i in repeatedFixed32_)

+        hash ^= i.GetHashCode();

+      foreach(ulong i in repeatedFixed64_)

+        hash ^= i.GetHashCode();

+      foreach(int i in repeatedSfixed32_)

+        hash ^= i.GetHashCode();

+      foreach(long i in repeatedSfixed64_)

+        hash ^= i.GetHashCode();

+      foreach(float i in repeatedFloat_)

+        hash ^= i.GetHashCode();

+      foreach(double i in repeatedDouble_)

+        hash ^= i.GetHashCode();

+      foreach(bool i in repeatedBool_)

+        hash ^= i.GetHashCode();

+      foreach(string i in repeatedString_)

+        hash ^= i.GetHashCode();

+      foreach(pb::ByteString i in repeatedBytes_)

+        hash ^= i.GetHashCode();

+      foreach(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup i in repeatedGroup_)

+        hash ^= i.GetHashCode();

+      foreach(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage i in repeatedNestedMessage_)

+        hash ^= i.GetHashCode();

+      foreach(global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite i in repeatedForeignMessage_)

+        hash ^= i.GetHashCode();

+      foreach(global::Google.ProtocolBuffers.TestProtos.ImportMessageLite i in repeatedImportMessage_)

+        hash ^= i.GetHashCode();

+      foreach(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum i in repeatedNestedEnum_)

+        hash ^= i.GetHashCode();

+      foreach(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite i in repeatedForeignEnum_)

+        hash ^= i.GetHashCode();

+      foreach(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite i in repeatedImportEnum_)

+        hash ^= i.GetHashCode();

+      foreach(string i in repeatedStringPiece_)

+        hash ^= i.GetHashCode();

+      foreach(string i in repeatedCord_)

+        hash ^= i.GetHashCode();

+      if (hasDefaultInt32) hash ^= defaultInt32_.GetHashCode();

+      if (hasDefaultInt64) hash ^= defaultInt64_.GetHashCode();

+      if (hasDefaultUint32) hash ^= defaultUint32_.GetHashCode();

+      if (hasDefaultUint64) hash ^= defaultUint64_.GetHashCode();

+      if (hasDefaultSint32) hash ^= defaultSint32_.GetHashCode();

+      if (hasDefaultSint64) hash ^= defaultSint64_.GetHashCode();

+      if (hasDefaultFixed32) hash ^= defaultFixed32_.GetHashCode();

+      if (hasDefaultFixed64) hash ^= defaultFixed64_.GetHashCode();

+      if (hasDefaultSfixed32) hash ^= defaultSfixed32_.GetHashCode();

+      if (hasDefaultSfixed64) hash ^= defaultSfixed64_.GetHashCode();

+      if (hasDefaultFloat) hash ^= defaultFloat_.GetHashCode();

+      if (hasDefaultDouble) hash ^= defaultDouble_.GetHashCode();

+      if (hasDefaultBool) hash ^= defaultBool_.GetHashCode();

+      if (hasDefaultString) hash ^= defaultString_.GetHashCode();

+      if (hasDefaultBytes) hash ^= defaultBytes_.GetHashCode();

+      if (hasDefaultNestedEnum) hash ^= defaultNestedEnum_.GetHashCode();

+      if (hasDefaultForeignEnum) hash ^= defaultForeignEnum_.GetHashCode();

+      if (hasDefaultImportEnum) hash ^= defaultImportEnum_.GetHashCode();

+      if (hasDefaultStringPiece) hash ^= defaultStringPiece_.GetHashCode();

+      if (hasDefaultCord) hash ^= defaultCord_.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      TestAllTypesLite other = obj as TestAllTypesLite;

+      if (other == null) return false;

+      if (hasOptionalInt32 != other.hasOptionalInt32 || (hasOptionalInt32 && !optionalInt32_.Equals(other.optionalInt32_))) return false;

+      if (hasOptionalInt64 != other.hasOptionalInt64 || (hasOptionalInt64 && !optionalInt64_.Equals(other.optionalInt64_))) return false;

+      if (hasOptionalUint32 != other.hasOptionalUint32 || (hasOptionalUint32 && !optionalUint32_.Equals(other.optionalUint32_))) return false;

+      if (hasOptionalUint64 != other.hasOptionalUint64 || (hasOptionalUint64 && !optionalUint64_.Equals(other.optionalUint64_))) return false;

+      if (hasOptionalSint32 != other.hasOptionalSint32 || (hasOptionalSint32 && !optionalSint32_.Equals(other.optionalSint32_))) return false;

+      if (hasOptionalSint64 != other.hasOptionalSint64 || (hasOptionalSint64 && !optionalSint64_.Equals(other.optionalSint64_))) return false;

+      if (hasOptionalFixed32 != other.hasOptionalFixed32 || (hasOptionalFixed32 && !optionalFixed32_.Equals(other.optionalFixed32_))) return false;

+      if (hasOptionalFixed64 != other.hasOptionalFixed64 || (hasOptionalFixed64 && !optionalFixed64_.Equals(other.optionalFixed64_))) return false;

+      if (hasOptionalSfixed32 != other.hasOptionalSfixed32 || (hasOptionalSfixed32 && !optionalSfixed32_.Equals(other.optionalSfixed32_))) return false;

+      if (hasOptionalSfixed64 != other.hasOptionalSfixed64 || (hasOptionalSfixed64 && !optionalSfixed64_.Equals(other.optionalSfixed64_))) return false;

+      if (hasOptionalFloat != other.hasOptionalFloat || (hasOptionalFloat && !optionalFloat_.Equals(other.optionalFloat_))) return false;

+      if (hasOptionalDouble != other.hasOptionalDouble || (hasOptionalDouble && !optionalDouble_.Equals(other.optionalDouble_))) return false;

+      if (hasOptionalBool != other.hasOptionalBool || (hasOptionalBool && !optionalBool_.Equals(other.optionalBool_))) return false;

+      if (hasOptionalString != other.hasOptionalString || (hasOptionalString && !optionalString_.Equals(other.optionalString_))) return false;

+      if (hasOptionalBytes != other.hasOptionalBytes || (hasOptionalBytes && !optionalBytes_.Equals(other.optionalBytes_))) return false;

+      if (hasOptionalGroup != other.hasOptionalGroup || (hasOptionalGroup && !optionalGroup_.Equals(other.optionalGroup_))) return false;

+      if (hasOptionalNestedMessage != other.hasOptionalNestedMessage || (hasOptionalNestedMessage && !optionalNestedMessage_.Equals(other.optionalNestedMessage_))) return false;

+      if (hasOptionalForeignMessage != other.hasOptionalForeignMessage || (hasOptionalForeignMessage && !optionalForeignMessage_.Equals(other.optionalForeignMessage_))) return false;

+      if (hasOptionalImportMessage != other.hasOptionalImportMessage || (hasOptionalImportMessage && !optionalImportMessage_.Equals(other.optionalImportMessage_))) return false;

+      if (hasOptionalNestedEnum != other.hasOptionalNestedEnum || (hasOptionalNestedEnum && !optionalNestedEnum_.Equals(other.optionalNestedEnum_))) return false;

+      if (hasOptionalForeignEnum != other.hasOptionalForeignEnum || (hasOptionalForeignEnum && !optionalForeignEnum_.Equals(other.optionalForeignEnum_))) return false;

+      if (hasOptionalImportEnum != other.hasOptionalImportEnum || (hasOptionalImportEnum && !optionalImportEnum_.Equals(other.optionalImportEnum_))) return false;

+      if (hasOptionalStringPiece != other.hasOptionalStringPiece || (hasOptionalStringPiece && !optionalStringPiece_.Equals(other.optionalStringPiece_))) return false;

+      if (hasOptionalCord != other.hasOptionalCord || (hasOptionalCord && !optionalCord_.Equals(other.optionalCord_))) return false;

+      if(repeatedInt32_.Count != other.repeatedInt32_.Count) return false;

+      for(int ix=0; ix < repeatedInt32_.Count; ix++)

+        if(!repeatedInt32_[ix].Equals(other.repeatedInt32_[ix])) return false;

+      if(repeatedInt64_.Count != other.repeatedInt64_.Count) return false;

+      for(int ix=0; ix < repeatedInt64_.Count; ix++)

+        if(!repeatedInt64_[ix].Equals(other.repeatedInt64_[ix])) return false;

+      if(repeatedUint32_.Count != other.repeatedUint32_.Count) return false;

+      for(int ix=0; ix < repeatedUint32_.Count; ix++)

+        if(!repeatedUint32_[ix].Equals(other.repeatedUint32_[ix])) return false;

+      if(repeatedUint64_.Count != other.repeatedUint64_.Count) return false;

+      for(int ix=0; ix < repeatedUint64_.Count; ix++)

+        if(!repeatedUint64_[ix].Equals(other.repeatedUint64_[ix])) return false;

+      if(repeatedSint32_.Count != other.repeatedSint32_.Count) return false;

+      for(int ix=0; ix < repeatedSint32_.Count; ix++)

+        if(!repeatedSint32_[ix].Equals(other.repeatedSint32_[ix])) return false;

+      if(repeatedSint64_.Count != other.repeatedSint64_.Count) return false;

+      for(int ix=0; ix < repeatedSint64_.Count; ix++)

+        if(!repeatedSint64_[ix].Equals(other.repeatedSint64_[ix])) return false;

+      if(repeatedFixed32_.Count != other.repeatedFixed32_.Count) return false;

+      for(int ix=0; ix < repeatedFixed32_.Count; ix++)

+        if(!repeatedFixed32_[ix].Equals(other.repeatedFixed32_[ix])) return false;

+      if(repeatedFixed64_.Count != other.repeatedFixed64_.Count) return false;

+      for(int ix=0; ix < repeatedFixed64_.Count; ix++)

+        if(!repeatedFixed64_[ix].Equals(other.repeatedFixed64_[ix])) return false;

+      if(repeatedSfixed32_.Count != other.repeatedSfixed32_.Count) return false;

+      for(int ix=0; ix < repeatedSfixed32_.Count; ix++)

+        if(!repeatedSfixed32_[ix].Equals(other.repeatedSfixed32_[ix])) return false;

+      if(repeatedSfixed64_.Count != other.repeatedSfixed64_.Count) return false;

+      for(int ix=0; ix < repeatedSfixed64_.Count; ix++)

+        if(!repeatedSfixed64_[ix].Equals(other.repeatedSfixed64_[ix])) return false;

+      if(repeatedFloat_.Count != other.repeatedFloat_.Count) return false;

+      for(int ix=0; ix < repeatedFloat_.Count; ix++)

+        if(!repeatedFloat_[ix].Equals(other.repeatedFloat_[ix])) return false;

+      if(repeatedDouble_.Count != other.repeatedDouble_.Count) return false;

+      for(int ix=0; ix < repeatedDouble_.Count; ix++)

+        if(!repeatedDouble_[ix].Equals(other.repeatedDouble_[ix])) return false;

+      if(repeatedBool_.Count != other.repeatedBool_.Count) return false;

+      for(int ix=0; ix < repeatedBool_.Count; ix++)

+        if(!repeatedBool_[ix].Equals(other.repeatedBool_[ix])) return false;

+      if(repeatedString_.Count != other.repeatedString_.Count) return false;

+      for(int ix=0; ix < repeatedString_.Count; ix++)

+        if(!repeatedString_[ix].Equals(other.repeatedString_[ix])) return false;

+      if(repeatedBytes_.Count != other.repeatedBytes_.Count) return false;

+      for(int ix=0; ix < repeatedBytes_.Count; ix++)

+        if(!repeatedBytes_[ix].Equals(other.repeatedBytes_[ix])) return false;

+      if(repeatedGroup_.Count != other.repeatedGroup_.Count) return false;

+      for(int ix=0; ix < repeatedGroup_.Count; ix++)

+        if(!repeatedGroup_[ix].Equals(other.repeatedGroup_[ix])) return false;

+      if(repeatedNestedMessage_.Count != other.repeatedNestedMessage_.Count) return false;

+      for(int ix=0; ix < repeatedNestedMessage_.Count; ix++)

+        if(!repeatedNestedMessage_[ix].Equals(other.repeatedNestedMessage_[ix])) return false;

+      if(repeatedForeignMessage_.Count != other.repeatedForeignMessage_.Count) return false;

+      for(int ix=0; ix < repeatedForeignMessage_.Count; ix++)

+        if(!repeatedForeignMessage_[ix].Equals(other.repeatedForeignMessage_[ix])) return false;

+      if(repeatedImportMessage_.Count != other.repeatedImportMessage_.Count) return false;

+      for(int ix=0; ix < repeatedImportMessage_.Count; ix++)

+        if(!repeatedImportMessage_[ix].Equals(other.repeatedImportMessage_[ix])) return false;

+      if(repeatedNestedEnum_.Count != other.repeatedNestedEnum_.Count) return false;

+      for(int ix=0; ix < repeatedNestedEnum_.Count; ix++)

+        if(!repeatedNestedEnum_[ix].Equals(other.repeatedNestedEnum_[ix])) return false;

+      if(repeatedForeignEnum_.Count != other.repeatedForeignEnum_.Count) return false;

+      for(int ix=0; ix < repeatedForeignEnum_.Count; ix++)

+        if(!repeatedForeignEnum_[ix].Equals(other.repeatedForeignEnum_[ix])) return false;

+      if(repeatedImportEnum_.Count != other.repeatedImportEnum_.Count) return false;

+      for(int ix=0; ix < repeatedImportEnum_.Count; ix++)

+        if(!repeatedImportEnum_[ix].Equals(other.repeatedImportEnum_[ix])) return false;

+      if(repeatedStringPiece_.Count != other.repeatedStringPiece_.Count) return false;

+      for(int ix=0; ix < repeatedStringPiece_.Count; ix++)

+        if(!repeatedStringPiece_[ix].Equals(other.repeatedStringPiece_[ix])) return false;

+      if(repeatedCord_.Count != other.repeatedCord_.Count) return false;

+      for(int ix=0; ix < repeatedCord_.Count; ix++)

+        if(!repeatedCord_[ix].Equals(other.repeatedCord_[ix])) return false;

+      if (hasDefaultInt32 != other.hasDefaultInt32 || (hasDefaultInt32 && !defaultInt32_.Equals(other.defaultInt32_))) return false;

+      if (hasDefaultInt64 != other.hasDefaultInt64 || (hasDefaultInt64 && !defaultInt64_.Equals(other.defaultInt64_))) return false;

+      if (hasDefaultUint32 != other.hasDefaultUint32 || (hasDefaultUint32 && !defaultUint32_.Equals(other.defaultUint32_))) return false;

+      if (hasDefaultUint64 != other.hasDefaultUint64 || (hasDefaultUint64 && !defaultUint64_.Equals(other.defaultUint64_))) return false;

+      if (hasDefaultSint32 != other.hasDefaultSint32 || (hasDefaultSint32 && !defaultSint32_.Equals(other.defaultSint32_))) return false;

+      if (hasDefaultSint64 != other.hasDefaultSint64 || (hasDefaultSint64 && !defaultSint64_.Equals(other.defaultSint64_))) return false;

+      if (hasDefaultFixed32 != other.hasDefaultFixed32 || (hasDefaultFixed32 && !defaultFixed32_.Equals(other.defaultFixed32_))) return false;

+      if (hasDefaultFixed64 != other.hasDefaultFixed64 || (hasDefaultFixed64 && !defaultFixed64_.Equals(other.defaultFixed64_))) return false;

+      if (hasDefaultSfixed32 != other.hasDefaultSfixed32 || (hasDefaultSfixed32 && !defaultSfixed32_.Equals(other.defaultSfixed32_))) return false;

+      if (hasDefaultSfixed64 != other.hasDefaultSfixed64 || (hasDefaultSfixed64 && !defaultSfixed64_.Equals(other.defaultSfixed64_))) return false;

+      if (hasDefaultFloat != other.hasDefaultFloat || (hasDefaultFloat && !defaultFloat_.Equals(other.defaultFloat_))) return false;

+      if (hasDefaultDouble != other.hasDefaultDouble || (hasDefaultDouble && !defaultDouble_.Equals(other.defaultDouble_))) return false;

+      if (hasDefaultBool != other.hasDefaultBool || (hasDefaultBool && !defaultBool_.Equals(other.defaultBool_))) return false;

+      if (hasDefaultString != other.hasDefaultString || (hasDefaultString && !defaultString_.Equals(other.defaultString_))) return false;

+      if (hasDefaultBytes != other.hasDefaultBytes || (hasDefaultBytes && !defaultBytes_.Equals(other.defaultBytes_))) return false;

+      if (hasDefaultNestedEnum != other.hasDefaultNestedEnum || (hasDefaultNestedEnum && !defaultNestedEnum_.Equals(other.defaultNestedEnum_))) return false;

+      if (hasDefaultForeignEnum != other.hasDefaultForeignEnum || (hasDefaultForeignEnum && !defaultForeignEnum_.Equals(other.defaultForeignEnum_))) return false;

+      if (hasDefaultImportEnum != other.hasDefaultImportEnum || (hasDefaultImportEnum && !defaultImportEnum_.Equals(other.defaultImportEnum_))) return false;

+      if (hasDefaultStringPiece != other.hasDefaultStringPiece || (hasDefaultStringPiece && !defaultStringPiece_.Equals(other.defaultStringPiece_))) return false;

+      if (hasDefaultCord != other.hasDefaultCord || (hasDefaultCord && !defaultCord_.Equals(other.defaultCord_))) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("optional_int32", hasOptionalInt32, optionalInt32_, writer);

+      PrintField("optional_int64", hasOptionalInt64, optionalInt64_, writer);

+      PrintField("optional_uint32", hasOptionalUint32, optionalUint32_, writer);

+      PrintField("optional_uint64", hasOptionalUint64, optionalUint64_, writer);

+      PrintField("optional_sint32", hasOptionalSint32, optionalSint32_, writer);

+      PrintField("optional_sint64", hasOptionalSint64, optionalSint64_, writer);

+      PrintField("optional_fixed32", hasOptionalFixed32, optionalFixed32_, writer);

+      PrintField("optional_fixed64", hasOptionalFixed64, optionalFixed64_, writer);

+      PrintField("optional_sfixed32", hasOptionalSfixed32, optionalSfixed32_, writer);

+      PrintField("optional_sfixed64", hasOptionalSfixed64, optionalSfixed64_, writer);

+      PrintField("optional_float", hasOptionalFloat, optionalFloat_, writer);

+      PrintField("optional_double", hasOptionalDouble, optionalDouble_, writer);

+      PrintField("optional_bool", hasOptionalBool, optionalBool_, writer);

+      PrintField("optional_string", hasOptionalString, optionalString_, writer);

+      PrintField("optional_bytes", hasOptionalBytes, optionalBytes_, writer);

+      PrintField("OptionalGroup", hasOptionalGroup, optionalGroup_, writer);

+      PrintField("optional_nested_message", hasOptionalNestedMessage, optionalNestedMessage_, writer);

+      PrintField("optional_foreign_message", hasOptionalForeignMessage, optionalForeignMessage_, writer);

+      PrintField("optional_import_message", hasOptionalImportMessage, optionalImportMessage_, writer);

+      PrintField("optional_nested_enum", hasOptionalNestedEnum, optionalNestedEnum_, writer);

+      PrintField("optional_foreign_enum", hasOptionalForeignEnum, optionalForeignEnum_, writer);

+      PrintField("optional_import_enum", hasOptionalImportEnum, optionalImportEnum_, writer);

+      PrintField("optional_string_piece", hasOptionalStringPiece, optionalStringPiece_, writer);

+      PrintField("optional_cord", hasOptionalCord, optionalCord_, writer);

+      PrintField("repeated_int32", repeatedInt32_, writer);

+      PrintField("repeated_int64", repeatedInt64_, writer);

+      PrintField("repeated_uint32", repeatedUint32_, writer);

+      PrintField("repeated_uint64", repeatedUint64_, writer);

+      PrintField("repeated_sint32", repeatedSint32_, writer);

+      PrintField("repeated_sint64", repeatedSint64_, writer);

+      PrintField("repeated_fixed32", repeatedFixed32_, writer);

+      PrintField("repeated_fixed64", repeatedFixed64_, writer);

+      PrintField("repeated_sfixed32", repeatedSfixed32_, writer);

+      PrintField("repeated_sfixed64", repeatedSfixed64_, writer);

+      PrintField("repeated_float", repeatedFloat_, writer);

+      PrintField("repeated_double", repeatedDouble_, writer);

+      PrintField("repeated_bool", repeatedBool_, writer);

+      PrintField("repeated_string", repeatedString_, writer);

+      PrintField("repeated_bytes", repeatedBytes_, writer);

+      PrintField("RepeatedGroup", repeatedGroup_, writer);

+      PrintField("repeated_nested_message", repeatedNestedMessage_, writer);

+      PrintField("repeated_foreign_message", repeatedForeignMessage_, writer);

+      PrintField("repeated_import_message", repeatedImportMessage_, writer);

+      PrintField("repeated_nested_enum", repeatedNestedEnum_, writer);

+      PrintField("repeated_foreign_enum", repeatedForeignEnum_, writer);

+      PrintField("repeated_import_enum", repeatedImportEnum_, writer);

+      PrintField("repeated_string_piece", repeatedStringPiece_, writer);

+      PrintField("repeated_cord", repeatedCord_, writer);

+      PrintField("default_int32", hasDefaultInt32, defaultInt32_, writer);

+      PrintField("default_int64", hasDefaultInt64, defaultInt64_, writer);

+      PrintField("default_uint32", hasDefaultUint32, defaultUint32_, writer);

+      PrintField("default_uint64", hasDefaultUint64, defaultUint64_, writer);

+      PrintField("default_sint32", hasDefaultSint32, defaultSint32_, writer);

+      PrintField("default_sint64", hasDefaultSint64, defaultSint64_, writer);

+      PrintField("default_fixed32", hasDefaultFixed32, defaultFixed32_, writer);

+      PrintField("default_fixed64", hasDefaultFixed64, defaultFixed64_, writer);

+      PrintField("default_sfixed32", hasDefaultSfixed32, defaultSfixed32_, writer);

+      PrintField("default_sfixed64", hasDefaultSfixed64, defaultSfixed64_, writer);

+      PrintField("default_float", hasDefaultFloat, defaultFloat_, writer);

+      PrintField("default_double", hasDefaultDouble, defaultDouble_, writer);

+      PrintField("default_bool", hasDefaultBool, defaultBool_, writer);

+      PrintField("default_string", hasDefaultString, defaultString_, writer);

+      PrintField("default_bytes", hasDefaultBytes, defaultBytes_, writer);

+      PrintField("default_nested_enum", hasDefaultNestedEnum, defaultNestedEnum_, writer);

+      PrintField("default_foreign_enum", hasDefaultForeignEnum, defaultForeignEnum_, writer);

+      PrintField("default_import_enum", hasDefaultImportEnum, defaultImportEnum_, writer);

+      PrintField("default_string_piece", hasDefaultStringPiece, defaultStringPiece_, writer);

+      PrintField("default_cord", hasDefaultCord, defaultCord_, writer);

+    }

+    #endregion

+    

+    public static TestAllTypesLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllTypesLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllTypesLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllTypesLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllTypesLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllTypesLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllTypesLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestAllTypesLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestAllTypesLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllTypesLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestAllTypesLite MakeReadOnly() {

+      repeatedInt32_.MakeReadOnly();

+      repeatedInt64_.MakeReadOnly();

+      repeatedUint32_.MakeReadOnly();

+      repeatedUint64_.MakeReadOnly();

+      repeatedSint32_.MakeReadOnly();

+      repeatedSint64_.MakeReadOnly();

+      repeatedFixed32_.MakeReadOnly();

+      repeatedFixed64_.MakeReadOnly();

+      repeatedSfixed32_.MakeReadOnly();

+      repeatedSfixed64_.MakeReadOnly();

+      repeatedFloat_.MakeReadOnly();

+      repeatedDouble_.MakeReadOnly();

+      repeatedBool_.MakeReadOnly();

+      repeatedString_.MakeReadOnly();

+      repeatedBytes_.MakeReadOnly();

+      repeatedGroup_.MakeReadOnly();

+      repeatedNestedMessage_.MakeReadOnly();

+      repeatedForeignMessage_.MakeReadOnly();

+      repeatedImportMessage_.MakeReadOnly();

+      repeatedNestedEnum_.MakeReadOnly();

+      repeatedForeignEnum_.MakeReadOnly();

+      repeatedImportEnum_.MakeReadOnly();

+      repeatedStringPiece_.MakeReadOnly();

+      repeatedCord_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestAllTypesLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<TestAllTypesLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestAllTypesLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestAllTypesLite result;

+      

+      private TestAllTypesLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestAllTypesLite original = result;

+          result = new TestAllTypesLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestAllTypesLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override TestAllTypesLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance; }

+      }

+      

+      public override TestAllTypesLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is TestAllTypesLite) {

+          return MergeFrom((TestAllTypesLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestAllTypesLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasOptionalInt32) {

+          OptionalInt32 = other.OptionalInt32;

+        }

+        if (other.HasOptionalInt64) {

+          OptionalInt64 = other.OptionalInt64;

+        }

+        if (other.HasOptionalUint32) {

+          OptionalUint32 = other.OptionalUint32;

+        }

+        if (other.HasOptionalUint64) {

+          OptionalUint64 = other.OptionalUint64;

+        }

+        if (other.HasOptionalSint32) {

+          OptionalSint32 = other.OptionalSint32;

+        }

+        if (other.HasOptionalSint64) {

+          OptionalSint64 = other.OptionalSint64;

+        }

+        if (other.HasOptionalFixed32) {

+          OptionalFixed32 = other.OptionalFixed32;

+        }

+        if (other.HasOptionalFixed64) {

+          OptionalFixed64 = other.OptionalFixed64;

+        }

+        if (other.HasOptionalSfixed32) {

+          OptionalSfixed32 = other.OptionalSfixed32;

+        }

+        if (other.HasOptionalSfixed64) {

+          OptionalSfixed64 = other.OptionalSfixed64;

+        }

+        if (other.HasOptionalFloat) {

+          OptionalFloat = other.OptionalFloat;

+        }

+        if (other.HasOptionalDouble) {

+          OptionalDouble = other.OptionalDouble;

+        }

+        if (other.HasOptionalBool) {

+          OptionalBool = other.OptionalBool;

+        }

+        if (other.HasOptionalString) {

+          OptionalString = other.OptionalString;

+        }

+        if (other.HasOptionalBytes) {

+          OptionalBytes = other.OptionalBytes;

+        }

+        if (other.HasOptionalGroup) {

+          MergeOptionalGroup(other.OptionalGroup);

+        }

+        if (other.HasOptionalNestedMessage) {

+          MergeOptionalNestedMessage(other.OptionalNestedMessage);

+        }

+        if (other.HasOptionalForeignMessage) {

+          MergeOptionalForeignMessage(other.OptionalForeignMessage);

+        }

+        if (other.HasOptionalImportMessage) {

+          MergeOptionalImportMessage(other.OptionalImportMessage);

+        }

+        if (other.HasOptionalNestedEnum) {

+          OptionalNestedEnum = other.OptionalNestedEnum;

+        }

+        if (other.HasOptionalForeignEnum) {

+          OptionalForeignEnum = other.OptionalForeignEnum;

+        }

+        if (other.HasOptionalImportEnum) {

+          OptionalImportEnum = other.OptionalImportEnum;

+        }

+        if (other.HasOptionalStringPiece) {

+          OptionalStringPiece = other.OptionalStringPiece;

+        }

+        if (other.HasOptionalCord) {

+          OptionalCord = other.OptionalCord;

+        }

+        if (other.repeatedInt32_.Count != 0) {

+          result.repeatedInt32_.Add(other.repeatedInt32_);

+        }

+        if (other.repeatedInt64_.Count != 0) {

+          result.repeatedInt64_.Add(other.repeatedInt64_);

+        }

+        if (other.repeatedUint32_.Count != 0) {

+          result.repeatedUint32_.Add(other.repeatedUint32_);

+        }

+        if (other.repeatedUint64_.Count != 0) {

+          result.repeatedUint64_.Add(other.repeatedUint64_);

+        }

+        if (other.repeatedSint32_.Count != 0) {

+          result.repeatedSint32_.Add(other.repeatedSint32_);

+        }

+        if (other.repeatedSint64_.Count != 0) {

+          result.repeatedSint64_.Add(other.repeatedSint64_);

+        }

+        if (other.repeatedFixed32_.Count != 0) {

+          result.repeatedFixed32_.Add(other.repeatedFixed32_);

+        }

+        if (other.repeatedFixed64_.Count != 0) {

+          result.repeatedFixed64_.Add(other.repeatedFixed64_);

+        }

+        if (other.repeatedSfixed32_.Count != 0) {

+          result.repeatedSfixed32_.Add(other.repeatedSfixed32_);

+        }

+        if (other.repeatedSfixed64_.Count != 0) {

+          result.repeatedSfixed64_.Add(other.repeatedSfixed64_);

+        }

+        if (other.repeatedFloat_.Count != 0) {

+          result.repeatedFloat_.Add(other.repeatedFloat_);

+        }

+        if (other.repeatedDouble_.Count != 0) {

+          result.repeatedDouble_.Add(other.repeatedDouble_);

+        }

+        if (other.repeatedBool_.Count != 0) {

+          result.repeatedBool_.Add(other.repeatedBool_);

+        }

+        if (other.repeatedString_.Count != 0) {

+          result.repeatedString_.Add(other.repeatedString_);

+        }

+        if (other.repeatedBytes_.Count != 0) {

+          result.repeatedBytes_.Add(other.repeatedBytes_);

+        }

+        if (other.repeatedGroup_.Count != 0) {

+          result.repeatedGroup_.Add(other.repeatedGroup_);

+        }

+        if (other.repeatedNestedMessage_.Count != 0) {

+          result.repeatedNestedMessage_.Add(other.repeatedNestedMessage_);

+        }

+        if (other.repeatedForeignMessage_.Count != 0) {

+          result.repeatedForeignMessage_.Add(other.repeatedForeignMessage_);

+        }

+        if (other.repeatedImportMessage_.Count != 0) {

+          result.repeatedImportMessage_.Add(other.repeatedImportMessage_);

+        }

+        if (other.repeatedNestedEnum_.Count != 0) {

+          result.repeatedNestedEnum_.Add(other.repeatedNestedEnum_);

+        }

+        if (other.repeatedForeignEnum_.Count != 0) {

+          result.repeatedForeignEnum_.Add(other.repeatedForeignEnum_);

+        }

+        if (other.repeatedImportEnum_.Count != 0) {

+          result.repeatedImportEnum_.Add(other.repeatedImportEnum_);

+        }

+        if (other.repeatedStringPiece_.Count != 0) {

+          result.repeatedStringPiece_.Add(other.repeatedStringPiece_);

+        }

+        if (other.repeatedCord_.Count != 0) {

+          result.repeatedCord_.Add(other.repeatedCord_);

+        }

+        if (other.HasDefaultInt32) {

+          DefaultInt32 = other.DefaultInt32;

+        }

+        if (other.HasDefaultInt64) {

+          DefaultInt64 = other.DefaultInt64;

+        }

+        if (other.HasDefaultUint32) {

+          DefaultUint32 = other.DefaultUint32;

+        }

+        if (other.HasDefaultUint64) {

+          DefaultUint64 = other.DefaultUint64;

+        }

+        if (other.HasDefaultSint32) {

+          DefaultSint32 = other.DefaultSint32;

+        }

+        if (other.HasDefaultSint64) {

+          DefaultSint64 = other.DefaultSint64;

+        }

+        if (other.HasDefaultFixed32) {

+          DefaultFixed32 = other.DefaultFixed32;

+        }

+        if (other.HasDefaultFixed64) {

+          DefaultFixed64 = other.DefaultFixed64;

+        }

+        if (other.HasDefaultSfixed32) {

+          DefaultSfixed32 = other.DefaultSfixed32;

+        }

+        if (other.HasDefaultSfixed64) {

+          DefaultSfixed64 = other.DefaultSfixed64;

+        }

+        if (other.HasDefaultFloat) {

+          DefaultFloat = other.DefaultFloat;

+        }

+        if (other.HasDefaultDouble) {

+          DefaultDouble = other.DefaultDouble;

+        }

+        if (other.HasDefaultBool) {

+          DefaultBool = other.DefaultBool;

+        }

+        if (other.HasDefaultString) {

+          DefaultString = other.DefaultString;

+        }

+        if (other.HasDefaultBytes) {

+          DefaultBytes = other.DefaultBytes;

+        }

+        if (other.HasDefaultNestedEnum) {

+          DefaultNestedEnum = other.DefaultNestedEnum;

+        }

+        if (other.HasDefaultForeignEnum) {

+          DefaultForeignEnum = other.DefaultForeignEnum;

+        }

+        if (other.HasDefaultImportEnum) {

+          DefaultImportEnum = other.DefaultImportEnum;

+        }

+        if (other.HasDefaultStringPiece) {

+          DefaultStringPiece = other.DefaultStringPiece;

+        }

+        if (other.HasDefaultCord) {

+          DefaultCord = other.DefaultCord;

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testAllTypesLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testAllTypesLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasOptionalInt32 = input.ReadInt32(ref result.optionalInt32_);

+              break;

+            }

+            case 16: {

+              result.hasOptionalInt64 = input.ReadInt64(ref result.optionalInt64_);

+              break;

+            }

+            case 24: {

+              result.hasOptionalUint32 = input.ReadUInt32(ref result.optionalUint32_);

+              break;

+            }

+            case 32: {

+              result.hasOptionalUint64 = input.ReadUInt64(ref result.optionalUint64_);

+              break;

+            }

+            case 40: {

+              result.hasOptionalSint32 = input.ReadSInt32(ref result.optionalSint32_);

+              break;

+            }

+            case 48: {

+              result.hasOptionalSint64 = input.ReadSInt64(ref result.optionalSint64_);

+              break;

+            }

+            case 61: {

+              result.hasOptionalFixed32 = input.ReadFixed32(ref result.optionalFixed32_);

+              break;

+            }

+            case 65: {

+              result.hasOptionalFixed64 = input.ReadFixed64(ref result.optionalFixed64_);

+              break;

+            }

+            case 77: {

+              result.hasOptionalSfixed32 = input.ReadSFixed32(ref result.optionalSfixed32_);

+              break;

+            }

+            case 81: {

+              result.hasOptionalSfixed64 = input.ReadSFixed64(ref result.optionalSfixed64_);

+              break;

+            }

+            case 93: {

+              result.hasOptionalFloat = input.ReadFloat(ref result.optionalFloat_);

+              break;

+            }

+            case 97: {

+              result.hasOptionalDouble = input.ReadDouble(ref result.optionalDouble_);

+              break;

+            }

+            case 104: {

+              result.hasOptionalBool = input.ReadBool(ref result.optionalBool_);

+              break;

+            }

+            case 114: {

+              result.hasOptionalString = input.ReadString(ref result.optionalString_);

+              break;

+            }

+            case 122: {

+              result.hasOptionalBytes = input.ReadBytes(ref result.optionalBytes_);

+              break;

+            }

+            case 131: {

+              global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.CreateBuilder();

+              if (result.hasOptionalGroup) {

+                subBuilder.MergeFrom(OptionalGroup);

+              }

+              input.ReadGroup(16, subBuilder, extensionRegistry);

+              OptionalGroup = subBuilder.BuildPartial();

+              break;

+            }

+            case 146: {

+              global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.CreateBuilder();

+              if (result.hasOptionalNestedMessage) {

+                subBuilder.MergeFrom(OptionalNestedMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalNestedMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 154: {

+              global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.CreateBuilder();

+              if (result.hasOptionalForeignMessage) {

+                subBuilder.MergeFrom(OptionalForeignMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalForeignMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 162: {

+              global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.CreateBuilder();

+              if (result.hasOptionalImportMessage) {

+                subBuilder.MergeFrom(OptionalImportMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalImportMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 168: {

+              object unknown;

+              if(input.ReadEnum(ref result.optionalNestedEnum_, out unknown)) {

+                result.hasOptionalNestedEnum = true;

+              } else if(unknown is int) {

+              }

+              break;

+            }

+            case 176: {

+              object unknown;

+              if(input.ReadEnum(ref result.optionalForeignEnum_, out unknown)) {

+                result.hasOptionalForeignEnum = true;

+              } else if(unknown is int) {

+              }

+              break;

+            }

+            case 184: {

+              object unknown;

+              if(input.ReadEnum(ref result.optionalImportEnum_, out unknown)) {

+                result.hasOptionalImportEnum = true;

+              } else if(unknown is int) {

+              }

+              break;

+            }

+            case 194: {

+              result.hasOptionalStringPiece = input.ReadString(ref result.optionalStringPiece_);

+              break;

+            }

+            case 202: {

+              result.hasOptionalCord = input.ReadString(ref result.optionalCord_);

+              break;

+            }

+            case 250:

+            case 248: {

+              input.ReadInt32Array(tag, field_name, result.repeatedInt32_);

+              break;

+            }

+            case 258:

+            case 256: {

+              input.ReadInt64Array(tag, field_name, result.repeatedInt64_);

+              break;

+            }

+            case 266:

+            case 264: {

+              input.ReadUInt32Array(tag, field_name, result.repeatedUint32_);

+              break;

+            }

+            case 274:

+            case 272: {

+              input.ReadUInt64Array(tag, field_name, result.repeatedUint64_);

+              break;

+            }

+            case 282:

+            case 280: {

+              input.ReadSInt32Array(tag, field_name, result.repeatedSint32_);

+              break;

+            }

+            case 290:

+            case 288: {

+              input.ReadSInt64Array(tag, field_name, result.repeatedSint64_);

+              break;

+            }

+            case 298:

+            case 301: {

+              input.ReadFixed32Array(tag, field_name, result.repeatedFixed32_);

+              break;

+            }

+            case 306:

+            case 305: {

+              input.ReadFixed64Array(tag, field_name, result.repeatedFixed64_);

+              break;

+            }

+            case 314:

+            case 317: {

+              input.ReadSFixed32Array(tag, field_name, result.repeatedSfixed32_);

+              break;

+            }

+            case 322:

+            case 321: {

+              input.ReadSFixed64Array(tag, field_name, result.repeatedSfixed64_);

+              break;

+            }

+            case 330:

+            case 333: {

+              input.ReadFloatArray(tag, field_name, result.repeatedFloat_);

+              break;

+            }

+            case 338:

+            case 337: {

+              input.ReadDoubleArray(tag, field_name, result.repeatedDouble_);

+              break;

+            }

+            case 346:

+            case 344: {

+              input.ReadBoolArray(tag, field_name, result.repeatedBool_);

+              break;

+            }

+            case 354: {

+              input.ReadStringArray(tag, field_name, result.repeatedString_);

+              break;

+            }

+            case 362: {

+              input.ReadBytesArray(tag, field_name, result.repeatedBytes_);

+              break;

+            }

+            case 371: {

+              input.ReadGroupArray(tag, field_name, result.repeatedGroup_, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 386: {

+              input.ReadMessageArray(tag, field_name, result.repeatedNestedMessage_, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 394: {

+              input.ReadMessageArray(tag, field_name, result.repeatedForeignMessage_, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 402: {

+              input.ReadMessageArray(tag, field_name, result.repeatedImportMessage_, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 410:

+            case 408: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum>(tag, field_name, result.repeatedNestedEnum_, out unknownItems);

+              break;

+            }

+            case 418:

+            case 416: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(tag, field_name, result.repeatedForeignEnum_, out unknownItems);

+              break;

+            }

+            case 426:

+            case 424: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite>(tag, field_name, result.repeatedImportEnum_, out unknownItems);

+              break;

+            }

+            case 434: {

+              input.ReadStringArray(tag, field_name, result.repeatedStringPiece_);

+              break;

+            }

+            case 442: {

+              input.ReadStringArray(tag, field_name, result.repeatedCord_);

+              break;

+            }

+            case 488: {

+              result.hasDefaultInt32 = input.ReadInt32(ref result.defaultInt32_);

+              break;

+            }

+            case 496: {

+              result.hasDefaultInt64 = input.ReadInt64(ref result.defaultInt64_);

+              break;

+            }

+            case 504: {

+              result.hasDefaultUint32 = input.ReadUInt32(ref result.defaultUint32_);

+              break;

+            }

+            case 512: {

+              result.hasDefaultUint64 = input.ReadUInt64(ref result.defaultUint64_);

+              break;

+            }

+            case 520: {

+              result.hasDefaultSint32 = input.ReadSInt32(ref result.defaultSint32_);

+              break;

+            }

+            case 528: {

+              result.hasDefaultSint64 = input.ReadSInt64(ref result.defaultSint64_);

+              break;

+            }

+            case 541: {

+              result.hasDefaultFixed32 = input.ReadFixed32(ref result.defaultFixed32_);

+              break;

+            }

+            case 545: {

+              result.hasDefaultFixed64 = input.ReadFixed64(ref result.defaultFixed64_);

+              break;

+            }

+            case 557: {

+              result.hasDefaultSfixed32 = input.ReadSFixed32(ref result.defaultSfixed32_);

+              break;

+            }

+            case 561: {

+              result.hasDefaultSfixed64 = input.ReadSFixed64(ref result.defaultSfixed64_);

+              break;

+            }

+            case 573: {

+              result.hasDefaultFloat = input.ReadFloat(ref result.defaultFloat_);

+              break;

+            }

+            case 577: {

+              result.hasDefaultDouble = input.ReadDouble(ref result.defaultDouble_);

+              break;

+            }

+            case 584: {

+              result.hasDefaultBool = input.ReadBool(ref result.defaultBool_);

+              break;

+            }

+            case 594: {

+              result.hasDefaultString = input.ReadString(ref result.defaultString_);

+              break;

+            }

+            case 602: {

+              result.hasDefaultBytes = input.ReadBytes(ref result.defaultBytes_);

+              break;

+            }

+            case 648: {

+              object unknown;

+              if(input.ReadEnum(ref result.defaultNestedEnum_, out unknown)) {

+                result.hasDefaultNestedEnum = true;

+              } else if(unknown is int) {

+              }

+              break;

+            }

+            case 656: {

+              object unknown;

+              if(input.ReadEnum(ref result.defaultForeignEnum_, out unknown)) {

+                result.hasDefaultForeignEnum = true;

+              } else if(unknown is int) {

+              }

+              break;

+            }

+            case 664: {

+              object unknown;

+              if(input.ReadEnum(ref result.defaultImportEnum_, out unknown)) {

+                result.hasDefaultImportEnum = true;

+              } else if(unknown is int) {

+              }

+              break;

+            }

+            case 674: {

+              result.hasDefaultStringPiece = input.ReadString(ref result.defaultStringPiece_);

+              break;

+            }

+            case 682: {

+              result.hasDefaultCord = input.ReadString(ref result.defaultCord_);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public bool HasOptionalInt32 {

+        get { return result.hasOptionalInt32; }

+      }

+      public int OptionalInt32 {

+        get { return result.OptionalInt32; }

+        set { SetOptionalInt32(value); }

+      }

+      public Builder SetOptionalInt32(int value) {

+        PrepareBuilder();

+        result.hasOptionalInt32 = true;

+        result.optionalInt32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalInt32() {

+        PrepareBuilder();

+        result.hasOptionalInt32 = false;

+        result.optionalInt32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalInt64 {

+        get { return result.hasOptionalInt64; }

+      }

+      public long OptionalInt64 {

+        get { return result.OptionalInt64; }

+        set { SetOptionalInt64(value); }

+      }

+      public Builder SetOptionalInt64(long value) {

+        PrepareBuilder();

+        result.hasOptionalInt64 = true;

+        result.optionalInt64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalInt64() {

+        PrepareBuilder();

+        result.hasOptionalInt64 = false;

+        result.optionalInt64_ = 0L;

+        return this;

+      }

+      

+      public bool HasOptionalUint32 {

+        get { return result.hasOptionalUint32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint OptionalUint32 {

+        get { return result.OptionalUint32; }

+        set { SetOptionalUint32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalUint32(uint value) {

+        PrepareBuilder();

+        result.hasOptionalUint32 = true;

+        result.optionalUint32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalUint32() {

+        PrepareBuilder();

+        result.hasOptionalUint32 = false;

+        result.optionalUint32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalUint64 {

+        get { return result.hasOptionalUint64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong OptionalUint64 {

+        get { return result.OptionalUint64; }

+        set { SetOptionalUint64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalUint64(ulong value) {

+        PrepareBuilder();

+        result.hasOptionalUint64 = true;

+        result.optionalUint64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalUint64() {

+        PrepareBuilder();

+        result.hasOptionalUint64 = false;

+        result.optionalUint64_ = 0UL;

+        return this;

+      }

+      

+      public bool HasOptionalSint32 {

+        get { return result.hasOptionalSint32; }

+      }

+      public int OptionalSint32 {

+        get { return result.OptionalSint32; }

+        set { SetOptionalSint32(value); }

+      }

+      public Builder SetOptionalSint32(int value) {

+        PrepareBuilder();

+        result.hasOptionalSint32 = true;

+        result.optionalSint32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSint32() {

+        PrepareBuilder();

+        result.hasOptionalSint32 = false;

+        result.optionalSint32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalSint64 {

+        get { return result.hasOptionalSint64; }

+      }

+      public long OptionalSint64 {

+        get { return result.OptionalSint64; }

+        set { SetOptionalSint64(value); }

+      }

+      public Builder SetOptionalSint64(long value) {

+        PrepareBuilder();

+        result.hasOptionalSint64 = true;

+        result.optionalSint64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSint64() {

+        PrepareBuilder();

+        result.hasOptionalSint64 = false;

+        result.optionalSint64_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalFixed32 {

+        get { return result.hasOptionalFixed32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint OptionalFixed32 {

+        get { return result.OptionalFixed32; }

+        set { SetOptionalFixed32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalFixed32(uint value) {

+        PrepareBuilder();

+        result.hasOptionalFixed32 = true;

+        result.optionalFixed32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalFixed32() {

+        PrepareBuilder();

+        result.hasOptionalFixed32 = false;

+        result.optionalFixed32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalFixed64 {

+        get { return result.hasOptionalFixed64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong OptionalFixed64 {

+        get { return result.OptionalFixed64; }

+        set { SetOptionalFixed64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalFixed64(ulong value) {

+        PrepareBuilder();

+        result.hasOptionalFixed64 = true;

+        result.optionalFixed64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalFixed64() {

+        PrepareBuilder();

+        result.hasOptionalFixed64 = false;

+        result.optionalFixed64_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalSfixed32 {

+        get { return result.hasOptionalSfixed32; }

+      }

+      public int OptionalSfixed32 {

+        get { return result.OptionalSfixed32; }

+        set { SetOptionalSfixed32(value); }

+      }

+      public Builder SetOptionalSfixed32(int value) {

+        PrepareBuilder();

+        result.hasOptionalSfixed32 = true;

+        result.optionalSfixed32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSfixed32() {

+        PrepareBuilder();

+        result.hasOptionalSfixed32 = false;

+        result.optionalSfixed32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalSfixed64 {

+        get { return result.hasOptionalSfixed64; }

+      }

+      public long OptionalSfixed64 {

+        get { return result.OptionalSfixed64; }

+        set { SetOptionalSfixed64(value); }

+      }

+      public Builder SetOptionalSfixed64(long value) {

+        PrepareBuilder();

+        result.hasOptionalSfixed64 = true;

+        result.optionalSfixed64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSfixed64() {

+        PrepareBuilder();

+        result.hasOptionalSfixed64 = false;

+        result.optionalSfixed64_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalFloat {

+        get { return result.hasOptionalFloat; }

+      }

+      public float OptionalFloat {

+        get { return result.OptionalFloat; }

+        set { SetOptionalFloat(value); }

+      }

+      public Builder SetOptionalFloat(float value) {

+        PrepareBuilder();

+        result.hasOptionalFloat = true;

+        result.optionalFloat_ = value;

+        return this;

+      }

+      public Builder ClearOptionalFloat() {

+        PrepareBuilder();

+        result.hasOptionalFloat = false;

+        result.optionalFloat_ = 0F;

+        return this;

+      }

+      

+      public bool HasOptionalDouble {

+        get { return result.hasOptionalDouble; }

+      }

+      public double OptionalDouble {

+        get { return result.OptionalDouble; }

+        set { SetOptionalDouble(value); }

+      }

+      public Builder SetOptionalDouble(double value) {

+        PrepareBuilder();

+        result.hasOptionalDouble = true;

+        result.optionalDouble_ = value;

+        return this;

+      }

+      public Builder ClearOptionalDouble() {

+        PrepareBuilder();

+        result.hasOptionalDouble = false;

+        result.optionalDouble_ = 0D;

+        return this;

+      }

+      

+      public bool HasOptionalBool {

+        get { return result.hasOptionalBool; }

+      }

+      public bool OptionalBool {

+        get { return result.OptionalBool; }

+        set { SetOptionalBool(value); }

+      }

+      public Builder SetOptionalBool(bool value) {

+        PrepareBuilder();

+        result.hasOptionalBool = true;

+        result.optionalBool_ = value;

+        return this;

+      }

+      public Builder ClearOptionalBool() {

+        PrepareBuilder();

+        result.hasOptionalBool = false;

+        result.optionalBool_ = false;

+        return this;

+      }

+      

+      public bool HasOptionalString {

+        get { return result.hasOptionalString; }

+      }

+      public string OptionalString {

+        get { return result.OptionalString; }

+        set { SetOptionalString(value); }

+      }

+      public Builder SetOptionalString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalString = true;

+        result.optionalString_ = value;

+        return this;

+      }

+      public Builder ClearOptionalString() {

+        PrepareBuilder();

+        result.hasOptionalString = false;

+        result.optionalString_ = "";

+        return this;

+      }

+      

+      public bool HasOptionalBytes {

+        get { return result.hasOptionalBytes; }

+      }

+      public pb::ByteString OptionalBytes {

+        get { return result.OptionalBytes; }

+        set { SetOptionalBytes(value); }

+      }

+      public Builder SetOptionalBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalBytes = true;

+        result.optionalBytes_ = value;

+        return this;

+      }

+      public Builder ClearOptionalBytes() {

+        PrepareBuilder();

+        result.hasOptionalBytes = false;

+        result.optionalBytes_ = pb::ByteString.Empty;

+        return this;

+      }

+      

+      public bool HasOptionalGroup {

+       get { return result.hasOptionalGroup; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup OptionalGroup {

+        get { return result.OptionalGroup; }

+        set { SetOptionalGroup(value); }

+      }

+      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalGroup = true;

+        result.optionalGroup_ = value;

+        return this;

+      }

+      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalGroup = true;

+        result.optionalGroup_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalGroup &&

+            result.optionalGroup_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.DefaultInstance) {

+            result.optionalGroup_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.OptionalGroup.CreateBuilder(result.optionalGroup_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalGroup_ = value;

+        }

+        result.hasOptionalGroup = true;

+        return this;

+      }

+      public Builder ClearOptionalGroup() {

+        PrepareBuilder();

+        result.hasOptionalGroup = false;

+        result.optionalGroup_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalNestedMessage {

+       get { return result.hasOptionalNestedMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage OptionalNestedMessage {

+        get { return result.OptionalNestedMessage; }

+        set { SetOptionalNestedMessage(value); }

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalNestedMessage &&

+            result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.DefaultInstance) {

+            result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalNestedMessage_ = value;

+        }

+        result.hasOptionalNestedMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalNestedMessage() {

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = false;

+        result.optionalNestedMessage_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalForeignMessage {

+       get { return result.hasOptionalForeignMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite OptionalForeignMessage {

+        get { return result.OptionalForeignMessage; }

+        set { SetOptionalForeignMessage(value); }

+      }

+      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalForeignMessage = true;

+        result.optionalForeignMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalForeignMessage = true;

+        result.optionalForeignMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalForeignMessage &&

+            result.optionalForeignMessage_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance) {

+            result.optionalForeignMessage_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.CreateBuilder(result.optionalForeignMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalForeignMessage_ = value;

+        }

+        result.hasOptionalForeignMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalForeignMessage() {

+        PrepareBuilder();

+        result.hasOptionalForeignMessage = false;

+        result.optionalForeignMessage_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalImportMessage {

+       get { return result.hasOptionalImportMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportMessageLite OptionalImportMessage {

+        get { return result.OptionalImportMessage; }

+        set { SetOptionalImportMessage(value); }

+      }

+      public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessageLite value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalImportMessage = true;

+        result.optionalImportMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalImportMessage = true;

+        result.optionalImportMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessageLite value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalImportMessage &&

+            result.optionalImportMessage_ != global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.DefaultInstance) {

+            result.optionalImportMessage_ = global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.CreateBuilder(result.optionalImportMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalImportMessage_ = value;

+        }

+        result.hasOptionalImportMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalImportMessage() {

+        PrepareBuilder();

+        result.hasOptionalImportMessage = false;

+        result.optionalImportMessage_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalNestedEnum {

+       get { return result.hasOptionalNestedEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum OptionalNestedEnum {

+        get { return result.OptionalNestedEnum; }

+        set { SetOptionalNestedEnum(value); }

+      }

+      public Builder SetOptionalNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.hasOptionalNestedEnum = true;

+        result.optionalNestedEnum_ = value;

+        return this;

+      }

+      public Builder ClearOptionalNestedEnum() {

+        PrepareBuilder();

+        result.hasOptionalNestedEnum = false;

+        result.optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum.FOO;

+        return this;

+      }

+      

+      public bool HasOptionalForeignEnum {

+       get { return result.hasOptionalForeignEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite OptionalForeignEnum {

+        get { return result.OptionalForeignEnum; }

+        set { SetOptionalForeignEnum(value); }

+      }

+      public Builder SetOptionalForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite value) {

+        PrepareBuilder();

+        result.hasOptionalForeignEnum = true;

+        result.optionalForeignEnum_ = value;

+        return this;

+      }

+      public Builder ClearOptionalForeignEnum() {

+        PrepareBuilder();

+        result.hasOptionalForeignEnum = false;

+        result.optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite.FOREIGN_LITE_FOO;

+        return this;

+      }

+      

+      public bool HasOptionalImportEnum {

+       get { return result.hasOptionalImportEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportEnumLite OptionalImportEnum {

+        get { return result.OptionalImportEnum; }

+        set { SetOptionalImportEnum(value); }

+      }

+      public Builder SetOptionalImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite value) {

+        PrepareBuilder();

+        result.hasOptionalImportEnum = true;

+        result.optionalImportEnum_ = value;

+        return this;

+      }

+      public Builder ClearOptionalImportEnum() {

+        PrepareBuilder();

+        result.hasOptionalImportEnum = false;

+        result.optionalImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnumLite.IMPORT_LITE_FOO;

+        return this;

+      }

+      

+      public bool HasOptionalStringPiece {

+        get { return result.hasOptionalStringPiece; }

+      }

+      public string OptionalStringPiece {

+        get { return result.OptionalStringPiece; }

+        set { SetOptionalStringPiece(value); }

+      }

+      public Builder SetOptionalStringPiece(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalStringPiece = true;

+        result.optionalStringPiece_ = value;

+        return this;

+      }

+      public Builder ClearOptionalStringPiece() {

+        PrepareBuilder();

+        result.hasOptionalStringPiece = false;

+        result.optionalStringPiece_ = "";

+        return this;

+      }

+      

+      public bool HasOptionalCord {

+        get { return result.hasOptionalCord; }

+      }

+      public string OptionalCord {

+        get { return result.OptionalCord; }

+        set { SetOptionalCord(value); }

+      }

+      public Builder SetOptionalCord(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalCord = true;

+        result.optionalCord_ = value;

+        return this;

+      }

+      public Builder ClearOptionalCord() {

+        PrepareBuilder();

+        result.hasOptionalCord = false;

+        result.optionalCord_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedInt32List {

+        get { return PrepareBuilder().repeatedInt32_; }

+      }

+      public int RepeatedInt32Count {

+        get { return result.RepeatedInt32Count; }

+      }

+      public int GetRepeatedInt32(int index) {

+        return result.GetRepeatedInt32(index);

+      }

+      public Builder SetRepeatedInt32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt32(int value) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt32() {

+        PrepareBuilder();

+        result.repeatedInt32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedInt64List {

+        get { return PrepareBuilder().repeatedInt64_; }

+      }

+      public int RepeatedInt64Count {

+        get { return result.RepeatedInt64Count; }

+      }

+      public long GetRepeatedInt64(int index) {

+        return result.GetRepeatedInt64(index);

+      }

+      public Builder SetRepeatedInt64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt64(long value) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt64() {

+        PrepareBuilder();

+        result.repeatedInt64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> RepeatedUint32List {

+        get { return PrepareBuilder().repeatedUint32_; }

+      }

+      public int RepeatedUint32Count {

+        get { return result.RepeatedUint32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetRepeatedUint32(int index) {

+        return result.GetRepeatedUint32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedUint32(int index, uint value) {

+        PrepareBuilder();

+        result.repeatedUint32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedUint32(uint value) {

+        PrepareBuilder();

+        result.repeatedUint32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedUint32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.repeatedUint32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedUint32() {

+        PrepareBuilder();

+        result.repeatedUint32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedUint64List {

+        get { return PrepareBuilder().repeatedUint64_; }

+      }

+      public int RepeatedUint64Count {

+        get { return result.RepeatedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedUint64(int index) {

+        return result.GetRepeatedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedUint64(ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedUint64() {

+        PrepareBuilder();

+        result.repeatedUint64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedSint32List {

+        get { return PrepareBuilder().repeatedSint32_; }

+      }

+      public int RepeatedSint32Count {

+        get { return result.RepeatedSint32Count; }

+      }

+      public int GetRepeatedSint32(int index) {

+        return result.GetRepeatedSint32(index);

+      }

+      public Builder SetRepeatedSint32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedSint32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSint32(int value) {

+        PrepareBuilder();

+        result.repeatedSint32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSint32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedSint32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSint32() {

+        PrepareBuilder();

+        result.repeatedSint32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedSint64List {

+        get { return PrepareBuilder().repeatedSint64_; }

+      }

+      public int RepeatedSint64Count {

+        get { return result.RepeatedSint64Count; }

+      }

+      public long GetRepeatedSint64(int index) {

+        return result.GetRepeatedSint64(index);

+      }

+      public Builder SetRepeatedSint64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedSint64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSint64(long value) {

+        PrepareBuilder();

+        result.repeatedSint64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSint64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedSint64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSint64() {

+        PrepareBuilder();

+        result.repeatedSint64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> RepeatedFixed32List {

+        get { return PrepareBuilder().repeatedFixed32_; }

+      }

+      public int RepeatedFixed32Count {

+        get { return result.RepeatedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetRepeatedFixed32(int index) {

+        return result.GetRepeatedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed32(uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed32() {

+        PrepareBuilder();

+        result.repeatedFixed32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedFixed64List {

+        get { return PrepareBuilder().repeatedFixed64_; }

+      }

+      public int RepeatedFixed64Count {

+        get { return result.RepeatedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedFixed64(int index) {

+        return result.GetRepeatedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed64(ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed64() {

+        PrepareBuilder();

+        result.repeatedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedSfixed32List {

+        get { return PrepareBuilder().repeatedSfixed32_; }

+      }

+      public int RepeatedSfixed32Count {

+        get { return result.RepeatedSfixed32Count; }

+      }

+      public int GetRepeatedSfixed32(int index) {

+        return result.GetRepeatedSfixed32(index);

+      }

+      public Builder SetRepeatedSfixed32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedSfixed32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSfixed32(int value) {

+        PrepareBuilder();

+        result.repeatedSfixed32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSfixed32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedSfixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSfixed32() {

+        PrepareBuilder();

+        result.repeatedSfixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedSfixed64List {

+        get { return PrepareBuilder().repeatedSfixed64_; }

+      }

+      public int RepeatedSfixed64Count {

+        get { return result.RepeatedSfixed64Count; }

+      }

+      public long GetRepeatedSfixed64(int index) {

+        return result.GetRepeatedSfixed64(index);

+      }

+      public Builder SetRepeatedSfixed64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedSfixed64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSfixed64(long value) {

+        PrepareBuilder();

+        result.repeatedSfixed64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSfixed64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedSfixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSfixed64() {

+        PrepareBuilder();

+        result.repeatedSfixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> RepeatedFloatList {

+        get { return PrepareBuilder().repeatedFloat_; }

+      }

+      public int RepeatedFloatCount {

+        get { return result.RepeatedFloatCount; }

+      }

+      public float GetRepeatedFloat(int index) {

+        return result.GetRepeatedFloat(index);

+      }

+      public Builder SetRepeatedFloat(int index, float value) {

+        PrepareBuilder();

+        result.repeatedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedFloat(float value) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFloat() {

+        PrepareBuilder();

+        result.repeatedFloat_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<double> RepeatedDoubleList {

+        get { return PrepareBuilder().repeatedDouble_; }

+      }

+      public int RepeatedDoubleCount {

+        get { return result.RepeatedDoubleCount; }

+      }

+      public double GetRepeatedDouble(int index) {

+        return result.GetRepeatedDouble(index);

+      }

+      public Builder SetRepeatedDouble(int index, double value) {

+        PrepareBuilder();

+        result.repeatedDouble_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedDouble(double value) {

+        PrepareBuilder();

+        result.repeatedDouble_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedDouble(scg::IEnumerable<double> values) {

+        PrepareBuilder();

+        result.repeatedDouble_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedDouble() {

+        PrepareBuilder();

+        result.repeatedDouble_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<bool> RepeatedBoolList {

+        get { return PrepareBuilder().repeatedBool_; }

+      }

+      public int RepeatedBoolCount {

+        get { return result.RepeatedBoolCount; }

+      }

+      public bool GetRepeatedBool(int index) {

+        return result.GetRepeatedBool(index);

+      }

+      public Builder SetRepeatedBool(int index, bool value) {

+        PrepareBuilder();

+        result.repeatedBool_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedBool(bool value) {

+        PrepareBuilder();

+        result.repeatedBool_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedBool(scg::IEnumerable<bool> values) {

+        PrepareBuilder();

+        result.repeatedBool_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedBool() {

+        PrepareBuilder();

+        result.repeatedBool_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringList {

+        get { return PrepareBuilder().repeatedString_; }

+      }

+      public int RepeatedStringCount {

+        get { return result.RepeatedStringCount; }

+      }

+      public string GetRepeatedString(int index) {

+        return result.GetRepeatedString(index);

+      }

+      public Builder SetRepeatedString(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedString_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedString_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedString(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedString_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedString() {

+        PrepareBuilder();

+        result.repeatedString_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<pb::ByteString> RepeatedBytesList {

+        get { return PrepareBuilder().repeatedBytes_; }

+      }

+      public int RepeatedBytesCount {

+        get { return result.RepeatedBytesCount; }

+      }

+      public pb::ByteString GetRepeatedBytes(int index) {

+        return result.GetRepeatedBytes(index);

+      }

+      public Builder SetRepeatedBytes(int index, pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedBytes_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedBytes_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedBytes(scg::IEnumerable<pb::ByteString> values) {

+        PrepareBuilder();

+        result.repeatedBytes_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedBytes() {

+        PrepareBuilder();

+        result.repeatedBytes_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup> RepeatedGroupList {

+        get { return PrepareBuilder().repeatedGroup_; }

+      }

+      public int RepeatedGroupCount {

+        get { return result.RepeatedGroupCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup GetRepeatedGroup(int index) {

+        return result.GetRepeatedGroup(index);

+      }

+      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedGroup_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedGroup_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedGroup_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedGroup_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedGroup(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.RepeatedGroup> values) {

+        PrepareBuilder();

+        result.repeatedGroup_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedGroup() {

+        PrepareBuilder();

+        result.repeatedGroup_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> RepeatedNestedMessageList {

+        get { return PrepareBuilder().repeatedNestedMessage_; }

+      }

+      public int RepeatedNestedMessageCount {

+        get { return result.RepeatedNestedMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage GetRepeatedNestedMessage(int index) {

+        return result.GetRepeatedNestedMessage(index);

+      }

+      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedNestedMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedNestedMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedNestedMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedMessage> values) {

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedNestedMessage() {

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> RepeatedForeignMessageList {

+        get { return PrepareBuilder().repeatedForeignMessage_; }

+      }

+      public int RepeatedForeignMessageCount {

+        get { return result.RepeatedForeignMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite GetRepeatedForeignMessage(int index) {

+        return result.GetRepeatedForeignMessage(index);

+      }

+      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedForeignMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedForeignMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedForeignMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite> values) {

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedForeignMessage() {

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> RepeatedImportMessageList {

+        get { return PrepareBuilder().repeatedImportMessage_; }

+      }

+      public int RepeatedImportMessageCount {

+        get { return result.RepeatedImportMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportMessageLite GetRepeatedImportMessage(int index) {

+        return result.GetRepeatedImportMessage(index);

+      }

+      public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedImportMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedImportMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessageLite value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedImportMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessageLite.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedImportMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedImportMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ImportMessageLite> values) {

+        PrepareBuilder();

+        result.repeatedImportMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedImportMessage() {

+        PrepareBuilder();

+        result.repeatedImportMessage_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> RepeatedNestedEnumList {

+        get { return PrepareBuilder().repeatedNestedEnum_; }

+      }

+      public int RepeatedNestedEnumCount {

+        get { return result.RepeatedNestedEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum GetRepeatedNestedEnum(int index) {

+        return result.GetRepeatedNestedEnum(index);

+      }

+      public Builder SetRepeatedNestedEnum(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.repeatedNestedEnum_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.repeatedNestedEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedNestedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum> values) {

+        PrepareBuilder();

+        result.repeatedNestedEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedNestedEnum() {

+        PrepareBuilder();

+        result.repeatedNestedEnum_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> RepeatedForeignEnumList {

+        get { return PrepareBuilder().repeatedForeignEnum_; }

+      }

+      public int RepeatedForeignEnumCount {

+        get { return result.RepeatedForeignEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite GetRepeatedForeignEnum(int index) {

+        return result.GetRepeatedForeignEnum(index);

+      }

+      public Builder SetRepeatedForeignEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite value) {

+        PrepareBuilder();

+        result.repeatedForeignEnum_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite value) {

+        PrepareBuilder();

+        result.repeatedForeignEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedForeignEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> values) {

+        PrepareBuilder();

+        result.repeatedForeignEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedForeignEnum() {

+        PrepareBuilder();

+        result.repeatedForeignEnum_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> RepeatedImportEnumList {

+        get { return PrepareBuilder().repeatedImportEnum_; }

+      }

+      public int RepeatedImportEnumCount {

+        get { return result.RepeatedImportEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportEnumLite GetRepeatedImportEnum(int index) {

+        return result.GetRepeatedImportEnum(index);

+      }

+      public Builder SetRepeatedImportEnum(int index, global::Google.ProtocolBuffers.TestProtos.ImportEnumLite value) {

+        PrepareBuilder();

+        result.repeatedImportEnum_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite value) {

+        PrepareBuilder();

+        result.repeatedImportEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedImportEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ImportEnumLite> values) {

+        PrepareBuilder();

+        result.repeatedImportEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedImportEnum() {

+        PrepareBuilder();

+        result.repeatedImportEnum_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringPieceList {

+        get { return PrepareBuilder().repeatedStringPiece_; }

+      }

+      public int RepeatedStringPieceCount {

+        get { return result.RepeatedStringPieceCount; }

+      }

+      public string GetRepeatedStringPiece(int index) {

+        return result.GetRepeatedStringPiece(index);

+      }

+      public Builder SetRepeatedStringPiece(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPiece_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedStringPiece(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPiece_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedStringPiece(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedStringPiece_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedStringPiece() {

+        PrepareBuilder();

+        result.repeatedStringPiece_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedCordList {

+        get { return PrepareBuilder().repeatedCord_; }

+      }

+      public int RepeatedCordCount {

+        get { return result.RepeatedCordCount; }

+      }

+      public string GetRepeatedCord(int index) {

+        return result.GetRepeatedCord(index);

+      }

+      public Builder SetRepeatedCord(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCord_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedCord(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCord_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedCord(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedCord_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedCord() {

+        PrepareBuilder();

+        result.repeatedCord_.Clear();

+        return this;

+      }

+      

+      public bool HasDefaultInt32 {

+        get { return result.hasDefaultInt32; }

+      }

+      public int DefaultInt32 {

+        get { return result.DefaultInt32; }

+        set { SetDefaultInt32(value); }

+      }

+      public Builder SetDefaultInt32(int value) {

+        PrepareBuilder();

+        result.hasDefaultInt32 = true;

+        result.defaultInt32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultInt32() {

+        PrepareBuilder();

+        result.hasDefaultInt32 = false;

+        result.defaultInt32_ = 41;

+        return this;

+      }

+      

+      public bool HasDefaultInt64 {

+        get { return result.hasDefaultInt64; }

+      }

+      public long DefaultInt64 {

+        get { return result.DefaultInt64; }

+        set { SetDefaultInt64(value); }

+      }

+      public Builder SetDefaultInt64(long value) {

+        PrepareBuilder();

+        result.hasDefaultInt64 = true;

+        result.defaultInt64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultInt64() {

+        PrepareBuilder();

+        result.hasDefaultInt64 = false;

+        result.defaultInt64_ = 42L;

+        return this;

+      }

+      

+      public bool HasDefaultUint32 {

+        get { return result.hasDefaultUint32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint DefaultUint32 {

+        get { return result.DefaultUint32; }

+        set { SetDefaultUint32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultUint32(uint value) {

+        PrepareBuilder();

+        result.hasDefaultUint32 = true;

+        result.defaultUint32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultUint32() {

+        PrepareBuilder();

+        result.hasDefaultUint32 = false;

+        result.defaultUint32_ = 43;

+        return this;

+      }

+      

+      public bool HasDefaultUint64 {

+        get { return result.hasDefaultUint64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong DefaultUint64 {

+        get { return result.DefaultUint64; }

+        set { SetDefaultUint64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultUint64(ulong value) {

+        PrepareBuilder();

+        result.hasDefaultUint64 = true;

+        result.defaultUint64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultUint64() {

+        PrepareBuilder();

+        result.hasDefaultUint64 = false;

+        result.defaultUint64_ = 44UL;

+        return this;

+      }

+      

+      public bool HasDefaultSint32 {

+        get { return result.hasDefaultSint32; }

+      }

+      public int DefaultSint32 {

+        get { return result.DefaultSint32; }

+        set { SetDefaultSint32(value); }

+      }

+      public Builder SetDefaultSint32(int value) {

+        PrepareBuilder();

+        result.hasDefaultSint32 = true;

+        result.defaultSint32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSint32() {

+        PrepareBuilder();

+        result.hasDefaultSint32 = false;

+        result.defaultSint32_ = -45;

+        return this;

+      }

+      

+      public bool HasDefaultSint64 {

+        get { return result.hasDefaultSint64; }

+      }

+      public long DefaultSint64 {

+        get { return result.DefaultSint64; }

+        set { SetDefaultSint64(value); }

+      }

+      public Builder SetDefaultSint64(long value) {

+        PrepareBuilder();

+        result.hasDefaultSint64 = true;

+        result.defaultSint64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSint64() {

+        PrepareBuilder();

+        result.hasDefaultSint64 = false;

+        result.defaultSint64_ = 46;

+        return this;

+      }

+      

+      public bool HasDefaultFixed32 {

+        get { return result.hasDefaultFixed32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint DefaultFixed32 {

+        get { return result.DefaultFixed32; }

+        set { SetDefaultFixed32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultFixed32(uint value) {

+        PrepareBuilder();

+        result.hasDefaultFixed32 = true;

+        result.defaultFixed32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultFixed32() {

+        PrepareBuilder();

+        result.hasDefaultFixed32 = false;

+        result.defaultFixed32_ = 47;

+        return this;

+      }

+      

+      public bool HasDefaultFixed64 {

+        get { return result.hasDefaultFixed64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong DefaultFixed64 {

+        get { return result.DefaultFixed64; }

+        set { SetDefaultFixed64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultFixed64(ulong value) {

+        PrepareBuilder();

+        result.hasDefaultFixed64 = true;

+        result.defaultFixed64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultFixed64() {

+        PrepareBuilder();

+        result.hasDefaultFixed64 = false;

+        result.defaultFixed64_ = 48;

+        return this;

+      }

+      

+      public bool HasDefaultSfixed32 {

+        get { return result.hasDefaultSfixed32; }

+      }

+      public int DefaultSfixed32 {

+        get { return result.DefaultSfixed32; }

+        set { SetDefaultSfixed32(value); }

+      }

+      public Builder SetDefaultSfixed32(int value) {

+        PrepareBuilder();

+        result.hasDefaultSfixed32 = true;

+        result.defaultSfixed32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSfixed32() {

+        PrepareBuilder();

+        result.hasDefaultSfixed32 = false;

+        result.defaultSfixed32_ = 49;

+        return this;

+      }

+      

+      public bool HasDefaultSfixed64 {

+        get { return result.hasDefaultSfixed64; }

+      }

+      public long DefaultSfixed64 {

+        get { return result.DefaultSfixed64; }

+        set { SetDefaultSfixed64(value); }

+      }

+      public Builder SetDefaultSfixed64(long value) {

+        PrepareBuilder();

+        result.hasDefaultSfixed64 = true;

+        result.defaultSfixed64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSfixed64() {

+        PrepareBuilder();

+        result.hasDefaultSfixed64 = false;

+        result.defaultSfixed64_ = -50;

+        return this;

+      }

+      

+      public bool HasDefaultFloat {

+        get { return result.hasDefaultFloat; }

+      }

+      public float DefaultFloat {

+        get { return result.DefaultFloat; }

+        set { SetDefaultFloat(value); }

+      }

+      public Builder SetDefaultFloat(float value) {

+        PrepareBuilder();

+        result.hasDefaultFloat = true;

+        result.defaultFloat_ = value;

+        return this;

+      }

+      public Builder ClearDefaultFloat() {

+        PrepareBuilder();

+        result.hasDefaultFloat = false;

+        result.defaultFloat_ = 51.5F;

+        return this;

+      }

+      

+      public bool HasDefaultDouble {

+        get { return result.hasDefaultDouble; }

+      }

+      public double DefaultDouble {

+        get { return result.DefaultDouble; }

+        set { SetDefaultDouble(value); }

+      }

+      public Builder SetDefaultDouble(double value) {

+        PrepareBuilder();

+        result.hasDefaultDouble = true;

+        result.defaultDouble_ = value;

+        return this;

+      }

+      public Builder ClearDefaultDouble() {

+        PrepareBuilder();

+        result.hasDefaultDouble = false;

+        result.defaultDouble_ = 52000D;

+        return this;

+      }

+      

+      public bool HasDefaultBool {

+        get { return result.hasDefaultBool; }

+      }

+      public bool DefaultBool {

+        get { return result.DefaultBool; }

+        set { SetDefaultBool(value); }

+      }

+      public Builder SetDefaultBool(bool value) {

+        PrepareBuilder();

+        result.hasDefaultBool = true;

+        result.defaultBool_ = value;

+        return this;

+      }

+      public Builder ClearDefaultBool() {

+        PrepareBuilder();

+        result.hasDefaultBool = false;

+        result.defaultBool_ = true;

+        return this;

+      }

+      

+      public bool HasDefaultString {

+        get { return result.hasDefaultString; }

+      }

+      public string DefaultString {

+        get { return result.DefaultString; }

+        set { SetDefaultString(value); }

+      }

+      public Builder SetDefaultString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultString = true;

+        result.defaultString_ = value;

+        return this;

+      }

+      public Builder ClearDefaultString() {

+        PrepareBuilder();

+        result.hasDefaultString = false;

+        result.defaultString_ = "hello";

+        return this;

+      }

+      

+      public bool HasDefaultBytes {

+        get { return result.hasDefaultBytes; }

+      }

+      public pb::ByteString DefaultBytes {

+        get { return result.DefaultBytes; }

+        set { SetDefaultBytes(value); }

+      }

+      public Builder SetDefaultBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultBytes = true;

+        result.defaultBytes_ = value;

+        return this;

+      }

+      public Builder ClearDefaultBytes() {

+        PrepareBuilder();

+        result.hasDefaultBytes = false;

+        result.defaultBytes_ = pb::ByteString.FromBase64("d29ybGQ=");

+        return this;

+      }

+      

+      public bool HasDefaultNestedEnum {

+       get { return result.hasDefaultNestedEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum DefaultNestedEnum {

+        get { return result.DefaultNestedEnum; }

+        set { SetDefaultNestedEnum(value); }

+      }

+      public Builder SetDefaultNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.hasDefaultNestedEnum = true;

+        result.defaultNestedEnum_ = value;

+        return this;

+      }

+      public Builder ClearDefaultNestedEnum() {

+        PrepareBuilder();

+        result.hasDefaultNestedEnum = false;

+        result.defaultNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypesLite.Types.NestedEnum.BAR;

+        return this;

+      }

+      

+      public bool HasDefaultForeignEnum {

+       get { return result.hasDefaultForeignEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite DefaultForeignEnum {

+        get { return result.DefaultForeignEnum; }

+        set { SetDefaultForeignEnum(value); }

+      }

+      public Builder SetDefaultForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite value) {

+        PrepareBuilder();

+        result.hasDefaultForeignEnum = true;

+        result.defaultForeignEnum_ = value;

+        return this;

+      }

+      public Builder ClearDefaultForeignEnum() {

+        PrepareBuilder();

+        result.hasDefaultForeignEnum = false;

+        result.defaultForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite.FOREIGN_LITE_BAR;

+        return this;

+      }

+      

+      public bool HasDefaultImportEnum {

+       get { return result.hasDefaultImportEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportEnumLite DefaultImportEnum {

+        get { return result.DefaultImportEnum; }

+        set { SetDefaultImportEnum(value); }

+      }

+      public Builder SetDefaultImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnumLite value) {

+        PrepareBuilder();

+        result.hasDefaultImportEnum = true;

+        result.defaultImportEnum_ = value;

+        return this;

+      }

+      public Builder ClearDefaultImportEnum() {

+        PrepareBuilder();

+        result.hasDefaultImportEnum = false;

+        result.defaultImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnumLite.IMPORT_LITE_BAR;

+        return this;

+      }

+      

+      public bool HasDefaultStringPiece {

+        get { return result.hasDefaultStringPiece; }

+      }

+      public string DefaultStringPiece {

+        get { return result.DefaultStringPiece; }

+        set { SetDefaultStringPiece(value); }

+      }

+      public Builder SetDefaultStringPiece(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultStringPiece = true;

+        result.defaultStringPiece_ = value;

+        return this;

+      }

+      public Builder ClearDefaultStringPiece() {

+        PrepareBuilder();

+        result.hasDefaultStringPiece = false;

+        result.defaultStringPiece_ = "abc";

+        return this;

+      }

+      

+      public bool HasDefaultCord {

+        get { return result.hasDefaultCord; }

+      }

+      public string DefaultCord {

+        get { return result.DefaultCord; }

+        set { SetDefaultCord(value); }

+      }

+      public Builder SetDefaultCord(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultCord = true;

+        result.defaultCord_ = value;

+        return this;

+      }

+      public Builder ClearDefaultCord() {

+        PrepareBuilder();

+        result.hasDefaultCord = false;

+        result.defaultCord_ = "123";

+        return this;

+      }

+    }

+    static TestAllTypesLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ForeignMessageLite : pb::GeneratedMessageLite<ForeignMessageLite, ForeignMessageLite.Builder> {

+    private ForeignMessageLite() { }

+    private static readonly ForeignMessageLite defaultInstance = new ForeignMessageLite().MakeReadOnly();

+    private static readonly string[] _foreignMessageLiteFieldNames = new string[] { "c" };

+    private static readonly uint[] _foreignMessageLiteFieldTags = new uint[] { 8 };

+    public static ForeignMessageLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ForeignMessageLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ForeignMessageLite ThisMessage {

+      get { return this; }

+    }

+    

+    public const int CFieldNumber = 1;

+    private bool hasC;

+    private int c_;

+    public bool HasC {

+      get { return hasC; }

+    }

+    public int C {

+      get { return c_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _foreignMessageLiteFieldNames;

+      if (hasC) {

+        output.WriteInt32(1, field_names[0], C);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasC) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, C);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      if (hasC) hash ^= c_.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      ForeignMessageLite other = obj as ForeignMessageLite;

+      if (other == null) return false;

+      if (hasC != other.hasC || (hasC && !c_.Equals(other.c_))) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("c", hasC, c_, writer);

+    }

+    #endregion

+    

+    public static ForeignMessageLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ForeignMessageLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ForeignMessageLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ForeignMessageLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ForeignMessageLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ForeignMessageLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ForeignMessageLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ForeignMessageLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ForeignMessageLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ForeignMessageLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ForeignMessageLite MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ForeignMessageLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<ForeignMessageLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ForeignMessageLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ForeignMessageLite result;

+      

+      private ForeignMessageLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ForeignMessageLite original = result;

+          result = new ForeignMessageLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ForeignMessageLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override ForeignMessageLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance; }

+      }

+      

+      public override ForeignMessageLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is ForeignMessageLite) {

+          return MergeFrom((ForeignMessageLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ForeignMessageLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.ForeignMessageLite.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasC) {

+          C = other.C;

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_foreignMessageLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _foreignMessageLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasC = input.ReadInt32(ref result.c_);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public bool HasC {

+        get { return result.hasC; }

+      }

+      public int C {

+        get { return result.C; }

+        set { SetC(value); }

+      }

+      public Builder SetC(int value) {

+        PrepareBuilder();

+        result.hasC = true;

+        result.c_ = value;

+        return this;

+      }

+      public Builder ClearC() {

+        PrepareBuilder();

+        result.hasC = false;

+        result.c_ = 0;

+        return this;

+      }

+    }

+    static ForeignMessageLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestPackedTypesLite : pb::GeneratedMessageLite<TestPackedTypesLite, TestPackedTypesLite.Builder> {

+    private TestPackedTypesLite() { }

+    private static readonly TestPackedTypesLite defaultInstance = new TestPackedTypesLite().MakeReadOnly();

+    private static readonly string[] _testPackedTypesLiteFieldNames = new string[] { "packed_bool", "packed_double", "packed_enum", "packed_fixed32", "packed_fixed64", "packed_float", "packed_int32", "packed_int64", "packed_sfixed32", "packed_sfixed64", "packed_sint32", "packed_sint64", "packed_uint32", "packed_uint64" };

+    private static readonly uint[] _testPackedTypesLiteFieldTags = new uint[] { 818, 810, 826, 770, 778, 802, 722, 730, 786, 794, 754, 762, 738, 746 };

+    public static TestPackedTypesLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestPackedTypesLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestPackedTypesLite ThisMessage {

+      get { return this; }

+    }

+    

+    public const int PackedInt32FieldNumber = 90;

+    private int packedInt32MemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedInt32List {

+      get { return pbc::Lists.AsReadOnly(packedInt32_); }

+    }

+    public int PackedInt32Count {

+      get { return packedInt32_.Count; }

+    }

+    public int GetPackedInt32(int index) {

+      return packedInt32_[index];

+    }

+    

+    public const int PackedInt64FieldNumber = 91;

+    private int packedInt64MemoizedSerializedSize;

+    private pbc::PopsicleList<long> packedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> PackedInt64List {

+      get { return pbc::Lists.AsReadOnly(packedInt64_); }

+    }

+    public int PackedInt64Count {

+      get { return packedInt64_.Count; }

+    }

+    public long GetPackedInt64(int index) {

+      return packedInt64_[index];

+    }

+    

+    public const int PackedUint32FieldNumber = 92;

+    private int packedUint32MemoizedSerializedSize;

+    private pbc::PopsicleList<uint> packedUint32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> PackedUint32List {

+      get { return pbc::Lists.AsReadOnly(packedUint32_); }

+    }

+    public int PackedUint32Count {

+      get { return packedUint32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetPackedUint32(int index) {

+      return packedUint32_[index];

+    }

+    

+    public const int PackedUint64FieldNumber = 93;

+    private int packedUint64MemoizedSerializedSize;

+    private pbc::PopsicleList<ulong> packedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> PackedUint64List {

+      get { return pbc::Lists.AsReadOnly(packedUint64_); }

+    }

+    public int PackedUint64Count {

+      get { return packedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetPackedUint64(int index) {

+      return packedUint64_[index];

+    }

+    

+    public const int PackedSint32FieldNumber = 94;

+    private int packedSint32MemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedSint32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedSint32List {

+      get { return pbc::Lists.AsReadOnly(packedSint32_); }

+    }

+    public int PackedSint32Count {

+      get { return packedSint32_.Count; }

+    }

+    public int GetPackedSint32(int index) {

+      return packedSint32_[index];

+    }

+    

+    public const int PackedSint64FieldNumber = 95;

+    private int packedSint64MemoizedSerializedSize;

+    private pbc::PopsicleList<long> packedSint64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> PackedSint64List {

+      get { return pbc::Lists.AsReadOnly(packedSint64_); }

+    }

+    public int PackedSint64Count {

+      get { return packedSint64_.Count; }

+    }

+    public long GetPackedSint64(int index) {

+      return packedSint64_[index];

+    }

+    

+    public const int PackedFixed32FieldNumber = 96;

+    private int packedFixed32MemoizedSerializedSize;

+    private pbc::PopsicleList<uint> packedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> PackedFixed32List {

+      get { return pbc::Lists.AsReadOnly(packedFixed32_); }

+    }

+    public int PackedFixed32Count {

+      get { return packedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetPackedFixed32(int index) {

+      return packedFixed32_[index];

+    }

+    

+    public const int PackedFixed64FieldNumber = 97;

+    private int packedFixed64MemoizedSerializedSize;

+    private pbc::PopsicleList<ulong> packedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> PackedFixed64List {

+      get { return pbc::Lists.AsReadOnly(packedFixed64_); }

+    }

+    public int PackedFixed64Count {

+      get { return packedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetPackedFixed64(int index) {

+      return packedFixed64_[index];

+    }

+    

+    public const int PackedSfixed32FieldNumber = 98;

+    private int packedSfixed32MemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedSfixed32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedSfixed32List {

+      get { return pbc::Lists.AsReadOnly(packedSfixed32_); }

+    }

+    public int PackedSfixed32Count {

+      get { return packedSfixed32_.Count; }

+    }

+    public int GetPackedSfixed32(int index) {

+      return packedSfixed32_[index];

+    }

+    

+    public const int PackedSfixed64FieldNumber = 99;

+    private int packedSfixed64MemoizedSerializedSize;

+    private pbc::PopsicleList<long> packedSfixed64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> PackedSfixed64List {

+      get { return pbc::Lists.AsReadOnly(packedSfixed64_); }

+    }

+    public int PackedSfixed64Count {

+      get { return packedSfixed64_.Count; }

+    }

+    public long GetPackedSfixed64(int index) {

+      return packedSfixed64_[index];

+    }

+    

+    public const int PackedFloatFieldNumber = 100;

+    private int packedFloatMemoizedSerializedSize;

+    private pbc::PopsicleList<float> packedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> PackedFloatList {

+      get { return pbc::Lists.AsReadOnly(packedFloat_); }

+    }

+    public int PackedFloatCount {

+      get { return packedFloat_.Count; }

+    }

+    public float GetPackedFloat(int index) {

+      return packedFloat_[index];

+    }

+    

+    public const int PackedDoubleFieldNumber = 101;

+    private int packedDoubleMemoizedSerializedSize;

+    private pbc::PopsicleList<double> packedDouble_ = new pbc::PopsicleList<double>();

+    public scg::IList<double> PackedDoubleList {

+      get { return pbc::Lists.AsReadOnly(packedDouble_); }

+    }

+    public int PackedDoubleCount {

+      get { return packedDouble_.Count; }

+    }

+    public double GetPackedDouble(int index) {

+      return packedDouble_[index];

+    }

+    

+    public const int PackedBoolFieldNumber = 102;

+    private int packedBoolMemoizedSerializedSize;

+    private pbc::PopsicleList<bool> packedBool_ = new pbc::PopsicleList<bool>();

+    public scg::IList<bool> PackedBoolList {

+      get { return pbc::Lists.AsReadOnly(packedBool_); }

+    }

+    public int PackedBoolCount {

+      get { return packedBool_.Count; }

+    }

+    public bool GetPackedBool(int index) {

+      return packedBool_[index];

+    }

+    

+    public const int PackedEnumFieldNumber = 103;

+    private int packedEnumMemoizedSerializedSize;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> packedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> PackedEnumList {

+      get { return pbc::Lists.AsReadOnly(packedEnum_); }

+    }

+    public int PackedEnumCount {

+      get { return packedEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite GetPackedEnum(int index) {

+      return packedEnum_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testPackedTypesLiteFieldNames;

+      if (packedInt32_.Count > 0) {

+        output.WritePackedInt32Array(90, field_names[6], packedInt32MemoizedSerializedSize, packedInt32_);

+      }

+      if (packedInt64_.Count > 0) {

+        output.WritePackedInt64Array(91, field_names[7], packedInt64MemoizedSerializedSize, packedInt64_);

+      }

+      if (packedUint32_.Count > 0) {

+        output.WritePackedUInt32Array(92, field_names[12], packedUint32MemoizedSerializedSize, packedUint32_);

+      }

+      if (packedUint64_.Count > 0) {

+        output.WritePackedUInt64Array(93, field_names[13], packedUint64MemoizedSerializedSize, packedUint64_);

+      }

+      if (packedSint32_.Count > 0) {

+        output.WritePackedSInt32Array(94, field_names[10], packedSint32MemoizedSerializedSize, packedSint32_);

+      }

+      if (packedSint64_.Count > 0) {

+        output.WritePackedSInt64Array(95, field_names[11], packedSint64MemoizedSerializedSize, packedSint64_);

+      }

+      if (packedFixed32_.Count > 0) {

+        output.WritePackedFixed32Array(96, field_names[3], packedFixed32MemoizedSerializedSize, packedFixed32_);

+      }

+      if (packedFixed64_.Count > 0) {

+        output.WritePackedFixed64Array(97, field_names[4], packedFixed64MemoizedSerializedSize, packedFixed64_);

+      }

+      if (packedSfixed32_.Count > 0) {

+        output.WritePackedSFixed32Array(98, field_names[8], packedSfixed32MemoizedSerializedSize, packedSfixed32_);

+      }

+      if (packedSfixed64_.Count > 0) {

+        output.WritePackedSFixed64Array(99, field_names[9], packedSfixed64MemoizedSerializedSize, packedSfixed64_);

+      }

+      if (packedFloat_.Count > 0) {

+        output.WritePackedFloatArray(100, field_names[5], packedFloatMemoizedSerializedSize, packedFloat_);

+      }

+      if (packedDouble_.Count > 0) {

+        output.WritePackedDoubleArray(101, field_names[1], packedDoubleMemoizedSerializedSize, packedDouble_);

+      }

+      if (packedBool_.Count > 0) {

+        output.WritePackedBoolArray(102, field_names[0], packedBoolMemoizedSerializedSize, packedBool_);

+      }

+      if (packedEnum_.Count > 0) {

+        output.WritePackedEnumArray(103, field_names[2], packedEnumMemoizedSerializedSize, packedEnum_);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        foreach (int element in PackedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedInt32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedInt32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in PackedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedInt64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedInt64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (uint element in PackedUint32List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedUint32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedUint32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in PackedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedUint64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedUint64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in PackedSint32List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedSint32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSint32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in PackedSint64List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedSint64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSint64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * packedFixed32_.Count;

+        size += dataSize;

+        if (packedFixed32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedFixed32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * packedFixed64_.Count;

+        size += dataSize;

+        if (packedFixed64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedFixed64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * packedSfixed32_.Count;

+        size += dataSize;

+        if (packedSfixed32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSfixed32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * packedSfixed64_.Count;

+        size += dataSize;

+        if (packedSfixed64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSfixed64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * packedFloat_.Count;

+        size += dataSize;

+        if (packedFloat_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedFloatMemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * packedDouble_.Count;

+        size += dataSize;

+        if (packedDouble_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedDoubleMemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 1 * packedBool_.Count;

+        size += dataSize;

+        if (packedBool_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedBoolMemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        if (packedEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite element in packedEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2;

+          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);

+        }

+        packedEnumMemoizedSerializedSize = dataSize;

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      foreach(int i in packedInt32_)

+        hash ^= i.GetHashCode();

+      foreach(long i in packedInt64_)

+        hash ^= i.GetHashCode();

+      foreach(uint i in packedUint32_)

+        hash ^= i.GetHashCode();

+      foreach(ulong i in packedUint64_)

+        hash ^= i.GetHashCode();

+      foreach(int i in packedSint32_)

+        hash ^= i.GetHashCode();

+      foreach(long i in packedSint64_)

+        hash ^= i.GetHashCode();

+      foreach(uint i in packedFixed32_)

+        hash ^= i.GetHashCode();

+      foreach(ulong i in packedFixed64_)

+        hash ^= i.GetHashCode();

+      foreach(int i in packedSfixed32_)

+        hash ^= i.GetHashCode();

+      foreach(long i in packedSfixed64_)

+        hash ^= i.GetHashCode();

+      foreach(float i in packedFloat_)

+        hash ^= i.GetHashCode();

+      foreach(double i in packedDouble_)

+        hash ^= i.GetHashCode();

+      foreach(bool i in packedBool_)

+        hash ^= i.GetHashCode();

+      foreach(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite i in packedEnum_)

+        hash ^= i.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      TestPackedTypesLite other = obj as TestPackedTypesLite;

+      if (other == null) return false;

+      if(packedInt32_.Count != other.packedInt32_.Count) return false;

+      for(int ix=0; ix < packedInt32_.Count; ix++)

+        if(!packedInt32_[ix].Equals(other.packedInt32_[ix])) return false;

+      if(packedInt64_.Count != other.packedInt64_.Count) return false;

+      for(int ix=0; ix < packedInt64_.Count; ix++)

+        if(!packedInt64_[ix].Equals(other.packedInt64_[ix])) return false;

+      if(packedUint32_.Count != other.packedUint32_.Count) return false;

+      for(int ix=0; ix < packedUint32_.Count; ix++)

+        if(!packedUint32_[ix].Equals(other.packedUint32_[ix])) return false;

+      if(packedUint64_.Count != other.packedUint64_.Count) return false;

+      for(int ix=0; ix < packedUint64_.Count; ix++)

+        if(!packedUint64_[ix].Equals(other.packedUint64_[ix])) return false;

+      if(packedSint32_.Count != other.packedSint32_.Count) return false;

+      for(int ix=0; ix < packedSint32_.Count; ix++)

+        if(!packedSint32_[ix].Equals(other.packedSint32_[ix])) return false;

+      if(packedSint64_.Count != other.packedSint64_.Count) return false;

+      for(int ix=0; ix < packedSint64_.Count; ix++)

+        if(!packedSint64_[ix].Equals(other.packedSint64_[ix])) return false;

+      if(packedFixed32_.Count != other.packedFixed32_.Count) return false;

+      for(int ix=0; ix < packedFixed32_.Count; ix++)

+        if(!packedFixed32_[ix].Equals(other.packedFixed32_[ix])) return false;

+      if(packedFixed64_.Count != other.packedFixed64_.Count) return false;

+      for(int ix=0; ix < packedFixed64_.Count; ix++)

+        if(!packedFixed64_[ix].Equals(other.packedFixed64_[ix])) return false;

+      if(packedSfixed32_.Count != other.packedSfixed32_.Count) return false;

+      for(int ix=0; ix < packedSfixed32_.Count; ix++)

+        if(!packedSfixed32_[ix].Equals(other.packedSfixed32_[ix])) return false;

+      if(packedSfixed64_.Count != other.packedSfixed64_.Count) return false;

+      for(int ix=0; ix < packedSfixed64_.Count; ix++)

+        if(!packedSfixed64_[ix].Equals(other.packedSfixed64_[ix])) return false;

+      if(packedFloat_.Count != other.packedFloat_.Count) return false;

+      for(int ix=0; ix < packedFloat_.Count; ix++)

+        if(!packedFloat_[ix].Equals(other.packedFloat_[ix])) return false;

+      if(packedDouble_.Count != other.packedDouble_.Count) return false;

+      for(int ix=0; ix < packedDouble_.Count; ix++)

+        if(!packedDouble_[ix].Equals(other.packedDouble_[ix])) return false;

+      if(packedBool_.Count != other.packedBool_.Count) return false;

+      for(int ix=0; ix < packedBool_.Count; ix++)

+        if(!packedBool_[ix].Equals(other.packedBool_[ix])) return false;

+      if(packedEnum_.Count != other.packedEnum_.Count) return false;

+      for(int ix=0; ix < packedEnum_.Count; ix++)

+        if(!packedEnum_[ix].Equals(other.packedEnum_[ix])) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("packed_int32", packedInt32_, writer);

+      PrintField("packed_int64", packedInt64_, writer);

+      PrintField("packed_uint32", packedUint32_, writer);

+      PrintField("packed_uint64", packedUint64_, writer);

+      PrintField("packed_sint32", packedSint32_, writer);

+      PrintField("packed_sint64", packedSint64_, writer);

+      PrintField("packed_fixed32", packedFixed32_, writer);

+      PrintField("packed_fixed64", packedFixed64_, writer);

+      PrintField("packed_sfixed32", packedSfixed32_, writer);

+      PrintField("packed_sfixed64", packedSfixed64_, writer);

+      PrintField("packed_float", packedFloat_, writer);

+      PrintField("packed_double", packedDouble_, writer);

+      PrintField("packed_bool", packedBool_, writer);

+      PrintField("packed_enum", packedEnum_, writer);

+    }

+    #endregion

+    

+    public static TestPackedTypesLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedTypesLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedTypesLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedTypesLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedTypesLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedTypesLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedTypesLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestPackedTypesLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestPackedTypesLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedTypesLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestPackedTypesLite MakeReadOnly() {

+      packedInt32_.MakeReadOnly();

+      packedInt64_.MakeReadOnly();

+      packedUint32_.MakeReadOnly();

+      packedUint64_.MakeReadOnly();

+      packedSint32_.MakeReadOnly();

+      packedSint64_.MakeReadOnly();

+      packedFixed32_.MakeReadOnly();

+      packedFixed64_.MakeReadOnly();

+      packedSfixed32_.MakeReadOnly();

+      packedSfixed64_.MakeReadOnly();

+      packedFloat_.MakeReadOnly();

+      packedDouble_.MakeReadOnly();

+      packedBool_.MakeReadOnly();

+      packedEnum_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestPackedTypesLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<TestPackedTypesLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestPackedTypesLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestPackedTypesLite result;

+      

+      private TestPackedTypesLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestPackedTypesLite original = result;

+          result = new TestPackedTypesLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestPackedTypesLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override TestPackedTypesLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedTypesLite.DefaultInstance; }

+      }

+      

+      public override TestPackedTypesLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is TestPackedTypesLite) {

+          return MergeFrom((TestPackedTypesLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestPackedTypesLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedTypesLite.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.packedInt32_.Count != 0) {

+          result.packedInt32_.Add(other.packedInt32_);

+        }

+        if (other.packedInt64_.Count != 0) {

+          result.packedInt64_.Add(other.packedInt64_);

+        }

+        if (other.packedUint32_.Count != 0) {

+          result.packedUint32_.Add(other.packedUint32_);

+        }

+        if (other.packedUint64_.Count != 0) {

+          result.packedUint64_.Add(other.packedUint64_);

+        }

+        if (other.packedSint32_.Count != 0) {

+          result.packedSint32_.Add(other.packedSint32_);

+        }

+        if (other.packedSint64_.Count != 0) {

+          result.packedSint64_.Add(other.packedSint64_);

+        }

+        if (other.packedFixed32_.Count != 0) {

+          result.packedFixed32_.Add(other.packedFixed32_);

+        }

+        if (other.packedFixed64_.Count != 0) {

+          result.packedFixed64_.Add(other.packedFixed64_);

+        }

+        if (other.packedSfixed32_.Count != 0) {

+          result.packedSfixed32_.Add(other.packedSfixed32_);

+        }

+        if (other.packedSfixed64_.Count != 0) {

+          result.packedSfixed64_.Add(other.packedSfixed64_);

+        }

+        if (other.packedFloat_.Count != 0) {

+          result.packedFloat_.Add(other.packedFloat_);

+        }

+        if (other.packedDouble_.Count != 0) {

+          result.packedDouble_.Add(other.packedDouble_);

+        }

+        if (other.packedBool_.Count != 0) {

+          result.packedBool_.Add(other.packedBool_);

+        }

+        if (other.packedEnum_.Count != 0) {

+          result.packedEnum_.Add(other.packedEnum_);

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testPackedTypesLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testPackedTypesLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 722:

+            case 720: {

+              input.ReadInt32Array(tag, field_name, result.packedInt32_);

+              break;

+            }

+            case 730:

+            case 728: {

+              input.ReadInt64Array(tag, field_name, result.packedInt64_);

+              break;

+            }

+            case 738:

+            case 736: {

+              input.ReadUInt32Array(tag, field_name, result.packedUint32_);

+              break;

+            }

+            case 746:

+            case 744: {

+              input.ReadUInt64Array(tag, field_name, result.packedUint64_);

+              break;

+            }

+            case 754:

+            case 752: {

+              input.ReadSInt32Array(tag, field_name, result.packedSint32_);

+              break;

+            }

+            case 762:

+            case 760: {

+              input.ReadSInt64Array(tag, field_name, result.packedSint64_);

+              break;

+            }

+            case 770:

+            case 773: {

+              input.ReadFixed32Array(tag, field_name, result.packedFixed32_);

+              break;

+            }

+            case 778:

+            case 777: {

+              input.ReadFixed64Array(tag, field_name, result.packedFixed64_);

+              break;

+            }

+            case 786:

+            case 789: {

+              input.ReadSFixed32Array(tag, field_name, result.packedSfixed32_);

+              break;

+            }

+            case 794:

+            case 793: {

+              input.ReadSFixed64Array(tag, field_name, result.packedSfixed64_);

+              break;

+            }

+            case 802:

+            case 805: {

+              input.ReadFloatArray(tag, field_name, result.packedFloat_);

+              break;

+            }

+            case 810:

+            case 809: {

+              input.ReadDoubleArray(tag, field_name, result.packedDouble_);

+              break;

+            }

+            case 818:

+            case 816: {

+              input.ReadBoolArray(tag, field_name, result.packedBool_);

+              break;

+            }

+            case 826:

+            case 824: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite>(tag, field_name, result.packedEnum_, out unknownItems);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<int> PackedInt32List {

+        get { return PrepareBuilder().packedInt32_; }

+      }

+      public int PackedInt32Count {

+        get { return result.PackedInt32Count; }

+      }

+      public int GetPackedInt32(int index) {

+        return result.GetPackedInt32(index);

+      }

+      public Builder SetPackedInt32(int index, int value) {

+        PrepareBuilder();

+        result.packedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddPackedInt32(int value) {

+        PrepareBuilder();

+        result.packedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedInt32() {

+        PrepareBuilder();

+        result.packedInt32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> PackedInt64List {

+        get { return PrepareBuilder().packedInt64_; }

+      }

+      public int PackedInt64Count {

+        get { return result.PackedInt64Count; }

+      }

+      public long GetPackedInt64(int index) {

+        return result.GetPackedInt64(index);

+      }

+      public Builder SetPackedInt64(int index, long value) {

+        PrepareBuilder();

+        result.packedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddPackedInt64(long value) {

+        PrepareBuilder();

+        result.packedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.packedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedInt64() {

+        PrepareBuilder();

+        result.packedInt64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> PackedUint32List {

+        get { return PrepareBuilder().packedUint32_; }

+      }

+      public int PackedUint32Count {

+        get { return result.PackedUint32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetPackedUint32(int index) {

+        return result.GetPackedUint32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedUint32(int index, uint value) {

+        PrepareBuilder();

+        result.packedUint32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedUint32(uint value) {

+        PrepareBuilder();

+        result.packedUint32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedUint32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.packedUint32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedUint32() {

+        PrepareBuilder();

+        result.packedUint32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> PackedUint64List {

+        get { return PrepareBuilder().packedUint64_; }

+      }

+      public int PackedUint64Count {

+        get { return result.PackedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetPackedUint64(int index) {

+        return result.GetPackedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.packedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedUint64(ulong value) {

+        PrepareBuilder();

+        result.packedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.packedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedUint64() {

+        PrepareBuilder();

+        result.packedUint64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> PackedSint32List {

+        get { return PrepareBuilder().packedSint32_; }

+      }

+      public int PackedSint32Count {

+        get { return result.PackedSint32Count; }

+      }

+      public int GetPackedSint32(int index) {

+        return result.GetPackedSint32(index);

+      }

+      public Builder SetPackedSint32(int index, int value) {

+        PrepareBuilder();

+        result.packedSint32_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSint32(int value) {

+        PrepareBuilder();

+        result.packedSint32_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSint32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedSint32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSint32() {

+        PrepareBuilder();

+        result.packedSint32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> PackedSint64List {

+        get { return PrepareBuilder().packedSint64_; }

+      }

+      public int PackedSint64Count {

+        get { return result.PackedSint64Count; }

+      }

+      public long GetPackedSint64(int index) {

+        return result.GetPackedSint64(index);

+      }

+      public Builder SetPackedSint64(int index, long value) {

+        PrepareBuilder();

+        result.packedSint64_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSint64(long value) {

+        PrepareBuilder();

+        result.packedSint64_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSint64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.packedSint64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSint64() {

+        PrepareBuilder();

+        result.packedSint64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> PackedFixed32List {

+        get { return PrepareBuilder().packedFixed32_; }

+      }

+      public int PackedFixed32Count {

+        get { return result.PackedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetPackedFixed32(int index) {

+        return result.GetPackedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.packedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedFixed32(uint value) {

+        PrepareBuilder();

+        result.packedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.packedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedFixed32() {

+        PrepareBuilder();

+        result.packedFixed32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> PackedFixed64List {

+        get { return PrepareBuilder().packedFixed64_; }

+      }

+      public int PackedFixed64Count {

+        get { return result.PackedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetPackedFixed64(int index) {

+        return result.GetPackedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.packedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedFixed64(ulong value) {

+        PrepareBuilder();

+        result.packedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.packedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedFixed64() {

+        PrepareBuilder();

+        result.packedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> PackedSfixed32List {

+        get { return PrepareBuilder().packedSfixed32_; }

+      }

+      public int PackedSfixed32Count {

+        get { return result.PackedSfixed32Count; }

+      }

+      public int GetPackedSfixed32(int index) {

+        return result.GetPackedSfixed32(index);

+      }

+      public Builder SetPackedSfixed32(int index, int value) {

+        PrepareBuilder();

+        result.packedSfixed32_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSfixed32(int value) {

+        PrepareBuilder();

+        result.packedSfixed32_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSfixed32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedSfixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSfixed32() {

+        PrepareBuilder();

+        result.packedSfixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> PackedSfixed64List {

+        get { return PrepareBuilder().packedSfixed64_; }

+      }

+      public int PackedSfixed64Count {

+        get { return result.PackedSfixed64Count; }

+      }

+      public long GetPackedSfixed64(int index) {

+        return result.GetPackedSfixed64(index);

+      }

+      public Builder SetPackedSfixed64(int index, long value) {

+        PrepareBuilder();

+        result.packedSfixed64_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSfixed64(long value) {

+        PrepareBuilder();

+        result.packedSfixed64_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSfixed64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.packedSfixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSfixed64() {

+        PrepareBuilder();

+        result.packedSfixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> PackedFloatList {

+        get { return PrepareBuilder().packedFloat_; }

+      }

+      public int PackedFloatCount {

+        get { return result.PackedFloatCount; }

+      }

+      public float GetPackedFloat(int index) {

+        return result.GetPackedFloat(index);

+      }

+      public Builder SetPackedFloat(int index, float value) {

+        PrepareBuilder();

+        result.packedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddPackedFloat(float value) {

+        PrepareBuilder();

+        result.packedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.packedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedFloat() {

+        PrepareBuilder();

+        result.packedFloat_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<double> PackedDoubleList {

+        get { return PrepareBuilder().packedDouble_; }

+      }

+      public int PackedDoubleCount {

+        get { return result.PackedDoubleCount; }

+      }

+      public double GetPackedDouble(int index) {

+        return result.GetPackedDouble(index);

+      }

+      public Builder SetPackedDouble(int index, double value) {

+        PrepareBuilder();

+        result.packedDouble_[index] = value;

+        return this;

+      }

+      public Builder AddPackedDouble(double value) {

+        PrepareBuilder();

+        result.packedDouble_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedDouble(scg::IEnumerable<double> values) {

+        PrepareBuilder();

+        result.packedDouble_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedDouble() {

+        PrepareBuilder();

+        result.packedDouble_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<bool> PackedBoolList {

+        get { return PrepareBuilder().packedBool_; }

+      }

+      public int PackedBoolCount {

+        get { return result.PackedBoolCount; }

+      }

+      public bool GetPackedBool(int index) {

+        return result.GetPackedBool(index);

+      }

+      public Builder SetPackedBool(int index, bool value) {

+        PrepareBuilder();

+        result.packedBool_[index] = value;

+        return this;

+      }

+      public Builder AddPackedBool(bool value) {

+        PrepareBuilder();

+        result.packedBool_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedBool(scg::IEnumerable<bool> values) {

+        PrepareBuilder();

+        result.packedBool_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedBool() {

+        PrepareBuilder();

+        result.packedBool_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> PackedEnumList {

+        get { return PrepareBuilder().packedEnum_; }

+      }

+      public int PackedEnumCount {

+        get { return result.PackedEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite GetPackedEnum(int index) {

+        return result.GetPackedEnum(index);

+      }

+      public Builder SetPackedEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite value) {

+        PrepareBuilder();

+        result.packedEnum_[index] = value;

+        return this;

+      }

+      public Builder AddPackedEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite value) {

+        PrepareBuilder();

+        result.packedEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnumLite> values) {

+        PrepareBuilder();

+        result.packedEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedEnum() {

+        PrepareBuilder();

+        result.packedEnum_.Clear();

+        return this;

+      }

+    }

+    static TestPackedTypesLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestAllExtensionsLite : pb::ExtendableMessageLite<TestAllExtensionsLite, TestAllExtensionsLite.Builder> {

+    private TestAllExtensionsLite() { }

+    private static readonly TestAllExtensionsLite defaultInstance = new TestAllExtensionsLite().MakeReadOnly();

+    private static readonly string[] _testAllExtensionsLiteFieldNames = new string[] {  };

+    private static readonly uint[] _testAllExtensionsLiteFieldTags = new uint[] {  };

+    public static TestAllExtensionsLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestAllExtensionsLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestAllExtensionsLite ThisMessage {

+      get { return this; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testAllExtensionsLiteFieldNames;

+      pb::ExtendableMessageLite<TestAllExtensionsLite, TestAllExtensionsLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      hash ^= base.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      TestAllExtensionsLite other = obj as TestAllExtensionsLite;

+      if (other == null) return false;

+      if (!base.Equals(other)) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      base.PrintTo(writer);

+    }

+    #endregion

+    

+    public static TestAllExtensionsLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllExtensionsLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllExtensionsLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllExtensionsLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllExtensionsLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllExtensionsLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllExtensionsLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestAllExtensionsLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestAllExtensionsLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllExtensionsLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestAllExtensionsLite MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestAllExtensionsLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilderLite<TestAllExtensionsLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestAllExtensionsLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestAllExtensionsLite result;

+      

+      private TestAllExtensionsLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestAllExtensionsLite original = result;

+          result = new TestAllExtensionsLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestAllExtensionsLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override TestAllExtensionsLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance; }

+      }

+      

+      public override TestAllExtensionsLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is TestAllExtensionsLite) {

+          return MergeFrom((TestAllExtensionsLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestAllExtensionsLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testAllExtensionsLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testAllExtensionsLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+    }

+    static TestAllExtensionsLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class OptionalGroup_extension_lite : pb::GeneratedMessageLite<OptionalGroup_extension_lite, OptionalGroup_extension_lite.Builder> {

+    private OptionalGroup_extension_lite() { }

+    private static readonly OptionalGroup_extension_lite defaultInstance = new OptionalGroup_extension_lite().MakeReadOnly();

+    private static readonly string[] _optionalGroupExtensionLiteFieldNames = new string[] { "a" };

+    private static readonly uint[] _optionalGroupExtensionLiteFieldTags = new uint[] { 136 };

+    public static OptionalGroup_extension_lite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override OptionalGroup_extension_lite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override OptionalGroup_extension_lite ThisMessage {

+      get { return this; }

+    }

+    

+    public const int AFieldNumber = 17;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _optionalGroupExtensionLiteFieldNames;

+      if (hasA) {

+        output.WriteInt32(17, field_names[0], A);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(17, A);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      if (hasA) hash ^= a_.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      OptionalGroup_extension_lite other = obj as OptionalGroup_extension_lite;

+      if (other == null) return false;

+      if (hasA != other.hasA || (hasA && !a_.Equals(other.a_))) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("a", hasA, a_, writer);

+    }

+    #endregion

+    

+    public static OptionalGroup_extension_lite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OptionalGroup_extension_lite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OptionalGroup_extension_lite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OptionalGroup_extension_lite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OptionalGroup_extension_lite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OptionalGroup_extension_lite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static OptionalGroup_extension_lite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static OptionalGroup_extension_lite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static OptionalGroup_extension_lite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OptionalGroup_extension_lite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private OptionalGroup_extension_lite MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(OptionalGroup_extension_lite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<OptionalGroup_extension_lite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(OptionalGroup_extension_lite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private OptionalGroup_extension_lite result;

+      

+      private OptionalGroup_extension_lite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          OptionalGroup_extension_lite original = result;

+          result = new OptionalGroup_extension_lite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override OptionalGroup_extension_lite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override OptionalGroup_extension_lite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite.DefaultInstance; }

+      }

+      

+      public override OptionalGroup_extension_lite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is OptionalGroup_extension_lite) {

+          return MergeFrom((OptionalGroup_extension_lite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(OptionalGroup_extension_lite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension_lite.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_optionalGroupExtensionLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _optionalGroupExtensionLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 136: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+    }

+    static OptionalGroup_extension_lite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class RepeatedGroup_extension_lite : pb::GeneratedMessageLite<RepeatedGroup_extension_lite, RepeatedGroup_extension_lite.Builder> {

+    private RepeatedGroup_extension_lite() { }

+    private static readonly RepeatedGroup_extension_lite defaultInstance = new RepeatedGroup_extension_lite().MakeReadOnly();

+    private static readonly string[] _repeatedGroupExtensionLiteFieldNames = new string[] { "a" };

+    private static readonly uint[] _repeatedGroupExtensionLiteFieldTags = new uint[] { 376 };

+    public static RepeatedGroup_extension_lite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override RepeatedGroup_extension_lite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override RepeatedGroup_extension_lite ThisMessage {

+      get { return this; }

+    }

+    

+    public const int AFieldNumber = 47;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _repeatedGroupExtensionLiteFieldNames;

+      if (hasA) {

+        output.WriteInt32(47, field_names[0], A);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(47, A);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      if (hasA) hash ^= a_.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      RepeatedGroup_extension_lite other = obj as RepeatedGroup_extension_lite;

+      if (other == null) return false;

+      if (hasA != other.hasA || (hasA && !a_.Equals(other.a_))) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("a", hasA, a_, writer);

+    }

+    #endregion

+    

+    public static RepeatedGroup_extension_lite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RepeatedGroup_extension_lite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RepeatedGroup_extension_lite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RepeatedGroup_extension_lite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RepeatedGroup_extension_lite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RepeatedGroup_extension_lite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static RepeatedGroup_extension_lite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static RepeatedGroup_extension_lite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static RepeatedGroup_extension_lite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RepeatedGroup_extension_lite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private RepeatedGroup_extension_lite MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(RepeatedGroup_extension_lite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<RepeatedGroup_extension_lite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(RepeatedGroup_extension_lite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private RepeatedGroup_extension_lite result;

+      

+      private RepeatedGroup_extension_lite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          RepeatedGroup_extension_lite original = result;

+          result = new RepeatedGroup_extension_lite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override RepeatedGroup_extension_lite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override RepeatedGroup_extension_lite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite.DefaultInstance; }

+      }

+      

+      public override RepeatedGroup_extension_lite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is RepeatedGroup_extension_lite) {

+          return MergeFrom((RepeatedGroup_extension_lite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(RepeatedGroup_extension_lite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension_lite.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupExtensionLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _repeatedGroupExtensionLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 376: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+    }

+    static RepeatedGroup_extension_lite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestPackedExtensionsLite : pb::ExtendableMessageLite<TestPackedExtensionsLite, TestPackedExtensionsLite.Builder> {

+    private TestPackedExtensionsLite() { }

+    private static readonly TestPackedExtensionsLite defaultInstance = new TestPackedExtensionsLite().MakeReadOnly();

+    private static readonly string[] _testPackedExtensionsLiteFieldNames = new string[] {  };

+    private static readonly uint[] _testPackedExtensionsLiteFieldTags = new uint[] {  };

+    public static TestPackedExtensionsLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestPackedExtensionsLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestPackedExtensionsLite ThisMessage {

+      get { return this; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testPackedExtensionsLiteFieldNames;

+      pb::ExtendableMessageLite<TestPackedExtensionsLite, TestPackedExtensionsLite.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      hash ^= base.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      TestPackedExtensionsLite other = obj as TestPackedExtensionsLite;

+      if (other == null) return false;

+      if (!base.Equals(other)) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      base.PrintTo(writer);

+    }

+    #endregion

+    

+    public static TestPackedExtensionsLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedExtensionsLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedExtensionsLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedExtensionsLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedExtensionsLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedExtensionsLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedExtensionsLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestPackedExtensionsLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestPackedExtensionsLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedExtensionsLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestPackedExtensionsLite MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestPackedExtensionsLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilderLite<TestPackedExtensionsLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestPackedExtensionsLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestPackedExtensionsLite result;

+      

+      private TestPackedExtensionsLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestPackedExtensionsLite original = result;

+          result = new TestPackedExtensionsLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestPackedExtensionsLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override TestPackedExtensionsLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance; }

+      }

+      

+      public override TestPackedExtensionsLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is TestPackedExtensionsLite) {

+          return MergeFrom((TestPackedExtensionsLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestPackedExtensionsLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedExtensionsLite.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testPackedExtensionsLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testPackedExtensionsLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+    }

+    static TestPackedExtensionsLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestNestedExtensionLite : pb::GeneratedMessageLite<TestNestedExtensionLite, TestNestedExtensionLite.Builder> {

+    private TestNestedExtensionLite() { }

+    private static readonly TestNestedExtensionLite defaultInstance = new TestNestedExtensionLite().MakeReadOnly();

+    private static readonly string[] _testNestedExtensionLiteFieldNames = new string[] {  };

+    private static readonly uint[] _testNestedExtensionLiteFieldTags = new uint[] {  };

+    public static TestNestedExtensionLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestNestedExtensionLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestNestedExtensionLite ThisMessage {

+      get { return this; }

+    }

+    

+    public const int NestedExtensionFieldNumber = 12345;

+    public static pb::GeneratedExtensionLite<global::Google.ProtocolBuffers.TestProtos.TestAllExtensionsLite, int> NestedExtension;

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testNestedExtensionLiteFieldNames;

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      TestNestedExtensionLite other = obj as TestNestedExtensionLite;

+      if (other == null) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+    }

+    #endregion

+    

+    public static TestNestedExtensionLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedExtensionLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedExtensionLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedExtensionLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedExtensionLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedExtensionLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedExtensionLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestNestedExtensionLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestNestedExtensionLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedExtensionLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestNestedExtensionLite MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestNestedExtensionLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<TestNestedExtensionLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestNestedExtensionLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestNestedExtensionLite result;

+      

+      private TestNestedExtensionLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestNestedExtensionLite original = result;

+          result = new TestNestedExtensionLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestNestedExtensionLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override TestNestedExtensionLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.DefaultInstance; }

+      }

+      

+      public override TestNestedExtensionLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is TestNestedExtensionLite) {

+          return MergeFrom((TestNestedExtensionLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestNestedExtensionLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedExtensionLite.DefaultInstance) return this;

+        PrepareBuilder();

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testNestedExtensionLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testNestedExtensionLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+    }

+    static TestNestedExtensionLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestDeprecatedLite : pb::GeneratedMessageLite<TestDeprecatedLite, TestDeprecatedLite.Builder> {

+    private TestDeprecatedLite() { }

+    private static readonly TestDeprecatedLite defaultInstance = new TestDeprecatedLite().MakeReadOnly();

+    private static readonly string[] _testDeprecatedLiteFieldNames = new string[] { "deprecated_field" };

+    private static readonly uint[] _testDeprecatedLiteFieldTags = new uint[] { 8 };

+    public static TestDeprecatedLite DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestDeprecatedLite DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestDeprecatedLite ThisMessage {

+      get { return this; }

+    }

+    

+    public const int DeprecatedFieldFieldNumber = 1;

+    private bool hasDeprecatedField;

+    private int deprecatedField_;

+    [global::System.ObsoleteAttribute()]

+    public bool HasDeprecatedField {

+      get { return hasDeprecatedField; }

+    }

+    [global::System.ObsoleteAttribute()]

+    public int DeprecatedField {

+      get { return deprecatedField_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testDeprecatedLiteFieldNames;

+      if (hasDeprecatedField) {

+        output.WriteInt32(1, field_names[0], DeprecatedField);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasDeprecatedField) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, DeprecatedField);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      if (hasDeprecatedField) hash ^= deprecatedField_.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      TestDeprecatedLite other = obj as TestDeprecatedLite;

+      if (other == null) return false;

+      if (hasDeprecatedField != other.hasDeprecatedField || (hasDeprecatedField && !deprecatedField_.Equals(other.deprecatedField_))) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("deprecated_field", hasDeprecatedField, deprecatedField_, writer);

+    }

+    #endregion

+    

+    public static TestDeprecatedLite ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDeprecatedLite ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDeprecatedLite ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDeprecatedLite ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDeprecatedLite ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDeprecatedLite ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestDeprecatedLite ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestDeprecatedLite ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestDeprecatedLite ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDeprecatedLite ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestDeprecatedLite MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestDeprecatedLite prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<TestDeprecatedLite, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestDeprecatedLite cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestDeprecatedLite result;

+      

+      private TestDeprecatedLite PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestDeprecatedLite original = result;

+          result = new TestDeprecatedLite();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestDeprecatedLite MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override TestDeprecatedLite DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDeprecatedLite.DefaultInstance; }

+      }

+      

+      public override TestDeprecatedLite BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is TestDeprecatedLite) {

+          return MergeFrom((TestDeprecatedLite) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestDeprecatedLite other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestDeprecatedLite.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasDeprecatedField) {

+          DeprecatedField = other.DeprecatedField;

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testDeprecatedLiteFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testDeprecatedLiteFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasDeprecatedField = input.ReadInt32(ref result.deprecatedField_);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      [global::System.ObsoleteAttribute()]

+      public bool HasDeprecatedField {

+        get { return result.hasDeprecatedField; }

+      }

+      [global::System.ObsoleteAttribute()]

+      public int DeprecatedField {

+        get { return result.DeprecatedField; }

+        set { SetDeprecatedField(value); }

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder SetDeprecatedField(int value) {

+        PrepareBuilder();

+        result.hasDeprecatedField = true;

+        result.deprecatedField_ = value;

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder ClearDeprecatedField() {

+        PrepareBuilder();

+        result.hasDeprecatedField = false;

+        result.deprecatedField_ = 0;

+        return this;

+      }

+    }

+    static TestDeprecatedLite() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestLiteProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestProtoFile.cs b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestProtoFile.cs
new file mode 100644
index 0000000..dd31c67
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestProtoFile.cs
@@ -0,0 +1,21602 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestProtoFile {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalInt32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalInt64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalUint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalUint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSfixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSfixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFloatExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalDoubleExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalBoolExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalStringExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalBytesExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalGroupExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalNestedMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalForeignMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalImportMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalNestedEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalForeignEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalImportEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalStringPieceExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalCordExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedInt32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedInt64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedUint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedUint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSfixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSfixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFloatExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedDoubleExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedBoolExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedStringExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedBytesExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedGroupExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedNestedMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedForeignMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedImportMessageExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedNestedEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedForeignEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedImportEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedStringPieceExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedCordExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultInt32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultInt64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultUint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultUint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSfixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSfixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFloatExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultDoubleExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultBoolExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultStringExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultBytesExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultNestedEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultForeignEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultImportEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultStringPieceExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultCordExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.MyExtensionString);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.MyExtensionInt);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedInt32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedInt64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedUint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedUint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSint32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSint64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSfixed32Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSfixed64Extension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFloatExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedDoubleExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedBoolExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedEnumExtension);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Test);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestRequired.Single);

+      registry.Add(global::Google.ProtocolBuffers.TestProtos.TestRequired.Multi);

+    }

+    #endregion

+    #region Extensions

+    public const int OptionalInt32ExtensionFieldNumber = 1;

+    public static pb::GeneratedExtensionBase<int> OptionalInt32Extension;

+    public const int OptionalInt64ExtensionFieldNumber = 2;

+    public static pb::GeneratedExtensionBase<long> OptionalInt64Extension;

+    public const int OptionalUint32ExtensionFieldNumber = 3;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> OptionalUint32Extension;

+    public const int OptionalUint64ExtensionFieldNumber = 4;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> OptionalUint64Extension;

+    public const int OptionalSint32ExtensionFieldNumber = 5;

+    public static pb::GeneratedExtensionBase<int> OptionalSint32Extension;

+    public const int OptionalSint64ExtensionFieldNumber = 6;

+    public static pb::GeneratedExtensionBase<long> OptionalSint64Extension;

+    public const int OptionalFixed32ExtensionFieldNumber = 7;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> OptionalFixed32Extension;

+    public const int OptionalFixed64ExtensionFieldNumber = 8;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> OptionalFixed64Extension;

+    public const int OptionalSfixed32ExtensionFieldNumber = 9;

+    public static pb::GeneratedExtensionBase<int> OptionalSfixed32Extension;

+    public const int OptionalSfixed64ExtensionFieldNumber = 10;

+    public static pb::GeneratedExtensionBase<long> OptionalSfixed64Extension;

+    public const int OptionalFloatExtensionFieldNumber = 11;

+    public static pb::GeneratedExtensionBase<float> OptionalFloatExtension;

+    public const int OptionalDoubleExtensionFieldNumber = 12;

+    public static pb::GeneratedExtensionBase<double> OptionalDoubleExtension;

+    public const int OptionalBoolExtensionFieldNumber = 13;

+    public static pb::GeneratedExtensionBase<bool> OptionalBoolExtension;

+    public const int OptionalStringExtensionFieldNumber = 14;

+    public static pb::GeneratedExtensionBase<string> OptionalStringExtension;

+    public const int OptionalBytesExtensionFieldNumber = 15;

+    public static pb::GeneratedExtensionBase<pb::ByteString> OptionalBytesExtension;

+    public const int OptionalGroupExtensionFieldNumber = 16;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension> OptionalGroupExtension;

+    public const int OptionalNestedMessageExtensionFieldNumber = 18;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> OptionalNestedMessageExtension;

+    public const int OptionalForeignMessageExtensionFieldNumber = 19;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> OptionalForeignMessageExtension;

+    public const int OptionalImportMessageExtensionFieldNumber = 20;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportMessage> OptionalImportMessageExtension;

+    public const int OptionalNestedEnumExtensionFieldNumber = 21;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> OptionalNestedEnumExtension;

+    public const int OptionalForeignEnumExtensionFieldNumber = 22;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> OptionalForeignEnumExtension;

+    public const int OptionalImportEnumExtensionFieldNumber = 23;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportEnum> OptionalImportEnumExtension;

+    public const int OptionalStringPieceExtensionFieldNumber = 24;

+    public static pb::GeneratedExtensionBase<string> OptionalStringPieceExtension;

+    public const int OptionalCordExtensionFieldNumber = 25;

+    public static pb::GeneratedExtensionBase<string> OptionalCordExtension;

+    public const int RepeatedInt32ExtensionFieldNumber = 31;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedInt32Extension;

+    public const int RepeatedInt64ExtensionFieldNumber = 32;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedInt64Extension;

+    public const int RepeatedUint32ExtensionFieldNumber = 33;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> RepeatedUint32Extension;

+    public const int RepeatedUint64ExtensionFieldNumber = 34;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> RepeatedUint64Extension;

+    public const int RepeatedSint32ExtensionFieldNumber = 35;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedSint32Extension;

+    public const int RepeatedSint64ExtensionFieldNumber = 36;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedSint64Extension;

+    public const int RepeatedFixed32ExtensionFieldNumber = 37;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> RepeatedFixed32Extension;

+    public const int RepeatedFixed64ExtensionFieldNumber = 38;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> RepeatedFixed64Extension;

+    public const int RepeatedSfixed32ExtensionFieldNumber = 39;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> RepeatedSfixed32Extension;

+    public const int RepeatedSfixed64ExtensionFieldNumber = 40;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> RepeatedSfixed64Extension;

+    public const int RepeatedFloatExtensionFieldNumber = 41;

+    public static pb::GeneratedExtensionBase<scg::IList<float>> RepeatedFloatExtension;

+    public const int RepeatedDoubleExtensionFieldNumber = 42;

+    public static pb::GeneratedExtensionBase<scg::IList<double>> RepeatedDoubleExtension;

+    public const int RepeatedBoolExtensionFieldNumber = 43;

+    public static pb::GeneratedExtensionBase<scg::IList<bool>> RepeatedBoolExtension;

+    public const int RepeatedStringExtensionFieldNumber = 44;

+    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedStringExtension;

+    public const int RepeatedBytesExtensionFieldNumber = 45;

+    public static pb::GeneratedExtensionBase<scg::IList<pb::ByteString>> RepeatedBytesExtension;

+    public const int RepeatedGroupExtensionFieldNumber = 46;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension>> RepeatedGroupExtension;

+    public const int RepeatedNestedMessageExtensionFieldNumber = 48;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>> RepeatedNestedMessageExtension;

+    public const int RepeatedForeignMessageExtensionFieldNumber = 49;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>> RepeatedForeignMessageExtension;

+    public const int RepeatedImportMessageExtensionFieldNumber = 50;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportMessage>> RepeatedImportMessageExtension;

+    public const int RepeatedNestedEnumExtensionFieldNumber = 51;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>> RepeatedNestedEnumExtension;

+    public const int RepeatedForeignEnumExtensionFieldNumber = 52;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>> RepeatedForeignEnumExtension;

+    public const int RepeatedImportEnumExtensionFieldNumber = 53;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportEnum>> RepeatedImportEnumExtension;

+    public const int RepeatedStringPieceExtensionFieldNumber = 54;

+    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedStringPieceExtension;

+    public const int RepeatedCordExtensionFieldNumber = 55;

+    public static pb::GeneratedExtensionBase<scg::IList<string>> RepeatedCordExtension;

+    public const int DefaultInt32ExtensionFieldNumber = 61;

+    public static pb::GeneratedExtensionBase<int> DefaultInt32Extension;

+    public const int DefaultInt64ExtensionFieldNumber = 62;

+    public static pb::GeneratedExtensionBase<long> DefaultInt64Extension;

+    public const int DefaultUint32ExtensionFieldNumber = 63;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> DefaultUint32Extension;

+    public const int DefaultUint64ExtensionFieldNumber = 64;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> DefaultUint64Extension;

+    public const int DefaultSint32ExtensionFieldNumber = 65;

+    public static pb::GeneratedExtensionBase<int> DefaultSint32Extension;

+    public const int DefaultSint64ExtensionFieldNumber = 66;

+    public static pb::GeneratedExtensionBase<long> DefaultSint64Extension;

+    public const int DefaultFixed32ExtensionFieldNumber = 67;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<uint> DefaultFixed32Extension;

+    public const int DefaultFixed64ExtensionFieldNumber = 68;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<ulong> DefaultFixed64Extension;

+    public const int DefaultSfixed32ExtensionFieldNumber = 69;

+    public static pb::GeneratedExtensionBase<int> DefaultSfixed32Extension;

+    public const int DefaultSfixed64ExtensionFieldNumber = 70;

+    public static pb::GeneratedExtensionBase<long> DefaultSfixed64Extension;

+    public const int DefaultFloatExtensionFieldNumber = 71;

+    public static pb::GeneratedExtensionBase<float> DefaultFloatExtension;

+    public const int DefaultDoubleExtensionFieldNumber = 72;

+    public static pb::GeneratedExtensionBase<double> DefaultDoubleExtension;

+    public const int DefaultBoolExtensionFieldNumber = 73;

+    public static pb::GeneratedExtensionBase<bool> DefaultBoolExtension;

+    public const int DefaultStringExtensionFieldNumber = 74;

+    public static pb::GeneratedExtensionBase<string> DefaultStringExtension;

+    public const int DefaultBytesExtensionFieldNumber = 75;

+    public static pb::GeneratedExtensionBase<pb::ByteString> DefaultBytesExtension;

+    public const int DefaultNestedEnumExtensionFieldNumber = 81;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> DefaultNestedEnumExtension;

+    public const int DefaultForeignEnumExtensionFieldNumber = 82;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> DefaultForeignEnumExtension;

+    public const int DefaultImportEnumExtensionFieldNumber = 83;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.ImportEnum> DefaultImportEnumExtension;

+    public const int DefaultStringPieceExtensionFieldNumber = 84;

+    public static pb::GeneratedExtensionBase<string> DefaultStringPieceExtension;

+    public const int DefaultCordExtensionFieldNumber = 85;

+    public static pb::GeneratedExtensionBase<string> DefaultCordExtension;

+    public const int MyExtensionStringFieldNumber = 50;

+    public static pb::GeneratedExtensionBase<string> MyExtensionString;

+    public const int MyExtensionIntFieldNumber = 5;

+    public static pb::GeneratedExtensionBase<int> MyExtensionInt;

+    public const int PackedInt32ExtensionFieldNumber = 90;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedInt32Extension;

+    public const int PackedInt64ExtensionFieldNumber = 91;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedInt64Extension;

+    public const int PackedUint32ExtensionFieldNumber = 92;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> PackedUint32Extension;

+    public const int PackedUint64ExtensionFieldNumber = 93;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> PackedUint64Extension;

+    public const int PackedSint32ExtensionFieldNumber = 94;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedSint32Extension;

+    public const int PackedSint64ExtensionFieldNumber = 95;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedSint64Extension;

+    public const int PackedFixed32ExtensionFieldNumber = 96;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<uint>> PackedFixed32Extension;

+    public const int PackedFixed64ExtensionFieldNumber = 97;

+    [global::System.CLSCompliant(false)]

+    public static pb::GeneratedExtensionBase<scg::IList<ulong>> PackedFixed64Extension;

+    public const int PackedSfixed32ExtensionFieldNumber = 98;

+    public static pb::GeneratedExtensionBase<scg::IList<int>> PackedSfixed32Extension;

+    public const int PackedSfixed64ExtensionFieldNumber = 99;

+    public static pb::GeneratedExtensionBase<scg::IList<long>> PackedSfixed64Extension;

+    public const int PackedFloatExtensionFieldNumber = 100;

+    public static pb::GeneratedExtensionBase<scg::IList<float>> PackedFloatExtension;

+    public const int PackedDoubleExtensionFieldNumber = 101;

+    public static pb::GeneratedExtensionBase<scg::IList<double>> PackedDoubleExtension;

+    public const int PackedBoolExtensionFieldNumber = 102;

+    public static pb::GeneratedExtensionBase<scg::IList<bool>> PackedBoolExtension;

+    public const int PackedEnumExtensionFieldNumber = 103;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>> PackedEnumExtension;

+    #endregion

+    

+    #region Static variables

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder> internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder> internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder> internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder> internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields, global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.Builder> internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_ForeignMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder> internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestAllExtensions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllExtensions, global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.Builder> internal__static_protobuf_unittest_TestAllExtensions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.Builder> internal__static_protobuf_unittest_OptionalGroup_extension__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.Builder> internal__static_protobuf_unittest_RepeatedGroup_extension__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestNestedExtension__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedExtension, global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Builder> internal__static_protobuf_unittest_TestNestedExtension__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRequired__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequired, global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder> internal__static_protobuf_unittest_TestRequired__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRequiredForeign__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign, global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.Builder> internal__static_protobuf_unittest_TestRequiredForeign__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestForeignNested__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestForeignNested, global::Google.ProtocolBuffers.TestProtos.TestForeignNested.Builder> internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestEmptyMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.Builder> internal__static_protobuf_unittest_TestEmptyMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.Builder> internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges, global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.Builder> internal__static_protobuf_unittest_TestMultipleExtensionRanges__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber, global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.Builder> internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage, global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder> internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder> internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder> internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Builder> internal__static_protobuf_unittest_TestDupFieldNumber__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder> internal__static_protobuf_unittest_TestDupFieldNumber_Foo__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder> internal__static_protobuf_unittest_TestDupFieldNumber_Bar__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Builder> internal__static_protobuf_unittest_TestNestedMessageHasBits__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder> internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames, global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.Builder> internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestFieldOrderings__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings, global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Builder> internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues, global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Builder> internal__static_protobuf_unittest_TestExtremeDefaultValues__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_SparseEnumMessage__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage, global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.Builder> internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OneString__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneString, global::Google.ProtocolBuffers.TestProtos.OneString.Builder> internal__static_protobuf_unittest_OneString__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_OneBytes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneBytes, global::Google.ProtocolBuffers.TestProtos.OneBytes.Builder> internal__static_protobuf_unittest_OneBytes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestPackedTypes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedTypes, global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.Builder> internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes, global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.Builder> internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestPackedExtensions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions, global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.Builder> internal__static_protobuf_unittest_TestPackedExtensions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Builder> internal__static_protobuf_unittest_TestDynamicExtensions__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder> internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes, global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.Builder> internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooRequest__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooRequest, global::Google.ProtocolBuffers.TestProtos.FooRequest.Builder> internal__static_protobuf_unittest_FooRequest__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_FooResponse__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooResponse, global::Google.ProtocolBuffers.TestProtos.FooResponse.Builder> internal__static_protobuf_unittest_FooResponse__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BarRequest__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarRequest, global::Google.ProtocolBuffers.TestProtos.BarRequest.Builder> internal__static_protobuf_unittest_BarRequest__FieldAccessorTable;

+    internal static pbd::MessageDescriptor internal__static_protobuf_unittest_BarResponse__Descriptor;

+    internal static pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarResponse, global::Google.ProtocolBuffers.TestProtos.BarResponse.Builder> internal__static_protobuf_unittest_BarResponse__FieldAccessorTable;

+    #endregion

+    #region Descriptor

+    public static pbd::FileDescriptor Descriptor {

+      get { return descriptor; }

+    }

+    private static pbd::FileDescriptor descriptor;

+    

+    static UnitTestProtoFile() {

+      byte[] descriptorData = global::System.Convert.FromBase64String(

+          string.Concat(

+            "Ch5nb29nbGUvcHJvdG9idWYvdW5pdHRlc3QucHJvdG8SEXByb3RvYnVmX3Vu", 

+            "aXR0ZXN0GiRnb29nbGUvcHJvdG9idWYvY3NoYXJwX29wdGlvbnMucHJvdG8a", 

+            "JWdvb2dsZS9wcm90b2J1Zi91bml0dGVzdF9pbXBvcnQucHJvdG8iuxUKDFRl", 

+            "c3RBbGxUeXBlcxIWCg5vcHRpb25hbF9pbnQzMhgBIAEoBRIWCg5vcHRpb25h", 

+            "bF9pbnQ2NBgCIAEoAxIXCg9vcHRpb25hbF91aW50MzIYAyABKA0SFwoPb3B0", 

+            "aW9uYWxfdWludDY0GAQgASgEEhcKD29wdGlvbmFsX3NpbnQzMhgFIAEoERIX", 

+            "Cg9vcHRpb25hbF9zaW50NjQYBiABKBISGAoQb3B0aW9uYWxfZml4ZWQzMhgH", 

+            "IAEoBxIYChBvcHRpb25hbF9maXhlZDY0GAggASgGEhkKEW9wdGlvbmFsX3Nm", 

+            "aXhlZDMyGAkgASgPEhkKEW9wdGlvbmFsX3NmaXhlZDY0GAogASgQEhYKDm9w", 

+            "dGlvbmFsX2Zsb2F0GAsgASgCEhcKD29wdGlvbmFsX2RvdWJsZRgMIAEoARIV", 

+            "Cg1vcHRpb25hbF9ib29sGA0gASgIEhcKD29wdGlvbmFsX3N0cmluZxgOIAEo", 

+            "CRIWCg5vcHRpb25hbF9ieXRlcxgPIAEoDBJECg1vcHRpb25hbGdyb3VwGBAg", 

+            "ASgKMi0ucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk9wdGlvbmFs", 

+            "R3JvdXASTgoXb3B0aW9uYWxfbmVzdGVkX21lc3NhZ2UYEiABKAsyLS5wcm90", 

+            "b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZRJDChhv", 

+            "cHRpb25hbF9mb3JlaWduX21lc3NhZ2UYEyABKAsyIS5wcm90b2J1Zl91bml0", 

+            "dGVzdC5Gb3JlaWduTWVzc2FnZRJIChdvcHRpb25hbF9pbXBvcnRfbWVzc2Fn", 

+            "ZRgUIAEoCzInLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRNZXNz", 

+            "YWdlEkgKFG9wdGlvbmFsX25lc3RlZF9lbnVtGBUgASgOMioucHJvdG9idWZf", 

+            "dW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW0SPQoVb3B0aW9uYWxf", 

+            "Zm9yZWlnbl9lbnVtGBYgASgOMh4ucHJvdG9idWZfdW5pdHRlc3QuRm9yZWln", 

+            "bkVudW0SQgoUb3B0aW9uYWxfaW1wb3J0X2VudW0YFyABKA4yJC5wcm90b2J1", 

+            "Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0RW51bRIhChVvcHRpb25hbF9zdHJp", 

+            "bmdfcGllY2UYGCABKAlCAggCEhkKDW9wdGlvbmFsX2NvcmQYGSABKAlCAggB", 

+            "EhYKDnJlcGVhdGVkX2ludDMyGB8gAygFEhYKDnJlcGVhdGVkX2ludDY0GCAg", 

+            "AygDEhcKD3JlcGVhdGVkX3VpbnQzMhghIAMoDRIXCg9yZXBlYXRlZF91aW50", 

+            "NjQYIiADKAQSFwoPcmVwZWF0ZWRfc2ludDMyGCMgAygREhcKD3JlcGVhdGVk", 

+            "X3NpbnQ2NBgkIAMoEhIYChByZXBlYXRlZF9maXhlZDMyGCUgAygHEhgKEHJl", 

+            "cGVhdGVkX2ZpeGVkNjQYJiADKAYSGQoRcmVwZWF0ZWRfc2ZpeGVkMzIYJyAD", 

+            "KA8SGQoRcmVwZWF0ZWRfc2ZpeGVkNjQYKCADKBASFgoOcmVwZWF0ZWRfZmxv", 

+            "YXQYKSADKAISFwoPcmVwZWF0ZWRfZG91YmxlGCogAygBEhUKDXJlcGVhdGVk", 

+            "X2Jvb2wYKyADKAgSFwoPcmVwZWF0ZWRfc3RyaW5nGCwgAygJEhYKDnJlcGVh", 

+            "dGVkX2J5dGVzGC0gAygMEkQKDXJlcGVhdGVkZ3JvdXAYLiADKAoyLS5wcm90", 

+            "b2J1Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuUmVwZWF0ZWRHcm91cBJOChdy", 

+            "ZXBlYXRlZF9uZXN0ZWRfbWVzc2FnZRgwIAMoCzItLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRNZXNzYWdlEkMKGHJlcGVhdGVkX2Zv", 

+            "cmVpZ25fbWVzc2FnZRgxIAMoCzIhLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVp", 

+            "Z25NZXNzYWdlEkgKF3JlcGVhdGVkX2ltcG9ydF9tZXNzYWdlGDIgAygLMicu", 

+            "cHJvdG9idWZfdW5pdHRlc3RfaW1wb3J0LkltcG9ydE1lc3NhZ2USSAoUcmVw", 

+            "ZWF0ZWRfbmVzdGVkX2VudW0YMyADKA4yKi5wcm90b2J1Zl91bml0dGVzdC5U", 

+            "ZXN0QWxsVHlwZXMuTmVzdGVkRW51bRI9ChVyZXBlYXRlZF9mb3JlaWduX2Vu", 

+            "dW0YNCADKA4yHi5wcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51bRJCChRy", 

+            "ZXBlYXRlZF9pbXBvcnRfZW51bRg1IAMoDjIkLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "X2ltcG9ydC5JbXBvcnRFbnVtEiEKFXJlcGVhdGVkX3N0cmluZ19waWVjZRg2", 

+            "IAMoCUICCAISGQoNcmVwZWF0ZWRfY29yZBg3IAMoCUICCAESGQoNZGVmYXVs", 

+            "dF9pbnQzMhg9IAEoBToCNDESGQoNZGVmYXVsdF9pbnQ2NBg+IAEoAzoCNDIS", 

+            "GgoOZGVmYXVsdF91aW50MzIYPyABKA06AjQzEhoKDmRlZmF1bHRfdWludDY0", 

+            "GEAgASgEOgI0NBIbCg5kZWZhdWx0X3NpbnQzMhhBIAEoEToDLTQ1EhoKDmRl", 

+            "ZmF1bHRfc2ludDY0GEIgASgSOgI0NhIbCg9kZWZhdWx0X2ZpeGVkMzIYQyAB", 

+            "KAc6AjQ3EhsKD2RlZmF1bHRfZml4ZWQ2NBhEIAEoBjoCNDgSHAoQZGVmYXVs", 

+            "dF9zZml4ZWQzMhhFIAEoDzoCNDkSHQoQZGVmYXVsdF9zZml4ZWQ2NBhGIAEo", 

+            "EDoDLTUwEhsKDWRlZmF1bHRfZmxvYXQYRyABKAI6BDUxLjUSHQoOZGVmYXVs", 

+            "dF9kb3VibGUYSCABKAE6BTUyMDAwEhoKDGRlZmF1bHRfYm9vbBhJIAEoCDoE", 

+            "dHJ1ZRIdCg5kZWZhdWx0X3N0cmluZxhKIAEoCToFaGVsbG8SHAoNZGVmYXVs", 

+            "dF9ieXRlcxhLIAEoDDoFd29ybGQSTAoTZGVmYXVsdF9uZXN0ZWRfZW51bRhR", 

+            "IAEoDjIqLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxUeXBlcy5OZXN0ZWRF", 

+            "bnVtOgNCQVISSQoUZGVmYXVsdF9mb3JlaWduX2VudW0YUiABKA4yHi5wcm90", 

+            "b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51bToLRk9SRUlHTl9CQVISTQoTZGVm", 

+            "YXVsdF9pbXBvcnRfZW51bRhTIAEoDjIkLnByb3RvYnVmX3VuaXR0ZXN0X2lt", 

+            "cG9ydC5JbXBvcnRFbnVtOgpJTVBPUlRfQkFSEiUKFGRlZmF1bHRfc3RyaW5n", 

+            "X3BpZWNlGFQgASgJOgNhYmNCAggCEh0KDGRlZmF1bHRfY29yZBhVIAEoCToD", 

+            "MTIzQgIIARobCg1OZXN0ZWRNZXNzYWdlEgoKAmJiGAEgASgFGhoKDU9wdGlv", 

+            "bmFsR3JvdXASCQoBYRgRIAEoBRoaCg1SZXBlYXRlZEdyb3VwEgkKAWEYLyAB", 

+            "KAUiJwoKTmVzdGVkRW51bRIHCgNGT08QARIHCgNCQVIQAhIHCgNCQVoQAyI0", 

+            "ChRUZXN0RGVwcmVjYXRlZEZpZWxkcxIcChBkZXByZWNhdGVkX2ludDMyGAEg", 

+            "ASgFQgIYASIbCg5Gb3JlaWduTWVzc2FnZRIJCgFjGAEgASgFIh0KEVRlc3RB", 

+            "bGxFeHRlbnNpb25zKggIARCAgICAAiIkChdPcHRpb25hbEdyb3VwX2V4dGVu", 

+            "c2lvbhIJCgFhGBEgASgFIiQKF1JlcGVhdGVkR3JvdXBfZXh0ZW5zaW9uEgkK", 

+            "AWEYLyABKAUiUAoTVGVzdE5lc3RlZEV4dGVuc2lvbjI5CgR0ZXN0EiQucHJv", 

+            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMY6gcgASgJOgR0ZXN0", 

+            "ItUFCgxUZXN0UmVxdWlyZWQSCQoBYRgBIAIoBRIOCgZkdW1teTIYAiABKAUS", 

+            "CQoBYhgDIAIoBRIOCgZkdW1teTQYBCABKAUSDgoGZHVtbXk1GAUgASgFEg4K", 

+            "BmR1bW15NhgGIAEoBRIOCgZkdW1teTcYByABKAUSDgoGZHVtbXk4GAggASgF", 

+            "Eg4KBmR1bW15ORgJIAEoBRIPCgdkdW1teTEwGAogASgFEg8KB2R1bW15MTEY", 

+            "CyABKAUSDwoHZHVtbXkxMhgMIAEoBRIPCgdkdW1teTEzGA0gASgFEg8KB2R1", 

+            "bW15MTQYDiABKAUSDwoHZHVtbXkxNRgPIAEoBRIPCgdkdW1teTE2GBAgASgF", 

+            "Eg8KB2R1bW15MTcYESABKAUSDwoHZHVtbXkxOBgSIAEoBRIPCgdkdW1teTE5", 

+            "GBMgASgFEg8KB2R1bW15MjAYFCABKAUSDwoHZHVtbXkyMRgVIAEoBRIPCgdk", 

+            "dW1teTIyGBYgASgFEg8KB2R1bW15MjMYFyABKAUSDwoHZHVtbXkyNBgYIAEo", 

+            "BRIPCgdkdW1teTI1GBkgASgFEg8KB2R1bW15MjYYGiABKAUSDwoHZHVtbXky", 

+            "NxgbIAEoBRIPCgdkdW1teTI4GBwgASgFEg8KB2R1bW15MjkYHSABKAUSDwoH", 

+            "ZHVtbXkzMBgeIAEoBRIPCgdkdW1teTMxGB8gASgFEg8KB2R1bW15MzIYICAB", 

+            "KAUSCQoBYxghIAIoBTJWCgZzaW5nbGUSJC5wcm90b2J1Zl91bml0dGVzdC5U", 

+            "ZXN0QWxsRXh0ZW5zaW9ucxjoByABKAsyHy5wcm90b2J1Zl91bml0dGVzdC5U", 

+            "ZXN0UmVxdWlyZWQyVQoFbXVsdGkSJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxjpByADKAsyHy5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "UmVxdWlyZWQimgEKE1Rlc3RSZXF1aXJlZEZvcmVpZ24SOQoQb3B0aW9uYWxf", 

+            "bWVzc2FnZRgBIAEoCzIfLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RSZXF1aXJl", 

+            "ZBI5ChByZXBlYXRlZF9tZXNzYWdlGAIgAygLMh8ucHJvdG9idWZfdW5pdHRl", 

+            "c3QuVGVzdFJlcXVpcmVkEg0KBWR1bW15GAMgASgFIloKEVRlc3RGb3JlaWdu", 

+            "TmVzdGVkEkUKDmZvcmVpZ25fbmVzdGVkGAEgASgLMi0ucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2UiEgoQVGVzdEVtcHR5", 

+            "TWVzc2FnZSIqCh5UZXN0RW1wdHlNZXNzYWdlV2l0aEV4dGVuc2lvbnMqCAgB", 

+            "EICAgIACIjcKG1Rlc3RNdWx0aXBsZUV4dGVuc2lvblJhbmdlcyoECCoQKyoG", 

+            "CK8gEJQhKgoIgIAEEICAgIACIjQKGFRlc3RSZWFsbHlMYXJnZVRhZ051bWJl", 

+            "chIJCgFhGAEgASgFEg0KAmJiGP///38gASgFIlUKFFRlc3RSZWN1cnNpdmVN", 

+            "ZXNzYWdlEjIKAWEYASABKAsyJy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UmVj", 

+            "dXJzaXZlTWVzc2FnZRIJCgFpGAIgASgFIksKFFRlc3RNdXR1YWxSZWN1cnNp", 

+            "b25BEjMKAmJiGAEgASgLMicucHJvdG9idWZfdW5pdHRlc3QuVGVzdE11dHVh", 

+            "bFJlY3Vyc2lvbkIiYgoUVGVzdE11dHVhbFJlY3Vyc2lvbkISMgoBYRgBIAEo", 

+            "CzInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RNdXR1YWxSZWN1cnNpb25BEhYK", 

+            "Dm9wdGlvbmFsX2ludDMyGAIgASgFIrMBChJUZXN0RHVwRmllbGROdW1iZXIS", 

+            "CQoBYRgBIAEoBRI2CgNmb28YAiABKAoyKS5wcm90b2J1Zl91bml0dGVzdC5U", 

+            "ZXN0RHVwRmllbGROdW1iZXIuRm9vEjYKA2JhchgDIAEoCjIpLnByb3RvYnVm", 

+            "X3VuaXR0ZXN0LlRlc3REdXBGaWVsZE51bWJlci5CYXIaEAoDRm9vEgkKAWEY", 

+            "ASABKAUaEAoDQmFyEgkKAWEYASABKAUigAIKGFRlc3ROZXN0ZWRNZXNzYWdl", 

+            "SGFzQml0cxJaChdvcHRpb25hbF9uZXN0ZWRfbWVzc2FnZRgBIAEoCzI5LnBy", 

+            "b3RvYnVmX3VuaXR0ZXN0LlRlc3ROZXN0ZWRNZXNzYWdlSGFzQml0cy5OZXN0", 

+            "ZWRNZXNzYWdlGocBCg1OZXN0ZWRNZXNzYWdlEiQKHG5lc3RlZG1lc3NhZ2Vf", 

+            "cmVwZWF0ZWRfaW50MzIYASADKAUSUAolbmVzdGVkbWVzc2FnZV9yZXBlYXRl", 

+            "ZF9mb3JlaWdubWVzc2FnZRgCIAMoCzIhLnByb3RvYnVmX3VuaXR0ZXN0LkZv", 

+            "cmVpZ25NZXNzYWdlIuUDChdUZXN0Q2FtZWxDYXNlRmllbGROYW1lcxIWCg5Q", 

+            "cmltaXRpdmVGaWVsZBgBIAEoBRITCgtTdHJpbmdGaWVsZBgCIAEoCRIxCglF", 

+            "bnVtRmllbGQYAyABKA4yHi5wcm90b2J1Zl91bml0dGVzdC5Gb3JlaWduRW51", 

+            "bRI3CgxNZXNzYWdlRmllbGQYBCABKAsyIS5wcm90b2J1Zl91bml0dGVzdC5G", 

+            "b3JlaWduTWVzc2FnZRIcChBTdHJpbmdQaWVjZUZpZWxkGAUgASgJQgIIAhIV", 

+            "CglDb3JkRmllbGQYBiABKAlCAggBEh4KFlJlcGVhdGVkUHJpbWl0aXZlRmll", 

+            "bGQYByADKAUSGwoTUmVwZWF0ZWRTdHJpbmdGaWVsZBgIIAMoCRI5ChFSZXBl", 

+            "YXRlZEVudW1GaWVsZBgJIAMoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVp", 

+            "Z25FbnVtEj8KFFJlcGVhdGVkTWVzc2FnZUZpZWxkGAogAygLMiEucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuRm9yZWlnbk1lc3NhZ2USJAoYUmVwZWF0ZWRTdHJpbmdQ", 

+            "aWVjZUZpZWxkGAsgAygJQgIIAhIdChFSZXBlYXRlZENvcmRGaWVsZBgMIAMo", 

+            "CUICCAEiVQoSVGVzdEZpZWxkT3JkZXJpbmdzEhEKCW15X3N0cmluZxgLIAEo", 

+            "CRIOCgZteV9pbnQYASABKAMSEAoIbXlfZmxvYXQYZSABKAIqBAgCEAsqBAgM", 

+            "EGUiowUKGFRlc3RFeHRyZW1lRGVmYXVsdFZhbHVlcxI/Cg1lc2NhcGVkX2J5", 

+            "dGVzGAEgASgMOihcMDAwXDAwMVwwMDdcMDEwXDAxNFxuXHJcdFwwMTNcXFwn", 

+            "XCJcMzc2EiAKDGxhcmdlX3VpbnQzMhgCIAEoDToKNDI5NDk2NzI5NRIqCgxs", 

+            "YXJnZV91aW50NjQYAyABKAQ6FDE4NDQ2NzQ0MDczNzA5NTUxNjE1EiAKC3Nt", 

+            "YWxsX2ludDMyGAQgASgFOgstMjE0NzQ4MzY0NxIpCgtzbWFsbF9pbnQ2NBgF", 

+            "IAEoAzoULTkyMjMzNzIwMzY4NTQ3NzU4MDcSGAoLdXRmOF9zdHJpbmcYBiAB", 

+            "KAk6A+GItBIVCgp6ZXJvX2Zsb2F0GAcgASgCOgEwEhQKCW9uZV9mbG9hdBgI", 

+            "IAEoAjoBMRIYCgtzbWFsbF9mbG9hdBgJIAEoAjoDMS41Eh4KEm5lZ2F0aXZl", 

+            "X29uZV9mbG9hdBgKIAEoAjoCLTESHAoObmVnYXRpdmVfZmxvYXQYCyABKAI6", 

+            "BC0xLjUSGwoLbGFyZ2VfZmxvYXQYDCABKAI6BjJlKzAwOBIlChRzbWFsbF9u", 

+            "ZWdhdGl2ZV9mbG9hdBgNIAEoAjoHLThlLTAyOBIXCgppbmZfZG91YmxlGA4g", 

+            "ASgBOgNpbmYSHAoObmVnX2luZl9kb3VibGUYDyABKAE6BC1pbmYSFwoKbmFu", 

+            "X2RvdWJsZRgQIAEoAToDbmFuEhYKCWluZl9mbG9hdBgRIAEoAjoDaW5mEhsK", 

+            "DW5lZ19pbmZfZmxvYXQYEiABKAI6BC1pbmYSFgoJbmFuX2Zsb2F0GBMgASgC", 

+            "OgNuYW4SKwoMY3BwX3RyaWdyYXBoGBQgASgJOhU/ID8gPz8gPz8gPz8/ID8/", 

+            "LyA/Py0iSwoRU3BhcnNlRW51bU1lc3NhZ2USNgoLc3BhcnNlX2VudW0YASAB", 

+            "KA4yIS5wcm90b2J1Zl91bml0dGVzdC5UZXN0U3BhcnNlRW51bSIZCglPbmVT", 

+            "dHJpbmcSDAoEZGF0YRgBIAEoCSIYCghPbmVCeXRlcxIMCgRkYXRhGAEgASgM", 

+            "IqoDCg9UZXN0UGFja2VkVHlwZXMSGAoMcGFja2VkX2ludDMyGFogAygFQgIQ", 

+            "ARIYCgxwYWNrZWRfaW50NjQYWyADKANCAhABEhkKDXBhY2tlZF91aW50MzIY", 

+            "XCADKA1CAhABEhkKDXBhY2tlZF91aW50NjQYXSADKARCAhABEhkKDXBhY2tl", 

+            "ZF9zaW50MzIYXiADKBFCAhABEhkKDXBhY2tlZF9zaW50NjQYXyADKBJCAhAB", 

+            "EhoKDnBhY2tlZF9maXhlZDMyGGAgAygHQgIQARIaCg5wYWNrZWRfZml4ZWQ2", 

+            "NBhhIAMoBkICEAESGwoPcGFja2VkX3NmaXhlZDMyGGIgAygPQgIQARIbCg9w", 

+            "YWNrZWRfc2ZpeGVkNjQYYyADKBBCAhABEhgKDHBhY2tlZF9mbG9hdBhkIAMo", 

+            "AkICEAESGQoNcGFja2VkX2RvdWJsZRhlIAMoAUICEAESFwoLcGFja2VkX2Jv", 

+            "b2wYZiADKAhCAhABEjcKC3BhY2tlZF9lbnVtGGcgAygOMh4ucHJvdG9idWZf", 

+            "dW5pdHRlc3QuRm9yZWlnbkVudW1CAhABIsgDChFUZXN0VW5wYWNrZWRUeXBl", 

+            "cxIaCg51bnBhY2tlZF9pbnQzMhhaIAMoBUICEAASGgoOdW5wYWNrZWRfaW50", 

+            "NjQYWyADKANCAhAAEhsKD3VucGFja2VkX3VpbnQzMhhcIAMoDUICEAASGwoP", 

+            "dW5wYWNrZWRfdWludDY0GF0gAygEQgIQABIbCg91bnBhY2tlZF9zaW50MzIY", 

+            "XiADKBFCAhAAEhsKD3VucGFja2VkX3NpbnQ2NBhfIAMoEkICEAASHAoQdW5w", 

+            "YWNrZWRfZml4ZWQzMhhgIAMoB0ICEAASHAoQdW5wYWNrZWRfZml4ZWQ2NBhh", 

+            "IAMoBkICEAASHQoRdW5wYWNrZWRfc2ZpeGVkMzIYYiADKA9CAhAAEh0KEXVu", 

+            "cGFja2VkX3NmaXhlZDY0GGMgAygQQgIQABIaCg51bnBhY2tlZF9mbG9hdBhk", 

+            "IAMoAkICEAASGwoPdW5wYWNrZWRfZG91YmxlGGUgAygBQgIQABIZCg11bnBh", 

+            "Y2tlZF9ib29sGGYgAygIQgIQABI5Cg11bnBhY2tlZF9lbnVtGGcgAygOMh4u", 

+            "cHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbkVudW1CAhAAIiAKFFRlc3RQYWNr", 

+            "ZWRFeHRlbnNpb25zKggIARCAgICAAiKZBAoVVGVzdER5bmFtaWNFeHRlbnNp", 

+            "b25zEhkKEHNjYWxhcl9leHRlbnNpb24Y0A8gASgHEjcKDmVudW1fZXh0ZW5z", 

+            "aW9uGNEPIAEoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVtElkK", 

+            "FmR5bmFtaWNfZW51bV9leHRlbnNpb24Y0g8gASgOMjgucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdER5bmFtaWNFeHRlbnNpb25zLkR5bmFtaWNFbnVtVHlwZRI9", 

+            "ChFtZXNzYWdlX2V4dGVuc2lvbhjTDyABKAsyIS5wcm90b2J1Zl91bml0dGVz", 

+            "dC5Gb3JlaWduTWVzc2FnZRJfChlkeW5hbWljX21lc3NhZ2VfZXh0ZW5zaW9u", 

+            "GNQPIAEoCzI7LnByb3RvYnVmX3VuaXR0ZXN0LlRlc3REeW5hbWljRXh0ZW5z", 

+            "aW9ucy5EeW5hbWljTWVzc2FnZVR5cGUSGwoScmVwZWF0ZWRfZXh0ZW5zaW9u", 

+            "GNUPIAMoCRIdChBwYWNrZWRfZXh0ZW5zaW9uGNYPIAMoEUICEAEaLAoSRHlu", 

+            "YW1pY01lc3NhZ2VUeXBlEhYKDWR5bmFtaWNfZmllbGQYtBAgASgFIkcKD0R5", 

+            "bmFtaWNFbnVtVHlwZRIQCgtEWU5BTUlDX0ZPTxCYERIQCgtEWU5BTUlDX0JB", 

+            "UhCZERIQCgtEWU5BTUlDX0JBWhCaESLAAQojVGVzdFJlcGVhdGVkU2NhbGFy", 

+            "RGlmZmVyZW50VGFnU2l6ZXMSGAoQcmVwZWF0ZWRfZml4ZWQzMhgMIAMoBxIW", 

+            "Cg5yZXBlYXRlZF9pbnQzMhgNIAMoBRIZChByZXBlYXRlZF9maXhlZDY0GP4P", 

+            "IAMoBhIXCg5yZXBlYXRlZF9pbnQ2NBj/DyADKAMSGAoOcmVwZWF0ZWRfZmxv", 

+            "YXQY/v8PIAMoAhIZCg9yZXBlYXRlZF91aW50NjQY//8PIAMoBCIMCgpGb29S", 

+            "ZXF1ZXN0Ig0KC0Zvb1Jlc3BvbnNlIgwKCkJhclJlcXVlc3QiDQoLQmFyUmVz", 

+            "cG9uc2UqQAoLRm9yZWlnbkVudW0SDwoLRk9SRUlHTl9GT08QBBIPCgtGT1JF", 

+            "SUdOX0JBUhAFEg8KC0ZPUkVJR05fQkFaEAYqRwoUVGVzdEVudW1XaXRoRHVw", 

+            "VmFsdWUSCAoERk9PMRABEggKBEJBUjEQAhIHCgNCQVoQAxIICgRGT08yEAES", 

+            "CAoEQkFSMhACKokBCg5UZXN0U3BhcnNlRW51bRIMCghTUEFSU0VfQRB7Eg4K", 

+            "CFNQQVJTRV9CEKbnAxIPCghTUEFSU0VfQxCysYAGEhUKCFNQQVJTRV9EEPH/", 

+            "/////////wESFQoIU1BBUlNFX0UQtN78////////ARIMCghTUEFSU0VfRhAA", 

+            "EgwKCFNQQVJTRV9HEAIymQEKC1Rlc3RTZXJ2aWNlEkQKA0ZvbxIdLnByb3Rv", 

+            "YnVmX3VuaXR0ZXN0LkZvb1JlcXVlc3QaHi5wcm90b2J1Zl91bml0dGVzdC5G", 

+            "b29SZXNwb25zZRJECgNCYXISHS5wcm90b2J1Zl91bml0dGVzdC5CYXJSZXF1", 

+            "ZXN0Gh4ucHJvdG9idWZfdW5pdHRlc3QuQmFyUmVzcG9uc2U6RgoYb3B0aW9u", 

+            "YWxfaW50MzJfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFs", 

+            "bEV4dGVuc2lvbnMYASABKAU6RgoYb3B0aW9uYWxfaW50NjRfZXh0ZW5zaW9u", 

+            "EiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYAiABKAM6", 

+            "RwoZb3B0aW9uYWxfdWludDMyX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RBbGxFeHRlbnNpb25zGAMgASgNOkcKGW9wdGlvbmFsX3VpbnQ2", 

+            "NF9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5z", 

+            "aW9ucxgEIAEoBDpHChlvcHRpb25hbF9zaW50MzJfZXh0ZW5zaW9uEiQucHJv", 

+            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYBSABKBE6RwoZb3B0", 

+            "aW9uYWxfc2ludDY0X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 

+            "c3RBbGxFeHRlbnNpb25zGAYgASgSOkgKGm9wdGlvbmFsX2ZpeGVkMzJfZXh0", 

+            "ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMY", 

+            "ByABKAc6SAoab3B0aW9uYWxfZml4ZWQ2NF9leHRlbnNpb24SJC5wcm90b2J1", 

+            "Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgIIAEoBjpJChtvcHRpb25h", 

+            "bF9zZml4ZWQzMl9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxgJIAEoDzpJChtvcHRpb25hbF9zZml4ZWQ2NF9leHRl", 

+            "bnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgK", 

+            "IAEoEDpGChhvcHRpb25hbF9mbG9hdF9leHRlbnNpb24SJC5wcm90b2J1Zl91", 

+            "bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgLIAEoAjpHChlvcHRpb25hbF9k", 

+            "b3VibGVfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4", 

+            "dGVuc2lvbnMYDCABKAE6RQoXb3B0aW9uYWxfYm9vbF9leHRlbnNpb24SJC5w", 

+            "cm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgNIAEoCDpHChlv", 

+            "cHRpb25hbF9zdHJpbmdfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3Qu", 

+            "VGVzdEFsbEV4dGVuc2lvbnMYDiABKAk6RgoYb3B0aW9uYWxfYnl0ZXNfZXh0", 

+            "ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMY", 

+            "DyABKAw6cQoXb3B0aW9uYWxncm91cF9leHRlbnNpb24SJC5wcm90b2J1Zl91", 

+            "bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgQIAEoCjIqLnByb3RvYnVmX3Vu", 

+            "aXR0ZXN0Lk9wdGlvbmFsR3JvdXBfZXh0ZW5zaW9uOn4KIW9wdGlvbmFsX25l", 

+            "c3RlZF9tZXNzYWdlX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 

+            "c3RBbGxFeHRlbnNpb25zGBIgASgLMi0ucHJvdG9idWZfdW5pdHRlc3QuVGVz", 

+            "dEFsbFR5cGVzLk5lc3RlZE1lc3NhZ2U6cwoib3B0aW9uYWxfZm9yZWlnbl9t", 

+            "ZXNzYWdlX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF", 

+            "eHRlbnNpb25zGBMgASgLMiEucHJvdG9idWZfdW5pdHRlc3QuRm9yZWlnbk1l", 

+            "c3NhZ2U6eAohb3B0aW9uYWxfaW1wb3J0X21lc3NhZ2VfZXh0ZW5zaW9uEiQu", 

+            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYFCABKAsyJy5w", 

+            "cm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0TWVzc2FnZTp4Ch5vcHRp", 

+            "b25hbF9uZXN0ZWRfZW51bV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVz", 

+            "dC5UZXN0QWxsRXh0ZW5zaW9ucxgVIAEoDjIqLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "LlRlc3RBbGxUeXBlcy5OZXN0ZWRFbnVtOm0KH29wdGlvbmFsX2ZvcmVpZ25f", 

+            "ZW51bV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0", 

+            "ZW5zaW9ucxgWIAEoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVt", 

+            "OnIKHm9wdGlvbmFsX2ltcG9ydF9lbnVtX2V4dGVuc2lvbhIkLnByb3RvYnVm", 

+            "X3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGBcgASgOMiQucHJvdG9idWZf", 

+            "dW5pdHRlc3RfaW1wb3J0LkltcG9ydEVudW06UQofb3B0aW9uYWxfc3RyaW5n", 

+            "X3BpZWNlX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF", 

+            "eHRlbnNpb25zGBggASgJQgIIAjpJChdvcHRpb25hbF9jb3JkX2V4dGVuc2lv", 

+            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGBkgASgJ", 

+            "QgIIATpGChhyZXBlYXRlZF9pbnQzMl9leHRlbnNpb24SJC5wcm90b2J1Zl91", 

+            "bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgfIAMoBTpGChhyZXBlYXRlZF9p", 

+            "bnQ2NF9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0", 

+            "ZW5zaW9ucxggIAMoAzpHChlyZXBlYXRlZF91aW50MzJfZXh0ZW5zaW9uEiQu", 

+            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYISADKA06RwoZ", 

+            "cmVwZWF0ZWRfdWludDY0X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "LlRlc3RBbGxFeHRlbnNpb25zGCIgAygEOkcKGXJlcGVhdGVkX3NpbnQzMl9l", 

+            "eHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9u", 

+            "cxgjIAMoETpHChlyZXBlYXRlZF9zaW50NjRfZXh0ZW5zaW9uEiQucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYJCADKBI6SAoacmVwZWF0", 

+            "ZWRfZml4ZWQzMl9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxglIAMoBzpIChpyZXBlYXRlZF9maXhlZDY0X2V4dGVu", 

+            "c2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGCYg", 

+            "AygGOkkKG3JlcGVhdGVkX3NmaXhlZDMyX2V4dGVuc2lvbhIkLnByb3RvYnVm", 

+            "X3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGCcgAygPOkkKG3JlcGVhdGVk", 

+            "X3NmaXhlZDY0X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RB", 

+            "bGxFeHRlbnNpb25zGCggAygQOkYKGHJlcGVhdGVkX2Zsb2F0X2V4dGVuc2lv", 

+            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGCkgAygC", 

+            "OkcKGXJlcGVhdGVkX2RvdWJsZV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0", 

+            "dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgqIAMoATpFChdyZXBlYXRlZF9ib29s", 

+            "X2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNp", 

+            "b25zGCsgAygIOkcKGXJlcGVhdGVkX3N0cmluZ19leHRlbnNpb24SJC5wcm90", 

+            "b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxgsIAMoCTpGChhyZXBl", 

+            "YXRlZF9ieXRlc19leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxgtIAMoDDpxChdyZXBlYXRlZGdyb3VwX2V4dGVuc2lv", 

+            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGC4gAygK", 

+            "MioucHJvdG9idWZfdW5pdHRlc3QuUmVwZWF0ZWRHcm91cF9leHRlbnNpb246", 

+            "fgohcmVwZWF0ZWRfbmVzdGVkX21lc3NhZ2VfZXh0ZW5zaW9uEiQucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYMCADKAsyLS5wcm90b2J1", 

+            "Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkTWVzc2FnZTpzCiJyZXBl", 

+            "YXRlZF9mb3JlaWduX21lc3NhZ2VfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYMSADKAsyIS5wcm90b2J1Zl91bml0", 

+            "dGVzdC5Gb3JlaWduTWVzc2FnZTp4CiFyZXBlYXRlZF9pbXBvcnRfbWVzc2Fn", 

+            "ZV9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5z", 

+            "aW9ucxgyIAMoCzInLnByb3RvYnVmX3VuaXR0ZXN0X2ltcG9ydC5JbXBvcnRN", 

+            "ZXNzYWdlOngKHnJlcGVhdGVkX25lc3RlZF9lbnVtX2V4dGVuc2lvbhIkLnBy", 

+            "b3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGDMgAygOMioucHJv", 

+            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbFR5cGVzLk5lc3RlZEVudW06bQofcmVw", 

+            "ZWF0ZWRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RBbGxFeHRlbnNpb25zGDQgAygOMh4ucHJvdG9idWZfdW5pdHRl", 

+            "c3QuRm9yZWlnbkVudW06cgoecmVwZWF0ZWRfaW1wb3J0X2VudW1fZXh0ZW5z", 

+            "aW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYNSAD", 

+            "KA4yJC5wcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1wb3J0RW51bTpRCh9y", 

+            "ZXBlYXRlZF9zdHJpbmdfcGllY2VfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYNiADKAlCAggCOkkKF3JlcGVhdGVk", 

+            "X2NvcmRfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4", 

+            "dGVuc2lvbnMYNyADKAlCAggBOkkKF2RlZmF1bHRfaW50MzJfZXh0ZW5zaW9u", 

+            "EiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYPSABKAU6", 

+            "AjQxOkkKF2RlZmF1bHRfaW50NjRfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5p", 

+            "dHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYPiABKAM6AjQyOkoKGGRlZmF1bHRf", 

+            "dWludDMyX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxF", 

+            "eHRlbnNpb25zGD8gASgNOgI0MzpKChhkZWZhdWx0X3VpbnQ2NF9leHRlbnNp", 

+            "b24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9ucxhAIAEo", 

+            "BDoCNDQ6SwoYZGVmYXVsdF9zaW50MzJfZXh0ZW5zaW9uEiQucHJvdG9idWZf", 

+            "dW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYQSABKBE6Ay00NTpKChhkZWZh", 

+            "dWx0X3NpbnQ2NF9leHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0", 

+            "QWxsRXh0ZW5zaW9ucxhCIAEoEjoCNDY6SwoZZGVmYXVsdF9maXhlZDMyX2V4", 

+            "dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25z", 

+            "GEMgASgHOgI0NzpLChlkZWZhdWx0X2ZpeGVkNjRfZXh0ZW5zaW9uEiQucHJv", 

+            "dG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYRCABKAY6AjQ4OkwK", 

+            "GmRlZmF1bHRfc2ZpeGVkMzJfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRl", 

+            "c3QuVGVzdEFsbEV4dGVuc2lvbnMYRSABKA86AjQ5Ok0KGmRlZmF1bHRfc2Zp", 

+            "eGVkNjRfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4", 

+            "dGVuc2lvbnMYRiABKBA6Ay01MDpLChdkZWZhdWx0X2Zsb2F0X2V4dGVuc2lv", 

+            "bhIkLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGEcgASgC", 

+            "OgQ1MS41Ok0KGGRlZmF1bHRfZG91YmxlX2V4dGVuc2lvbhIkLnByb3RvYnVm", 

+            "X3VuaXR0ZXN0LlRlc3RBbGxFeHRlbnNpb25zGEggASgBOgU1MjAwMDpKChZk", 

+            "ZWZhdWx0X2Jvb2xfZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVz", 

+            "dEFsbEV4dGVuc2lvbnMYSSABKAg6BHRydWU6TQoYZGVmYXVsdF9zdHJpbmdf", 

+            "ZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lv", 

+            "bnMYSiABKAk6BWhlbGxvOkwKF2RlZmF1bHRfYnl0ZXNfZXh0ZW5zaW9uEiQu", 

+            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYSyABKAw6BXdv", 

+            "cmxkOnwKHWRlZmF1bHRfbmVzdGVkX2VudW1fZXh0ZW5zaW9uEiQucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYUSABKA4yKi5wcm90b2J1", 

+            "Zl91bml0dGVzdC5UZXN0QWxsVHlwZXMuTmVzdGVkRW51bToDQkFSOnkKHmRl", 

+            "ZmF1bHRfZm9yZWlnbl9lbnVtX2V4dGVuc2lvbhIkLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RBbGxFeHRlbnNpb25zGFIgASgOMh4ucHJvdG9idWZfdW5pdHRl", 

+            "c3QuRm9yZWlnbkVudW06C0ZPUkVJR05fQkFSOn0KHWRlZmF1bHRfaW1wb3J0", 

+            "X2VudW1fZXh0ZW5zaW9uEiQucHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4", 

+            "dGVuc2lvbnMYUyABKA4yJC5wcm90b2J1Zl91bml0dGVzdF9pbXBvcnQuSW1w", 

+            "b3J0RW51bToKSU1QT1JUX0JBUjpVCh5kZWZhdWx0X3N0cmluZ19waWVjZV9l", 

+            "eHRlbnNpb24SJC5wcm90b2J1Zl91bml0dGVzdC5UZXN0QWxsRXh0ZW5zaW9u", 

+            "cxhUIAEoCToDYWJjQgIIAjpNChZkZWZhdWx0X2NvcmRfZXh0ZW5zaW9uEiQu", 

+            "cHJvdG9idWZfdW5pdHRlc3QuVGVzdEFsbEV4dGVuc2lvbnMYVSABKAk6AzEy", 

+            "M0ICCAE6QgoTbXlfZXh0ZW5zaW9uX3N0cmluZxIlLnByb3RvYnVmX3VuaXR0", 

+            "ZXN0LlRlc3RGaWVsZE9yZGVyaW5ncxgyIAEoCTo/ChBteV9leHRlbnNpb25f", 

+            "aW50EiUucHJvdG9idWZfdW5pdHRlc3QuVGVzdEZpZWxkT3JkZXJpbmdzGAUg", 

+            "ASgFOksKFnBhY2tlZF9pbnQzMl9leHRlbnNpb24SJy5wcm90b2J1Zl91bml0", 

+            "dGVzdC5UZXN0UGFja2VkRXh0ZW5zaW9ucxhaIAMoBUICEAE6SwoWcGFja2Vk", 

+            "X2ludDY0X2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNr", 

+            "ZWRFeHRlbnNpb25zGFsgAygDQgIQATpMChdwYWNrZWRfdWludDMyX2V4dGVu", 

+            "c2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNrZWRFeHRlbnNpb25z", 

+            "GFwgAygNQgIQATpMChdwYWNrZWRfdWludDY0X2V4dGVuc2lvbhInLnByb3Rv", 

+            "YnVmX3VuaXR0ZXN0LlRlc3RQYWNrZWRFeHRlbnNpb25zGF0gAygEQgIQATpM", 

+            "ChdwYWNrZWRfc2ludDMyX2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0", 

+            "LlRlc3RQYWNrZWRFeHRlbnNpb25zGF4gAygRQgIQATpMChdwYWNrZWRfc2lu", 

+            "dDY0X2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNrZWRF", 

+            "eHRlbnNpb25zGF8gAygSQgIQATpNChhwYWNrZWRfZml4ZWQzMl9leHRlbnNp", 

+            "b24SJy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UGFja2VkRXh0ZW5zaW9ucxhg", 

+            "IAMoB0ICEAE6TQoYcGFja2VkX2ZpeGVkNjRfZXh0ZW5zaW9uEicucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMYYSADKAZCAhABOk4K", 

+            "GXBhY2tlZF9zZml4ZWQzMl9leHRlbnNpb24SJy5wcm90b2J1Zl91bml0dGVz", 

+            "dC5UZXN0UGFja2VkRXh0ZW5zaW9ucxhiIAMoD0ICEAE6TgoZcGFja2VkX3Nm", 

+            "aXhlZDY0X2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRlc3RQYWNr", 

+            "ZWRFeHRlbnNpb25zGGMgAygQQgIQATpLChZwYWNrZWRfZmxvYXRfZXh0ZW5z", 

+            "aW9uEicucHJvdG9idWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMY", 

+            "ZCADKAJCAhABOkwKF3BhY2tlZF9kb3VibGVfZXh0ZW5zaW9uEicucHJvdG9i", 

+            "dWZfdW5pdHRlc3QuVGVzdFBhY2tlZEV4dGVuc2lvbnMYZSADKAFCAhABOkoK", 

+            "FXBhY2tlZF9ib29sX2V4dGVuc2lvbhInLnByb3RvYnVmX3VuaXR0ZXN0LlRl", 

+            "c3RQYWNrZWRFeHRlbnNpb25zGGYgAygIQgIQATpqChVwYWNrZWRfZW51bV9l", 

+            "eHRlbnNpb24SJy5wcm90b2J1Zl91bml0dGVzdC5UZXN0UGFja2VkRXh0ZW5z", 

+            "aW9ucxhnIAMoDjIeLnByb3RvYnVmX3VuaXR0ZXN0LkZvcmVpZ25FbnVtQgIQ", 

+            "AUJTQg1Vbml0dGVzdFByb3RvSAGAAQGIAQGQAQHCPjYKIUdvb2dsZS5Qcm90", 

+          "b2NvbEJ1ZmZlcnMuVGVzdFByb3RvcxIRVW5pdFRlc3RQcm90b0ZpbGU="));

+      pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {

+        descriptor = root;

+        internal__static_protobuf_unittest_TestAllTypes__Descriptor = Descriptor.MessageTypes[0];

+        internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Builder>(internal__static_protobuf_unittest_TestAllTypes__Descriptor,

+                new string[] { "OptionalInt32", "OptionalInt64", "OptionalUint32", "OptionalUint64", "OptionalSint32", "OptionalSint64", "OptionalFixed32", "OptionalFixed64", "OptionalSfixed32", "OptionalSfixed64", "OptionalFloat", "OptionalDouble", "OptionalBool", "OptionalString", "OptionalBytes", "OptionalGroup", "OptionalNestedMessage", "OptionalForeignMessage", "OptionalImportMessage", "OptionalNestedEnum", "OptionalForeignEnum", "OptionalImportEnum", "OptionalStringPiece", "OptionalCord", "RepeatedInt32", "RepeatedInt64", "RepeatedUint32", "RepeatedUint64", "RepeatedSint32", "RepeatedSint64", "RepeatedFixed32", "RepeatedFixed64", "RepeatedSfixed32", "RepeatedSfixed64", "RepeatedFloat", "RepeatedDouble", "RepeatedBool", "RepeatedString", "RepeatedBytes", "RepeatedGroup", "RepeatedNestedMessage", "RepeatedForeignMessage", "RepeatedImportMessage", "RepeatedNestedEnum", "RepeatedForeignEnum", "RepeatedImportEnum", "RepeatedStringPiece", "RepeatedCord", "DefaultInt32", "DefaultInt64", "DefaultUint32", "DefaultUint64", "DefaultSint32", "DefaultSint64", "DefaultFixed32", "DefaultFixed64", "DefaultSfixed32", "DefaultSfixed64", "DefaultFloat", "DefaultDouble", "DefaultBool", "DefaultString", "DefaultBytes", "DefaultNestedEnum", "DefaultForeignEnum", "DefaultImportEnum", "DefaultStringPiece", "DefaultCord", });

+        internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder>(internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor,

+                new string[] { "Bb", });

+        internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[1];

+        internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder>(internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor = internal__static_protobuf_unittest_TestAllTypes__Descriptor.NestedTypes[2];

+        internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder>(internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor = Descriptor.MessageTypes[1];

+        internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields, global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.Builder>(internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor,

+                new string[] { "DeprecatedInt32", });

+        internal__static_protobuf_unittest_ForeignMessage__Descriptor = Descriptor.MessageTypes[2];

+        internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder>(internal__static_protobuf_unittest_ForeignMessage__Descriptor,

+                new string[] { "C", });

+        internal__static_protobuf_unittest_TestAllExtensions__Descriptor = Descriptor.MessageTypes[3];

+        internal__static_protobuf_unittest_TestAllExtensions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestAllExtensions, global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.Builder>(internal__static_protobuf_unittest_TestAllExtensions__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor = Descriptor.MessageTypes[4];

+        internal__static_protobuf_unittest_OptionalGroup_extension__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension, global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.Builder>(internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor = Descriptor.MessageTypes[5];

+        internal__static_protobuf_unittest_RepeatedGroup_extension__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension, global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.Builder>(internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestNestedExtension__Descriptor = Descriptor.MessageTypes[6];

+        internal__static_protobuf_unittest_TestNestedExtension__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedExtension, global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Builder>(internal__static_protobuf_unittest_TestNestedExtension__Descriptor,

+                new string[] { });

+        global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Test = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Descriptor.Extensions[0]);

+        internal__static_protobuf_unittest_TestRequired__Descriptor = Descriptor.MessageTypes[7];

+        internal__static_protobuf_unittest_TestRequired__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequired, global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder>(internal__static_protobuf_unittest_TestRequired__Descriptor,

+                new string[] { "A", "Dummy2", "B", "Dummy4", "Dummy5", "Dummy6", "Dummy7", "Dummy8", "Dummy9", "Dummy10", "Dummy11", "Dummy12", "Dummy13", "Dummy14", "Dummy15", "Dummy16", "Dummy17", "Dummy18", "Dummy19", "Dummy20", "Dummy21", "Dummy22", "Dummy23", "Dummy24", "Dummy25", "Dummy26", "Dummy27", "Dummy28", "Dummy29", "Dummy30", "Dummy31", "Dummy32", "C", });

+        global::Google.ProtocolBuffers.TestProtos.TestRequired.Single = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestRequired>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestRequired.Descriptor.Extensions[0]);

+        global::Google.ProtocolBuffers.TestProtos.TestRequired.Multi = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestRequired>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.TestRequired.Descriptor.Extensions[1]);

+        internal__static_protobuf_unittest_TestRequiredForeign__Descriptor = Descriptor.MessageTypes[8];

+        internal__static_protobuf_unittest_TestRequiredForeign__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign, global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.Builder>(internal__static_protobuf_unittest_TestRequiredForeign__Descriptor,

+                new string[] { "OptionalMessage", "RepeatedMessage", "Dummy", });

+        internal__static_protobuf_unittest_TestForeignNested__Descriptor = Descriptor.MessageTypes[9];

+        internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestForeignNested, global::Google.ProtocolBuffers.TestProtos.TestForeignNested.Builder>(internal__static_protobuf_unittest_TestForeignNested__Descriptor,

+                new string[] { "ForeignNested", });

+        internal__static_protobuf_unittest_TestEmptyMessage__Descriptor = Descriptor.MessageTypes[10];

+        internal__static_protobuf_unittest_TestEmptyMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.Builder>(internal__static_protobuf_unittest_TestEmptyMessage__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor = Descriptor.MessageTypes[11];

+        internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions, global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.Builder>(internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor = Descriptor.MessageTypes[12];

+        internal__static_protobuf_unittest_TestMultipleExtensionRanges__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges, global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.Builder>(internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor = Descriptor.MessageTypes[13];

+        internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber, global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.Builder>(internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor,

+                new string[] { "A", "Bb", });

+        internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor = Descriptor.MessageTypes[14];

+        internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage, global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder>(internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor,

+                new string[] { "A", "I", });

+        internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor = Descriptor.MessageTypes[15];

+        internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder>(internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor,

+                new string[] { "Bb", });

+        internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor = Descriptor.MessageTypes[16];

+        internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB, global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder>(internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor,

+                new string[] { "A", "OptionalInt32", });

+        internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor = Descriptor.MessageTypes[17];

+        internal__static_protobuf_unittest_TestDupFieldNumber__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Builder>(internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor,

+                new string[] { "A", "Foo", "Bar", });

+        internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor = internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_TestDupFieldNumber_Foo__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder>(internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor = internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor.NestedTypes[1];

+        internal__static_protobuf_unittest_TestDupFieldNumber_Bar__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar, global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder>(internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor,

+                new string[] { "A", });

+        internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor = Descriptor.MessageTypes[18];

+        internal__static_protobuf_unittest_TestNestedMessageHasBits__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Builder>(internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor,

+                new string[] { "OptionalNestedMessage", });

+        internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor = internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage, global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder>(internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor,

+                new string[] { "NestedmessageRepeatedInt32", "NestedmessageRepeatedForeignmessage", });

+        internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor = Descriptor.MessageTypes[19];

+        internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames, global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.Builder>(internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor,

+                new string[] { "PrimitiveField", "StringField", "EnumField", "MessageField", "StringPieceField", "CordField", "RepeatedPrimitiveField", "RepeatedStringField", "RepeatedEnumField", "RepeatedMessageField", "RepeatedStringPieceField", "RepeatedCordField", });

+        internal__static_protobuf_unittest_TestFieldOrderings__Descriptor = Descriptor.MessageTypes[20];

+        internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings, global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Builder>(internal__static_protobuf_unittest_TestFieldOrderings__Descriptor,

+                new string[] { "MyString", "MyInt", "MyFloat", });

+        internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor = Descriptor.MessageTypes[21];

+        internal__static_protobuf_unittest_TestExtremeDefaultValues__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues, global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Builder>(internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor,

+                new string[] { "EscapedBytes", "LargeUint32", "LargeUint64", "SmallInt32", "SmallInt64", "Utf8String", "ZeroFloat", "OneFloat", "SmallFloat", "NegativeOneFloat", "NegativeFloat", "LargeFloat", "SmallNegativeFloat", "InfDouble", "NegInfDouble", "NanDouble", "InfFloat", "NegInfFloat", "NanFloat", "CppTrigraph", });

+        internal__static_protobuf_unittest_SparseEnumMessage__Descriptor = Descriptor.MessageTypes[22];

+        internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage, global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.Builder>(internal__static_protobuf_unittest_SparseEnumMessage__Descriptor,

+                new string[] { "SparseEnum", });

+        internal__static_protobuf_unittest_OneString__Descriptor = Descriptor.MessageTypes[23];

+        internal__static_protobuf_unittest_OneString__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneString, global::Google.ProtocolBuffers.TestProtos.OneString.Builder>(internal__static_protobuf_unittest_OneString__Descriptor,

+                new string[] { "Data", });

+        internal__static_protobuf_unittest_OneBytes__Descriptor = Descriptor.MessageTypes[24];

+        internal__static_protobuf_unittest_OneBytes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.OneBytes, global::Google.ProtocolBuffers.TestProtos.OneBytes.Builder>(internal__static_protobuf_unittest_OneBytes__Descriptor,

+                new string[] { "Data", });

+        internal__static_protobuf_unittest_TestPackedTypes__Descriptor = Descriptor.MessageTypes[25];

+        internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedTypes, global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.Builder>(internal__static_protobuf_unittest_TestPackedTypes__Descriptor,

+                new string[] { "PackedInt32", "PackedInt64", "PackedUint32", "PackedUint64", "PackedSint32", "PackedSint64", "PackedFixed32", "PackedFixed64", "PackedSfixed32", "PackedSfixed64", "PackedFloat", "PackedDouble", "PackedBool", "PackedEnum", });

+        internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor = Descriptor.MessageTypes[26];

+        internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes, global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.Builder>(internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor,

+                new string[] { "UnpackedInt32", "UnpackedInt64", "UnpackedUint32", "UnpackedUint64", "UnpackedSint32", "UnpackedSint64", "UnpackedFixed32", "UnpackedFixed64", "UnpackedSfixed32", "UnpackedSfixed64", "UnpackedFloat", "UnpackedDouble", "UnpackedBool", "UnpackedEnum", });

+        internal__static_protobuf_unittest_TestPackedExtensions__Descriptor = Descriptor.MessageTypes[27];

+        internal__static_protobuf_unittest_TestPackedExtensions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions, global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.Builder>(internal__static_protobuf_unittest_TestPackedExtensions__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor = Descriptor.MessageTypes[28];

+        internal__static_protobuf_unittest_TestDynamicExtensions__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Builder>(internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor,

+                new string[] { "ScalarExtension", "EnumExtension", "DynamicEnumExtension", "MessageExtension", "DynamicMessageExtension", "RepeatedExtension", "PackedExtension", });

+        internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor = internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor.NestedTypes[0];

+        internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType, global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder>(internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor,

+                new string[] { "DynamicField", });

+        internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor = Descriptor.MessageTypes[29];

+        internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes, global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.Builder>(internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor,

+                new string[] { "RepeatedFixed32", "RepeatedInt32", "RepeatedFixed64", "RepeatedInt64", "RepeatedFloat", "RepeatedUint64", });

+        internal__static_protobuf_unittest_FooRequest__Descriptor = Descriptor.MessageTypes[30];

+        internal__static_protobuf_unittest_FooRequest__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooRequest, global::Google.ProtocolBuffers.TestProtos.FooRequest.Builder>(internal__static_protobuf_unittest_FooRequest__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_FooResponse__Descriptor = Descriptor.MessageTypes[31];

+        internal__static_protobuf_unittest_FooResponse__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.FooResponse, global::Google.ProtocolBuffers.TestProtos.FooResponse.Builder>(internal__static_protobuf_unittest_FooResponse__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_BarRequest__Descriptor = Descriptor.MessageTypes[32];

+        internal__static_protobuf_unittest_BarRequest__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarRequest, global::Google.ProtocolBuffers.TestProtos.BarRequest.Builder>(internal__static_protobuf_unittest_BarRequest__Descriptor,

+                new string[] { });

+        internal__static_protobuf_unittest_BarResponse__Descriptor = Descriptor.MessageTypes[33];

+        internal__static_protobuf_unittest_BarResponse__FieldAccessorTable = 

+            new pb::FieldAccess.FieldAccessorTable<global::Google.ProtocolBuffers.TestProtos.BarResponse, global::Google.ProtocolBuffers.TestProtos.BarResponse.Builder>(internal__static_protobuf_unittest_BarResponse__Descriptor,

+                new string[] { });

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalInt32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[0]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalInt64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[1]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalUint32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[2]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalUint64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[3]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSint32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[4]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSint64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[5]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFixed32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[6]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFixed64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[7]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSfixed32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[8]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalSfixed64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[9]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalFloatExtension = pb::GeneratedSingleExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[10]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalDoubleExtension = pb::GeneratedSingleExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[11]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalBoolExtension = pb::GeneratedSingleExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[12]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalStringExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[13]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalBytesExtension = pb::GeneratedSingleExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[14]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalGroupExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[15]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalNestedMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[16]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalForeignMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[17]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalImportMessageExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[18]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalNestedEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[19]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalForeignEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[20]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalImportEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[21]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalStringPieceExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[22]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.OptionalCordExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[23]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedInt32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[24]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedInt64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[25]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedUint32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[26]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedUint64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[27]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSint32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[28]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSint64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[29]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFixed32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[30]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFixed64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[31]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSfixed32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[32]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedSfixed64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[33]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedFloatExtension = pb::GeneratedRepeatExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[34]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedDoubleExtension = pb::GeneratedRepeatExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[35]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedBoolExtension = pb::GeneratedRepeatExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[36]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedStringExtension = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[37]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedBytesExtension = pb::GeneratedRepeatExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[38]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedGroupExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[39]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedNestedMessageExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[40]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedForeignMessageExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[41]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedImportMessageExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ImportMessage>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[42]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedNestedEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[43]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedForeignEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[44]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedImportEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[45]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedStringPieceExtension = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[46]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.RepeatedCordExtension = pb::GeneratedRepeatExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[47]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultInt32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[48]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultInt64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[49]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultUint32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[50]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultUint64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[51]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSint32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[52]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSint64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[53]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFixed32Extension = pb::GeneratedSingleExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[54]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFixed64Extension = pb::GeneratedSingleExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[55]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSfixed32Extension = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[56]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultSfixed64Extension = pb::GeneratedSingleExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[57]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultFloatExtension = pb::GeneratedSingleExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[58]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultDoubleExtension = pb::GeneratedSingleExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[59]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultBoolExtension = pb::GeneratedSingleExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[60]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultStringExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[61]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultBytesExtension = pb::GeneratedSingleExtension<pb::ByteString>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[62]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultNestedEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[63]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultForeignEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[64]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultImportEnumExtension = pb::GeneratedSingleExtension<global::Google.ProtocolBuffers.TestProtos.ImportEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[65]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultStringPieceExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[66]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.DefaultCordExtension = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[67]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.MyExtensionString = pb::GeneratedSingleExtension<string>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[68]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.MyExtensionInt = pb::GeneratedSingleExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[69]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedInt32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[70]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedInt64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[71]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedUint32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[72]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedUint64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[73]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSint32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[74]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSint64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[75]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFixed32Extension = pb::GeneratedRepeatExtension<uint>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[76]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFixed64Extension = pb::GeneratedRepeatExtension<ulong>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[77]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSfixed32Extension = pb::GeneratedRepeatExtension<int>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[78]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedSfixed64Extension = pb::GeneratedRepeatExtension<long>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[79]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedFloatExtension = pb::GeneratedRepeatExtension<float>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[80]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedDoubleExtension = pb::GeneratedRepeatExtension<double>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[81]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedBoolExtension = pb::GeneratedRepeatExtension<bool>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[82]);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.PackedEnumExtension = pb::GeneratedRepeatExtension<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>.CreateInstance(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor.Extensions[83]);

+        pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();

+        RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.RegisterAllExtensions(registry);

+        global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.RegisterAllExtensions(registry);

+        return registry;

+      };

+      pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,

+          new pbd::FileDescriptor[] {

+          global::Google.ProtocolBuffers.DescriptorProtos.CSharpOptions.Descriptor, 

+          global::Google.ProtocolBuffers.TestProtos.UnitTestImportProtoFile.Descriptor, 

+          }, assigner);

+    }

+    #endregion

+    

+  }

+  #region Enums

+  public enum ForeignEnum {

+    FOREIGN_FOO = 4,

+    FOREIGN_BAR = 5,

+    FOREIGN_BAZ = 6,

+  }

+  

+  public enum TestEnumWithDupValue {

+    FOO1 = 1,

+    BAR1 = 2,

+    BAZ = 3,

+    FOO2 = 1,

+    BAR2 = 2,

+  }

+  

+  public enum TestSparseEnum {

+    SPARSE_A = 123,

+    SPARSE_B = 62374,

+    SPARSE_C = 12589234,

+    SPARSE_D = -15,

+    SPARSE_E = -53452,

+    SPARSE_F = 0,

+    SPARSE_G = 2,

+  }

+  

+  #endregion

+  

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestAllTypes : pb::GeneratedMessage<TestAllTypes, TestAllTypes.Builder> {

+    private TestAllTypes() { }

+    private static readonly TestAllTypes defaultInstance = new TestAllTypes().MakeReadOnly();

+    private static readonly string[] _testAllTypesFieldNames = new string[] { "default_bool", "default_bytes", "default_cord", "default_double", "default_fixed32", "default_fixed64", "default_float", "default_foreign_enum", "default_import_enum", "default_int32", "default_int64", "default_nested_enum", "default_sfixed32", "default_sfixed64", "default_sint32", "default_sint64", "default_string", "default_string_piece", "default_uint32", "default_uint64", "optional_bool", "optional_bytes", "optional_cord", "optional_double", "optional_fixed32", "optional_fixed64", "optional_float", "optional_foreign_enum", "optional_foreign_message", "optional_import_enum", "optional_import_message", "optional_int32", "optional_int64", "optional_nested_enum", "optional_nested_message", "optional_sfixed32", "optional_sfixed64", "optional_sint32", "optional_sint64", "optional_string", "optional_string_piece", "optional_uint32", "optional_uint64", "optionalgroup", "repeated_bool", "repeated_bytes", "repeated_cord", "repeated_double", "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_foreign_enum", "repeated_foreign_message", "repeated_import_enum", "repeated_import_message", "repeated_int32", "repeated_int64", "repeated_nested_enum", "repeated_nested_message", "repeated_sfixed32", "repeated_sfixed64", "repeated_sint32", "repeated_sint64", "repeated_string", "repeated_string_piece", "repeated_uint32", "repeated_uint64", "repeatedgroup" };

+    private static readonly uint[] _testAllTypesFieldTags = new uint[] { 584, 602, 682, 577, 541, 545, 573, 656, 664, 488, 496, 648, 557, 561, 520, 528, 594, 674, 504, 512, 104, 122, 202, 97, 61, 65, 93, 176, 154, 184, 162, 8, 16, 168, 146, 77, 81, 40, 48, 114, 194, 24, 32, 131, 344, 362, 442, 337, 301, 305, 333, 416, 394, 424, 402, 248, 256, 408, 386, 317, 321, 280, 288, 354, 434, 264, 272, 371 };

+    public static TestAllTypes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestAllTypes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestAllTypes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestAllTypes, TestAllTypes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum NestedEnum {

+        FOO = 1,

+        BAR = 2,

+        BAZ = 3,

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {

+        private NestedMessage() { }

+        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();

+        private static readonly string[] _nestedMessageFieldNames = new string[] { "bb" };

+        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 8 };

+        public static NestedMessage DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override NestedMessage DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override NestedMessage ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_NestedMessage__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_NestedMessage__FieldAccessorTable; }

+        }

+        

+        public const int BbFieldNumber = 1;

+        private bool hasBb;

+        private int bb_;

+        public bool HasBb {

+          get { return hasBb; }

+        }

+        public int Bb {

+          get { return bb_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _nestedMessageFieldNames;

+          if (hasBb) {

+            output.WriteInt32(1, field_names[0], Bb);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasBb) {

+            size += pb::CodedOutputStream.ComputeInt32Size(1, Bb);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static NestedMessage ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private NestedMessage MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(NestedMessage prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(NestedMessage cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private NestedMessage result;

+          

+          private NestedMessage PrepareBuilder() {

+            if (resultIsReadOnly) {

+              NestedMessage original = result;

+              result = new NestedMessage();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override NestedMessage MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Descriptor; }

+          }

+          

+          public override NestedMessage DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }

+          }

+          

+          public override NestedMessage BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is NestedMessage) {

+              return MergeFrom((NestedMessage) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(NestedMessage other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasBb) {

+              Bb = other.Bb;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _nestedMessageFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 8: {

+                  result.hasBb = input.ReadInt32(ref result.bb_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasBb {

+            get { return result.hasBb; }

+          }

+          public int Bb {

+            get { return result.Bb; }

+            set { SetBb(value); }

+          }

+          public Builder SetBb(int value) {

+            PrepareBuilder();

+            result.hasBb = true;

+            result.bb_ = value;

+            return this;

+          }

+          public Builder ClearBb() {

+            PrepareBuilder();

+            result.hasBb = false;

+            result.bb_ = 0;

+            return this;

+          }

+        }

+        static NestedMessage() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class OptionalGroup : pb::GeneratedMessage<OptionalGroup, OptionalGroup.Builder> {

+        private OptionalGroup() { }

+        private static readonly OptionalGroup defaultInstance = new OptionalGroup().MakeReadOnly();

+        private static readonly string[] _optionalGroupFieldNames = new string[] { "a" };

+        private static readonly uint[] _optionalGroupFieldTags = new uint[] { 136 };

+        public static OptionalGroup DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override OptionalGroup DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override OptionalGroup ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<OptionalGroup, OptionalGroup.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_OptionalGroup__FieldAccessorTable; }

+        }

+        

+        public const int AFieldNumber = 17;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _optionalGroupFieldNames;

+          if (hasA) {

+            output.WriteInt32(17, field_names[0], A);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(17, A);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static OptionalGroup ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static OptionalGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static OptionalGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private OptionalGroup MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(OptionalGroup prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<OptionalGroup, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(OptionalGroup cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private OptionalGroup result;

+          

+          private OptionalGroup PrepareBuilder() {

+            if (resultIsReadOnly) {

+              OptionalGroup original = result;

+              result = new OptionalGroup();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override OptionalGroup MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Descriptor; }

+          }

+          

+          public override OptionalGroup DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance; }

+          }

+          

+          public override OptionalGroup BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is OptionalGroup) {

+              return MergeFrom((OptionalGroup) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(OptionalGroup other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_optionalGroupFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _optionalGroupFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 136: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static OptionalGroup() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class RepeatedGroup : pb::GeneratedMessage<RepeatedGroup, RepeatedGroup.Builder> {

+        private RepeatedGroup() { }

+        private static readonly RepeatedGroup defaultInstance = new RepeatedGroup().MakeReadOnly();

+        private static readonly string[] _repeatedGroupFieldNames = new string[] { "a" };

+        private static readonly uint[] _repeatedGroupFieldTags = new uint[] { 376 };

+        public static RepeatedGroup DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override RepeatedGroup DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override RepeatedGroup ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<RepeatedGroup, RepeatedGroup.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllTypes_RepeatedGroup__FieldAccessorTable; }

+        }

+        

+        public const int AFieldNumber = 47;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _repeatedGroupFieldNames;

+          if (hasA) {

+            output.WriteInt32(47, field_names[0], A);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(47, A);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static RepeatedGroup ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static RepeatedGroup ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static RepeatedGroup ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private RepeatedGroup MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(RepeatedGroup prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<RepeatedGroup, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(RepeatedGroup cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private RepeatedGroup result;

+          

+          private RepeatedGroup PrepareBuilder() {

+            if (resultIsReadOnly) {

+              RepeatedGroup original = result;

+              result = new RepeatedGroup();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override RepeatedGroup MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Descriptor; }

+          }

+          

+          public override RepeatedGroup DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.DefaultInstance; }

+          }

+          

+          public override RepeatedGroup BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is RepeatedGroup) {

+              return MergeFrom((RepeatedGroup) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(RepeatedGroup other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _repeatedGroupFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 376: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static RepeatedGroup() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int OptionalInt32FieldNumber = 1;

+    private bool hasOptionalInt32;

+    private int optionalInt32_;

+    public bool HasOptionalInt32 {

+      get { return hasOptionalInt32; }

+    }

+    public int OptionalInt32 {

+      get { return optionalInt32_; }

+    }

+    

+    public const int OptionalInt64FieldNumber = 2;

+    private bool hasOptionalInt64;

+    private long optionalInt64_;

+    public bool HasOptionalInt64 {

+      get { return hasOptionalInt64; }

+    }

+    public long OptionalInt64 {

+      get { return optionalInt64_; }

+    }

+    

+    public const int OptionalUint32FieldNumber = 3;

+    private bool hasOptionalUint32;

+    private uint optionalUint32_;

+    public bool HasOptionalUint32 {

+      get { return hasOptionalUint32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint OptionalUint32 {

+      get { return optionalUint32_; }

+    }

+    

+    public const int OptionalUint64FieldNumber = 4;

+    private bool hasOptionalUint64;

+    private ulong optionalUint64_;

+    public bool HasOptionalUint64 {

+      get { return hasOptionalUint64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong OptionalUint64 {

+      get { return optionalUint64_; }

+    }

+    

+    public const int OptionalSint32FieldNumber = 5;

+    private bool hasOptionalSint32;

+    private int optionalSint32_;

+    public bool HasOptionalSint32 {

+      get { return hasOptionalSint32; }

+    }

+    public int OptionalSint32 {

+      get { return optionalSint32_; }

+    }

+    

+    public const int OptionalSint64FieldNumber = 6;

+    private bool hasOptionalSint64;

+    private long optionalSint64_;

+    public bool HasOptionalSint64 {

+      get { return hasOptionalSint64; }

+    }

+    public long OptionalSint64 {

+      get { return optionalSint64_; }

+    }

+    

+    public const int OptionalFixed32FieldNumber = 7;

+    private bool hasOptionalFixed32;

+    private uint optionalFixed32_;

+    public bool HasOptionalFixed32 {

+      get { return hasOptionalFixed32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint OptionalFixed32 {

+      get { return optionalFixed32_; }

+    }

+    

+    public const int OptionalFixed64FieldNumber = 8;

+    private bool hasOptionalFixed64;

+    private ulong optionalFixed64_;

+    public bool HasOptionalFixed64 {

+      get { return hasOptionalFixed64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong OptionalFixed64 {

+      get { return optionalFixed64_; }

+    }

+    

+    public const int OptionalSfixed32FieldNumber = 9;

+    private bool hasOptionalSfixed32;

+    private int optionalSfixed32_;

+    public bool HasOptionalSfixed32 {

+      get { return hasOptionalSfixed32; }

+    }

+    public int OptionalSfixed32 {

+      get { return optionalSfixed32_; }

+    }

+    

+    public const int OptionalSfixed64FieldNumber = 10;

+    private bool hasOptionalSfixed64;

+    private long optionalSfixed64_;

+    public bool HasOptionalSfixed64 {

+      get { return hasOptionalSfixed64; }

+    }

+    public long OptionalSfixed64 {

+      get { return optionalSfixed64_; }

+    }

+    

+    public const int OptionalFloatFieldNumber = 11;

+    private bool hasOptionalFloat;

+    private float optionalFloat_;

+    public bool HasOptionalFloat {

+      get { return hasOptionalFloat; }

+    }

+    public float OptionalFloat {

+      get { return optionalFloat_; }

+    }

+    

+    public const int OptionalDoubleFieldNumber = 12;

+    private bool hasOptionalDouble;

+    private double optionalDouble_;

+    public bool HasOptionalDouble {

+      get { return hasOptionalDouble; }

+    }

+    public double OptionalDouble {

+      get { return optionalDouble_; }

+    }

+    

+    public const int OptionalBoolFieldNumber = 13;

+    private bool hasOptionalBool;

+    private bool optionalBool_;

+    public bool HasOptionalBool {

+      get { return hasOptionalBool; }

+    }

+    public bool OptionalBool {

+      get { return optionalBool_; }

+    }

+    

+    public const int OptionalStringFieldNumber = 14;

+    private bool hasOptionalString;

+    private string optionalString_ = "";

+    public bool HasOptionalString {

+      get { return hasOptionalString; }

+    }

+    public string OptionalString {

+      get { return optionalString_; }

+    }

+    

+    public const int OptionalBytesFieldNumber = 15;

+    private bool hasOptionalBytes;

+    private pb::ByteString optionalBytes_ = pb::ByteString.Empty;

+    public bool HasOptionalBytes {

+      get { return hasOptionalBytes; }

+    }

+    public pb::ByteString OptionalBytes {

+      get { return optionalBytes_; }

+    }

+    

+    public const int OptionalGroupFieldNumber = 16;

+    private bool hasOptionalGroup;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup optionalGroup_;

+    public bool HasOptionalGroup {

+      get { return hasOptionalGroup; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup OptionalGroup {

+      get { return optionalGroup_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance; }

+    }

+    

+    public const int OptionalNestedMessageFieldNumber = 18;

+    private bool hasOptionalNestedMessage;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage optionalNestedMessage_;

+    public bool HasOptionalNestedMessage {

+      get { return hasOptionalNestedMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage OptionalNestedMessage {

+      get { return optionalNestedMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }

+    }

+    

+    public const int OptionalForeignMessageFieldNumber = 19;

+    private bool hasOptionalForeignMessage;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage optionalForeignMessage_;

+    public bool HasOptionalForeignMessage {

+      get { return hasOptionalForeignMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage OptionalForeignMessage {

+      get { return optionalForeignMessage_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }

+    }

+    

+    public const int OptionalImportMessageFieldNumber = 20;

+    private bool hasOptionalImportMessage;

+    private global::Google.ProtocolBuffers.TestProtos.ImportMessage optionalImportMessage_;

+    public bool HasOptionalImportMessage {

+      get { return hasOptionalImportMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportMessage OptionalImportMessage {

+      get { return optionalImportMessage_ ?? global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance; }

+    }

+    

+    public const int OptionalNestedEnumFieldNumber = 21;

+    private bool hasOptionalNestedEnum;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.FOO;

+    public bool HasOptionalNestedEnum {

+      get { return hasOptionalNestedEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum OptionalNestedEnum {

+      get { return optionalNestedEnum_; }

+    }

+    

+    public const int OptionalForeignEnumFieldNumber = 22;

+    private bool hasOptionalForeignEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+    public bool HasOptionalForeignEnum {

+      get { return hasOptionalForeignEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum OptionalForeignEnum {

+      get { return optionalForeignEnum_; }

+    }

+    

+    public const int OptionalImportEnumFieldNumber = 23;

+    private bool hasOptionalImportEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ImportEnum optionalImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_FOO;

+    public bool HasOptionalImportEnum {

+      get { return hasOptionalImportEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportEnum OptionalImportEnum {

+      get { return optionalImportEnum_; }

+    }

+    

+    public const int OptionalStringPieceFieldNumber = 24;

+    private bool hasOptionalStringPiece;

+    private string optionalStringPiece_ = "";

+    public bool HasOptionalStringPiece {

+      get { return hasOptionalStringPiece; }

+    }

+    public string OptionalStringPiece {

+      get { return optionalStringPiece_; }

+    }

+    

+    public const int OptionalCordFieldNumber = 25;

+    private bool hasOptionalCord;

+    private string optionalCord_ = "";

+    public bool HasOptionalCord {

+      get { return hasOptionalCord; }

+    }

+    public string OptionalCord {

+      get { return optionalCord_; }

+    }

+    

+    public const int RepeatedInt32FieldNumber = 31;

+    private pbc::PopsicleList<int> repeatedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedInt32List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt32_); }

+    }

+    public int RepeatedInt32Count {

+      get { return repeatedInt32_.Count; }

+    }

+    public int GetRepeatedInt32(int index) {

+      return repeatedInt32_[index];

+    }

+    

+    public const int RepeatedInt64FieldNumber = 32;

+    private pbc::PopsicleList<long> repeatedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedInt64List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt64_); }

+    }

+    public int RepeatedInt64Count {

+      get { return repeatedInt64_.Count; }

+    }

+    public long GetRepeatedInt64(int index) {

+      return repeatedInt64_[index];

+    }

+    

+    public const int RepeatedUint32FieldNumber = 33;

+    private pbc::PopsicleList<uint> repeatedUint32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> RepeatedUint32List {

+      get { return pbc::Lists.AsReadOnly(repeatedUint32_); }

+    }

+    public int RepeatedUint32Count {

+      get { return repeatedUint32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetRepeatedUint32(int index) {

+      return repeatedUint32_[index];

+    }

+    

+    public const int RepeatedUint64FieldNumber = 34;

+    private pbc::PopsicleList<ulong> repeatedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedUint64List {

+      get { return pbc::Lists.AsReadOnly(repeatedUint64_); }

+    }

+    public int RepeatedUint64Count {

+      get { return repeatedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedUint64(int index) {

+      return repeatedUint64_[index];

+    }

+    

+    public const int RepeatedSint32FieldNumber = 35;

+    private pbc::PopsicleList<int> repeatedSint32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedSint32List {

+      get { return pbc::Lists.AsReadOnly(repeatedSint32_); }

+    }

+    public int RepeatedSint32Count {

+      get { return repeatedSint32_.Count; }

+    }

+    public int GetRepeatedSint32(int index) {

+      return repeatedSint32_[index];

+    }

+    

+    public const int RepeatedSint64FieldNumber = 36;

+    private pbc::PopsicleList<long> repeatedSint64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedSint64List {

+      get { return pbc::Lists.AsReadOnly(repeatedSint64_); }

+    }

+    public int RepeatedSint64Count {

+      get { return repeatedSint64_.Count; }

+    }

+    public long GetRepeatedSint64(int index) {

+      return repeatedSint64_[index];

+    }

+    

+    public const int RepeatedFixed32FieldNumber = 37;

+    private pbc::PopsicleList<uint> repeatedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> RepeatedFixed32List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed32_); }

+    }

+    public int RepeatedFixed32Count {

+      get { return repeatedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetRepeatedFixed32(int index) {

+      return repeatedFixed32_[index];

+    }

+    

+    public const int RepeatedFixed64FieldNumber = 38;

+    private pbc::PopsicleList<ulong> repeatedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedFixed64List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed64_); }

+    }

+    public int RepeatedFixed64Count {

+      get { return repeatedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedFixed64(int index) {

+      return repeatedFixed64_[index];

+    }

+    

+    public const int RepeatedSfixed32FieldNumber = 39;

+    private pbc::PopsicleList<int> repeatedSfixed32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedSfixed32List {

+      get { return pbc::Lists.AsReadOnly(repeatedSfixed32_); }

+    }

+    public int RepeatedSfixed32Count {

+      get { return repeatedSfixed32_.Count; }

+    }

+    public int GetRepeatedSfixed32(int index) {

+      return repeatedSfixed32_[index];

+    }

+    

+    public const int RepeatedSfixed64FieldNumber = 40;

+    private pbc::PopsicleList<long> repeatedSfixed64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedSfixed64List {

+      get { return pbc::Lists.AsReadOnly(repeatedSfixed64_); }

+    }

+    public int RepeatedSfixed64Count {

+      get { return repeatedSfixed64_.Count; }

+    }

+    public long GetRepeatedSfixed64(int index) {

+      return repeatedSfixed64_[index];

+    }

+    

+    public const int RepeatedFloatFieldNumber = 41;

+    private pbc::PopsicleList<float> repeatedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> RepeatedFloatList {

+      get { return pbc::Lists.AsReadOnly(repeatedFloat_); }

+    }

+    public int RepeatedFloatCount {

+      get { return repeatedFloat_.Count; }

+    }

+    public float GetRepeatedFloat(int index) {

+      return repeatedFloat_[index];

+    }

+    

+    public const int RepeatedDoubleFieldNumber = 42;

+    private pbc::PopsicleList<double> repeatedDouble_ = new pbc::PopsicleList<double>();

+    public scg::IList<double> RepeatedDoubleList {

+      get { return pbc::Lists.AsReadOnly(repeatedDouble_); }

+    }

+    public int RepeatedDoubleCount {

+      get { return repeatedDouble_.Count; }

+    }

+    public double GetRepeatedDouble(int index) {

+      return repeatedDouble_[index];

+    }

+    

+    public const int RepeatedBoolFieldNumber = 43;

+    private pbc::PopsicleList<bool> repeatedBool_ = new pbc::PopsicleList<bool>();

+    public scg::IList<bool> RepeatedBoolList {

+      get { return pbc::Lists.AsReadOnly(repeatedBool_); }

+    }

+    public int RepeatedBoolCount {

+      get { return repeatedBool_.Count; }

+    }

+    public bool GetRepeatedBool(int index) {

+      return repeatedBool_[index];

+    }

+    

+    public const int RepeatedStringFieldNumber = 44;

+    private pbc::PopsicleList<string> repeatedString_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringList {

+      get { return pbc::Lists.AsReadOnly(repeatedString_); }

+    }

+    public int RepeatedStringCount {

+      get { return repeatedString_.Count; }

+    }

+    public string GetRepeatedString(int index) {

+      return repeatedString_[index];

+    }

+    

+    public const int RepeatedBytesFieldNumber = 45;

+    private pbc::PopsicleList<pb::ByteString> repeatedBytes_ = new pbc::PopsicleList<pb::ByteString>();

+    public scg::IList<pb::ByteString> RepeatedBytesList {

+      get { return pbc::Lists.AsReadOnly(repeatedBytes_); }

+    }

+    public int RepeatedBytesCount {

+      get { return repeatedBytes_.Count; }

+    }

+    public pb::ByteString GetRepeatedBytes(int index) {

+      return repeatedBytes_[index];

+    }

+    

+    public const int RepeatedGroupFieldNumber = 46;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> repeatedGroup_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> RepeatedGroupList {

+      get { return repeatedGroup_; }

+    }

+    public int RepeatedGroupCount {

+      get { return repeatedGroup_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup GetRepeatedGroup(int index) {

+      return repeatedGroup_[index];

+    }

+    

+    public const int RepeatedNestedMessageFieldNumber = 48;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> repeatedNestedMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> RepeatedNestedMessageList {

+      get { return repeatedNestedMessage_; }

+    }

+    public int RepeatedNestedMessageCount {

+      get { return repeatedNestedMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage GetRepeatedNestedMessage(int index) {

+      return repeatedNestedMessage_[index];

+    }

+    

+    public const int RepeatedForeignMessageFieldNumber = 49;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> repeatedForeignMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedForeignMessageList {

+      get { return repeatedForeignMessage_; }

+    }

+    public int RepeatedForeignMessageCount {

+      get { return repeatedForeignMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedForeignMessage(int index) {

+      return repeatedForeignMessage_[index];

+    }

+    

+    public const int RepeatedImportMessageFieldNumber = 50;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessage> repeatedImportMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessage>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportMessage> RepeatedImportMessageList {

+      get { return repeatedImportMessage_; }

+    }

+    public int RepeatedImportMessageCount {

+      get { return repeatedImportMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportMessage GetRepeatedImportMessage(int index) {

+      return repeatedImportMessage_[index];

+    }

+    

+    public const int RepeatedNestedEnumFieldNumber = 51;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> repeatedNestedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> RepeatedNestedEnumList {

+      get { return pbc::Lists.AsReadOnly(repeatedNestedEnum_); }

+    }

+    public int RepeatedNestedEnumCount {

+      get { return repeatedNestedEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum GetRepeatedNestedEnum(int index) {

+      return repeatedNestedEnum_[index];

+    }

+    

+    public const int RepeatedForeignEnumFieldNumber = 52;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> repeatedForeignEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedForeignEnumList {

+      get { return pbc::Lists.AsReadOnly(repeatedForeignEnum_); }

+    }

+    public int RepeatedForeignEnumCount {

+      get { return repeatedForeignEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedForeignEnum(int index) {

+      return repeatedForeignEnum_[index];

+    }

+    

+    public const int RepeatedImportEnumFieldNumber = 53;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnum> repeatedImportEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ImportEnum> RepeatedImportEnumList {

+      get { return pbc::Lists.AsReadOnly(repeatedImportEnum_); }

+    }

+    public int RepeatedImportEnumCount {

+      get { return repeatedImportEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportEnum GetRepeatedImportEnum(int index) {

+      return repeatedImportEnum_[index];

+    }

+    

+    public const int RepeatedStringPieceFieldNumber = 54;

+    private pbc::PopsicleList<string> repeatedStringPiece_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringPieceList {

+      get { return pbc::Lists.AsReadOnly(repeatedStringPiece_); }

+    }

+    public int RepeatedStringPieceCount {

+      get { return repeatedStringPiece_.Count; }

+    }

+    public string GetRepeatedStringPiece(int index) {

+      return repeatedStringPiece_[index];

+    }

+    

+    public const int RepeatedCordFieldNumber = 55;

+    private pbc::PopsicleList<string> repeatedCord_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedCordList {

+      get { return pbc::Lists.AsReadOnly(repeatedCord_); }

+    }

+    public int RepeatedCordCount {

+      get { return repeatedCord_.Count; }

+    }

+    public string GetRepeatedCord(int index) {

+      return repeatedCord_[index];

+    }

+    

+    public const int DefaultInt32FieldNumber = 61;

+    private bool hasDefaultInt32;

+    private int defaultInt32_ = 41;

+    public bool HasDefaultInt32 {

+      get { return hasDefaultInt32; }

+    }

+    public int DefaultInt32 {

+      get { return defaultInt32_; }

+    }

+    

+    public const int DefaultInt64FieldNumber = 62;

+    private bool hasDefaultInt64;

+    private long defaultInt64_ = 42L;

+    public bool HasDefaultInt64 {

+      get { return hasDefaultInt64; }

+    }

+    public long DefaultInt64 {

+      get { return defaultInt64_; }

+    }

+    

+    public const int DefaultUint32FieldNumber = 63;

+    private bool hasDefaultUint32;

+    private uint defaultUint32_ = 43;

+    public bool HasDefaultUint32 {

+      get { return hasDefaultUint32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint DefaultUint32 {

+      get { return defaultUint32_; }

+    }

+    

+    public const int DefaultUint64FieldNumber = 64;

+    private bool hasDefaultUint64;

+    private ulong defaultUint64_ = 44UL;

+    public bool HasDefaultUint64 {

+      get { return hasDefaultUint64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong DefaultUint64 {

+      get { return defaultUint64_; }

+    }

+    

+    public const int DefaultSint32FieldNumber = 65;

+    private bool hasDefaultSint32;

+    private int defaultSint32_ = -45;

+    public bool HasDefaultSint32 {

+      get { return hasDefaultSint32; }

+    }

+    public int DefaultSint32 {

+      get { return defaultSint32_; }

+    }

+    

+    public const int DefaultSint64FieldNumber = 66;

+    private bool hasDefaultSint64;

+    private long defaultSint64_ = 46;

+    public bool HasDefaultSint64 {

+      get { return hasDefaultSint64; }

+    }

+    public long DefaultSint64 {

+      get { return defaultSint64_; }

+    }

+    

+    public const int DefaultFixed32FieldNumber = 67;

+    private bool hasDefaultFixed32;

+    private uint defaultFixed32_ = 47;

+    public bool HasDefaultFixed32 {

+      get { return hasDefaultFixed32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint DefaultFixed32 {

+      get { return defaultFixed32_; }

+    }

+    

+    public const int DefaultFixed64FieldNumber = 68;

+    private bool hasDefaultFixed64;

+    private ulong defaultFixed64_ = 48;

+    public bool HasDefaultFixed64 {

+      get { return hasDefaultFixed64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong DefaultFixed64 {

+      get { return defaultFixed64_; }

+    }

+    

+    public const int DefaultSfixed32FieldNumber = 69;

+    private bool hasDefaultSfixed32;

+    private int defaultSfixed32_ = 49;

+    public bool HasDefaultSfixed32 {

+      get { return hasDefaultSfixed32; }

+    }

+    public int DefaultSfixed32 {

+      get { return defaultSfixed32_; }

+    }

+    

+    public const int DefaultSfixed64FieldNumber = 70;

+    private bool hasDefaultSfixed64;

+    private long defaultSfixed64_ = -50;

+    public bool HasDefaultSfixed64 {

+      get { return hasDefaultSfixed64; }

+    }

+    public long DefaultSfixed64 {

+      get { return defaultSfixed64_; }

+    }

+    

+    public const int DefaultFloatFieldNumber = 71;

+    private bool hasDefaultFloat;

+    private float defaultFloat_ = 51.5F;

+    public bool HasDefaultFloat {

+      get { return hasDefaultFloat; }

+    }

+    public float DefaultFloat {

+      get { return defaultFloat_; }

+    }

+    

+    public const int DefaultDoubleFieldNumber = 72;

+    private bool hasDefaultDouble;

+    private double defaultDouble_ = 52000D;

+    public bool HasDefaultDouble {

+      get { return hasDefaultDouble; }

+    }

+    public double DefaultDouble {

+      get { return defaultDouble_; }

+    }

+    

+    public const int DefaultBoolFieldNumber = 73;

+    private bool hasDefaultBool;

+    private bool defaultBool_ = true;

+    public bool HasDefaultBool {

+      get { return hasDefaultBool; }

+    }

+    public bool DefaultBool {

+      get { return defaultBool_; }

+    }

+    

+    public const int DefaultStringFieldNumber = 74;

+    private bool hasDefaultString;

+    private string defaultString_ = "hello";

+    public bool HasDefaultString {

+      get { return hasDefaultString; }

+    }

+    public string DefaultString {

+      get { return defaultString_; }

+    }

+    

+    public const int DefaultBytesFieldNumber = 75;

+    private bool hasDefaultBytes;

+    private pb::ByteString defaultBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Descriptor.Fields[62].DefaultValue;

+    public bool HasDefaultBytes {

+      get { return hasDefaultBytes; }

+    }

+    public pb::ByteString DefaultBytes {

+      get { return defaultBytes_; }

+    }

+    

+    public const int DefaultNestedEnumFieldNumber = 81;

+    private bool hasDefaultNestedEnum;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum defaultNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.BAR;

+    public bool HasDefaultNestedEnum {

+      get { return hasDefaultNestedEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum DefaultNestedEnum {

+      get { return defaultNestedEnum_; }

+    }

+    

+    public const int DefaultForeignEnumFieldNumber = 82;

+    private bool hasDefaultForeignEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum defaultForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_BAR;

+    public bool HasDefaultForeignEnum {

+      get { return hasDefaultForeignEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum DefaultForeignEnum {

+      get { return defaultForeignEnum_; }

+    }

+    

+    public const int DefaultImportEnumFieldNumber = 83;

+    private bool hasDefaultImportEnum;

+    private global::Google.ProtocolBuffers.TestProtos.ImportEnum defaultImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_BAR;

+    public bool HasDefaultImportEnum {

+      get { return hasDefaultImportEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ImportEnum DefaultImportEnum {

+      get { return defaultImportEnum_; }

+    }

+    

+    public const int DefaultStringPieceFieldNumber = 84;

+    private bool hasDefaultStringPiece;

+    private string defaultStringPiece_ = "abc";

+    public bool HasDefaultStringPiece {

+      get { return hasDefaultStringPiece; }

+    }

+    public string DefaultStringPiece {

+      get { return defaultStringPiece_; }

+    }

+    

+    public const int DefaultCordFieldNumber = 85;

+    private bool hasDefaultCord;

+    private string defaultCord_ = "123";

+    public bool HasDefaultCord {

+      get { return hasDefaultCord; }

+    }

+    public string DefaultCord {

+      get { return defaultCord_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testAllTypesFieldNames;

+      if (hasOptionalInt32) {

+        output.WriteInt32(1, field_names[31], OptionalInt32);

+      }

+      if (hasOptionalInt64) {

+        output.WriteInt64(2, field_names[32], OptionalInt64);

+      }

+      if (hasOptionalUint32) {

+        output.WriteUInt32(3, field_names[41], OptionalUint32);

+      }

+      if (hasOptionalUint64) {

+        output.WriteUInt64(4, field_names[42], OptionalUint64);

+      }

+      if (hasOptionalSint32) {

+        output.WriteSInt32(5, field_names[37], OptionalSint32);

+      }

+      if (hasOptionalSint64) {

+        output.WriteSInt64(6, field_names[38], OptionalSint64);

+      }

+      if (hasOptionalFixed32) {

+        output.WriteFixed32(7, field_names[24], OptionalFixed32);

+      }

+      if (hasOptionalFixed64) {

+        output.WriteFixed64(8, field_names[25], OptionalFixed64);

+      }

+      if (hasOptionalSfixed32) {

+        output.WriteSFixed32(9, field_names[35], OptionalSfixed32);

+      }

+      if (hasOptionalSfixed64) {

+        output.WriteSFixed64(10, field_names[36], OptionalSfixed64);

+      }

+      if (hasOptionalFloat) {

+        output.WriteFloat(11, field_names[26], OptionalFloat);

+      }

+      if (hasOptionalDouble) {

+        output.WriteDouble(12, field_names[23], OptionalDouble);

+      }

+      if (hasOptionalBool) {

+        output.WriteBool(13, field_names[20], OptionalBool);

+      }

+      if (hasOptionalString) {

+        output.WriteString(14, field_names[39], OptionalString);

+      }

+      if (hasOptionalBytes) {

+        output.WriteBytes(15, field_names[21], OptionalBytes);

+      }

+      if (hasOptionalGroup) {

+        output.WriteGroup(16, field_names[43], OptionalGroup);

+      }

+      if (hasOptionalNestedMessage) {

+        output.WriteMessage(18, field_names[34], OptionalNestedMessage);

+      }

+      if (hasOptionalForeignMessage) {

+        output.WriteMessage(19, field_names[28], OptionalForeignMessage);

+      }

+      if (hasOptionalImportMessage) {

+        output.WriteMessage(20, field_names[30], OptionalImportMessage);

+      }

+      if (hasOptionalNestedEnum) {

+        output.WriteEnum(21, field_names[33], (int) OptionalNestedEnum, OptionalNestedEnum);

+      }

+      if (hasOptionalForeignEnum) {

+        output.WriteEnum(22, field_names[27], (int) OptionalForeignEnum, OptionalForeignEnum);

+      }

+      if (hasOptionalImportEnum) {

+        output.WriteEnum(23, field_names[29], (int) OptionalImportEnum, OptionalImportEnum);

+      }

+      if (hasOptionalStringPiece) {

+        output.WriteString(24, field_names[40], OptionalStringPiece);

+      }

+      if (hasOptionalCord) {

+        output.WriteString(25, field_names[22], OptionalCord);

+      }

+      if (repeatedInt32_.Count > 0) {

+        output.WriteInt32Array(31, field_names[55], repeatedInt32_);

+      }

+      if (repeatedInt64_.Count > 0) {

+        output.WriteInt64Array(32, field_names[56], repeatedInt64_);

+      }

+      if (repeatedUint32_.Count > 0) {

+        output.WriteUInt32Array(33, field_names[65], repeatedUint32_);

+      }

+      if (repeatedUint64_.Count > 0) {

+        output.WriteUInt64Array(34, field_names[66], repeatedUint64_);

+      }

+      if (repeatedSint32_.Count > 0) {

+        output.WriteSInt32Array(35, field_names[61], repeatedSint32_);

+      }

+      if (repeatedSint64_.Count > 0) {

+        output.WriteSInt64Array(36, field_names[62], repeatedSint64_);

+      }

+      if (repeatedFixed32_.Count > 0) {

+        output.WriteFixed32Array(37, field_names[48], repeatedFixed32_);

+      }

+      if (repeatedFixed64_.Count > 0) {

+        output.WriteFixed64Array(38, field_names[49], repeatedFixed64_);

+      }

+      if (repeatedSfixed32_.Count > 0) {

+        output.WriteSFixed32Array(39, field_names[59], repeatedSfixed32_);

+      }

+      if (repeatedSfixed64_.Count > 0) {

+        output.WriteSFixed64Array(40, field_names[60], repeatedSfixed64_);

+      }

+      if (repeatedFloat_.Count > 0) {

+        output.WriteFloatArray(41, field_names[50], repeatedFloat_);

+      }

+      if (repeatedDouble_.Count > 0) {

+        output.WriteDoubleArray(42, field_names[47], repeatedDouble_);

+      }

+      if (repeatedBool_.Count > 0) {

+        output.WriteBoolArray(43, field_names[44], repeatedBool_);

+      }

+      if (repeatedString_.Count > 0) {

+        output.WriteStringArray(44, field_names[63], repeatedString_);

+      }

+      if (repeatedBytes_.Count > 0) {

+        output.WriteBytesArray(45, field_names[45], repeatedBytes_);

+      }

+      if (repeatedGroup_.Count > 0) {

+        output.WriteGroupArray(46, field_names[67], repeatedGroup_);

+      }

+      if (repeatedNestedMessage_.Count > 0) {

+        output.WriteMessageArray(48, field_names[58], repeatedNestedMessage_);

+      }

+      if (repeatedForeignMessage_.Count > 0) {

+        output.WriteMessageArray(49, field_names[52], repeatedForeignMessage_);

+      }

+      if (repeatedImportMessage_.Count > 0) {

+        output.WriteMessageArray(50, field_names[54], repeatedImportMessage_);

+      }

+      if (repeatedNestedEnum_.Count > 0) {

+        output.WriteEnumArray(51, field_names[57], repeatedNestedEnum_);

+      }

+      if (repeatedForeignEnum_.Count > 0) {

+        output.WriteEnumArray(52, field_names[51], repeatedForeignEnum_);

+      }

+      if (repeatedImportEnum_.Count > 0) {

+        output.WriteEnumArray(53, field_names[53], repeatedImportEnum_);

+      }

+      if (repeatedStringPiece_.Count > 0) {

+        output.WriteStringArray(54, field_names[64], repeatedStringPiece_);

+      }

+      if (repeatedCord_.Count > 0) {

+        output.WriteStringArray(55, field_names[46], repeatedCord_);

+      }

+      if (hasDefaultInt32) {

+        output.WriteInt32(61, field_names[9], DefaultInt32);

+      }

+      if (hasDefaultInt64) {

+        output.WriteInt64(62, field_names[10], DefaultInt64);

+      }

+      if (hasDefaultUint32) {

+        output.WriteUInt32(63, field_names[18], DefaultUint32);

+      }

+      if (hasDefaultUint64) {

+        output.WriteUInt64(64, field_names[19], DefaultUint64);

+      }

+      if (hasDefaultSint32) {

+        output.WriteSInt32(65, field_names[14], DefaultSint32);

+      }

+      if (hasDefaultSint64) {

+        output.WriteSInt64(66, field_names[15], DefaultSint64);

+      }

+      if (hasDefaultFixed32) {

+        output.WriteFixed32(67, field_names[4], DefaultFixed32);

+      }

+      if (hasDefaultFixed64) {

+        output.WriteFixed64(68, field_names[5], DefaultFixed64);

+      }

+      if (hasDefaultSfixed32) {

+        output.WriteSFixed32(69, field_names[12], DefaultSfixed32);

+      }

+      if (hasDefaultSfixed64) {

+        output.WriteSFixed64(70, field_names[13], DefaultSfixed64);

+      }

+      if (hasDefaultFloat) {

+        output.WriteFloat(71, field_names[6], DefaultFloat);

+      }

+      if (hasDefaultDouble) {

+        output.WriteDouble(72, field_names[3], DefaultDouble);

+      }

+      if (hasDefaultBool) {

+        output.WriteBool(73, field_names[0], DefaultBool);

+      }

+      if (hasDefaultString) {

+        output.WriteString(74, field_names[16], DefaultString);

+      }

+      if (hasDefaultBytes) {

+        output.WriteBytes(75, field_names[1], DefaultBytes);

+      }

+      if (hasDefaultNestedEnum) {

+        output.WriteEnum(81, field_names[11], (int) DefaultNestedEnum, DefaultNestedEnum);

+      }

+      if (hasDefaultForeignEnum) {

+        output.WriteEnum(82, field_names[7], (int) DefaultForeignEnum, DefaultForeignEnum);

+      }

+      if (hasDefaultImportEnum) {

+        output.WriteEnum(83, field_names[8], (int) DefaultImportEnum, DefaultImportEnum);

+      }

+      if (hasDefaultStringPiece) {

+        output.WriteString(84, field_names[17], DefaultStringPiece);

+      }

+      if (hasDefaultCord) {

+        output.WriteString(85, field_names[2], DefaultCord);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasOptionalInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, OptionalInt32);

+      }

+      if (hasOptionalInt64) {

+        size += pb::CodedOutputStream.ComputeInt64Size(2, OptionalInt64);

+      }

+      if (hasOptionalUint32) {

+        size += pb::CodedOutputStream.ComputeUInt32Size(3, OptionalUint32);

+      }

+      if (hasOptionalUint64) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(4, OptionalUint64);

+      }

+      if (hasOptionalSint32) {

+        size += pb::CodedOutputStream.ComputeSInt32Size(5, OptionalSint32);

+      }

+      if (hasOptionalSint64) {

+        size += pb::CodedOutputStream.ComputeSInt64Size(6, OptionalSint64);

+      }

+      if (hasOptionalFixed32) {

+        size += pb::CodedOutputStream.ComputeFixed32Size(7, OptionalFixed32);

+      }

+      if (hasOptionalFixed64) {

+        size += pb::CodedOutputStream.ComputeFixed64Size(8, OptionalFixed64);

+      }

+      if (hasOptionalSfixed32) {

+        size += pb::CodedOutputStream.ComputeSFixed32Size(9, OptionalSfixed32);

+      }

+      if (hasOptionalSfixed64) {

+        size += pb::CodedOutputStream.ComputeSFixed64Size(10, OptionalSfixed64);

+      }

+      if (hasOptionalFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(11, OptionalFloat);

+      }

+      if (hasOptionalDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(12, OptionalDouble);

+      }

+      if (hasOptionalBool) {

+        size += pb::CodedOutputStream.ComputeBoolSize(13, OptionalBool);

+      }

+      if (hasOptionalString) {

+        size += pb::CodedOutputStream.ComputeStringSize(14, OptionalString);

+      }

+      if (hasOptionalBytes) {

+        size += pb::CodedOutputStream.ComputeBytesSize(15, OptionalBytes);

+      }

+      if (hasOptionalGroup) {

+        size += pb::CodedOutputStream.ComputeGroupSize(16, OptionalGroup);

+      }

+      if (hasOptionalNestedMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(18, OptionalNestedMessage);

+      }

+      if (hasOptionalForeignMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(19, OptionalForeignMessage);

+      }

+      if (hasOptionalImportMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(20, OptionalImportMessage);

+      }

+      if (hasOptionalNestedEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(21, (int) OptionalNestedEnum);

+      }

+      if (hasOptionalForeignEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(22, (int) OptionalForeignEnum);

+      }

+      if (hasOptionalImportEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(23, (int) OptionalImportEnum);

+      }

+      if (hasOptionalStringPiece) {

+        size += pb::CodedOutputStream.ComputeStringSize(24, OptionalStringPiece);

+      }

+      if (hasOptionalCord) {

+        size += pb::CodedOutputStream.ComputeStringSize(25, OptionalCord);

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedInt32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in RepeatedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedInt64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (uint element in RepeatedUint32List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedUint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in RepeatedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedUint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedSint32List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedSint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in RepeatedSint64List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedSint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFixed32_.Count;

+        size += dataSize;

+        size += 2 * repeatedFixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedFixed64_.Count;

+        size += dataSize;

+        size += 2 * repeatedFixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedSfixed32_.Count;

+        size += dataSize;

+        size += 2 * repeatedSfixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedSfixed64_.Count;

+        size += dataSize;

+        size += 2 * repeatedSfixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFloat_.Count;

+        size += dataSize;

+        size += 2 * repeatedFloat_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedDouble_.Count;

+        size += dataSize;

+        size += 2 * repeatedDouble_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 1 * repeatedBool_.Count;

+        size += dataSize;

+        size += 2 * repeatedBool_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedString_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (pb::ByteString element in RepeatedBytesList) {

+          dataSize += pb::CodedOutputStream.ComputeBytesSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedBytes_.Count;

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup element in RepeatedGroupList) {

+        size += pb::CodedOutputStream.ComputeGroupSize(46, element);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage element in RepeatedNestedMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(48, element);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessage element in RepeatedForeignMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(49, element);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.ImportMessage element in RepeatedImportMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(50, element);

+      }

+      {

+        int dataSize = 0;

+        if (repeatedNestedEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum element in repeatedNestedEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * repeatedNestedEnum_.Count;

+        }

+      }

+      {

+        int dataSize = 0;

+        if (repeatedForeignEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in repeatedForeignEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * repeatedForeignEnum_.Count;

+        }

+      }

+      {

+        int dataSize = 0;

+        if (repeatedImportEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ImportEnum element in repeatedImportEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * repeatedImportEnum_.Count;

+        }

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringPieceList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedStringPiece_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedCordList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedCord_.Count;

+      }

+      if (hasDefaultInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(61, DefaultInt32);

+      }

+      if (hasDefaultInt64) {

+        size += pb::CodedOutputStream.ComputeInt64Size(62, DefaultInt64);

+      }

+      if (hasDefaultUint32) {

+        size += pb::CodedOutputStream.ComputeUInt32Size(63, DefaultUint32);

+      }

+      if (hasDefaultUint64) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(64, DefaultUint64);

+      }

+      if (hasDefaultSint32) {

+        size += pb::CodedOutputStream.ComputeSInt32Size(65, DefaultSint32);

+      }

+      if (hasDefaultSint64) {

+        size += pb::CodedOutputStream.ComputeSInt64Size(66, DefaultSint64);

+      }

+      if (hasDefaultFixed32) {

+        size += pb::CodedOutputStream.ComputeFixed32Size(67, DefaultFixed32);

+      }

+      if (hasDefaultFixed64) {

+        size += pb::CodedOutputStream.ComputeFixed64Size(68, DefaultFixed64);

+      }

+      if (hasDefaultSfixed32) {

+        size += pb::CodedOutputStream.ComputeSFixed32Size(69, DefaultSfixed32);

+      }

+      if (hasDefaultSfixed64) {

+        size += pb::CodedOutputStream.ComputeSFixed64Size(70, DefaultSfixed64);

+      }

+      if (hasDefaultFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(71, DefaultFloat);

+      }

+      if (hasDefaultDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(72, DefaultDouble);

+      }

+      if (hasDefaultBool) {

+        size += pb::CodedOutputStream.ComputeBoolSize(73, DefaultBool);

+      }

+      if (hasDefaultString) {

+        size += pb::CodedOutputStream.ComputeStringSize(74, DefaultString);

+      }

+      if (hasDefaultBytes) {

+        size += pb::CodedOutputStream.ComputeBytesSize(75, DefaultBytes);

+      }

+      if (hasDefaultNestedEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(81, (int) DefaultNestedEnum);

+      }

+      if (hasDefaultForeignEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(82, (int) DefaultForeignEnum);

+      }

+      if (hasDefaultImportEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(83, (int) DefaultImportEnum);

+      }

+      if (hasDefaultStringPiece) {

+        size += pb::CodedOutputStream.ComputeStringSize(84, DefaultStringPiece);

+      }

+      if (hasDefaultCord) {

+        size += pb::CodedOutputStream.ComputeStringSize(85, DefaultCord);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestAllTypes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllTypes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestAllTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestAllTypes MakeReadOnly() {

+      repeatedInt32_.MakeReadOnly();

+      repeatedInt64_.MakeReadOnly();

+      repeatedUint32_.MakeReadOnly();

+      repeatedUint64_.MakeReadOnly();

+      repeatedSint32_.MakeReadOnly();

+      repeatedSint64_.MakeReadOnly();

+      repeatedFixed32_.MakeReadOnly();

+      repeatedFixed64_.MakeReadOnly();

+      repeatedSfixed32_.MakeReadOnly();

+      repeatedSfixed64_.MakeReadOnly();

+      repeatedFloat_.MakeReadOnly();

+      repeatedDouble_.MakeReadOnly();

+      repeatedBool_.MakeReadOnly();

+      repeatedString_.MakeReadOnly();

+      repeatedBytes_.MakeReadOnly();

+      repeatedGroup_.MakeReadOnly();

+      repeatedNestedMessage_.MakeReadOnly();

+      repeatedForeignMessage_.MakeReadOnly();

+      repeatedImportMessage_.MakeReadOnly();

+      repeatedNestedEnum_.MakeReadOnly();

+      repeatedForeignEnum_.MakeReadOnly();

+      repeatedImportEnum_.MakeReadOnly();

+      repeatedStringPiece_.MakeReadOnly();

+      repeatedCord_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestAllTypes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestAllTypes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestAllTypes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestAllTypes result;

+      

+      private TestAllTypes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestAllTypes original = result;

+          result = new TestAllTypes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestAllTypes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Descriptor; }

+      }

+      

+      public override TestAllTypes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance; }

+      }

+      

+      public override TestAllTypes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestAllTypes) {

+          return MergeFrom((TestAllTypes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestAllTypes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllTypes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasOptionalInt32) {

+          OptionalInt32 = other.OptionalInt32;

+        }

+        if (other.HasOptionalInt64) {

+          OptionalInt64 = other.OptionalInt64;

+        }

+        if (other.HasOptionalUint32) {

+          OptionalUint32 = other.OptionalUint32;

+        }

+        if (other.HasOptionalUint64) {

+          OptionalUint64 = other.OptionalUint64;

+        }

+        if (other.HasOptionalSint32) {

+          OptionalSint32 = other.OptionalSint32;

+        }

+        if (other.HasOptionalSint64) {

+          OptionalSint64 = other.OptionalSint64;

+        }

+        if (other.HasOptionalFixed32) {

+          OptionalFixed32 = other.OptionalFixed32;

+        }

+        if (other.HasOptionalFixed64) {

+          OptionalFixed64 = other.OptionalFixed64;

+        }

+        if (other.HasOptionalSfixed32) {

+          OptionalSfixed32 = other.OptionalSfixed32;

+        }

+        if (other.HasOptionalSfixed64) {

+          OptionalSfixed64 = other.OptionalSfixed64;

+        }

+        if (other.HasOptionalFloat) {

+          OptionalFloat = other.OptionalFloat;

+        }

+        if (other.HasOptionalDouble) {

+          OptionalDouble = other.OptionalDouble;

+        }

+        if (other.HasOptionalBool) {

+          OptionalBool = other.OptionalBool;

+        }

+        if (other.HasOptionalString) {

+          OptionalString = other.OptionalString;

+        }

+        if (other.HasOptionalBytes) {

+          OptionalBytes = other.OptionalBytes;

+        }

+        if (other.HasOptionalGroup) {

+          MergeOptionalGroup(other.OptionalGroup);

+        }

+        if (other.HasOptionalNestedMessage) {

+          MergeOptionalNestedMessage(other.OptionalNestedMessage);

+        }

+        if (other.HasOptionalForeignMessage) {

+          MergeOptionalForeignMessage(other.OptionalForeignMessage);

+        }

+        if (other.HasOptionalImportMessage) {

+          MergeOptionalImportMessage(other.OptionalImportMessage);

+        }

+        if (other.HasOptionalNestedEnum) {

+          OptionalNestedEnum = other.OptionalNestedEnum;

+        }

+        if (other.HasOptionalForeignEnum) {

+          OptionalForeignEnum = other.OptionalForeignEnum;

+        }

+        if (other.HasOptionalImportEnum) {

+          OptionalImportEnum = other.OptionalImportEnum;

+        }

+        if (other.HasOptionalStringPiece) {

+          OptionalStringPiece = other.OptionalStringPiece;

+        }

+        if (other.HasOptionalCord) {

+          OptionalCord = other.OptionalCord;

+        }

+        if (other.repeatedInt32_.Count != 0) {

+          result.repeatedInt32_.Add(other.repeatedInt32_);

+        }

+        if (other.repeatedInt64_.Count != 0) {

+          result.repeatedInt64_.Add(other.repeatedInt64_);

+        }

+        if (other.repeatedUint32_.Count != 0) {

+          result.repeatedUint32_.Add(other.repeatedUint32_);

+        }

+        if (other.repeatedUint64_.Count != 0) {

+          result.repeatedUint64_.Add(other.repeatedUint64_);

+        }

+        if (other.repeatedSint32_.Count != 0) {

+          result.repeatedSint32_.Add(other.repeatedSint32_);

+        }

+        if (other.repeatedSint64_.Count != 0) {

+          result.repeatedSint64_.Add(other.repeatedSint64_);

+        }

+        if (other.repeatedFixed32_.Count != 0) {

+          result.repeatedFixed32_.Add(other.repeatedFixed32_);

+        }

+        if (other.repeatedFixed64_.Count != 0) {

+          result.repeatedFixed64_.Add(other.repeatedFixed64_);

+        }

+        if (other.repeatedSfixed32_.Count != 0) {

+          result.repeatedSfixed32_.Add(other.repeatedSfixed32_);

+        }

+        if (other.repeatedSfixed64_.Count != 0) {

+          result.repeatedSfixed64_.Add(other.repeatedSfixed64_);

+        }

+        if (other.repeatedFloat_.Count != 0) {

+          result.repeatedFloat_.Add(other.repeatedFloat_);

+        }

+        if (other.repeatedDouble_.Count != 0) {

+          result.repeatedDouble_.Add(other.repeatedDouble_);

+        }

+        if (other.repeatedBool_.Count != 0) {

+          result.repeatedBool_.Add(other.repeatedBool_);

+        }

+        if (other.repeatedString_.Count != 0) {

+          result.repeatedString_.Add(other.repeatedString_);

+        }

+        if (other.repeatedBytes_.Count != 0) {

+          result.repeatedBytes_.Add(other.repeatedBytes_);

+        }

+        if (other.repeatedGroup_.Count != 0) {

+          result.repeatedGroup_.Add(other.repeatedGroup_);

+        }

+        if (other.repeatedNestedMessage_.Count != 0) {

+          result.repeatedNestedMessage_.Add(other.repeatedNestedMessage_);

+        }

+        if (other.repeatedForeignMessage_.Count != 0) {

+          result.repeatedForeignMessage_.Add(other.repeatedForeignMessage_);

+        }

+        if (other.repeatedImportMessage_.Count != 0) {

+          result.repeatedImportMessage_.Add(other.repeatedImportMessage_);

+        }

+        if (other.repeatedNestedEnum_.Count != 0) {

+          result.repeatedNestedEnum_.Add(other.repeatedNestedEnum_);

+        }

+        if (other.repeatedForeignEnum_.Count != 0) {

+          result.repeatedForeignEnum_.Add(other.repeatedForeignEnum_);

+        }

+        if (other.repeatedImportEnum_.Count != 0) {

+          result.repeatedImportEnum_.Add(other.repeatedImportEnum_);

+        }

+        if (other.repeatedStringPiece_.Count != 0) {

+          result.repeatedStringPiece_.Add(other.repeatedStringPiece_);

+        }

+        if (other.repeatedCord_.Count != 0) {

+          result.repeatedCord_.Add(other.repeatedCord_);

+        }

+        if (other.HasDefaultInt32) {

+          DefaultInt32 = other.DefaultInt32;

+        }

+        if (other.HasDefaultInt64) {

+          DefaultInt64 = other.DefaultInt64;

+        }

+        if (other.HasDefaultUint32) {

+          DefaultUint32 = other.DefaultUint32;

+        }

+        if (other.HasDefaultUint64) {

+          DefaultUint64 = other.DefaultUint64;

+        }

+        if (other.HasDefaultSint32) {

+          DefaultSint32 = other.DefaultSint32;

+        }

+        if (other.HasDefaultSint64) {

+          DefaultSint64 = other.DefaultSint64;

+        }

+        if (other.HasDefaultFixed32) {

+          DefaultFixed32 = other.DefaultFixed32;

+        }

+        if (other.HasDefaultFixed64) {

+          DefaultFixed64 = other.DefaultFixed64;

+        }

+        if (other.HasDefaultSfixed32) {

+          DefaultSfixed32 = other.DefaultSfixed32;

+        }

+        if (other.HasDefaultSfixed64) {

+          DefaultSfixed64 = other.DefaultSfixed64;

+        }

+        if (other.HasDefaultFloat) {

+          DefaultFloat = other.DefaultFloat;

+        }

+        if (other.HasDefaultDouble) {

+          DefaultDouble = other.DefaultDouble;

+        }

+        if (other.HasDefaultBool) {

+          DefaultBool = other.DefaultBool;

+        }

+        if (other.HasDefaultString) {

+          DefaultString = other.DefaultString;

+        }

+        if (other.HasDefaultBytes) {

+          DefaultBytes = other.DefaultBytes;

+        }

+        if (other.HasDefaultNestedEnum) {

+          DefaultNestedEnum = other.DefaultNestedEnum;

+        }

+        if (other.HasDefaultForeignEnum) {

+          DefaultForeignEnum = other.DefaultForeignEnum;

+        }

+        if (other.HasDefaultImportEnum) {

+          DefaultImportEnum = other.DefaultImportEnum;

+        }

+        if (other.HasDefaultStringPiece) {

+          DefaultStringPiece = other.DefaultStringPiece;

+        }

+        if (other.HasDefaultCord) {

+          DefaultCord = other.DefaultCord;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testAllTypesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testAllTypesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasOptionalInt32 = input.ReadInt32(ref result.optionalInt32_);

+              break;

+            }

+            case 16: {

+              result.hasOptionalInt64 = input.ReadInt64(ref result.optionalInt64_);

+              break;

+            }

+            case 24: {

+              result.hasOptionalUint32 = input.ReadUInt32(ref result.optionalUint32_);

+              break;

+            }

+            case 32: {

+              result.hasOptionalUint64 = input.ReadUInt64(ref result.optionalUint64_);

+              break;

+            }

+            case 40: {

+              result.hasOptionalSint32 = input.ReadSInt32(ref result.optionalSint32_);

+              break;

+            }

+            case 48: {

+              result.hasOptionalSint64 = input.ReadSInt64(ref result.optionalSint64_);

+              break;

+            }

+            case 61: {

+              result.hasOptionalFixed32 = input.ReadFixed32(ref result.optionalFixed32_);

+              break;

+            }

+            case 65: {

+              result.hasOptionalFixed64 = input.ReadFixed64(ref result.optionalFixed64_);

+              break;

+            }

+            case 77: {

+              result.hasOptionalSfixed32 = input.ReadSFixed32(ref result.optionalSfixed32_);

+              break;

+            }

+            case 81: {

+              result.hasOptionalSfixed64 = input.ReadSFixed64(ref result.optionalSfixed64_);

+              break;

+            }

+            case 93: {

+              result.hasOptionalFloat = input.ReadFloat(ref result.optionalFloat_);

+              break;

+            }

+            case 97: {

+              result.hasOptionalDouble = input.ReadDouble(ref result.optionalDouble_);

+              break;

+            }

+            case 104: {

+              result.hasOptionalBool = input.ReadBool(ref result.optionalBool_);

+              break;

+            }

+            case 114: {

+              result.hasOptionalString = input.ReadString(ref result.optionalString_);

+              break;

+            }

+            case 122: {

+              result.hasOptionalBytes = input.ReadBytes(ref result.optionalBytes_);

+              break;

+            }

+            case 131: {

+              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.CreateBuilder();

+              if (result.hasOptionalGroup) {

+                subBuilder.MergeFrom(OptionalGroup);

+              }

+              input.ReadGroup(16, subBuilder, extensionRegistry);

+              OptionalGroup = subBuilder.BuildPartial();

+              break;

+            }

+            case 146: {

+              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder();

+              if (result.hasOptionalNestedMessage) {

+                subBuilder.MergeFrom(OptionalNestedMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalNestedMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 154: {

+              global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder();

+              if (result.hasOptionalForeignMessage) {

+                subBuilder.MergeFrom(OptionalForeignMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalForeignMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 162: {

+              global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ImportMessage.CreateBuilder();

+              if (result.hasOptionalImportMessage) {

+                subBuilder.MergeFrom(OptionalImportMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalImportMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 168: {

+              object unknown;

+              if(input.ReadEnum(ref result.optionalNestedEnum_, out unknown)) {

+                result.hasOptionalNestedEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(21, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 176: {

+              object unknown;

+              if(input.ReadEnum(ref result.optionalForeignEnum_, out unknown)) {

+                result.hasOptionalForeignEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(22, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 184: {

+              object unknown;

+              if(input.ReadEnum(ref result.optionalImportEnum_, out unknown)) {

+                result.hasOptionalImportEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(23, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 194: {

+              result.hasOptionalStringPiece = input.ReadString(ref result.optionalStringPiece_);

+              break;

+            }

+            case 202: {

+              result.hasOptionalCord = input.ReadString(ref result.optionalCord_);

+              break;

+            }

+            case 250:

+            case 248: {

+              input.ReadInt32Array(tag, field_name, result.repeatedInt32_);

+              break;

+            }

+            case 258:

+            case 256: {

+              input.ReadInt64Array(tag, field_name, result.repeatedInt64_);

+              break;

+            }

+            case 266:

+            case 264: {

+              input.ReadUInt32Array(tag, field_name, result.repeatedUint32_);

+              break;

+            }

+            case 274:

+            case 272: {

+              input.ReadUInt64Array(tag, field_name, result.repeatedUint64_);

+              break;

+            }

+            case 282:

+            case 280: {

+              input.ReadSInt32Array(tag, field_name, result.repeatedSint32_);

+              break;

+            }

+            case 290:

+            case 288: {

+              input.ReadSInt64Array(tag, field_name, result.repeatedSint64_);

+              break;

+            }

+            case 298:

+            case 301: {

+              input.ReadFixed32Array(tag, field_name, result.repeatedFixed32_);

+              break;

+            }

+            case 306:

+            case 305: {

+              input.ReadFixed64Array(tag, field_name, result.repeatedFixed64_);

+              break;

+            }

+            case 314:

+            case 317: {

+              input.ReadSFixed32Array(tag, field_name, result.repeatedSfixed32_);

+              break;

+            }

+            case 322:

+            case 321: {

+              input.ReadSFixed64Array(tag, field_name, result.repeatedSfixed64_);

+              break;

+            }

+            case 330:

+            case 333: {

+              input.ReadFloatArray(tag, field_name, result.repeatedFloat_);

+              break;

+            }

+            case 338:

+            case 337: {

+              input.ReadDoubleArray(tag, field_name, result.repeatedDouble_);

+              break;

+            }

+            case 346:

+            case 344: {

+              input.ReadBoolArray(tag, field_name, result.repeatedBool_);

+              break;

+            }

+            case 354: {

+              input.ReadStringArray(tag, field_name, result.repeatedString_);

+              break;

+            }

+            case 362: {

+              input.ReadBytesArray(tag, field_name, result.repeatedBytes_);

+              break;

+            }

+            case 371: {

+              input.ReadGroupArray(tag, field_name, result.repeatedGroup_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 386: {

+              input.ReadMessageArray(tag, field_name, result.repeatedNestedMessage_, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 394: {

+              input.ReadMessageArray(tag, field_name, result.repeatedForeignMessage_, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 402: {

+              input.ReadMessageArray(tag, field_name, result.repeatedImportMessage_, global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 410:

+            case 408: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum>(tag, field_name, result.repeatedNestedEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(51, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 418:

+            case 416: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.repeatedForeignEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(52, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 426:

+            case 424: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ImportEnum>(tag, field_name, result.repeatedImportEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(53, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 434: {

+              input.ReadStringArray(tag, field_name, result.repeatedStringPiece_);

+              break;

+            }

+            case 442: {

+              input.ReadStringArray(tag, field_name, result.repeatedCord_);

+              break;

+            }

+            case 488: {

+              result.hasDefaultInt32 = input.ReadInt32(ref result.defaultInt32_);

+              break;

+            }

+            case 496: {

+              result.hasDefaultInt64 = input.ReadInt64(ref result.defaultInt64_);

+              break;

+            }

+            case 504: {

+              result.hasDefaultUint32 = input.ReadUInt32(ref result.defaultUint32_);

+              break;

+            }

+            case 512: {

+              result.hasDefaultUint64 = input.ReadUInt64(ref result.defaultUint64_);

+              break;

+            }

+            case 520: {

+              result.hasDefaultSint32 = input.ReadSInt32(ref result.defaultSint32_);

+              break;

+            }

+            case 528: {

+              result.hasDefaultSint64 = input.ReadSInt64(ref result.defaultSint64_);

+              break;

+            }

+            case 541: {

+              result.hasDefaultFixed32 = input.ReadFixed32(ref result.defaultFixed32_);

+              break;

+            }

+            case 545: {

+              result.hasDefaultFixed64 = input.ReadFixed64(ref result.defaultFixed64_);

+              break;

+            }

+            case 557: {

+              result.hasDefaultSfixed32 = input.ReadSFixed32(ref result.defaultSfixed32_);

+              break;

+            }

+            case 561: {

+              result.hasDefaultSfixed64 = input.ReadSFixed64(ref result.defaultSfixed64_);

+              break;

+            }

+            case 573: {

+              result.hasDefaultFloat = input.ReadFloat(ref result.defaultFloat_);

+              break;

+            }

+            case 577: {

+              result.hasDefaultDouble = input.ReadDouble(ref result.defaultDouble_);

+              break;

+            }

+            case 584: {

+              result.hasDefaultBool = input.ReadBool(ref result.defaultBool_);

+              break;

+            }

+            case 594: {

+              result.hasDefaultString = input.ReadString(ref result.defaultString_);

+              break;

+            }

+            case 602: {

+              result.hasDefaultBytes = input.ReadBytes(ref result.defaultBytes_);

+              break;

+            }

+            case 648: {

+              object unknown;

+              if(input.ReadEnum(ref result.defaultNestedEnum_, out unknown)) {

+                result.hasDefaultNestedEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(81, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 656: {

+              object unknown;

+              if(input.ReadEnum(ref result.defaultForeignEnum_, out unknown)) {

+                result.hasDefaultForeignEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(82, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 664: {

+              object unknown;

+              if(input.ReadEnum(ref result.defaultImportEnum_, out unknown)) {

+                result.hasDefaultImportEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(83, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 674: {

+              result.hasDefaultStringPiece = input.ReadString(ref result.defaultStringPiece_);

+              break;

+            }

+            case 682: {

+              result.hasDefaultCord = input.ReadString(ref result.defaultCord_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasOptionalInt32 {

+        get { return result.hasOptionalInt32; }

+      }

+      public int OptionalInt32 {

+        get { return result.OptionalInt32; }

+        set { SetOptionalInt32(value); }

+      }

+      public Builder SetOptionalInt32(int value) {

+        PrepareBuilder();

+        result.hasOptionalInt32 = true;

+        result.optionalInt32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalInt32() {

+        PrepareBuilder();

+        result.hasOptionalInt32 = false;

+        result.optionalInt32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalInt64 {

+        get { return result.hasOptionalInt64; }

+      }

+      public long OptionalInt64 {

+        get { return result.OptionalInt64; }

+        set { SetOptionalInt64(value); }

+      }

+      public Builder SetOptionalInt64(long value) {

+        PrepareBuilder();

+        result.hasOptionalInt64 = true;

+        result.optionalInt64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalInt64() {

+        PrepareBuilder();

+        result.hasOptionalInt64 = false;

+        result.optionalInt64_ = 0L;

+        return this;

+      }

+      

+      public bool HasOptionalUint32 {

+        get { return result.hasOptionalUint32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint OptionalUint32 {

+        get { return result.OptionalUint32; }

+        set { SetOptionalUint32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalUint32(uint value) {

+        PrepareBuilder();

+        result.hasOptionalUint32 = true;

+        result.optionalUint32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalUint32() {

+        PrepareBuilder();

+        result.hasOptionalUint32 = false;

+        result.optionalUint32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalUint64 {

+        get { return result.hasOptionalUint64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong OptionalUint64 {

+        get { return result.OptionalUint64; }

+        set { SetOptionalUint64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalUint64(ulong value) {

+        PrepareBuilder();

+        result.hasOptionalUint64 = true;

+        result.optionalUint64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalUint64() {

+        PrepareBuilder();

+        result.hasOptionalUint64 = false;

+        result.optionalUint64_ = 0UL;

+        return this;

+      }

+      

+      public bool HasOptionalSint32 {

+        get { return result.hasOptionalSint32; }

+      }

+      public int OptionalSint32 {

+        get { return result.OptionalSint32; }

+        set { SetOptionalSint32(value); }

+      }

+      public Builder SetOptionalSint32(int value) {

+        PrepareBuilder();

+        result.hasOptionalSint32 = true;

+        result.optionalSint32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSint32() {

+        PrepareBuilder();

+        result.hasOptionalSint32 = false;

+        result.optionalSint32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalSint64 {

+        get { return result.hasOptionalSint64; }

+      }

+      public long OptionalSint64 {

+        get { return result.OptionalSint64; }

+        set { SetOptionalSint64(value); }

+      }

+      public Builder SetOptionalSint64(long value) {

+        PrepareBuilder();

+        result.hasOptionalSint64 = true;

+        result.optionalSint64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSint64() {

+        PrepareBuilder();

+        result.hasOptionalSint64 = false;

+        result.optionalSint64_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalFixed32 {

+        get { return result.hasOptionalFixed32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint OptionalFixed32 {

+        get { return result.OptionalFixed32; }

+        set { SetOptionalFixed32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalFixed32(uint value) {

+        PrepareBuilder();

+        result.hasOptionalFixed32 = true;

+        result.optionalFixed32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalFixed32() {

+        PrepareBuilder();

+        result.hasOptionalFixed32 = false;

+        result.optionalFixed32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalFixed64 {

+        get { return result.hasOptionalFixed64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong OptionalFixed64 {

+        get { return result.OptionalFixed64; }

+        set { SetOptionalFixed64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetOptionalFixed64(ulong value) {

+        PrepareBuilder();

+        result.hasOptionalFixed64 = true;

+        result.optionalFixed64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalFixed64() {

+        PrepareBuilder();

+        result.hasOptionalFixed64 = false;

+        result.optionalFixed64_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalSfixed32 {

+        get { return result.hasOptionalSfixed32; }

+      }

+      public int OptionalSfixed32 {

+        get { return result.OptionalSfixed32; }

+        set { SetOptionalSfixed32(value); }

+      }

+      public Builder SetOptionalSfixed32(int value) {

+        PrepareBuilder();

+        result.hasOptionalSfixed32 = true;

+        result.optionalSfixed32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSfixed32() {

+        PrepareBuilder();

+        result.hasOptionalSfixed32 = false;

+        result.optionalSfixed32_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalSfixed64 {

+        get { return result.hasOptionalSfixed64; }

+      }

+      public long OptionalSfixed64 {

+        get { return result.OptionalSfixed64; }

+        set { SetOptionalSfixed64(value); }

+      }

+      public Builder SetOptionalSfixed64(long value) {

+        PrepareBuilder();

+        result.hasOptionalSfixed64 = true;

+        result.optionalSfixed64_ = value;

+        return this;

+      }

+      public Builder ClearOptionalSfixed64() {

+        PrepareBuilder();

+        result.hasOptionalSfixed64 = false;

+        result.optionalSfixed64_ = 0;

+        return this;

+      }

+      

+      public bool HasOptionalFloat {

+        get { return result.hasOptionalFloat; }

+      }

+      public float OptionalFloat {

+        get { return result.OptionalFloat; }

+        set { SetOptionalFloat(value); }

+      }

+      public Builder SetOptionalFloat(float value) {

+        PrepareBuilder();

+        result.hasOptionalFloat = true;

+        result.optionalFloat_ = value;

+        return this;

+      }

+      public Builder ClearOptionalFloat() {

+        PrepareBuilder();

+        result.hasOptionalFloat = false;

+        result.optionalFloat_ = 0F;

+        return this;

+      }

+      

+      public bool HasOptionalDouble {

+        get { return result.hasOptionalDouble; }

+      }

+      public double OptionalDouble {

+        get { return result.OptionalDouble; }

+        set { SetOptionalDouble(value); }

+      }

+      public Builder SetOptionalDouble(double value) {

+        PrepareBuilder();

+        result.hasOptionalDouble = true;

+        result.optionalDouble_ = value;

+        return this;

+      }

+      public Builder ClearOptionalDouble() {

+        PrepareBuilder();

+        result.hasOptionalDouble = false;

+        result.optionalDouble_ = 0D;

+        return this;

+      }

+      

+      public bool HasOptionalBool {

+        get { return result.hasOptionalBool; }

+      }

+      public bool OptionalBool {

+        get { return result.OptionalBool; }

+        set { SetOptionalBool(value); }

+      }

+      public Builder SetOptionalBool(bool value) {

+        PrepareBuilder();

+        result.hasOptionalBool = true;

+        result.optionalBool_ = value;

+        return this;

+      }

+      public Builder ClearOptionalBool() {

+        PrepareBuilder();

+        result.hasOptionalBool = false;

+        result.optionalBool_ = false;

+        return this;

+      }

+      

+      public bool HasOptionalString {

+        get { return result.hasOptionalString; }

+      }

+      public string OptionalString {

+        get { return result.OptionalString; }

+        set { SetOptionalString(value); }

+      }

+      public Builder SetOptionalString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalString = true;

+        result.optionalString_ = value;

+        return this;

+      }

+      public Builder ClearOptionalString() {

+        PrepareBuilder();

+        result.hasOptionalString = false;

+        result.optionalString_ = "";

+        return this;

+      }

+      

+      public bool HasOptionalBytes {

+        get { return result.hasOptionalBytes; }

+      }

+      public pb::ByteString OptionalBytes {

+        get { return result.OptionalBytes; }

+        set { SetOptionalBytes(value); }

+      }

+      public Builder SetOptionalBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalBytes = true;

+        result.optionalBytes_ = value;

+        return this;

+      }

+      public Builder ClearOptionalBytes() {

+        PrepareBuilder();

+        result.hasOptionalBytes = false;

+        result.optionalBytes_ = pb::ByteString.Empty;

+        return this;

+      }

+      

+      public bool HasOptionalGroup {

+       get { return result.hasOptionalGroup; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup OptionalGroup {

+        get { return result.OptionalGroup; }

+        set { SetOptionalGroup(value); }

+      }

+      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalGroup = true;

+        result.optionalGroup_ = value;

+        return this;

+      }

+      public Builder SetOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalGroup = true;

+        result.optionalGroup_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalGroup &&

+            result.optionalGroup_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.DefaultInstance) {

+            result.optionalGroup_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.OptionalGroup.CreateBuilder(result.optionalGroup_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalGroup_ = value;

+        }

+        result.hasOptionalGroup = true;

+        return this;

+      }

+      public Builder ClearOptionalGroup() {

+        PrepareBuilder();

+        result.hasOptionalGroup = false;

+        result.optionalGroup_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalNestedMessage {

+       get { return result.hasOptionalNestedMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage OptionalNestedMessage {

+        get { return result.OptionalNestedMessage; }

+        set { SetOptionalNestedMessage(value); }

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalNestedMessage &&

+            result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) {

+            result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalNestedMessage_ = value;

+        }

+        result.hasOptionalNestedMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalNestedMessage() {

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = false;

+        result.optionalNestedMessage_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalForeignMessage {

+       get { return result.hasOptionalForeignMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage OptionalForeignMessage {

+        get { return result.OptionalForeignMessage; }

+        set { SetOptionalForeignMessage(value); }

+      }

+      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalForeignMessage = true;

+        result.optionalForeignMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalForeignMessage = true;

+        result.optionalForeignMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalForeignMessage &&

+            result.optionalForeignMessage_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {

+            result.optionalForeignMessage_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.optionalForeignMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalForeignMessage_ = value;

+        }

+        result.hasOptionalForeignMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalForeignMessage() {

+        PrepareBuilder();

+        result.hasOptionalForeignMessage = false;

+        result.optionalForeignMessage_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalImportMessage {

+       get { return result.hasOptionalImportMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportMessage OptionalImportMessage {

+        get { return result.OptionalImportMessage; }

+        set { SetOptionalImportMessage(value); }

+      }

+      public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalImportMessage = true;

+        result.optionalImportMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalImportMessage = true;

+        result.optionalImportMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalImportMessage &&

+            result.optionalImportMessage_ != global::Google.ProtocolBuffers.TestProtos.ImportMessage.DefaultInstance) {

+            result.optionalImportMessage_ = global::Google.ProtocolBuffers.TestProtos.ImportMessage.CreateBuilder(result.optionalImportMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalImportMessage_ = value;

+        }

+        result.hasOptionalImportMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalImportMessage() {

+        PrepareBuilder();

+        result.hasOptionalImportMessage = false;

+        result.optionalImportMessage_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalNestedEnum {

+       get { return result.hasOptionalNestedEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum OptionalNestedEnum {

+        get { return result.OptionalNestedEnum; }

+        set { SetOptionalNestedEnum(value); }

+      }

+      public Builder SetOptionalNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.hasOptionalNestedEnum = true;

+        result.optionalNestedEnum_ = value;

+        return this;

+      }

+      public Builder ClearOptionalNestedEnum() {

+        PrepareBuilder();

+        result.hasOptionalNestedEnum = false;

+        result.optionalNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.FOO;

+        return this;

+      }

+      

+      public bool HasOptionalForeignEnum {

+       get { return result.hasOptionalForeignEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum OptionalForeignEnum {

+        get { return result.OptionalForeignEnum; }

+        set { SetOptionalForeignEnum(value); }

+      }

+      public Builder SetOptionalForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.hasOptionalForeignEnum = true;

+        result.optionalForeignEnum_ = value;

+        return this;

+      }

+      public Builder ClearOptionalForeignEnum() {

+        PrepareBuilder();

+        result.hasOptionalForeignEnum = false;

+        result.optionalForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+        return this;

+      }

+      

+      public bool HasOptionalImportEnum {

+       get { return result.hasOptionalImportEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportEnum OptionalImportEnum {

+        get { return result.OptionalImportEnum; }

+        set { SetOptionalImportEnum(value); }

+      }

+      public Builder SetOptionalImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {

+        PrepareBuilder();

+        result.hasOptionalImportEnum = true;

+        result.optionalImportEnum_ = value;

+        return this;

+      }

+      public Builder ClearOptionalImportEnum() {

+        PrepareBuilder();

+        result.hasOptionalImportEnum = false;

+        result.optionalImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_FOO;

+        return this;

+      }

+      

+      public bool HasOptionalStringPiece {

+        get { return result.hasOptionalStringPiece; }

+      }

+      public string OptionalStringPiece {

+        get { return result.OptionalStringPiece; }

+        set { SetOptionalStringPiece(value); }

+      }

+      public Builder SetOptionalStringPiece(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalStringPiece = true;

+        result.optionalStringPiece_ = value;

+        return this;

+      }

+      public Builder ClearOptionalStringPiece() {

+        PrepareBuilder();

+        result.hasOptionalStringPiece = false;

+        result.optionalStringPiece_ = "";

+        return this;

+      }

+      

+      public bool HasOptionalCord {

+        get { return result.hasOptionalCord; }

+      }

+      public string OptionalCord {

+        get { return result.OptionalCord; }

+        set { SetOptionalCord(value); }

+      }

+      public Builder SetOptionalCord(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalCord = true;

+        result.optionalCord_ = value;

+        return this;

+      }

+      public Builder ClearOptionalCord() {

+        PrepareBuilder();

+        result.hasOptionalCord = false;

+        result.optionalCord_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedInt32List {

+        get { return PrepareBuilder().repeatedInt32_; }

+      }

+      public int RepeatedInt32Count {

+        get { return result.RepeatedInt32Count; }

+      }

+      public int GetRepeatedInt32(int index) {

+        return result.GetRepeatedInt32(index);

+      }

+      public Builder SetRepeatedInt32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt32(int value) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt32() {

+        PrepareBuilder();

+        result.repeatedInt32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedInt64List {

+        get { return PrepareBuilder().repeatedInt64_; }

+      }

+      public int RepeatedInt64Count {

+        get { return result.RepeatedInt64Count; }

+      }

+      public long GetRepeatedInt64(int index) {

+        return result.GetRepeatedInt64(index);

+      }

+      public Builder SetRepeatedInt64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt64(long value) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt64() {

+        PrepareBuilder();

+        result.repeatedInt64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> RepeatedUint32List {

+        get { return PrepareBuilder().repeatedUint32_; }

+      }

+      public int RepeatedUint32Count {

+        get { return result.RepeatedUint32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetRepeatedUint32(int index) {

+        return result.GetRepeatedUint32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedUint32(int index, uint value) {

+        PrepareBuilder();

+        result.repeatedUint32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedUint32(uint value) {

+        PrepareBuilder();

+        result.repeatedUint32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedUint32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.repeatedUint32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedUint32() {

+        PrepareBuilder();

+        result.repeatedUint32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedUint64List {

+        get { return PrepareBuilder().repeatedUint64_; }

+      }

+      public int RepeatedUint64Count {

+        get { return result.RepeatedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedUint64(int index) {

+        return result.GetRepeatedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedUint64(ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedUint64() {

+        PrepareBuilder();

+        result.repeatedUint64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedSint32List {

+        get { return PrepareBuilder().repeatedSint32_; }

+      }

+      public int RepeatedSint32Count {

+        get { return result.RepeatedSint32Count; }

+      }

+      public int GetRepeatedSint32(int index) {

+        return result.GetRepeatedSint32(index);

+      }

+      public Builder SetRepeatedSint32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedSint32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSint32(int value) {

+        PrepareBuilder();

+        result.repeatedSint32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSint32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedSint32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSint32() {

+        PrepareBuilder();

+        result.repeatedSint32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedSint64List {

+        get { return PrepareBuilder().repeatedSint64_; }

+      }

+      public int RepeatedSint64Count {

+        get { return result.RepeatedSint64Count; }

+      }

+      public long GetRepeatedSint64(int index) {

+        return result.GetRepeatedSint64(index);

+      }

+      public Builder SetRepeatedSint64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedSint64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSint64(long value) {

+        PrepareBuilder();

+        result.repeatedSint64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSint64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedSint64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSint64() {

+        PrepareBuilder();

+        result.repeatedSint64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> RepeatedFixed32List {

+        get { return PrepareBuilder().repeatedFixed32_; }

+      }

+      public int RepeatedFixed32Count {

+        get { return result.RepeatedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetRepeatedFixed32(int index) {

+        return result.GetRepeatedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed32(uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed32() {

+        PrepareBuilder();

+        result.repeatedFixed32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedFixed64List {

+        get { return PrepareBuilder().repeatedFixed64_; }

+      }

+      public int RepeatedFixed64Count {

+        get { return result.RepeatedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedFixed64(int index) {

+        return result.GetRepeatedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed64(ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed64() {

+        PrepareBuilder();

+        result.repeatedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedSfixed32List {

+        get { return PrepareBuilder().repeatedSfixed32_; }

+      }

+      public int RepeatedSfixed32Count {

+        get { return result.RepeatedSfixed32Count; }

+      }

+      public int GetRepeatedSfixed32(int index) {

+        return result.GetRepeatedSfixed32(index);

+      }

+      public Builder SetRepeatedSfixed32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedSfixed32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSfixed32(int value) {

+        PrepareBuilder();

+        result.repeatedSfixed32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSfixed32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedSfixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSfixed32() {

+        PrepareBuilder();

+        result.repeatedSfixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedSfixed64List {

+        get { return PrepareBuilder().repeatedSfixed64_; }

+      }

+      public int RepeatedSfixed64Count {

+        get { return result.RepeatedSfixed64Count; }

+      }

+      public long GetRepeatedSfixed64(int index) {

+        return result.GetRepeatedSfixed64(index);

+      }

+      public Builder SetRepeatedSfixed64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedSfixed64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedSfixed64(long value) {

+        PrepareBuilder();

+        result.repeatedSfixed64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedSfixed64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedSfixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedSfixed64() {

+        PrepareBuilder();

+        result.repeatedSfixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> RepeatedFloatList {

+        get { return PrepareBuilder().repeatedFloat_; }

+      }

+      public int RepeatedFloatCount {

+        get { return result.RepeatedFloatCount; }

+      }

+      public float GetRepeatedFloat(int index) {

+        return result.GetRepeatedFloat(index);

+      }

+      public Builder SetRepeatedFloat(int index, float value) {

+        PrepareBuilder();

+        result.repeatedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedFloat(float value) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFloat() {

+        PrepareBuilder();

+        result.repeatedFloat_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<double> RepeatedDoubleList {

+        get { return PrepareBuilder().repeatedDouble_; }

+      }

+      public int RepeatedDoubleCount {

+        get { return result.RepeatedDoubleCount; }

+      }

+      public double GetRepeatedDouble(int index) {

+        return result.GetRepeatedDouble(index);

+      }

+      public Builder SetRepeatedDouble(int index, double value) {

+        PrepareBuilder();

+        result.repeatedDouble_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedDouble(double value) {

+        PrepareBuilder();

+        result.repeatedDouble_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedDouble(scg::IEnumerable<double> values) {

+        PrepareBuilder();

+        result.repeatedDouble_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedDouble() {

+        PrepareBuilder();

+        result.repeatedDouble_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<bool> RepeatedBoolList {

+        get { return PrepareBuilder().repeatedBool_; }

+      }

+      public int RepeatedBoolCount {

+        get { return result.RepeatedBoolCount; }

+      }

+      public bool GetRepeatedBool(int index) {

+        return result.GetRepeatedBool(index);

+      }

+      public Builder SetRepeatedBool(int index, bool value) {

+        PrepareBuilder();

+        result.repeatedBool_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedBool(bool value) {

+        PrepareBuilder();

+        result.repeatedBool_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedBool(scg::IEnumerable<bool> values) {

+        PrepareBuilder();

+        result.repeatedBool_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedBool() {

+        PrepareBuilder();

+        result.repeatedBool_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringList {

+        get { return PrepareBuilder().repeatedString_; }

+      }

+      public int RepeatedStringCount {

+        get { return result.RepeatedStringCount; }

+      }

+      public string GetRepeatedString(int index) {

+        return result.GetRepeatedString(index);

+      }

+      public Builder SetRepeatedString(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedString_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedString_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedString(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedString_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedString() {

+        PrepareBuilder();

+        result.repeatedString_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<pb::ByteString> RepeatedBytesList {

+        get { return PrepareBuilder().repeatedBytes_; }

+      }

+      public int RepeatedBytesCount {

+        get { return result.RepeatedBytesCount; }

+      }

+      public pb::ByteString GetRepeatedBytes(int index) {

+        return result.GetRepeatedBytes(index);

+      }

+      public Builder SetRepeatedBytes(int index, pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedBytes_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedBytes_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedBytes(scg::IEnumerable<pb::ByteString> values) {

+        PrepareBuilder();

+        result.repeatedBytes_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedBytes() {

+        PrepareBuilder();

+        result.repeatedBytes_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> RepeatedGroupList {

+        get { return PrepareBuilder().repeatedGroup_; }

+      }

+      public int RepeatedGroupCount {

+        get { return result.RepeatedGroupCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup GetRepeatedGroup(int index) {

+        return result.GetRepeatedGroup(index);

+      }

+      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedGroup_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedGroup(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedGroup_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedGroup_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedGroup(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedGroup_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedGroup(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.RepeatedGroup> values) {

+        PrepareBuilder();

+        result.repeatedGroup_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedGroup() {

+        PrepareBuilder();

+        result.repeatedGroup_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> RepeatedNestedMessageList {

+        get { return PrepareBuilder().repeatedNestedMessage_; }

+      }

+      public int RepeatedNestedMessageCount {

+        get { return result.RepeatedNestedMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage GetRepeatedNestedMessage(int index) {

+        return result.GetRepeatedNestedMessage(index);

+      }

+      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedNestedMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedNestedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedNestedMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedNestedMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage> values) {

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedNestedMessage() {

+        PrepareBuilder();

+        result.repeatedNestedMessage_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedForeignMessageList {

+        get { return PrepareBuilder().repeatedForeignMessage_; }

+      }

+      public int RepeatedForeignMessageCount {

+        get { return result.RepeatedForeignMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedForeignMessage(int index) {

+        return result.GetRepeatedForeignMessage(index);

+      }

+      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedForeignMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedForeignMessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedForeignMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedForeignMessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedForeignMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> values) {

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedForeignMessage() {

+        PrepareBuilder();

+        result.repeatedForeignMessage_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportMessage> RepeatedImportMessageList {

+        get { return PrepareBuilder().repeatedImportMessage_; }

+      }

+      public int RepeatedImportMessageCount {

+        get { return result.RepeatedImportMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportMessage GetRepeatedImportMessage(int index) {

+        return result.GetRepeatedImportMessage(index);

+      }

+      public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedImportMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedImportMessage(int index, global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedImportMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedImportMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedImportMessage(global::Google.ProtocolBuffers.TestProtos.ImportMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedImportMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedImportMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ImportMessage> values) {

+        PrepareBuilder();

+        result.repeatedImportMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedImportMessage() {

+        PrepareBuilder();

+        result.repeatedImportMessage_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> RepeatedNestedEnumList {

+        get { return PrepareBuilder().repeatedNestedEnum_; }

+      }

+      public int RepeatedNestedEnumCount {

+        get { return result.RepeatedNestedEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum GetRepeatedNestedEnum(int index) {

+        return result.GetRepeatedNestedEnum(index);

+      }

+      public Builder SetRepeatedNestedEnum(int index, global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.repeatedNestedEnum_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.repeatedNestedEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedNestedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum> values) {

+        PrepareBuilder();

+        result.repeatedNestedEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedNestedEnum() {

+        PrepareBuilder();

+        result.repeatedNestedEnum_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedForeignEnumList {

+        get { return PrepareBuilder().repeatedForeignEnum_; }

+      }

+      public int RepeatedForeignEnumCount {

+        get { return result.RepeatedForeignEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedForeignEnum(int index) {

+        return result.GetRepeatedForeignEnum(index);

+      }

+      public Builder SetRepeatedForeignEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.repeatedForeignEnum_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.repeatedForeignEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedForeignEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {

+        PrepareBuilder();

+        result.repeatedForeignEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedForeignEnum() {

+        PrepareBuilder();

+        result.repeatedForeignEnum_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ImportEnum> RepeatedImportEnumList {

+        get { return PrepareBuilder().repeatedImportEnum_; }

+      }

+      public int RepeatedImportEnumCount {

+        get { return result.RepeatedImportEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportEnum GetRepeatedImportEnum(int index) {

+        return result.GetRepeatedImportEnum(index);

+      }

+      public Builder SetRepeatedImportEnum(int index, global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {

+        PrepareBuilder();

+        result.repeatedImportEnum_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {

+        PrepareBuilder();

+        result.repeatedImportEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedImportEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ImportEnum> values) {

+        PrepareBuilder();

+        result.repeatedImportEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedImportEnum() {

+        PrepareBuilder();

+        result.repeatedImportEnum_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringPieceList {

+        get { return PrepareBuilder().repeatedStringPiece_; }

+      }

+      public int RepeatedStringPieceCount {

+        get { return result.RepeatedStringPieceCount; }

+      }

+      public string GetRepeatedStringPiece(int index) {

+        return result.GetRepeatedStringPiece(index);

+      }

+      public Builder SetRepeatedStringPiece(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPiece_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedStringPiece(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPiece_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedStringPiece(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedStringPiece_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedStringPiece() {

+        PrepareBuilder();

+        result.repeatedStringPiece_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedCordList {

+        get { return PrepareBuilder().repeatedCord_; }

+      }

+      public int RepeatedCordCount {

+        get { return result.RepeatedCordCount; }

+      }

+      public string GetRepeatedCord(int index) {

+        return result.GetRepeatedCord(index);

+      }

+      public Builder SetRepeatedCord(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCord_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedCord(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCord_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedCord(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedCord_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedCord() {

+        PrepareBuilder();

+        result.repeatedCord_.Clear();

+        return this;

+      }

+      

+      public bool HasDefaultInt32 {

+        get { return result.hasDefaultInt32; }

+      }

+      public int DefaultInt32 {

+        get { return result.DefaultInt32; }

+        set { SetDefaultInt32(value); }

+      }

+      public Builder SetDefaultInt32(int value) {

+        PrepareBuilder();

+        result.hasDefaultInt32 = true;

+        result.defaultInt32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultInt32() {

+        PrepareBuilder();

+        result.hasDefaultInt32 = false;

+        result.defaultInt32_ = 41;

+        return this;

+      }

+      

+      public bool HasDefaultInt64 {

+        get { return result.hasDefaultInt64; }

+      }

+      public long DefaultInt64 {

+        get { return result.DefaultInt64; }

+        set { SetDefaultInt64(value); }

+      }

+      public Builder SetDefaultInt64(long value) {

+        PrepareBuilder();

+        result.hasDefaultInt64 = true;

+        result.defaultInt64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultInt64() {

+        PrepareBuilder();

+        result.hasDefaultInt64 = false;

+        result.defaultInt64_ = 42L;

+        return this;

+      }

+      

+      public bool HasDefaultUint32 {

+        get { return result.hasDefaultUint32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint DefaultUint32 {

+        get { return result.DefaultUint32; }

+        set { SetDefaultUint32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultUint32(uint value) {

+        PrepareBuilder();

+        result.hasDefaultUint32 = true;

+        result.defaultUint32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultUint32() {

+        PrepareBuilder();

+        result.hasDefaultUint32 = false;

+        result.defaultUint32_ = 43;

+        return this;

+      }

+      

+      public bool HasDefaultUint64 {

+        get { return result.hasDefaultUint64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong DefaultUint64 {

+        get { return result.DefaultUint64; }

+        set { SetDefaultUint64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultUint64(ulong value) {

+        PrepareBuilder();

+        result.hasDefaultUint64 = true;

+        result.defaultUint64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultUint64() {

+        PrepareBuilder();

+        result.hasDefaultUint64 = false;

+        result.defaultUint64_ = 44UL;

+        return this;

+      }

+      

+      public bool HasDefaultSint32 {

+        get { return result.hasDefaultSint32; }

+      }

+      public int DefaultSint32 {

+        get { return result.DefaultSint32; }

+        set { SetDefaultSint32(value); }

+      }

+      public Builder SetDefaultSint32(int value) {

+        PrepareBuilder();

+        result.hasDefaultSint32 = true;

+        result.defaultSint32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSint32() {

+        PrepareBuilder();

+        result.hasDefaultSint32 = false;

+        result.defaultSint32_ = -45;

+        return this;

+      }

+      

+      public bool HasDefaultSint64 {

+        get { return result.hasDefaultSint64; }

+      }

+      public long DefaultSint64 {

+        get { return result.DefaultSint64; }

+        set { SetDefaultSint64(value); }

+      }

+      public Builder SetDefaultSint64(long value) {

+        PrepareBuilder();

+        result.hasDefaultSint64 = true;

+        result.defaultSint64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSint64() {

+        PrepareBuilder();

+        result.hasDefaultSint64 = false;

+        result.defaultSint64_ = 46;

+        return this;

+      }

+      

+      public bool HasDefaultFixed32 {

+        get { return result.hasDefaultFixed32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint DefaultFixed32 {

+        get { return result.DefaultFixed32; }

+        set { SetDefaultFixed32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultFixed32(uint value) {

+        PrepareBuilder();

+        result.hasDefaultFixed32 = true;

+        result.defaultFixed32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultFixed32() {

+        PrepareBuilder();

+        result.hasDefaultFixed32 = false;

+        result.defaultFixed32_ = 47;

+        return this;

+      }

+      

+      public bool HasDefaultFixed64 {

+        get { return result.hasDefaultFixed64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong DefaultFixed64 {

+        get { return result.DefaultFixed64; }

+        set { SetDefaultFixed64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetDefaultFixed64(ulong value) {

+        PrepareBuilder();

+        result.hasDefaultFixed64 = true;

+        result.defaultFixed64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultFixed64() {

+        PrepareBuilder();

+        result.hasDefaultFixed64 = false;

+        result.defaultFixed64_ = 48;

+        return this;

+      }

+      

+      public bool HasDefaultSfixed32 {

+        get { return result.hasDefaultSfixed32; }

+      }

+      public int DefaultSfixed32 {

+        get { return result.DefaultSfixed32; }

+        set { SetDefaultSfixed32(value); }

+      }

+      public Builder SetDefaultSfixed32(int value) {

+        PrepareBuilder();

+        result.hasDefaultSfixed32 = true;

+        result.defaultSfixed32_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSfixed32() {

+        PrepareBuilder();

+        result.hasDefaultSfixed32 = false;

+        result.defaultSfixed32_ = 49;

+        return this;

+      }

+      

+      public bool HasDefaultSfixed64 {

+        get { return result.hasDefaultSfixed64; }

+      }

+      public long DefaultSfixed64 {

+        get { return result.DefaultSfixed64; }

+        set { SetDefaultSfixed64(value); }

+      }

+      public Builder SetDefaultSfixed64(long value) {

+        PrepareBuilder();

+        result.hasDefaultSfixed64 = true;

+        result.defaultSfixed64_ = value;

+        return this;

+      }

+      public Builder ClearDefaultSfixed64() {

+        PrepareBuilder();

+        result.hasDefaultSfixed64 = false;

+        result.defaultSfixed64_ = -50;

+        return this;

+      }

+      

+      public bool HasDefaultFloat {

+        get { return result.hasDefaultFloat; }

+      }

+      public float DefaultFloat {

+        get { return result.DefaultFloat; }

+        set { SetDefaultFloat(value); }

+      }

+      public Builder SetDefaultFloat(float value) {

+        PrepareBuilder();

+        result.hasDefaultFloat = true;

+        result.defaultFloat_ = value;

+        return this;

+      }

+      public Builder ClearDefaultFloat() {

+        PrepareBuilder();

+        result.hasDefaultFloat = false;

+        result.defaultFloat_ = 51.5F;

+        return this;

+      }

+      

+      public bool HasDefaultDouble {

+        get { return result.hasDefaultDouble; }

+      }

+      public double DefaultDouble {

+        get { return result.DefaultDouble; }

+        set { SetDefaultDouble(value); }

+      }

+      public Builder SetDefaultDouble(double value) {

+        PrepareBuilder();

+        result.hasDefaultDouble = true;

+        result.defaultDouble_ = value;

+        return this;

+      }

+      public Builder ClearDefaultDouble() {

+        PrepareBuilder();

+        result.hasDefaultDouble = false;

+        result.defaultDouble_ = 52000D;

+        return this;

+      }

+      

+      public bool HasDefaultBool {

+        get { return result.hasDefaultBool; }

+      }

+      public bool DefaultBool {

+        get { return result.DefaultBool; }

+        set { SetDefaultBool(value); }

+      }

+      public Builder SetDefaultBool(bool value) {

+        PrepareBuilder();

+        result.hasDefaultBool = true;

+        result.defaultBool_ = value;

+        return this;

+      }

+      public Builder ClearDefaultBool() {

+        PrepareBuilder();

+        result.hasDefaultBool = false;

+        result.defaultBool_ = true;

+        return this;

+      }

+      

+      public bool HasDefaultString {

+        get { return result.hasDefaultString; }

+      }

+      public string DefaultString {

+        get { return result.DefaultString; }

+        set { SetDefaultString(value); }

+      }

+      public Builder SetDefaultString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultString = true;

+        result.defaultString_ = value;

+        return this;

+      }

+      public Builder ClearDefaultString() {

+        PrepareBuilder();

+        result.hasDefaultString = false;

+        result.defaultString_ = "hello";

+        return this;

+      }

+      

+      public bool HasDefaultBytes {

+        get { return result.hasDefaultBytes; }

+      }

+      public pb::ByteString DefaultBytes {

+        get { return result.DefaultBytes; }

+        set { SetDefaultBytes(value); }

+      }

+      public Builder SetDefaultBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultBytes = true;

+        result.defaultBytes_ = value;

+        return this;

+      }

+      public Builder ClearDefaultBytes() {

+        PrepareBuilder();

+        result.hasDefaultBytes = false;

+        result.defaultBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Descriptor.Fields[62].DefaultValue;

+        return this;

+      }

+      

+      public bool HasDefaultNestedEnum {

+       get { return result.hasDefaultNestedEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum DefaultNestedEnum {

+        get { return result.DefaultNestedEnum; }

+        set { SetDefaultNestedEnum(value); }

+      }

+      public Builder SetDefaultNestedEnum(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum value) {

+        PrepareBuilder();

+        result.hasDefaultNestedEnum = true;

+        result.defaultNestedEnum_ = value;

+        return this;

+      }

+      public Builder ClearDefaultNestedEnum() {

+        PrepareBuilder();

+        result.hasDefaultNestedEnum = false;

+        result.defaultNestedEnum_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedEnum.BAR;

+        return this;

+      }

+      

+      public bool HasDefaultForeignEnum {

+       get { return result.hasDefaultForeignEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum DefaultForeignEnum {

+        get { return result.DefaultForeignEnum; }

+        set { SetDefaultForeignEnum(value); }

+      }

+      public Builder SetDefaultForeignEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.hasDefaultForeignEnum = true;

+        result.defaultForeignEnum_ = value;

+        return this;

+      }

+      public Builder ClearDefaultForeignEnum() {

+        PrepareBuilder();

+        result.hasDefaultForeignEnum = false;

+        result.defaultForeignEnum_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_BAR;

+        return this;

+      }

+      

+      public bool HasDefaultImportEnum {

+       get { return result.hasDefaultImportEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ImportEnum DefaultImportEnum {

+        get { return result.DefaultImportEnum; }

+        set { SetDefaultImportEnum(value); }

+      }

+      public Builder SetDefaultImportEnum(global::Google.ProtocolBuffers.TestProtos.ImportEnum value) {

+        PrepareBuilder();

+        result.hasDefaultImportEnum = true;

+        result.defaultImportEnum_ = value;

+        return this;

+      }

+      public Builder ClearDefaultImportEnum() {

+        PrepareBuilder();

+        result.hasDefaultImportEnum = false;

+        result.defaultImportEnum_ = global::Google.ProtocolBuffers.TestProtos.ImportEnum.IMPORT_BAR;

+        return this;

+      }

+      

+      public bool HasDefaultStringPiece {

+        get { return result.hasDefaultStringPiece; }

+      }

+      public string DefaultStringPiece {

+        get { return result.DefaultStringPiece; }

+        set { SetDefaultStringPiece(value); }

+      }

+      public Builder SetDefaultStringPiece(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultStringPiece = true;

+        result.defaultStringPiece_ = value;

+        return this;

+      }

+      public Builder ClearDefaultStringPiece() {

+        PrepareBuilder();

+        result.hasDefaultStringPiece = false;

+        result.defaultStringPiece_ = "abc";

+        return this;

+      }

+      

+      public bool HasDefaultCord {

+        get { return result.hasDefaultCord; }

+      }

+      public string DefaultCord {

+        get { return result.DefaultCord; }

+        set { SetDefaultCord(value); }

+      }

+      public Builder SetDefaultCord(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDefaultCord = true;

+        result.defaultCord_ = value;

+        return this;

+      }

+      public Builder ClearDefaultCord() {

+        PrepareBuilder();

+        result.hasDefaultCord = false;

+        result.defaultCord_ = "123";

+        return this;

+      }

+    }

+    static TestAllTypes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestDeprecatedFields : pb::GeneratedMessage<TestDeprecatedFields, TestDeprecatedFields.Builder> {

+    private TestDeprecatedFields() { }

+    private static readonly TestDeprecatedFields defaultInstance = new TestDeprecatedFields().MakeReadOnly();

+    private static readonly string[] _testDeprecatedFieldsFieldNames = new string[] { "deprecated_int32" };

+    private static readonly uint[] _testDeprecatedFieldsFieldTags = new uint[] { 8 };

+    public static TestDeprecatedFields DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestDeprecatedFields DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestDeprecatedFields ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDeprecatedFields__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestDeprecatedFields, TestDeprecatedFields.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDeprecatedFields__FieldAccessorTable; }

+    }

+    

+    public const int DeprecatedInt32FieldNumber = 1;

+    private bool hasDeprecatedInt32;

+    private int deprecatedInt32_;

+    [global::System.ObsoleteAttribute()]

+    public bool HasDeprecatedInt32 {

+      get { return hasDeprecatedInt32; }

+    }

+    [global::System.ObsoleteAttribute()]

+    public int DeprecatedInt32 {

+      get { return deprecatedInt32_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testDeprecatedFieldsFieldNames;

+      if (hasDeprecatedInt32) {

+        output.WriteInt32(1, field_names[0], DeprecatedInt32);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasDeprecatedInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, DeprecatedInt32);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestDeprecatedFields ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDeprecatedFields ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestDeprecatedFields MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestDeprecatedFields prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestDeprecatedFields, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestDeprecatedFields cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestDeprecatedFields result;

+      

+      private TestDeprecatedFields PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestDeprecatedFields original = result;

+          result = new TestDeprecatedFields();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestDeprecatedFields MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.Descriptor; }

+      }

+      

+      public override TestDeprecatedFields DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.DefaultInstance; }

+      }

+      

+      public override TestDeprecatedFields BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestDeprecatedFields) {

+          return MergeFrom((TestDeprecatedFields) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestDeprecatedFields other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestDeprecatedFields.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasDeprecatedInt32) {

+          DeprecatedInt32 = other.DeprecatedInt32;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testDeprecatedFieldsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testDeprecatedFieldsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasDeprecatedInt32 = input.ReadInt32(ref result.deprecatedInt32_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      [global::System.ObsoleteAttribute()]

+      public bool HasDeprecatedInt32 {

+        get { return result.hasDeprecatedInt32; }

+      }

+      [global::System.ObsoleteAttribute()]

+      public int DeprecatedInt32 {

+        get { return result.DeprecatedInt32; }

+        set { SetDeprecatedInt32(value); }

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder SetDeprecatedInt32(int value) {

+        PrepareBuilder();

+        result.hasDeprecatedInt32 = true;

+        result.deprecatedInt32_ = value;

+        return this;

+      }

+      [global::System.ObsoleteAttribute()]

+      public Builder ClearDeprecatedInt32() {

+        PrepareBuilder();

+        result.hasDeprecatedInt32 = false;

+        result.deprecatedInt32_ = 0;

+        return this;

+      }

+    }

+    static TestDeprecatedFields() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class ForeignMessage : pb::GeneratedMessage<ForeignMessage, ForeignMessage.Builder> {

+    private ForeignMessage() { }

+    private static readonly ForeignMessage defaultInstance = new ForeignMessage().MakeReadOnly();

+    private static readonly string[] _foreignMessageFieldNames = new string[] { "c" };

+    private static readonly uint[] _foreignMessageFieldTags = new uint[] { 8 };

+    public static ForeignMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override ForeignMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override ForeignMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_ForeignMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<ForeignMessage, ForeignMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_ForeignMessage__FieldAccessorTable; }

+    }

+    

+    public const int CFieldNumber = 1;

+    private bool hasC;

+    private int c_;

+    public bool HasC {

+      get { return hasC; }

+    }

+    public int C {

+      get { return c_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _foreignMessageFieldNames;

+      if (hasC) {

+        output.WriteInt32(1, field_names[0], C);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasC) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, C);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static ForeignMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static ForeignMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static ForeignMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static ForeignMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private ForeignMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(ForeignMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<ForeignMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(ForeignMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private ForeignMessage result;

+      

+      private ForeignMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          ForeignMessage original = result;

+          result = new ForeignMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override ForeignMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Descriptor; }

+      }

+      

+      public override ForeignMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }

+      }

+      

+      public override ForeignMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is ForeignMessage) {

+          return MergeFrom((ForeignMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(ForeignMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasC) {

+          C = other.C;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_foreignMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _foreignMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasC = input.ReadInt32(ref result.c_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasC {

+        get { return result.hasC; }

+      }

+      public int C {

+        get { return result.C; }

+        set { SetC(value); }

+      }

+      public Builder SetC(int value) {

+        PrepareBuilder();

+        result.hasC = true;

+        result.c_ = value;

+        return this;

+      }

+      public Builder ClearC() {

+        PrepareBuilder();

+        result.hasC = false;

+        result.c_ = 0;

+        return this;

+      }

+    }

+    static ForeignMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestAllExtensions : pb::ExtendableMessage<TestAllExtensions, TestAllExtensions.Builder> {

+    private TestAllExtensions() { }

+    private static readonly TestAllExtensions defaultInstance = new TestAllExtensions().MakeReadOnly();

+    private static readonly string[] _testAllExtensionsFieldNames = new string[] {  };

+    private static readonly uint[] _testAllExtensionsFieldTags = new uint[] {  };

+    public static TestAllExtensions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestAllExtensions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestAllExtensions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllExtensions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestAllExtensions, TestAllExtensions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestAllExtensions__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testAllExtensionsFieldNames;

+      pb::ExtendableMessage<TestAllExtensions, TestAllExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestAllExtensions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestAllExtensions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestAllExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestAllExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestAllExtensions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestAllExtensions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestAllExtensions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestAllExtensions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestAllExtensions result;

+      

+      private TestAllExtensions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestAllExtensions original = result;

+          result = new TestAllExtensions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestAllExtensions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.Descriptor; }

+      }

+      

+      public override TestAllExtensions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.DefaultInstance; }

+      }

+      

+      public override TestAllExtensions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestAllExtensions) {

+          return MergeFrom((TestAllExtensions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestAllExtensions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestAllExtensions.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testAllExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testAllExtensionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestAllExtensions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class OptionalGroup_extension : pb::GeneratedMessage<OptionalGroup_extension, OptionalGroup_extension.Builder> {

+    private OptionalGroup_extension() { }

+    private static readonly OptionalGroup_extension defaultInstance = new OptionalGroup_extension().MakeReadOnly();

+    private static readonly string[] _optionalGroupExtensionFieldNames = new string[] { "a" };

+    private static readonly uint[] _optionalGroupExtensionFieldTags = new uint[] { 136 };

+    public static OptionalGroup_extension DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override OptionalGroup_extension DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override OptionalGroup_extension ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OptionalGroup_extension__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<OptionalGroup_extension, OptionalGroup_extension.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OptionalGroup_extension__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 17;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _optionalGroupExtensionFieldNames;

+      if (hasA) {

+        output.WriteInt32(17, field_names[0], A);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(17, A);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static OptionalGroup_extension ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OptionalGroup_extension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private OptionalGroup_extension MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(OptionalGroup_extension prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<OptionalGroup_extension, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(OptionalGroup_extension cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private OptionalGroup_extension result;

+      

+      private OptionalGroup_extension PrepareBuilder() {

+        if (resultIsReadOnly) {

+          OptionalGroup_extension original = result;

+          result = new OptionalGroup_extension();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override OptionalGroup_extension MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.Descriptor; }

+      }

+      

+      public override OptionalGroup_extension DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.DefaultInstance; }

+      }

+      

+      public override OptionalGroup_extension BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is OptionalGroup_extension) {

+          return MergeFrom((OptionalGroup_extension) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(OptionalGroup_extension other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.OptionalGroup_extension.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_optionalGroupExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _optionalGroupExtensionFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 136: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+    }

+    static OptionalGroup_extension() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class RepeatedGroup_extension : pb::GeneratedMessage<RepeatedGroup_extension, RepeatedGroup_extension.Builder> {

+    private RepeatedGroup_extension() { }

+    private static readonly RepeatedGroup_extension defaultInstance = new RepeatedGroup_extension().MakeReadOnly();

+    private static readonly string[] _repeatedGroupExtensionFieldNames = new string[] { "a" };

+    private static readonly uint[] _repeatedGroupExtensionFieldTags = new uint[] { 376 };

+    public static RepeatedGroup_extension DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override RepeatedGroup_extension DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override RepeatedGroup_extension ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_RepeatedGroup_extension__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<RepeatedGroup_extension, RepeatedGroup_extension.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_RepeatedGroup_extension__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 47;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _repeatedGroupExtensionFieldNames;

+      if (hasA) {

+        output.WriteInt32(47, field_names[0], A);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(47, A);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static RepeatedGroup_extension ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RepeatedGroup_extension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private RepeatedGroup_extension MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(RepeatedGroup_extension prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<RepeatedGroup_extension, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(RepeatedGroup_extension cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private RepeatedGroup_extension result;

+      

+      private RepeatedGroup_extension PrepareBuilder() {

+        if (resultIsReadOnly) {

+          RepeatedGroup_extension original = result;

+          result = new RepeatedGroup_extension();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override RepeatedGroup_extension MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.Descriptor; }

+      }

+      

+      public override RepeatedGroup_extension DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.DefaultInstance; }

+      }

+      

+      public override RepeatedGroup_extension BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is RepeatedGroup_extension) {

+          return MergeFrom((RepeatedGroup_extension) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(RepeatedGroup_extension other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.RepeatedGroup_extension.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_repeatedGroupExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _repeatedGroupExtensionFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 376: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+    }

+    static RepeatedGroup_extension() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestNestedExtension : pb::GeneratedMessage<TestNestedExtension, TestNestedExtension.Builder> {

+    private TestNestedExtension() { }

+    private static readonly TestNestedExtension defaultInstance = new TestNestedExtension().MakeReadOnly();

+    private static readonly string[] _testNestedExtensionFieldNames = new string[] {  };

+    private static readonly uint[] _testNestedExtensionFieldTags = new uint[] {  };

+    public static TestNestedExtension DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestNestedExtension DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestNestedExtension ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedExtension__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestNestedExtension, TestNestedExtension.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedExtension__FieldAccessorTable; }

+    }

+    

+    public const int TestFieldNumber = 1002;

+    public static pb::GeneratedExtensionBase<string> Test;

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testNestedExtensionFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestNestedExtension ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedExtension ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestNestedExtension ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedExtension ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestNestedExtension MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestNestedExtension prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestNestedExtension, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestNestedExtension cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestNestedExtension result;

+      

+      private TestNestedExtension PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestNestedExtension original = result;

+          result = new TestNestedExtension();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestNestedExtension MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.Descriptor; }

+      }

+      

+      public override TestNestedExtension DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.DefaultInstance; }

+      }

+      

+      public override TestNestedExtension BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestNestedExtension) {

+          return MergeFrom((TestNestedExtension) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestNestedExtension other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedExtension.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testNestedExtensionFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testNestedExtensionFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestNestedExtension() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRequired : pb::GeneratedMessage<TestRequired, TestRequired.Builder> {

+    private TestRequired() { }

+    private static readonly TestRequired defaultInstance = new TestRequired().MakeReadOnly();

+    private static readonly string[] _testRequiredFieldNames = new string[] { "a", "b", "c", "dummy10", "dummy11", "dummy12", "dummy13", "dummy14", "dummy15", "dummy16", "dummy17", "dummy18", "dummy19", "dummy2", "dummy20", "dummy21", "dummy22", "dummy23", "dummy24", "dummy25", "dummy26", "dummy27", "dummy28", "dummy29", "dummy30", "dummy31", "dummy32", "dummy4", "dummy5", "dummy6", "dummy7", "dummy8", "dummy9" };

+    private static readonly uint[] _testRequiredFieldTags = new uint[] { 8, 24, 264, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 16, 160, 168, 176, 184, 192, 200, 208, 216, 224, 232, 240, 248, 256, 32, 40, 48, 56, 64, 72 };

+    public static TestRequired DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRequired DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRequired ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRequired__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestRequired, TestRequired.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRequired__FieldAccessorTable; }

+    }

+    

+    public const int SingleFieldNumber = 1000;

+    public static pb::GeneratedExtensionBase<global::Google.ProtocolBuffers.TestProtos.TestRequired> Single;

+    public const int MultiFieldNumber = 1001;

+    public static pb::GeneratedExtensionBase<scg::IList<global::Google.ProtocolBuffers.TestProtos.TestRequired>> Multi;

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public const int Dummy2FieldNumber = 2;

+    private bool hasDummy2;

+    private int dummy2_;

+    public bool HasDummy2 {

+      get { return hasDummy2; }

+    }

+    public int Dummy2 {

+      get { return dummy2_; }

+    }

+    

+    public const int BFieldNumber = 3;

+    private bool hasB;

+    private int b_;

+    public bool HasB {

+      get { return hasB; }

+    }

+    public int B {

+      get { return b_; }

+    }

+    

+    public const int Dummy4FieldNumber = 4;

+    private bool hasDummy4;

+    private int dummy4_;

+    public bool HasDummy4 {

+      get { return hasDummy4; }

+    }

+    public int Dummy4 {

+      get { return dummy4_; }

+    }

+    

+    public const int Dummy5FieldNumber = 5;

+    private bool hasDummy5;

+    private int dummy5_;

+    public bool HasDummy5 {

+      get { return hasDummy5; }

+    }

+    public int Dummy5 {

+      get { return dummy5_; }

+    }

+    

+    public const int Dummy6FieldNumber = 6;

+    private bool hasDummy6;

+    private int dummy6_;

+    public bool HasDummy6 {

+      get { return hasDummy6; }

+    }

+    public int Dummy6 {

+      get { return dummy6_; }

+    }

+    

+    public const int Dummy7FieldNumber = 7;

+    private bool hasDummy7;

+    private int dummy7_;

+    public bool HasDummy7 {

+      get { return hasDummy7; }

+    }

+    public int Dummy7 {

+      get { return dummy7_; }

+    }

+    

+    public const int Dummy8FieldNumber = 8;

+    private bool hasDummy8;

+    private int dummy8_;

+    public bool HasDummy8 {

+      get { return hasDummy8; }

+    }

+    public int Dummy8 {

+      get { return dummy8_; }

+    }

+    

+    public const int Dummy9FieldNumber = 9;

+    private bool hasDummy9;

+    private int dummy9_;

+    public bool HasDummy9 {

+      get { return hasDummy9; }

+    }

+    public int Dummy9 {

+      get { return dummy9_; }

+    }

+    

+    public const int Dummy10FieldNumber = 10;

+    private bool hasDummy10;

+    private int dummy10_;

+    public bool HasDummy10 {

+      get { return hasDummy10; }

+    }

+    public int Dummy10 {

+      get { return dummy10_; }

+    }

+    

+    public const int Dummy11FieldNumber = 11;

+    private bool hasDummy11;

+    private int dummy11_;

+    public bool HasDummy11 {

+      get { return hasDummy11; }

+    }

+    public int Dummy11 {

+      get { return dummy11_; }

+    }

+    

+    public const int Dummy12FieldNumber = 12;

+    private bool hasDummy12;

+    private int dummy12_;

+    public bool HasDummy12 {

+      get { return hasDummy12; }

+    }

+    public int Dummy12 {

+      get { return dummy12_; }

+    }

+    

+    public const int Dummy13FieldNumber = 13;

+    private bool hasDummy13;

+    private int dummy13_;

+    public bool HasDummy13 {

+      get { return hasDummy13; }

+    }

+    public int Dummy13 {

+      get { return dummy13_; }

+    }

+    

+    public const int Dummy14FieldNumber = 14;

+    private bool hasDummy14;

+    private int dummy14_;

+    public bool HasDummy14 {

+      get { return hasDummy14; }

+    }

+    public int Dummy14 {

+      get { return dummy14_; }

+    }

+    

+    public const int Dummy15FieldNumber = 15;

+    private bool hasDummy15;

+    private int dummy15_;

+    public bool HasDummy15 {

+      get { return hasDummy15; }

+    }

+    public int Dummy15 {

+      get { return dummy15_; }

+    }

+    

+    public const int Dummy16FieldNumber = 16;

+    private bool hasDummy16;

+    private int dummy16_;

+    public bool HasDummy16 {

+      get { return hasDummy16; }

+    }

+    public int Dummy16 {

+      get { return dummy16_; }

+    }

+    

+    public const int Dummy17FieldNumber = 17;

+    private bool hasDummy17;

+    private int dummy17_;

+    public bool HasDummy17 {

+      get { return hasDummy17; }

+    }

+    public int Dummy17 {

+      get { return dummy17_; }

+    }

+    

+    public const int Dummy18FieldNumber = 18;

+    private bool hasDummy18;

+    private int dummy18_;

+    public bool HasDummy18 {

+      get { return hasDummy18; }

+    }

+    public int Dummy18 {

+      get { return dummy18_; }

+    }

+    

+    public const int Dummy19FieldNumber = 19;

+    private bool hasDummy19;

+    private int dummy19_;

+    public bool HasDummy19 {

+      get { return hasDummy19; }

+    }

+    public int Dummy19 {

+      get { return dummy19_; }

+    }

+    

+    public const int Dummy20FieldNumber = 20;

+    private bool hasDummy20;

+    private int dummy20_;

+    public bool HasDummy20 {

+      get { return hasDummy20; }

+    }

+    public int Dummy20 {

+      get { return dummy20_; }

+    }

+    

+    public const int Dummy21FieldNumber = 21;

+    private bool hasDummy21;

+    private int dummy21_;

+    public bool HasDummy21 {

+      get { return hasDummy21; }

+    }

+    public int Dummy21 {

+      get { return dummy21_; }

+    }

+    

+    public const int Dummy22FieldNumber = 22;

+    private bool hasDummy22;

+    private int dummy22_;

+    public bool HasDummy22 {

+      get { return hasDummy22; }

+    }

+    public int Dummy22 {

+      get { return dummy22_; }

+    }

+    

+    public const int Dummy23FieldNumber = 23;

+    private bool hasDummy23;

+    private int dummy23_;

+    public bool HasDummy23 {

+      get { return hasDummy23; }

+    }

+    public int Dummy23 {

+      get { return dummy23_; }

+    }

+    

+    public const int Dummy24FieldNumber = 24;

+    private bool hasDummy24;

+    private int dummy24_;

+    public bool HasDummy24 {

+      get { return hasDummy24; }

+    }

+    public int Dummy24 {

+      get { return dummy24_; }

+    }

+    

+    public const int Dummy25FieldNumber = 25;

+    private bool hasDummy25;

+    private int dummy25_;

+    public bool HasDummy25 {

+      get { return hasDummy25; }

+    }

+    public int Dummy25 {

+      get { return dummy25_; }

+    }

+    

+    public const int Dummy26FieldNumber = 26;

+    private bool hasDummy26;

+    private int dummy26_;

+    public bool HasDummy26 {

+      get { return hasDummy26; }

+    }

+    public int Dummy26 {

+      get { return dummy26_; }

+    }

+    

+    public const int Dummy27FieldNumber = 27;

+    private bool hasDummy27;

+    private int dummy27_;

+    public bool HasDummy27 {

+      get { return hasDummy27; }

+    }

+    public int Dummy27 {

+      get { return dummy27_; }

+    }

+    

+    public const int Dummy28FieldNumber = 28;

+    private bool hasDummy28;

+    private int dummy28_;

+    public bool HasDummy28 {

+      get { return hasDummy28; }

+    }

+    public int Dummy28 {

+      get { return dummy28_; }

+    }

+    

+    public const int Dummy29FieldNumber = 29;

+    private bool hasDummy29;

+    private int dummy29_;

+    public bool HasDummy29 {

+      get { return hasDummy29; }

+    }

+    public int Dummy29 {

+      get { return dummy29_; }

+    }

+    

+    public const int Dummy30FieldNumber = 30;

+    private bool hasDummy30;

+    private int dummy30_;

+    public bool HasDummy30 {

+      get { return hasDummy30; }

+    }

+    public int Dummy30 {

+      get { return dummy30_; }

+    }

+    

+    public const int Dummy31FieldNumber = 31;

+    private bool hasDummy31;

+    private int dummy31_;

+    public bool HasDummy31 {

+      get { return hasDummy31; }

+    }

+    public int Dummy31 {

+      get { return dummy31_; }

+    }

+    

+    public const int Dummy32FieldNumber = 32;

+    private bool hasDummy32;

+    private int dummy32_;

+    public bool HasDummy32 {

+      get { return hasDummy32; }

+    }

+    public int Dummy32 {

+      get { return dummy32_; }

+    }

+    

+    public const int CFieldNumber = 33;

+    private bool hasC;

+    private int c_;

+    public bool HasC {

+      get { return hasC; }

+    }

+    public int C {

+      get { return c_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasA) return false;

+        if (!hasB) return false;

+        if (!hasC) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testRequiredFieldNames;

+      if (hasA) {

+        output.WriteInt32(1, field_names[0], A);

+      }

+      if (hasDummy2) {

+        output.WriteInt32(2, field_names[13], Dummy2);

+      }

+      if (hasB) {

+        output.WriteInt32(3, field_names[1], B);

+      }

+      if (hasDummy4) {

+        output.WriteInt32(4, field_names[27], Dummy4);

+      }

+      if (hasDummy5) {

+        output.WriteInt32(5, field_names[28], Dummy5);

+      }

+      if (hasDummy6) {

+        output.WriteInt32(6, field_names[29], Dummy6);

+      }

+      if (hasDummy7) {

+        output.WriteInt32(7, field_names[30], Dummy7);

+      }

+      if (hasDummy8) {

+        output.WriteInt32(8, field_names[31], Dummy8);

+      }

+      if (hasDummy9) {

+        output.WriteInt32(9, field_names[32], Dummy9);

+      }

+      if (hasDummy10) {

+        output.WriteInt32(10, field_names[3], Dummy10);

+      }

+      if (hasDummy11) {

+        output.WriteInt32(11, field_names[4], Dummy11);

+      }

+      if (hasDummy12) {

+        output.WriteInt32(12, field_names[5], Dummy12);

+      }

+      if (hasDummy13) {

+        output.WriteInt32(13, field_names[6], Dummy13);

+      }

+      if (hasDummy14) {

+        output.WriteInt32(14, field_names[7], Dummy14);

+      }

+      if (hasDummy15) {

+        output.WriteInt32(15, field_names[8], Dummy15);

+      }

+      if (hasDummy16) {

+        output.WriteInt32(16, field_names[9], Dummy16);

+      }

+      if (hasDummy17) {

+        output.WriteInt32(17, field_names[10], Dummy17);

+      }

+      if (hasDummy18) {

+        output.WriteInt32(18, field_names[11], Dummy18);

+      }

+      if (hasDummy19) {

+        output.WriteInt32(19, field_names[12], Dummy19);

+      }

+      if (hasDummy20) {

+        output.WriteInt32(20, field_names[14], Dummy20);

+      }

+      if (hasDummy21) {

+        output.WriteInt32(21, field_names[15], Dummy21);

+      }

+      if (hasDummy22) {

+        output.WriteInt32(22, field_names[16], Dummy22);

+      }

+      if (hasDummy23) {

+        output.WriteInt32(23, field_names[17], Dummy23);

+      }

+      if (hasDummy24) {

+        output.WriteInt32(24, field_names[18], Dummy24);

+      }

+      if (hasDummy25) {

+        output.WriteInt32(25, field_names[19], Dummy25);

+      }

+      if (hasDummy26) {

+        output.WriteInt32(26, field_names[20], Dummy26);

+      }

+      if (hasDummy27) {

+        output.WriteInt32(27, field_names[21], Dummy27);

+      }

+      if (hasDummy28) {

+        output.WriteInt32(28, field_names[22], Dummy28);

+      }

+      if (hasDummy29) {

+        output.WriteInt32(29, field_names[23], Dummy29);

+      }

+      if (hasDummy30) {

+        output.WriteInt32(30, field_names[24], Dummy30);

+      }

+      if (hasDummy31) {

+        output.WriteInt32(31, field_names[25], Dummy31);

+      }

+      if (hasDummy32) {

+        output.WriteInt32(32, field_names[26], Dummy32);

+      }

+      if (hasC) {

+        output.WriteInt32(33, field_names[2], C);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+      }

+      if (hasDummy2) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, Dummy2);

+      }

+      if (hasB) {

+        size += pb::CodedOutputStream.ComputeInt32Size(3, B);

+      }

+      if (hasDummy4) {

+        size += pb::CodedOutputStream.ComputeInt32Size(4, Dummy4);

+      }

+      if (hasDummy5) {

+        size += pb::CodedOutputStream.ComputeInt32Size(5, Dummy5);

+      }

+      if (hasDummy6) {

+        size += pb::CodedOutputStream.ComputeInt32Size(6, Dummy6);

+      }

+      if (hasDummy7) {

+        size += pb::CodedOutputStream.ComputeInt32Size(7, Dummy7);

+      }

+      if (hasDummy8) {

+        size += pb::CodedOutputStream.ComputeInt32Size(8, Dummy8);

+      }

+      if (hasDummy9) {

+        size += pb::CodedOutputStream.ComputeInt32Size(9, Dummy9);

+      }

+      if (hasDummy10) {

+        size += pb::CodedOutputStream.ComputeInt32Size(10, Dummy10);

+      }

+      if (hasDummy11) {

+        size += pb::CodedOutputStream.ComputeInt32Size(11, Dummy11);

+      }

+      if (hasDummy12) {

+        size += pb::CodedOutputStream.ComputeInt32Size(12, Dummy12);

+      }

+      if (hasDummy13) {

+        size += pb::CodedOutputStream.ComputeInt32Size(13, Dummy13);

+      }

+      if (hasDummy14) {

+        size += pb::CodedOutputStream.ComputeInt32Size(14, Dummy14);

+      }

+      if (hasDummy15) {

+        size += pb::CodedOutputStream.ComputeInt32Size(15, Dummy15);

+      }

+      if (hasDummy16) {

+        size += pb::CodedOutputStream.ComputeInt32Size(16, Dummy16);

+      }

+      if (hasDummy17) {

+        size += pb::CodedOutputStream.ComputeInt32Size(17, Dummy17);

+      }

+      if (hasDummy18) {

+        size += pb::CodedOutputStream.ComputeInt32Size(18, Dummy18);

+      }

+      if (hasDummy19) {

+        size += pb::CodedOutputStream.ComputeInt32Size(19, Dummy19);

+      }

+      if (hasDummy20) {

+        size += pb::CodedOutputStream.ComputeInt32Size(20, Dummy20);

+      }

+      if (hasDummy21) {

+        size += pb::CodedOutputStream.ComputeInt32Size(21, Dummy21);

+      }

+      if (hasDummy22) {

+        size += pb::CodedOutputStream.ComputeInt32Size(22, Dummy22);

+      }

+      if (hasDummy23) {

+        size += pb::CodedOutputStream.ComputeInt32Size(23, Dummy23);

+      }

+      if (hasDummy24) {

+        size += pb::CodedOutputStream.ComputeInt32Size(24, Dummy24);

+      }

+      if (hasDummy25) {

+        size += pb::CodedOutputStream.ComputeInt32Size(25, Dummy25);

+      }

+      if (hasDummy26) {

+        size += pb::CodedOutputStream.ComputeInt32Size(26, Dummy26);

+      }

+      if (hasDummy27) {

+        size += pb::CodedOutputStream.ComputeInt32Size(27, Dummy27);

+      }

+      if (hasDummy28) {

+        size += pb::CodedOutputStream.ComputeInt32Size(28, Dummy28);

+      }

+      if (hasDummy29) {

+        size += pb::CodedOutputStream.ComputeInt32Size(29, Dummy29);

+      }

+      if (hasDummy30) {

+        size += pb::CodedOutputStream.ComputeInt32Size(30, Dummy30);

+      }

+      if (hasDummy31) {

+        size += pb::CodedOutputStream.ComputeInt32Size(31, Dummy31);

+      }

+      if (hasDummy32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(32, Dummy32);

+      }

+      if (hasC) {

+        size += pb::CodedOutputStream.ComputeInt32Size(33, C);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestRequired ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequired ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRequired ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRequired ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequired ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRequired MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRequired prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestRequired, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRequired cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRequired result;

+      

+      private TestRequired PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRequired original = result;

+          result = new TestRequired();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRequired MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequired.Descriptor; }

+      }

+      

+      public override TestRequired DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance; }

+      }

+      

+      public override TestRequired BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestRequired) {

+          return MergeFrom((TestRequired) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestRequired other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        if (other.HasDummy2) {

+          Dummy2 = other.Dummy2;

+        }

+        if (other.HasB) {

+          B = other.B;

+        }

+        if (other.HasDummy4) {

+          Dummy4 = other.Dummy4;

+        }

+        if (other.HasDummy5) {

+          Dummy5 = other.Dummy5;

+        }

+        if (other.HasDummy6) {

+          Dummy6 = other.Dummy6;

+        }

+        if (other.HasDummy7) {

+          Dummy7 = other.Dummy7;

+        }

+        if (other.HasDummy8) {

+          Dummy8 = other.Dummy8;

+        }

+        if (other.HasDummy9) {

+          Dummy9 = other.Dummy9;

+        }

+        if (other.HasDummy10) {

+          Dummy10 = other.Dummy10;

+        }

+        if (other.HasDummy11) {

+          Dummy11 = other.Dummy11;

+        }

+        if (other.HasDummy12) {

+          Dummy12 = other.Dummy12;

+        }

+        if (other.HasDummy13) {

+          Dummy13 = other.Dummy13;

+        }

+        if (other.HasDummy14) {

+          Dummy14 = other.Dummy14;

+        }

+        if (other.HasDummy15) {

+          Dummy15 = other.Dummy15;

+        }

+        if (other.HasDummy16) {

+          Dummy16 = other.Dummy16;

+        }

+        if (other.HasDummy17) {

+          Dummy17 = other.Dummy17;

+        }

+        if (other.HasDummy18) {

+          Dummy18 = other.Dummy18;

+        }

+        if (other.HasDummy19) {

+          Dummy19 = other.Dummy19;

+        }

+        if (other.HasDummy20) {

+          Dummy20 = other.Dummy20;

+        }

+        if (other.HasDummy21) {

+          Dummy21 = other.Dummy21;

+        }

+        if (other.HasDummy22) {

+          Dummy22 = other.Dummy22;

+        }

+        if (other.HasDummy23) {

+          Dummy23 = other.Dummy23;

+        }

+        if (other.HasDummy24) {

+          Dummy24 = other.Dummy24;

+        }

+        if (other.HasDummy25) {

+          Dummy25 = other.Dummy25;

+        }

+        if (other.HasDummy26) {

+          Dummy26 = other.Dummy26;

+        }

+        if (other.HasDummy27) {

+          Dummy27 = other.Dummy27;

+        }

+        if (other.HasDummy28) {

+          Dummy28 = other.Dummy28;

+        }

+        if (other.HasDummy29) {

+          Dummy29 = other.Dummy29;

+        }

+        if (other.HasDummy30) {

+          Dummy30 = other.Dummy30;

+        }

+        if (other.HasDummy31) {

+          Dummy31 = other.Dummy31;

+        }

+        if (other.HasDummy32) {

+          Dummy32 = other.Dummy32;

+        }

+        if (other.HasC) {

+          C = other.C;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testRequiredFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testRequiredFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+            case 16: {

+              result.hasDummy2 = input.ReadInt32(ref result.dummy2_);

+              break;

+            }

+            case 24: {

+              result.hasB = input.ReadInt32(ref result.b_);

+              break;

+            }

+            case 32: {

+              result.hasDummy4 = input.ReadInt32(ref result.dummy4_);

+              break;

+            }

+            case 40: {

+              result.hasDummy5 = input.ReadInt32(ref result.dummy5_);

+              break;

+            }

+            case 48: {

+              result.hasDummy6 = input.ReadInt32(ref result.dummy6_);

+              break;

+            }

+            case 56: {

+              result.hasDummy7 = input.ReadInt32(ref result.dummy7_);

+              break;

+            }

+            case 64: {

+              result.hasDummy8 = input.ReadInt32(ref result.dummy8_);

+              break;

+            }

+            case 72: {

+              result.hasDummy9 = input.ReadInt32(ref result.dummy9_);

+              break;

+            }

+            case 80: {

+              result.hasDummy10 = input.ReadInt32(ref result.dummy10_);

+              break;

+            }

+            case 88: {

+              result.hasDummy11 = input.ReadInt32(ref result.dummy11_);

+              break;

+            }

+            case 96: {

+              result.hasDummy12 = input.ReadInt32(ref result.dummy12_);

+              break;

+            }

+            case 104: {

+              result.hasDummy13 = input.ReadInt32(ref result.dummy13_);

+              break;

+            }

+            case 112: {

+              result.hasDummy14 = input.ReadInt32(ref result.dummy14_);

+              break;

+            }

+            case 120: {

+              result.hasDummy15 = input.ReadInt32(ref result.dummy15_);

+              break;

+            }

+            case 128: {

+              result.hasDummy16 = input.ReadInt32(ref result.dummy16_);

+              break;

+            }

+            case 136: {

+              result.hasDummy17 = input.ReadInt32(ref result.dummy17_);

+              break;

+            }

+            case 144: {

+              result.hasDummy18 = input.ReadInt32(ref result.dummy18_);

+              break;

+            }

+            case 152: {

+              result.hasDummy19 = input.ReadInt32(ref result.dummy19_);

+              break;

+            }

+            case 160: {

+              result.hasDummy20 = input.ReadInt32(ref result.dummy20_);

+              break;

+            }

+            case 168: {

+              result.hasDummy21 = input.ReadInt32(ref result.dummy21_);

+              break;

+            }

+            case 176: {

+              result.hasDummy22 = input.ReadInt32(ref result.dummy22_);

+              break;

+            }

+            case 184: {

+              result.hasDummy23 = input.ReadInt32(ref result.dummy23_);

+              break;

+            }

+            case 192: {

+              result.hasDummy24 = input.ReadInt32(ref result.dummy24_);

+              break;

+            }

+            case 200: {

+              result.hasDummy25 = input.ReadInt32(ref result.dummy25_);

+              break;

+            }

+            case 208: {

+              result.hasDummy26 = input.ReadInt32(ref result.dummy26_);

+              break;

+            }

+            case 216: {

+              result.hasDummy27 = input.ReadInt32(ref result.dummy27_);

+              break;

+            }

+            case 224: {

+              result.hasDummy28 = input.ReadInt32(ref result.dummy28_);

+              break;

+            }

+            case 232: {

+              result.hasDummy29 = input.ReadInt32(ref result.dummy29_);

+              break;

+            }

+            case 240: {

+              result.hasDummy30 = input.ReadInt32(ref result.dummy30_);

+              break;

+            }

+            case 248: {

+              result.hasDummy31 = input.ReadInt32(ref result.dummy31_);

+              break;

+            }

+            case 256: {

+              result.hasDummy32 = input.ReadInt32(ref result.dummy32_);

+              break;

+            }

+            case 264: {

+              result.hasC = input.ReadInt32(ref result.c_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy2 {

+        get { return result.hasDummy2; }

+      }

+      public int Dummy2 {

+        get { return result.Dummy2; }

+        set { SetDummy2(value); }

+      }

+      public Builder SetDummy2(int value) {

+        PrepareBuilder();

+        result.hasDummy2 = true;

+        result.dummy2_ = value;

+        return this;

+      }

+      public Builder ClearDummy2() {

+        PrepareBuilder();

+        result.hasDummy2 = false;

+        result.dummy2_ = 0;

+        return this;

+      }

+      

+      public bool HasB {

+        get { return result.hasB; }

+      }

+      public int B {

+        get { return result.B; }

+        set { SetB(value); }

+      }

+      public Builder SetB(int value) {

+        PrepareBuilder();

+        result.hasB = true;

+        result.b_ = value;

+        return this;

+      }

+      public Builder ClearB() {

+        PrepareBuilder();

+        result.hasB = false;

+        result.b_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy4 {

+        get { return result.hasDummy4; }

+      }

+      public int Dummy4 {

+        get { return result.Dummy4; }

+        set { SetDummy4(value); }

+      }

+      public Builder SetDummy4(int value) {

+        PrepareBuilder();

+        result.hasDummy4 = true;

+        result.dummy4_ = value;

+        return this;

+      }

+      public Builder ClearDummy4() {

+        PrepareBuilder();

+        result.hasDummy4 = false;

+        result.dummy4_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy5 {

+        get { return result.hasDummy5; }

+      }

+      public int Dummy5 {

+        get { return result.Dummy5; }

+        set { SetDummy5(value); }

+      }

+      public Builder SetDummy5(int value) {

+        PrepareBuilder();

+        result.hasDummy5 = true;

+        result.dummy5_ = value;

+        return this;

+      }

+      public Builder ClearDummy5() {

+        PrepareBuilder();

+        result.hasDummy5 = false;

+        result.dummy5_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy6 {

+        get { return result.hasDummy6; }

+      }

+      public int Dummy6 {

+        get { return result.Dummy6; }

+        set { SetDummy6(value); }

+      }

+      public Builder SetDummy6(int value) {

+        PrepareBuilder();

+        result.hasDummy6 = true;

+        result.dummy6_ = value;

+        return this;

+      }

+      public Builder ClearDummy6() {

+        PrepareBuilder();

+        result.hasDummy6 = false;

+        result.dummy6_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy7 {

+        get { return result.hasDummy7; }

+      }

+      public int Dummy7 {

+        get { return result.Dummy7; }

+        set { SetDummy7(value); }

+      }

+      public Builder SetDummy7(int value) {

+        PrepareBuilder();

+        result.hasDummy7 = true;

+        result.dummy7_ = value;

+        return this;

+      }

+      public Builder ClearDummy7() {

+        PrepareBuilder();

+        result.hasDummy7 = false;

+        result.dummy7_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy8 {

+        get { return result.hasDummy8; }

+      }

+      public int Dummy8 {

+        get { return result.Dummy8; }

+        set { SetDummy8(value); }

+      }

+      public Builder SetDummy8(int value) {

+        PrepareBuilder();

+        result.hasDummy8 = true;

+        result.dummy8_ = value;

+        return this;

+      }

+      public Builder ClearDummy8() {

+        PrepareBuilder();

+        result.hasDummy8 = false;

+        result.dummy8_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy9 {

+        get { return result.hasDummy9; }

+      }

+      public int Dummy9 {

+        get { return result.Dummy9; }

+        set { SetDummy9(value); }

+      }

+      public Builder SetDummy9(int value) {

+        PrepareBuilder();

+        result.hasDummy9 = true;

+        result.dummy9_ = value;

+        return this;

+      }

+      public Builder ClearDummy9() {

+        PrepareBuilder();

+        result.hasDummy9 = false;

+        result.dummy9_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy10 {

+        get { return result.hasDummy10; }

+      }

+      public int Dummy10 {

+        get { return result.Dummy10; }

+        set { SetDummy10(value); }

+      }

+      public Builder SetDummy10(int value) {

+        PrepareBuilder();

+        result.hasDummy10 = true;

+        result.dummy10_ = value;

+        return this;

+      }

+      public Builder ClearDummy10() {

+        PrepareBuilder();

+        result.hasDummy10 = false;

+        result.dummy10_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy11 {

+        get { return result.hasDummy11; }

+      }

+      public int Dummy11 {

+        get { return result.Dummy11; }

+        set { SetDummy11(value); }

+      }

+      public Builder SetDummy11(int value) {

+        PrepareBuilder();

+        result.hasDummy11 = true;

+        result.dummy11_ = value;

+        return this;

+      }

+      public Builder ClearDummy11() {

+        PrepareBuilder();

+        result.hasDummy11 = false;

+        result.dummy11_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy12 {

+        get { return result.hasDummy12; }

+      }

+      public int Dummy12 {

+        get { return result.Dummy12; }

+        set { SetDummy12(value); }

+      }

+      public Builder SetDummy12(int value) {

+        PrepareBuilder();

+        result.hasDummy12 = true;

+        result.dummy12_ = value;

+        return this;

+      }

+      public Builder ClearDummy12() {

+        PrepareBuilder();

+        result.hasDummy12 = false;

+        result.dummy12_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy13 {

+        get { return result.hasDummy13; }

+      }

+      public int Dummy13 {

+        get { return result.Dummy13; }

+        set { SetDummy13(value); }

+      }

+      public Builder SetDummy13(int value) {

+        PrepareBuilder();

+        result.hasDummy13 = true;

+        result.dummy13_ = value;

+        return this;

+      }

+      public Builder ClearDummy13() {

+        PrepareBuilder();

+        result.hasDummy13 = false;

+        result.dummy13_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy14 {

+        get { return result.hasDummy14; }

+      }

+      public int Dummy14 {

+        get { return result.Dummy14; }

+        set { SetDummy14(value); }

+      }

+      public Builder SetDummy14(int value) {

+        PrepareBuilder();

+        result.hasDummy14 = true;

+        result.dummy14_ = value;

+        return this;

+      }

+      public Builder ClearDummy14() {

+        PrepareBuilder();

+        result.hasDummy14 = false;

+        result.dummy14_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy15 {

+        get { return result.hasDummy15; }

+      }

+      public int Dummy15 {

+        get { return result.Dummy15; }

+        set { SetDummy15(value); }

+      }

+      public Builder SetDummy15(int value) {

+        PrepareBuilder();

+        result.hasDummy15 = true;

+        result.dummy15_ = value;

+        return this;

+      }

+      public Builder ClearDummy15() {

+        PrepareBuilder();

+        result.hasDummy15 = false;

+        result.dummy15_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy16 {

+        get { return result.hasDummy16; }

+      }

+      public int Dummy16 {

+        get { return result.Dummy16; }

+        set { SetDummy16(value); }

+      }

+      public Builder SetDummy16(int value) {

+        PrepareBuilder();

+        result.hasDummy16 = true;

+        result.dummy16_ = value;

+        return this;

+      }

+      public Builder ClearDummy16() {

+        PrepareBuilder();

+        result.hasDummy16 = false;

+        result.dummy16_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy17 {

+        get { return result.hasDummy17; }

+      }

+      public int Dummy17 {

+        get { return result.Dummy17; }

+        set { SetDummy17(value); }

+      }

+      public Builder SetDummy17(int value) {

+        PrepareBuilder();

+        result.hasDummy17 = true;

+        result.dummy17_ = value;

+        return this;

+      }

+      public Builder ClearDummy17() {

+        PrepareBuilder();

+        result.hasDummy17 = false;

+        result.dummy17_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy18 {

+        get { return result.hasDummy18; }

+      }

+      public int Dummy18 {

+        get { return result.Dummy18; }

+        set { SetDummy18(value); }

+      }

+      public Builder SetDummy18(int value) {

+        PrepareBuilder();

+        result.hasDummy18 = true;

+        result.dummy18_ = value;

+        return this;

+      }

+      public Builder ClearDummy18() {

+        PrepareBuilder();

+        result.hasDummy18 = false;

+        result.dummy18_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy19 {

+        get { return result.hasDummy19; }

+      }

+      public int Dummy19 {

+        get { return result.Dummy19; }

+        set { SetDummy19(value); }

+      }

+      public Builder SetDummy19(int value) {

+        PrepareBuilder();

+        result.hasDummy19 = true;

+        result.dummy19_ = value;

+        return this;

+      }

+      public Builder ClearDummy19() {

+        PrepareBuilder();

+        result.hasDummy19 = false;

+        result.dummy19_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy20 {

+        get { return result.hasDummy20; }

+      }

+      public int Dummy20 {

+        get { return result.Dummy20; }

+        set { SetDummy20(value); }

+      }

+      public Builder SetDummy20(int value) {

+        PrepareBuilder();

+        result.hasDummy20 = true;

+        result.dummy20_ = value;

+        return this;

+      }

+      public Builder ClearDummy20() {

+        PrepareBuilder();

+        result.hasDummy20 = false;

+        result.dummy20_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy21 {

+        get { return result.hasDummy21; }

+      }

+      public int Dummy21 {

+        get { return result.Dummy21; }

+        set { SetDummy21(value); }

+      }

+      public Builder SetDummy21(int value) {

+        PrepareBuilder();

+        result.hasDummy21 = true;

+        result.dummy21_ = value;

+        return this;

+      }

+      public Builder ClearDummy21() {

+        PrepareBuilder();

+        result.hasDummy21 = false;

+        result.dummy21_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy22 {

+        get { return result.hasDummy22; }

+      }

+      public int Dummy22 {

+        get { return result.Dummy22; }

+        set { SetDummy22(value); }

+      }

+      public Builder SetDummy22(int value) {

+        PrepareBuilder();

+        result.hasDummy22 = true;

+        result.dummy22_ = value;

+        return this;

+      }

+      public Builder ClearDummy22() {

+        PrepareBuilder();

+        result.hasDummy22 = false;

+        result.dummy22_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy23 {

+        get { return result.hasDummy23; }

+      }

+      public int Dummy23 {

+        get { return result.Dummy23; }

+        set { SetDummy23(value); }

+      }

+      public Builder SetDummy23(int value) {

+        PrepareBuilder();

+        result.hasDummy23 = true;

+        result.dummy23_ = value;

+        return this;

+      }

+      public Builder ClearDummy23() {

+        PrepareBuilder();

+        result.hasDummy23 = false;

+        result.dummy23_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy24 {

+        get { return result.hasDummy24; }

+      }

+      public int Dummy24 {

+        get { return result.Dummy24; }

+        set { SetDummy24(value); }

+      }

+      public Builder SetDummy24(int value) {

+        PrepareBuilder();

+        result.hasDummy24 = true;

+        result.dummy24_ = value;

+        return this;

+      }

+      public Builder ClearDummy24() {

+        PrepareBuilder();

+        result.hasDummy24 = false;

+        result.dummy24_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy25 {

+        get { return result.hasDummy25; }

+      }

+      public int Dummy25 {

+        get { return result.Dummy25; }

+        set { SetDummy25(value); }

+      }

+      public Builder SetDummy25(int value) {

+        PrepareBuilder();

+        result.hasDummy25 = true;

+        result.dummy25_ = value;

+        return this;

+      }

+      public Builder ClearDummy25() {

+        PrepareBuilder();

+        result.hasDummy25 = false;

+        result.dummy25_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy26 {

+        get { return result.hasDummy26; }

+      }

+      public int Dummy26 {

+        get { return result.Dummy26; }

+        set { SetDummy26(value); }

+      }

+      public Builder SetDummy26(int value) {

+        PrepareBuilder();

+        result.hasDummy26 = true;

+        result.dummy26_ = value;

+        return this;

+      }

+      public Builder ClearDummy26() {

+        PrepareBuilder();

+        result.hasDummy26 = false;

+        result.dummy26_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy27 {

+        get { return result.hasDummy27; }

+      }

+      public int Dummy27 {

+        get { return result.Dummy27; }

+        set { SetDummy27(value); }

+      }

+      public Builder SetDummy27(int value) {

+        PrepareBuilder();

+        result.hasDummy27 = true;

+        result.dummy27_ = value;

+        return this;

+      }

+      public Builder ClearDummy27() {

+        PrepareBuilder();

+        result.hasDummy27 = false;

+        result.dummy27_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy28 {

+        get { return result.hasDummy28; }

+      }

+      public int Dummy28 {

+        get { return result.Dummy28; }

+        set { SetDummy28(value); }

+      }

+      public Builder SetDummy28(int value) {

+        PrepareBuilder();

+        result.hasDummy28 = true;

+        result.dummy28_ = value;

+        return this;

+      }

+      public Builder ClearDummy28() {

+        PrepareBuilder();

+        result.hasDummy28 = false;

+        result.dummy28_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy29 {

+        get { return result.hasDummy29; }

+      }

+      public int Dummy29 {

+        get { return result.Dummy29; }

+        set { SetDummy29(value); }

+      }

+      public Builder SetDummy29(int value) {

+        PrepareBuilder();

+        result.hasDummy29 = true;

+        result.dummy29_ = value;

+        return this;

+      }

+      public Builder ClearDummy29() {

+        PrepareBuilder();

+        result.hasDummy29 = false;

+        result.dummy29_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy30 {

+        get { return result.hasDummy30; }

+      }

+      public int Dummy30 {

+        get { return result.Dummy30; }

+        set { SetDummy30(value); }

+      }

+      public Builder SetDummy30(int value) {

+        PrepareBuilder();

+        result.hasDummy30 = true;

+        result.dummy30_ = value;

+        return this;

+      }

+      public Builder ClearDummy30() {

+        PrepareBuilder();

+        result.hasDummy30 = false;

+        result.dummy30_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy31 {

+        get { return result.hasDummy31; }

+      }

+      public int Dummy31 {

+        get { return result.Dummy31; }

+        set { SetDummy31(value); }

+      }

+      public Builder SetDummy31(int value) {

+        PrepareBuilder();

+        result.hasDummy31 = true;

+        result.dummy31_ = value;

+        return this;

+      }

+      public Builder ClearDummy31() {

+        PrepareBuilder();

+        result.hasDummy31 = false;

+        result.dummy31_ = 0;

+        return this;

+      }

+      

+      public bool HasDummy32 {

+        get { return result.hasDummy32; }

+      }

+      public int Dummy32 {

+        get { return result.Dummy32; }

+        set { SetDummy32(value); }

+      }

+      public Builder SetDummy32(int value) {

+        PrepareBuilder();

+        result.hasDummy32 = true;

+        result.dummy32_ = value;

+        return this;

+      }

+      public Builder ClearDummy32() {

+        PrepareBuilder();

+        result.hasDummy32 = false;

+        result.dummy32_ = 0;

+        return this;

+      }

+      

+      public bool HasC {

+        get { return result.hasC; }

+      }

+      public int C {

+        get { return result.C; }

+        set { SetC(value); }

+      }

+      public Builder SetC(int value) {

+        PrepareBuilder();

+        result.hasC = true;

+        result.c_ = value;

+        return this;

+      }

+      public Builder ClearC() {

+        PrepareBuilder();

+        result.hasC = false;

+        result.c_ = 0;

+        return this;

+      }

+    }

+    static TestRequired() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRequiredForeign : pb::GeneratedMessage<TestRequiredForeign, TestRequiredForeign.Builder> {

+    private TestRequiredForeign() { }

+    private static readonly TestRequiredForeign defaultInstance = new TestRequiredForeign().MakeReadOnly();

+    private static readonly string[] _testRequiredForeignFieldNames = new string[] { "dummy", "optional_message", "repeated_message" };

+    private static readonly uint[] _testRequiredForeignFieldTags = new uint[] { 24, 10, 18 };

+    public static TestRequiredForeign DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRequiredForeign DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRequiredForeign ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRequiredForeign__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestRequiredForeign, TestRequiredForeign.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRequiredForeign__FieldAccessorTable; }

+    }

+    

+    public const int OptionalMessageFieldNumber = 1;

+    private bool hasOptionalMessage;

+    private global::Google.ProtocolBuffers.TestProtos.TestRequired optionalMessage_;

+    public bool HasOptionalMessage {

+      get { return hasOptionalMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestRequired OptionalMessage {

+      get { return optionalMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance; }

+    }

+    

+    public const int RepeatedMessageFieldNumber = 2;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestRequired> repeatedMessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.TestRequired>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.TestRequired> RepeatedMessageList {

+      get { return repeatedMessage_; }

+    }

+    public int RepeatedMessageCount {

+      get { return repeatedMessage_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestRequired GetRepeatedMessage(int index) {

+      return repeatedMessage_[index];

+    }

+    

+    public const int DummyFieldNumber = 3;

+    private bool hasDummy;

+    private int dummy_;

+    public bool HasDummy {

+      get { return hasDummy; }

+    }

+    public int Dummy {

+      get { return dummy_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (HasOptionalMessage) {

+          if (!OptionalMessage.IsInitialized) return false;

+        }

+        foreach (global::Google.ProtocolBuffers.TestProtos.TestRequired element in RepeatedMessageList) {

+          if (!element.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testRequiredForeignFieldNames;

+      if (hasOptionalMessage) {

+        output.WriteMessage(1, field_names[1], OptionalMessage);

+      }

+      if (repeatedMessage_.Count > 0) {

+        output.WriteMessageArray(2, field_names[2], repeatedMessage_);

+      }

+      if (hasDummy) {

+        output.WriteInt32(3, field_names[0], Dummy);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasOptionalMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, OptionalMessage);

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.TestRequired element in RepeatedMessageList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2, element);

+      }

+      if (hasDummy) {

+        size += pb::CodedOutputStream.ComputeInt32Size(3, Dummy);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestRequiredForeign ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRequiredForeign ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRequiredForeign ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRequiredForeign MakeReadOnly() {

+      repeatedMessage_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRequiredForeign prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestRequiredForeign, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRequiredForeign cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRequiredForeign result;

+      

+      private TestRequiredForeign PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRequiredForeign original = result;

+          result = new TestRequiredForeign();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRequiredForeign MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.Descriptor; }

+      }

+      

+      public override TestRequiredForeign DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.DefaultInstance; }

+      }

+      

+      public override TestRequiredForeign BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestRequiredForeign) {

+          return MergeFrom((TestRequiredForeign) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestRequiredForeign other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestRequiredForeign.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasOptionalMessage) {

+          MergeOptionalMessage(other.OptionalMessage);

+        }

+        if (other.repeatedMessage_.Count != 0) {

+          result.repeatedMessage_.Add(other.repeatedMessage_);

+        }

+        if (other.HasDummy) {

+          Dummy = other.Dummy;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testRequiredForeignFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testRequiredForeignFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestRequired.CreateBuilder();

+              if (result.hasOptionalMessage) {

+                subBuilder.MergeFrom(OptionalMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalMessage = subBuilder.BuildPartial();

+              break;

+            }

+            case 18: {

+              input.ReadMessageArray(tag, field_name, result.repeatedMessage_, global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 24: {

+              result.hasDummy = input.ReadInt32(ref result.dummy_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasOptionalMessage {

+       get { return result.hasOptionalMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestRequired OptionalMessage {

+        get { return result.OptionalMessage; }

+        set { SetOptionalMessage(value); }

+      }

+      public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalMessage = true;

+        result.optionalMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalMessage = true;

+        result.optionalMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalMessage &&

+            result.optionalMessage_ != global::Google.ProtocolBuffers.TestProtos.TestRequired.DefaultInstance) {

+            result.optionalMessage_ = global::Google.ProtocolBuffers.TestProtos.TestRequired.CreateBuilder(result.optionalMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalMessage_ = value;

+        }

+        result.hasOptionalMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalMessage() {

+        PrepareBuilder();

+        result.hasOptionalMessage = false;

+        result.optionalMessage_ = null;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.TestRequired> RepeatedMessageList {

+        get { return PrepareBuilder().repeatedMessage_; }

+      }

+      public int RepeatedMessageCount {

+        get { return result.RepeatedMessageCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestRequired GetRepeatedMessage(int index) {

+        return result.GetRepeatedMessage(index);

+      }

+      public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestRequired value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessage_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedMessage(int index, global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessage_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessage_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedMessage(global::Google.ProtocolBuffers.TestProtos.TestRequired.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessage_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedMessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.TestRequired> values) {

+        PrepareBuilder();

+        result.repeatedMessage_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedMessage() {

+        PrepareBuilder();

+        result.repeatedMessage_.Clear();

+        return this;

+      }

+      

+      public bool HasDummy {

+        get { return result.hasDummy; }

+      }

+      public int Dummy {

+        get { return result.Dummy; }

+        set { SetDummy(value); }

+      }

+      public Builder SetDummy(int value) {

+        PrepareBuilder();

+        result.hasDummy = true;

+        result.dummy_ = value;

+        return this;

+      }

+      public Builder ClearDummy() {

+        PrepareBuilder();

+        result.hasDummy = false;

+        result.dummy_ = 0;

+        return this;

+      }

+    }

+    static TestRequiredForeign() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestForeignNested : pb::GeneratedMessage<TestForeignNested, TestForeignNested.Builder> {

+    private TestForeignNested() { }

+    private static readonly TestForeignNested defaultInstance = new TestForeignNested().MakeReadOnly();

+    private static readonly string[] _testForeignNestedFieldNames = new string[] { "foreign_nested" };

+    private static readonly uint[] _testForeignNestedFieldTags = new uint[] { 10 };

+    public static TestForeignNested DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestForeignNested DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestForeignNested ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestForeignNested__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestForeignNested, TestForeignNested.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestForeignNested__FieldAccessorTable; }

+    }

+    

+    public const int ForeignNestedFieldNumber = 1;

+    private bool hasForeignNested;

+    private global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage foreignNested_;

+    public bool HasForeignNested {

+      get { return hasForeignNested; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage ForeignNested {

+      get { return foreignNested_ ?? global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testForeignNestedFieldNames;

+      if (hasForeignNested) {

+        output.WriteMessage(1, field_names[0], ForeignNested);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasForeignNested) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, ForeignNested);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestForeignNested ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestForeignNested ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestForeignNested ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestForeignNested ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestForeignNested MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestForeignNested prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestForeignNested, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestForeignNested cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestForeignNested result;

+      

+      private TestForeignNested PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestForeignNested original = result;

+          result = new TestForeignNested();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestForeignNested MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestForeignNested.Descriptor; }

+      }

+      

+      public override TestForeignNested DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestForeignNested.DefaultInstance; }

+      }

+      

+      public override TestForeignNested BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestForeignNested) {

+          return MergeFrom((TestForeignNested) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestForeignNested other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestForeignNested.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasForeignNested) {

+          MergeForeignNested(other.ForeignNested);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testForeignNestedFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testForeignNestedFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder();

+              if (result.hasForeignNested) {

+                subBuilder.MergeFrom(ForeignNested);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              ForeignNested = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasForeignNested {

+       get { return result.hasForeignNested; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage ForeignNested {

+        get { return result.ForeignNested; }

+        set { SetForeignNested(value); }

+      }

+      public Builder SetForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasForeignNested = true;

+        result.foreignNested_ = value;

+        return this;

+      }

+      public Builder SetForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasForeignNested = true;

+        result.foreignNested_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeForeignNested(global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasForeignNested &&

+            result.foreignNested_ != global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.DefaultInstance) {

+            result.foreignNested_ = global::Google.ProtocolBuffers.TestProtos.TestAllTypes.Types.NestedMessage.CreateBuilder(result.foreignNested_).MergeFrom(value).BuildPartial();

+        } else {

+          result.foreignNested_ = value;

+        }

+        result.hasForeignNested = true;

+        return this;

+      }

+      public Builder ClearForeignNested() {

+        PrepareBuilder();

+        result.hasForeignNested = false;

+        result.foreignNested_ = null;

+        return this;

+      }

+    }

+    static TestForeignNested() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestEmptyMessage : pb::GeneratedMessage<TestEmptyMessage, TestEmptyMessage.Builder> {

+    private TestEmptyMessage() { }

+    private static readonly TestEmptyMessage defaultInstance = new TestEmptyMessage().MakeReadOnly();

+    private static readonly string[] _testEmptyMessageFieldNames = new string[] {  };

+    private static readonly uint[] _testEmptyMessageFieldTags = new uint[] {  };

+    public static TestEmptyMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestEmptyMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestEmptyMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestEmptyMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestEmptyMessage, TestEmptyMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestEmptyMessage__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testEmptyMessageFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestEmptyMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestEmptyMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmptyMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestEmptyMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestEmptyMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestEmptyMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestEmptyMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestEmptyMessage result;

+      

+      private TestEmptyMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestEmptyMessage original = result;

+          result = new TestEmptyMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestEmptyMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.Descriptor; }

+      }

+      

+      public override TestEmptyMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.DefaultInstance; }

+      }

+      

+      public override TestEmptyMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestEmptyMessage) {

+          return MergeFrom((TestEmptyMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestEmptyMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestEmptyMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testEmptyMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testEmptyMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestEmptyMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestEmptyMessageWithExtensions : pb::ExtendableMessage<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder> {

+    private TestEmptyMessageWithExtensions() { }

+    private static readonly TestEmptyMessageWithExtensions defaultInstance = new TestEmptyMessageWithExtensions().MakeReadOnly();

+    private static readonly string[] _testEmptyMessageWithExtensionsFieldNames = new string[] {  };

+    private static readonly uint[] _testEmptyMessageWithExtensionsFieldTags = new uint[] {  };

+    public static TestEmptyMessageWithExtensions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestEmptyMessageWithExtensions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestEmptyMessageWithExtensions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestEmptyMessageWithExtensions__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testEmptyMessageWithExtensionsFieldNames;

+      pb::ExtendableMessage<TestEmptyMessageWithExtensions, TestEmptyMessageWithExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestEmptyMessageWithExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestEmptyMessageWithExtensions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestEmptyMessageWithExtensions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestEmptyMessageWithExtensions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestEmptyMessageWithExtensions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestEmptyMessageWithExtensions result;

+      

+      private TestEmptyMessageWithExtensions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestEmptyMessageWithExtensions original = result;

+          result = new TestEmptyMessageWithExtensions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestEmptyMessageWithExtensions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.Descriptor; }

+      }

+      

+      public override TestEmptyMessageWithExtensions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.DefaultInstance; }

+      }

+      

+      public override TestEmptyMessageWithExtensions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestEmptyMessageWithExtensions) {

+          return MergeFrom((TestEmptyMessageWithExtensions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestEmptyMessageWithExtensions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestEmptyMessageWithExtensions.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testEmptyMessageWithExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testEmptyMessageWithExtensionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestEmptyMessageWithExtensions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMultipleExtensionRanges : pb::ExtendableMessage<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder> {

+    private TestMultipleExtensionRanges() { }

+    private static readonly TestMultipleExtensionRanges defaultInstance = new TestMultipleExtensionRanges().MakeReadOnly();

+    private static readonly string[] _testMultipleExtensionRangesFieldNames = new string[] {  };

+    private static readonly uint[] _testMultipleExtensionRangesFieldTags = new uint[] {  };

+    public static TestMultipleExtensionRanges DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMultipleExtensionRanges DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMultipleExtensionRanges ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMultipleExtensionRanges__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMultipleExtensionRanges__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMultipleExtensionRangesFieldNames;

+      pb::ExtendableMessage<TestMultipleExtensionRanges, TestMultipleExtensionRanges.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(43, output);

+      extensionWriter.WriteUntil(4244, output);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMultipleExtensionRanges ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMultipleExtensionRanges ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMultipleExtensionRanges MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMultipleExtensionRanges prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestMultipleExtensionRanges, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMultipleExtensionRanges cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMultipleExtensionRanges result;

+      

+      private TestMultipleExtensionRanges PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMultipleExtensionRanges original = result;

+          result = new TestMultipleExtensionRanges();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMultipleExtensionRanges MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.Descriptor; }

+      }

+      

+      public override TestMultipleExtensionRanges DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.DefaultInstance; }

+      }

+      

+      public override TestMultipleExtensionRanges BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMultipleExtensionRanges) {

+          return MergeFrom((TestMultipleExtensionRanges) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMultipleExtensionRanges other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMultipleExtensionRanges.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMultipleExtensionRangesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMultipleExtensionRangesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestMultipleExtensionRanges() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestReallyLargeTagNumber : pb::GeneratedMessage<TestReallyLargeTagNumber, TestReallyLargeTagNumber.Builder> {

+    private TestReallyLargeTagNumber() { }

+    private static readonly TestReallyLargeTagNumber defaultInstance = new TestReallyLargeTagNumber().MakeReadOnly();

+    private static readonly string[] _testReallyLargeTagNumberFieldNames = new string[] { "a", "bb" };

+    private static readonly uint[] _testReallyLargeTagNumberFieldTags = new uint[] { 8, 2147483640 };

+    public static TestReallyLargeTagNumber DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestReallyLargeTagNumber DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestReallyLargeTagNumber ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestReallyLargeTagNumber__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestReallyLargeTagNumber, TestReallyLargeTagNumber.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestReallyLargeTagNumber__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public const int BbFieldNumber = 268435455;

+    private bool hasBb;

+    private int bb_;

+    public bool HasBb {

+      get { return hasBb; }

+    }

+    public int Bb {

+      get { return bb_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testReallyLargeTagNumberFieldNames;

+      if (hasA) {

+        output.WriteInt32(1, field_names[0], A);

+      }

+      if (hasBb) {

+        output.WriteInt32(268435455, field_names[1], Bb);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+      }

+      if (hasBb) {

+        size += pb::CodedOutputStream.ComputeInt32Size(268435455, Bb);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestReallyLargeTagNumber ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestReallyLargeTagNumber ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestReallyLargeTagNumber MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestReallyLargeTagNumber prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestReallyLargeTagNumber, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestReallyLargeTagNumber cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestReallyLargeTagNumber result;

+      

+      private TestReallyLargeTagNumber PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestReallyLargeTagNumber original = result;

+          result = new TestReallyLargeTagNumber();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestReallyLargeTagNumber MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.Descriptor; }

+      }

+      

+      public override TestReallyLargeTagNumber DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.DefaultInstance; }

+      }

+      

+      public override TestReallyLargeTagNumber BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestReallyLargeTagNumber) {

+          return MergeFrom((TestReallyLargeTagNumber) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestReallyLargeTagNumber other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestReallyLargeTagNumber.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        if (other.HasBb) {

+          Bb = other.Bb;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testReallyLargeTagNumberFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testReallyLargeTagNumberFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+            case 2147483640: {

+              result.hasBb = input.ReadInt32(ref result.bb_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+      

+      public bool HasBb {

+        get { return result.hasBb; }

+      }

+      public int Bb {

+        get { return result.Bb; }

+        set { SetBb(value); }

+      }

+      public Builder SetBb(int value) {

+        PrepareBuilder();

+        result.hasBb = true;

+        result.bb_ = value;

+        return this;

+      }

+      public Builder ClearBb() {

+        PrepareBuilder();

+        result.hasBb = false;

+        result.bb_ = 0;

+        return this;

+      }

+    }

+    static TestReallyLargeTagNumber() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRecursiveMessage : pb::GeneratedMessage<TestRecursiveMessage, TestRecursiveMessage.Builder> {

+    private TestRecursiveMessage() { }

+    private static readonly TestRecursiveMessage defaultInstance = new TestRecursiveMessage().MakeReadOnly();

+    private static readonly string[] _testRecursiveMessageFieldNames = new string[] { "a", "i" };

+    private static readonly uint[] _testRecursiveMessageFieldTags = new uint[] { 10, 16 };

+    public static TestRecursiveMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRecursiveMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRecursiveMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRecursiveMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestRecursiveMessage, TestRecursiveMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRecursiveMessage__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage A {

+      get { return a_ ?? global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance; }

+    }

+    

+    public const int IFieldNumber = 2;

+    private bool hasI;

+    private int i_;

+    public bool HasI {

+      get { return hasI; }

+    }

+    public int I {

+      get { return i_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testRecursiveMessageFieldNames;

+      if (hasA) {

+        output.WriteMessage(1, field_names[0], A);

+      }

+      if (hasI) {

+        output.WriteInt32(2, field_names[1], I);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, A);

+      }

+      if (hasI) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, I);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestRecursiveMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRecursiveMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRecursiveMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRecursiveMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestRecursiveMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRecursiveMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRecursiveMessage result;

+      

+      private TestRecursiveMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRecursiveMessage original = result;

+          result = new TestRecursiveMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRecursiveMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Descriptor; }

+      }

+      

+      public override TestRecursiveMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance; }

+      }

+      

+      public override TestRecursiveMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestRecursiveMessage) {

+          return MergeFrom((TestRecursiveMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestRecursiveMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          MergeA(other.A);

+        }

+        if (other.HasI) {

+          I = other.I;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testRecursiveMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testRecursiveMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.CreateBuilder();

+              if (result.hasA) {

+                subBuilder.MergeFrom(A);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              A = subBuilder.BuildPartial();

+              break;

+            }

+            case 16: {

+              result.hasI = input.ReadInt32(ref result.i_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+       get { return result.hasA; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeA(global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasA &&

+            result.a_ != global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.DefaultInstance) {

+            result.a_ = global::Google.ProtocolBuffers.TestProtos.TestRecursiveMessage.CreateBuilder(result.a_).MergeFrom(value).BuildPartial();

+        } else {

+          result.a_ = value;

+        }

+        result.hasA = true;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = null;

+        return this;

+      }

+      

+      public bool HasI {

+        get { return result.hasI; }

+      }

+      public int I {

+        get { return result.I; }

+        set { SetI(value); }

+      }

+      public Builder SetI(int value) {

+        PrepareBuilder();

+        result.hasI = true;

+        result.i_ = value;

+        return this;

+      }

+      public Builder ClearI() {

+        PrepareBuilder();

+        result.hasI = false;

+        result.i_ = 0;

+        return this;

+      }

+    }

+    static TestRecursiveMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMutualRecursionA : pb::GeneratedMessage<TestMutualRecursionA, TestMutualRecursionA.Builder> {

+    private TestMutualRecursionA() { }

+    private static readonly TestMutualRecursionA defaultInstance = new TestMutualRecursionA().MakeReadOnly();

+    private static readonly string[] _testMutualRecursionAFieldNames = new string[] { "bb" };

+    private static readonly uint[] _testMutualRecursionAFieldTags = new uint[] { 10 };

+    public static TestMutualRecursionA DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMutualRecursionA DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMutualRecursionA ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMutualRecursionA__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMutualRecursionA, TestMutualRecursionA.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMutualRecursionA__FieldAccessorTable; }

+    }

+    

+    public const int BbFieldNumber = 1;

+    private bool hasBb;

+    private global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB bb_;

+    public bool HasBb {

+      get { return hasBb; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB Bb {

+      get { return bb_ ?? global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMutualRecursionAFieldNames;

+      if (hasBb) {

+        output.WriteMessage(1, field_names[0], Bb);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasBb) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, Bb);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMutualRecursionA ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMutualRecursionA ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMutualRecursionA MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMutualRecursionA prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestMutualRecursionA, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMutualRecursionA cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMutualRecursionA result;

+      

+      private TestMutualRecursionA PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMutualRecursionA original = result;

+          result = new TestMutualRecursionA();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMutualRecursionA MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Descriptor; }

+      }

+      

+      public override TestMutualRecursionA DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance; }

+      }

+      

+      public override TestMutualRecursionA BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMutualRecursionA) {

+          return MergeFrom((TestMutualRecursionA) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMutualRecursionA other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasBb) {

+          MergeBb(other.Bb);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMutualRecursionAFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMutualRecursionAFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.CreateBuilder();

+              if (result.hasBb) {

+                subBuilder.MergeFrom(Bb);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              Bb = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasBb {

+       get { return result.hasBb; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB Bb {

+        get { return result.Bb; }

+        set { SetBb(value); }

+      }

+      public Builder SetBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasBb = true;

+        result.bb_ = value;

+        return this;

+      }

+      public Builder SetBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasBb = true;

+        result.bb_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeBb(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasBb &&

+            result.bb_ != global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance) {

+            result.bb_ = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.CreateBuilder(result.bb_).MergeFrom(value).BuildPartial();

+        } else {

+          result.bb_ = value;

+        }

+        result.hasBb = true;

+        return this;

+      }

+      public Builder ClearBb() {

+        PrepareBuilder();

+        result.hasBb = false;

+        result.bb_ = null;

+        return this;

+      }

+    }

+    static TestMutualRecursionA() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestMutualRecursionB : pb::GeneratedMessage<TestMutualRecursionB, TestMutualRecursionB.Builder> {

+    private TestMutualRecursionB() { }

+    private static readonly TestMutualRecursionB defaultInstance = new TestMutualRecursionB().MakeReadOnly();

+    private static readonly string[] _testMutualRecursionBFieldNames = new string[] { "a", "optional_int32" };

+    private static readonly uint[] _testMutualRecursionBFieldTags = new uint[] { 10, 16 };

+    public static TestMutualRecursionB DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestMutualRecursionB DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestMutualRecursionB ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMutualRecursionB__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestMutualRecursionB, TestMutualRecursionB.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestMutualRecursionB__FieldAccessorTable; }

+    }

+    

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA A {

+      get { return a_ ?? global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance; }

+    }

+    

+    public const int OptionalInt32FieldNumber = 2;

+    private bool hasOptionalInt32;

+    private int optionalInt32_;

+    public bool HasOptionalInt32 {

+      get { return hasOptionalInt32; }

+    }

+    public int OptionalInt32 {

+      get { return optionalInt32_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testMutualRecursionBFieldNames;

+      if (hasA) {

+        output.WriteMessage(1, field_names[0], A);

+      }

+      if (hasOptionalInt32) {

+        output.WriteInt32(2, field_names[1], OptionalInt32);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, A);

+      }

+      if (hasOptionalInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(2, OptionalInt32);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestMutualRecursionB ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestMutualRecursionB ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestMutualRecursionB MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestMutualRecursionB prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestMutualRecursionB, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestMutualRecursionB cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestMutualRecursionB result;

+      

+      private TestMutualRecursionB PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestMutualRecursionB original = result;

+          result = new TestMutualRecursionB();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestMutualRecursionB MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.Descriptor; }

+      }

+      

+      public override TestMutualRecursionB DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance; }

+      }

+      

+      public override TestMutualRecursionB BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestMutualRecursionB) {

+          return MergeFrom((TestMutualRecursionB) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestMutualRecursionB other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionB.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          MergeA(other.A);

+        }

+        if (other.HasOptionalInt32) {

+          OptionalInt32 = other.OptionalInt32;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testMutualRecursionBFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testMutualRecursionBFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.CreateBuilder();

+              if (result.hasA) {

+                subBuilder.MergeFrom(A);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              A = subBuilder.BuildPartial();

+              break;

+            }

+            case 16: {

+              result.hasOptionalInt32 = input.ReadInt32(ref result.optionalInt32_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+       get { return result.hasA; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder SetA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeA(global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasA &&

+            result.a_ != global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.DefaultInstance) {

+            result.a_ = global::Google.ProtocolBuffers.TestProtos.TestMutualRecursionA.CreateBuilder(result.a_).MergeFrom(value).BuildPartial();

+        } else {

+          result.a_ = value;

+        }

+        result.hasA = true;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = null;

+        return this;

+      }

+      

+      public bool HasOptionalInt32 {

+        get { return result.hasOptionalInt32; }

+      }

+      public int OptionalInt32 {

+        get { return result.OptionalInt32; }

+        set { SetOptionalInt32(value); }

+      }

+      public Builder SetOptionalInt32(int value) {

+        PrepareBuilder();

+        result.hasOptionalInt32 = true;

+        result.optionalInt32_ = value;

+        return this;

+      }

+      public Builder ClearOptionalInt32() {

+        PrepareBuilder();

+        result.hasOptionalInt32 = false;

+        result.optionalInt32_ = 0;

+        return this;

+      }

+    }

+    static TestMutualRecursionB() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestDupFieldNumber : pb::GeneratedMessage<TestDupFieldNumber, TestDupFieldNumber.Builder> {

+    private TestDupFieldNumber() { }

+    private static readonly TestDupFieldNumber defaultInstance = new TestDupFieldNumber().MakeReadOnly();

+    private static readonly string[] _testDupFieldNumberFieldNames = new string[] { "a", "bar", "foo" };

+    private static readonly uint[] _testDupFieldNumberFieldTags = new uint[] { 8, 27, 19 };

+    public static TestDupFieldNumber DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestDupFieldNumber DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestDupFieldNumber ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestDupFieldNumber, TestDupFieldNumber.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Foo : pb::GeneratedMessage<Foo, Foo.Builder> {

+        private Foo() { }

+        private static readonly Foo defaultInstance = new Foo().MakeReadOnly();

+        private static readonly string[] _fooFieldNames = new string[] { "a" };

+        private static readonly uint[] _fooFieldTags = new uint[] { 8 };

+        public static Foo DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Foo DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Foo ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber_Foo__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Foo, Foo.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber_Foo__FieldAccessorTable; }

+        }

+        

+        public const int AFieldNumber = 1;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _fooFieldNames;

+          if (hasA) {

+            output.WriteInt32(1, field_names[0], A);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static Foo ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Foo ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Foo ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Foo ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Foo ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Foo ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Foo ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Foo ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Foo ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Foo ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Foo MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Foo prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Foo, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Foo cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Foo result;

+          

+          private Foo PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Foo original = result;

+              result = new Foo();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Foo MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Descriptor; }

+          }

+          

+          public override Foo DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance; }

+          }

+          

+          public override Foo BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is Foo) {

+              return MergeFrom((Foo) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(Foo other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_fooFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _fooFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 8: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static Foo() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class Bar : pb::GeneratedMessage<Bar, Bar.Builder> {

+        private Bar() { }

+        private static readonly Bar defaultInstance = new Bar().MakeReadOnly();

+        private static readonly string[] _barFieldNames = new string[] { "a" };

+        private static readonly uint[] _barFieldTags = new uint[] { 8 };

+        public static Bar DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override Bar DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override Bar ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber_Bar__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<Bar, Bar.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDupFieldNumber_Bar__FieldAccessorTable; }

+        }

+        

+        public const int AFieldNumber = 1;

+        private bool hasA;

+        private int a_;

+        public bool HasA {

+          get { return hasA; }

+        }

+        public int A {

+          get { return a_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _barFieldNames;

+          if (hasA) {

+            output.WriteInt32(1, field_names[0], A);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasA) {

+            size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static Bar ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Bar ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Bar ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static Bar ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static Bar ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Bar ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static Bar ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static Bar ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static Bar ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static Bar ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private Bar MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(Bar prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<Bar, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(Bar cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private Bar result;

+          

+          private Bar PrepareBuilder() {

+            if (resultIsReadOnly) {

+              Bar original = result;

+              result = new Bar();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override Bar MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Descriptor; }

+          }

+          

+          public override Bar DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance; }

+          }

+          

+          public override Bar BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is Bar) {

+              return MergeFrom((Bar) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(Bar other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasA) {

+              A = other.A;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_barFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _barFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 8: {

+                  result.hasA = input.ReadInt32(ref result.a_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasA {

+            get { return result.hasA; }

+          }

+          public int A {

+            get { return result.A; }

+            set { SetA(value); }

+          }

+          public Builder SetA(int value) {

+            PrepareBuilder();

+            result.hasA = true;

+            result.a_ = value;

+            return this;

+          }

+          public Builder ClearA() {

+            PrepareBuilder();

+            result.hasA = false;

+            result.a_ = 0;

+            return this;

+          }

+        }

+        static Bar() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int AFieldNumber = 1;

+    private bool hasA;

+    private int a_;

+    public bool HasA {

+      get { return hasA; }

+    }

+    public int A {

+      get { return a_; }

+    }

+    

+    public const int FooFieldNumber = 2;

+    private bool hasFoo;

+    private global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo foo_;

+    public bool HasFoo {

+      get { return hasFoo; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo Foo {

+      get { return foo_ ?? global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance; }

+    }

+    

+    public const int BarFieldNumber = 3;

+    private bool hasBar;

+    private global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar bar_;

+    public bool HasBar {

+      get { return hasBar; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar Bar {

+      get { return bar_ ?? global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testDupFieldNumberFieldNames;

+      if (hasA) {

+        output.WriteInt32(1, field_names[0], A);

+      }

+      if (hasFoo) {

+        output.WriteGroup(2, field_names[2], Foo);

+      }

+      if (hasBar) {

+        output.WriteGroup(3, field_names[1], Bar);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasA) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, A);

+      }

+      if (hasFoo) {

+        size += pb::CodedOutputStream.ComputeGroupSize(2, Foo);

+      }

+      if (hasBar) {

+        size += pb::CodedOutputStream.ComputeGroupSize(3, Bar);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestDupFieldNumber ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDupFieldNumber ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestDupFieldNumber MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestDupFieldNumber prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestDupFieldNumber, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestDupFieldNumber cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestDupFieldNumber result;

+      

+      private TestDupFieldNumber PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestDupFieldNumber original = result;

+          result = new TestDupFieldNumber();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestDupFieldNumber MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Descriptor; }

+      }

+      

+      public override TestDupFieldNumber DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.DefaultInstance; }

+      }

+      

+      public override TestDupFieldNumber BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestDupFieldNumber) {

+          return MergeFrom((TestDupFieldNumber) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestDupFieldNumber other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasA) {

+          A = other.A;

+        }

+        if (other.HasFoo) {

+          MergeFoo(other.Foo);

+        }

+        if (other.HasBar) {

+          MergeBar(other.Bar);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testDupFieldNumberFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testDupFieldNumberFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasA = input.ReadInt32(ref result.a_);

+              break;

+            }

+            case 19: {

+              global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.CreateBuilder();

+              if (result.hasFoo) {

+                subBuilder.MergeFrom(Foo);

+              }

+              input.ReadGroup(2, subBuilder, extensionRegistry);

+              Foo = subBuilder.BuildPartial();

+              break;

+            }

+            case 27: {

+              global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.CreateBuilder();

+              if (result.hasBar) {

+                subBuilder.MergeFrom(Bar);

+              }

+              input.ReadGroup(3, subBuilder, extensionRegistry);

+              Bar = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasA {

+        get { return result.hasA; }

+      }

+      public int A {

+        get { return result.A; }

+        set { SetA(value); }

+      }

+      public Builder SetA(int value) {

+        PrepareBuilder();

+        result.hasA = true;

+        result.a_ = value;

+        return this;

+      }

+      public Builder ClearA() {

+        PrepareBuilder();

+        result.hasA = false;

+        result.a_ = 0;

+        return this;

+      }

+      

+      public bool HasFoo {

+       get { return result.hasFoo; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo Foo {

+        get { return result.Foo; }

+        set { SetFoo(value); }

+      }

+      public Builder SetFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasFoo = true;

+        result.foo_ = value;

+        return this;

+      }

+      public Builder SetFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasFoo = true;

+        result.foo_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeFoo(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasFoo &&

+            result.foo_ != global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.DefaultInstance) {

+            result.foo_ = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Foo.CreateBuilder(result.foo_).MergeFrom(value).BuildPartial();

+        } else {

+          result.foo_ = value;

+        }

+        result.hasFoo = true;

+        return this;

+      }

+      public Builder ClearFoo() {

+        PrepareBuilder();

+        result.hasFoo = false;

+        result.foo_ = null;

+        return this;

+      }

+      

+      public bool HasBar {

+       get { return result.hasBar; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar Bar {

+        get { return result.Bar; }

+        set { SetBar(value); }

+      }

+      public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasBar = true;

+        result.bar_ = value;

+        return this;

+      }

+      public Builder SetBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasBar = true;

+        result.bar_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeBar(global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasBar &&

+            result.bar_ != global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.DefaultInstance) {

+            result.bar_ = global::Google.ProtocolBuffers.TestProtos.TestDupFieldNumber.Types.Bar.CreateBuilder(result.bar_).MergeFrom(value).BuildPartial();

+        } else {

+          result.bar_ = value;

+        }

+        result.hasBar = true;

+        return this;

+      }

+      public Builder ClearBar() {

+        PrepareBuilder();

+        result.hasBar = false;

+        result.bar_ = null;

+        return this;

+      }

+    }

+    static TestDupFieldNumber() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestNestedMessageHasBits : pb::GeneratedMessage<TestNestedMessageHasBits, TestNestedMessageHasBits.Builder> {

+    private TestNestedMessageHasBits() { }

+    private static readonly TestNestedMessageHasBits defaultInstance = new TestNestedMessageHasBits().MakeReadOnly();

+    private static readonly string[] _testNestedMessageHasBitsFieldNames = new string[] { "optional_nested_message" };

+    private static readonly uint[] _testNestedMessageHasBitsFieldTags = new uint[] { 10 };

+    public static TestNestedMessageHasBits DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestNestedMessageHasBits DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestNestedMessageHasBits ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedMessageHasBits__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestNestedMessageHasBits, TestNestedMessageHasBits.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedMessageHasBits__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class NestedMessage : pb::GeneratedMessage<NestedMessage, NestedMessage.Builder> {

+        private NestedMessage() { }

+        private static readonly NestedMessage defaultInstance = new NestedMessage().MakeReadOnly();

+        private static readonly string[] _nestedMessageFieldNames = new string[] { "nestedmessage_repeated_foreignmessage", "nestedmessage_repeated_int32" };

+        private static readonly uint[] _nestedMessageFieldTags = new uint[] { 18, 8 };

+        public static NestedMessage DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override NestedMessage DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override NestedMessage ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<NestedMessage, NestedMessage.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestNestedMessageHasBits_NestedMessage__FieldAccessorTable; }

+        }

+        

+        public const int NestedmessageRepeatedInt32FieldNumber = 1;

+        private pbc::PopsicleList<int> nestedmessageRepeatedInt32_ = new pbc::PopsicleList<int>();

+        public scg::IList<int> NestedmessageRepeatedInt32List {

+          get { return pbc::Lists.AsReadOnly(nestedmessageRepeatedInt32_); }

+        }

+        public int NestedmessageRepeatedInt32Count {

+          get { return nestedmessageRepeatedInt32_.Count; }

+        }

+        public int GetNestedmessageRepeatedInt32(int index) {

+          return nestedmessageRepeatedInt32_[index];

+        }

+        

+        public const int NestedmessageRepeatedForeignmessageFieldNumber = 2;

+        private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> nestedmessageRepeatedForeignmessage_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>();

+        public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> NestedmessageRepeatedForeignmessageList {

+          get { return nestedmessageRepeatedForeignmessage_; }

+        }

+        public int NestedmessageRepeatedForeignmessageCount {

+          get { return nestedmessageRepeatedForeignmessage_.Count; }

+        }

+        public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetNestedmessageRepeatedForeignmessage(int index) {

+          return nestedmessageRepeatedForeignmessage_[index];

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _nestedMessageFieldNames;

+          if (nestedmessageRepeatedInt32_.Count > 0) {

+            output.WriteInt32Array(1, field_names[1], nestedmessageRepeatedInt32_);

+          }

+          if (nestedmessageRepeatedForeignmessage_.Count > 0) {

+            output.WriteMessageArray(2, field_names[0], nestedmessageRepeatedForeignmessage_);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          {

+            int dataSize = 0;

+            foreach (int element in NestedmessageRepeatedInt32List) {

+              dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+            }

+            size += dataSize;

+            size += 1 * nestedmessageRepeatedInt32_.Count;

+          }

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessage element in NestedmessageRepeatedForeignmessageList) {

+            size += pb::CodedOutputStream.ComputeMessageSize(2, element);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static NestedMessage ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static NestedMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static NestedMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private NestedMessage MakeReadOnly() {

+          nestedmessageRepeatedInt32_.MakeReadOnly();

+          nestedmessageRepeatedForeignmessage_.MakeReadOnly();

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(NestedMessage prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<NestedMessage, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(NestedMessage cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private NestedMessage result;

+          

+          private NestedMessage PrepareBuilder() {

+            if (resultIsReadOnly) {

+              NestedMessage original = result;

+              result = new NestedMessage();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override NestedMessage MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Descriptor; }

+          }

+          

+          public override NestedMessage DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance; }

+          }

+          

+          public override NestedMessage BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is NestedMessage) {

+              return MergeFrom((NestedMessage) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(NestedMessage other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.nestedmessageRepeatedInt32_.Count != 0) {

+              result.nestedmessageRepeatedInt32_.Add(other.nestedmessageRepeatedInt32_);

+            }

+            if (other.nestedmessageRepeatedForeignmessage_.Count != 0) {

+              result.nestedmessageRepeatedForeignmessage_.Add(other.nestedmessageRepeatedForeignmessage_);

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_nestedMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _nestedMessageFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 10:

+                case 8: {

+                  input.ReadInt32Array(tag, field_name, result.nestedmessageRepeatedInt32_);

+                  break;

+                }

+                case 18: {

+                  input.ReadMessageArray(tag, field_name, result.nestedmessageRepeatedForeignmessage_, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance, extensionRegistry);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public pbc::IPopsicleList<int> NestedmessageRepeatedInt32List {

+            get { return PrepareBuilder().nestedmessageRepeatedInt32_; }

+          }

+          public int NestedmessageRepeatedInt32Count {

+            get { return result.NestedmessageRepeatedInt32Count; }

+          }

+          public int GetNestedmessageRepeatedInt32(int index) {

+            return result.GetNestedmessageRepeatedInt32(index);

+          }

+          public Builder SetNestedmessageRepeatedInt32(int index, int value) {

+            PrepareBuilder();

+            result.nestedmessageRepeatedInt32_[index] = value;

+            return this;

+          }

+          public Builder AddNestedmessageRepeatedInt32(int value) {

+            PrepareBuilder();

+            result.nestedmessageRepeatedInt32_.Add(value);

+            return this;

+          }

+          public Builder AddRangeNestedmessageRepeatedInt32(scg::IEnumerable<int> values) {

+            PrepareBuilder();

+            result.nestedmessageRepeatedInt32_.Add(values);

+            return this;

+          }

+          public Builder ClearNestedmessageRepeatedInt32() {

+            PrepareBuilder();

+            result.nestedmessageRepeatedInt32_.Clear();

+            return this;

+          }

+          

+          public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> NestedmessageRepeatedForeignmessageList {

+            get { return PrepareBuilder().nestedmessageRepeatedForeignmessage_; }

+          }

+          public int NestedmessageRepeatedForeignmessageCount {

+            get { return result.NestedmessageRepeatedForeignmessageCount; }

+          }

+          public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetNestedmessageRepeatedForeignmessage(int index) {

+            return result.GetNestedmessageRepeatedForeignmessage(index);

+          }

+          public Builder SetNestedmessageRepeatedForeignmessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_[index] = value;

+            return this;

+          }

+          public Builder SetNestedmessageRepeatedForeignmessage(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_[index] = builderForValue.Build();

+            return this;

+          }

+          public Builder AddNestedmessageRepeatedForeignmessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_.Add(value);

+            return this;

+          }

+          public Builder AddNestedmessageRepeatedForeignmessage(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+            pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_.Add(builderForValue.Build());

+            return this;

+          }

+          public Builder AddRangeNestedmessageRepeatedForeignmessage(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> values) {

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_.Add(values);

+            return this;

+          }

+          public Builder ClearNestedmessageRepeatedForeignmessage() {

+            PrepareBuilder();

+            result.nestedmessageRepeatedForeignmessage_.Clear();

+            return this;

+          }

+        }

+        static NestedMessage() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int OptionalNestedMessageFieldNumber = 1;

+    private bool hasOptionalNestedMessage;

+    private global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage optionalNestedMessage_;

+    public bool HasOptionalNestedMessage {

+      get { return hasOptionalNestedMessage; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage OptionalNestedMessage {

+      get { return optionalNestedMessage_ ?? global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testNestedMessageHasBitsFieldNames;

+      if (hasOptionalNestedMessage) {

+        output.WriteMessage(1, field_names[0], OptionalNestedMessage);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasOptionalNestedMessage) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, OptionalNestedMessage);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestNestedMessageHasBits ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestNestedMessageHasBits ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestNestedMessageHasBits MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestNestedMessageHasBits prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestNestedMessageHasBits, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestNestedMessageHasBits cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestNestedMessageHasBits result;

+      

+      private TestNestedMessageHasBits PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestNestedMessageHasBits original = result;

+          result = new TestNestedMessageHasBits();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestNestedMessageHasBits MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Descriptor; }

+      }

+      

+      public override TestNestedMessageHasBits DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.DefaultInstance; }

+      }

+      

+      public override TestNestedMessageHasBits BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestNestedMessageHasBits) {

+          return MergeFrom((TestNestedMessageHasBits) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestNestedMessageHasBits other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasOptionalNestedMessage) {

+          MergeOptionalNestedMessage(other.OptionalNestedMessage);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testNestedMessageHasBitsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testNestedMessageHasBitsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.CreateBuilder();

+              if (result.hasOptionalNestedMessage) {

+                subBuilder.MergeFrom(OptionalNestedMessage);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              OptionalNestedMessage = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasOptionalNestedMessage {

+       get { return result.hasOptionalNestedMessage; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage OptionalNestedMessage {

+        get { return result.OptionalNestedMessage; }

+        set { SetOptionalNestedMessage(value); }

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = value;

+        return this;

+      }

+      public Builder SetOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = true;

+        result.optionalNestedMessage_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeOptionalNestedMessage(global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasOptionalNestedMessage &&

+            result.optionalNestedMessage_ != global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.DefaultInstance) {

+            result.optionalNestedMessage_ = global::Google.ProtocolBuffers.TestProtos.TestNestedMessageHasBits.Types.NestedMessage.CreateBuilder(result.optionalNestedMessage_).MergeFrom(value).BuildPartial();

+        } else {

+          result.optionalNestedMessage_ = value;

+        }

+        result.hasOptionalNestedMessage = true;

+        return this;

+      }

+      public Builder ClearOptionalNestedMessage() {

+        PrepareBuilder();

+        result.hasOptionalNestedMessage = false;

+        result.optionalNestedMessage_ = null;

+        return this;

+      }

+    }

+    static TestNestedMessageHasBits() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestCamelCaseFieldNames : pb::GeneratedMessage<TestCamelCaseFieldNames, TestCamelCaseFieldNames.Builder> {

+    private TestCamelCaseFieldNames() { }

+    private static readonly TestCamelCaseFieldNames defaultInstance = new TestCamelCaseFieldNames().MakeReadOnly();

+    private static readonly string[] _testCamelCaseFieldNamesFieldNames = new string[] { "CordField", "EnumField", "MessageField", "PrimitiveField", "RepeatedCordField", "RepeatedEnumField", "RepeatedMessageField", "RepeatedPrimitiveField", "RepeatedStringField", "RepeatedStringPieceField", "StringField", "StringPieceField" };

+    private static readonly uint[] _testCamelCaseFieldNamesFieldTags = new uint[] { 50, 24, 34, 8, 98, 72, 82, 56, 66, 90, 18, 42 };

+    public static TestCamelCaseFieldNames DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestCamelCaseFieldNames DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestCamelCaseFieldNames ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestCamelCaseFieldNames__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestCamelCaseFieldNames, TestCamelCaseFieldNames.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestCamelCaseFieldNames__FieldAccessorTable; }

+    }

+    

+    public const int PrimitiveFieldFieldNumber = 1;

+    private bool hasPrimitiveField;

+    private int primitiveField_;

+    public bool HasPrimitiveField {

+      get { return hasPrimitiveField; }

+    }

+    public int PrimitiveField {

+      get { return primitiveField_; }

+    }

+    

+    public const int StringFieldFieldNumber = 2;

+    private bool hasStringField;

+    private string stringField_ = "";

+    public bool HasStringField {

+      get { return hasStringField; }

+    }

+    public string StringField {

+      get { return stringField_; }

+    }

+    

+    public const int EnumFieldFieldNumber = 3;

+    private bool hasEnumField;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum enumField_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+    public bool HasEnumField {

+      get { return hasEnumField; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumField {

+      get { return enumField_; }

+    }

+    

+    public const int MessageFieldFieldNumber = 4;

+    private bool hasMessageField;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage messageField_;

+    public bool HasMessageField {

+      get { return hasMessageField; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageField {

+      get { return messageField_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }

+    }

+    

+    public const int StringPieceFieldFieldNumber = 5;

+    private bool hasStringPieceField;

+    private string stringPieceField_ = "";

+    public bool HasStringPieceField {

+      get { return hasStringPieceField; }

+    }

+    public string StringPieceField {

+      get { return stringPieceField_; }

+    }

+    

+    public const int CordFieldFieldNumber = 6;

+    private bool hasCordField;

+    private string cordField_ = "";

+    public bool HasCordField {

+      get { return hasCordField; }

+    }

+    public string CordField {

+      get { return cordField_; }

+    }

+    

+    public const int RepeatedPrimitiveFieldFieldNumber = 7;

+    private pbc::PopsicleList<int> repeatedPrimitiveField_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedPrimitiveFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedPrimitiveField_); }

+    }

+    public int RepeatedPrimitiveFieldCount {

+      get { return repeatedPrimitiveField_.Count; }

+    }

+    public int GetRepeatedPrimitiveField(int index) {

+      return repeatedPrimitiveField_[index];

+    }

+    

+    public const int RepeatedStringFieldFieldNumber = 8;

+    private pbc::PopsicleList<string> repeatedStringField_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedStringField_); }

+    }

+    public int RepeatedStringFieldCount {

+      get { return repeatedStringField_.Count; }

+    }

+    public string GetRepeatedStringField(int index) {

+      return repeatedStringField_[index];

+    }

+    

+    public const int RepeatedEnumFieldFieldNumber = 9;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> repeatedEnumField_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedEnumFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedEnumField_); }

+    }

+    public int RepeatedEnumFieldCount {

+      get { return repeatedEnumField_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedEnumField(int index) {

+      return repeatedEnumField_[index];

+    }

+    

+    public const int RepeatedMessageFieldFieldNumber = 10;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> repeatedMessageField_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedMessageFieldList {

+      get { return repeatedMessageField_; }

+    }

+    public int RepeatedMessageFieldCount {

+      get { return repeatedMessageField_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedMessageField(int index) {

+      return repeatedMessageField_[index];

+    }

+    

+    public const int RepeatedStringPieceFieldFieldNumber = 11;

+    private pbc::PopsicleList<string> repeatedStringPieceField_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedStringPieceFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedStringPieceField_); }

+    }

+    public int RepeatedStringPieceFieldCount {

+      get { return repeatedStringPieceField_.Count; }

+    }

+    public string GetRepeatedStringPieceField(int index) {

+      return repeatedStringPieceField_[index];

+    }

+    

+    public const int RepeatedCordFieldFieldNumber = 12;

+    private pbc::PopsicleList<string> repeatedCordField_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedCordFieldList {

+      get { return pbc::Lists.AsReadOnly(repeatedCordField_); }

+    }

+    public int RepeatedCordFieldCount {

+      get { return repeatedCordField_.Count; }

+    }

+    public string GetRepeatedCordField(int index) {

+      return repeatedCordField_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testCamelCaseFieldNamesFieldNames;

+      if (hasPrimitiveField) {

+        output.WriteInt32(1, field_names[3], PrimitiveField);

+      }

+      if (hasStringField) {

+        output.WriteString(2, field_names[10], StringField);

+      }

+      if (hasEnumField) {

+        output.WriteEnum(3, field_names[1], (int) EnumField, EnumField);

+      }

+      if (hasMessageField) {

+        output.WriteMessage(4, field_names[2], MessageField);

+      }

+      if (hasStringPieceField) {

+        output.WriteString(5, field_names[11], StringPieceField);

+      }

+      if (hasCordField) {

+        output.WriteString(6, field_names[0], CordField);

+      }

+      if (repeatedPrimitiveField_.Count > 0) {

+        output.WriteInt32Array(7, field_names[7], repeatedPrimitiveField_);

+      }

+      if (repeatedStringField_.Count > 0) {

+        output.WriteStringArray(8, field_names[8], repeatedStringField_);

+      }

+      if (repeatedEnumField_.Count > 0) {

+        output.WriteEnumArray(9, field_names[5], repeatedEnumField_);

+      }

+      if (repeatedMessageField_.Count > 0) {

+        output.WriteMessageArray(10, field_names[6], repeatedMessageField_);

+      }

+      if (repeatedStringPieceField_.Count > 0) {

+        output.WriteStringArray(11, field_names[9], repeatedStringPieceField_);

+      }

+      if (repeatedCordField_.Count > 0) {

+        output.WriteStringArray(12, field_names[4], repeatedCordField_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasPrimitiveField) {

+        size += pb::CodedOutputStream.ComputeInt32Size(1, PrimitiveField);

+      }

+      if (hasStringField) {

+        size += pb::CodedOutputStream.ComputeStringSize(2, StringField);

+      }

+      if (hasEnumField) {

+        size += pb::CodedOutputStream.ComputeEnumSize(3, (int) EnumField);

+      }

+      if (hasMessageField) {

+        size += pb::CodedOutputStream.ComputeMessageSize(4, MessageField);

+      }

+      if (hasStringPieceField) {

+        size += pb::CodedOutputStream.ComputeStringSize(5, StringPieceField);

+      }

+      if (hasCordField) {

+        size += pb::CodedOutputStream.ComputeStringSize(6, CordField);

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedPrimitiveFieldList) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedPrimitiveField_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringFieldList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedStringField_.Count;

+      }

+      {

+        int dataSize = 0;

+        if (repeatedEnumField_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in repeatedEnumField_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 1 * repeatedEnumField_.Count;

+        }

+      }

+      foreach (global::Google.ProtocolBuffers.TestProtos.ForeignMessage element in RepeatedMessageFieldList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(10, element);

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedStringPieceFieldList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedStringPieceField_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedCordFieldList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedCordField_.Count;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestCamelCaseFieldNames ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestCamelCaseFieldNames ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestCamelCaseFieldNames MakeReadOnly() {

+      repeatedPrimitiveField_.MakeReadOnly();

+      repeatedStringField_.MakeReadOnly();

+      repeatedEnumField_.MakeReadOnly();

+      repeatedMessageField_.MakeReadOnly();

+      repeatedStringPieceField_.MakeReadOnly();

+      repeatedCordField_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestCamelCaseFieldNames prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestCamelCaseFieldNames, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestCamelCaseFieldNames cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestCamelCaseFieldNames result;

+      

+      private TestCamelCaseFieldNames PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestCamelCaseFieldNames original = result;

+          result = new TestCamelCaseFieldNames();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestCamelCaseFieldNames MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.Descriptor; }

+      }

+      

+      public override TestCamelCaseFieldNames DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.DefaultInstance; }

+      }

+      

+      public override TestCamelCaseFieldNames BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestCamelCaseFieldNames) {

+          return MergeFrom((TestCamelCaseFieldNames) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestCamelCaseFieldNames other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestCamelCaseFieldNames.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasPrimitiveField) {

+          PrimitiveField = other.PrimitiveField;

+        }

+        if (other.HasStringField) {

+          StringField = other.StringField;

+        }

+        if (other.HasEnumField) {

+          EnumField = other.EnumField;

+        }

+        if (other.HasMessageField) {

+          MergeMessageField(other.MessageField);

+        }

+        if (other.HasStringPieceField) {

+          StringPieceField = other.StringPieceField;

+        }

+        if (other.HasCordField) {

+          CordField = other.CordField;

+        }

+        if (other.repeatedPrimitiveField_.Count != 0) {

+          result.repeatedPrimitiveField_.Add(other.repeatedPrimitiveField_);

+        }

+        if (other.repeatedStringField_.Count != 0) {

+          result.repeatedStringField_.Add(other.repeatedStringField_);

+        }

+        if (other.repeatedEnumField_.Count != 0) {

+          result.repeatedEnumField_.Add(other.repeatedEnumField_);

+        }

+        if (other.repeatedMessageField_.Count != 0) {

+          result.repeatedMessageField_.Add(other.repeatedMessageField_);

+        }

+        if (other.repeatedStringPieceField_.Count != 0) {

+          result.repeatedStringPieceField_.Add(other.repeatedStringPieceField_);

+        }

+        if (other.repeatedCordField_.Count != 0) {

+          result.repeatedCordField_.Add(other.repeatedCordField_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testCamelCaseFieldNamesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testCamelCaseFieldNamesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasPrimitiveField = input.ReadInt32(ref result.primitiveField_);

+              break;

+            }

+            case 18: {

+              result.hasStringField = input.ReadString(ref result.stringField_);

+              break;

+            }

+            case 24: {

+              object unknown;

+              if(input.ReadEnum(ref result.enumField_, out unknown)) {

+                result.hasEnumField = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(3, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 34: {

+              global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder();

+              if (result.hasMessageField) {

+                subBuilder.MergeFrom(MessageField);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              MessageField = subBuilder.BuildPartial();

+              break;

+            }

+            case 42: {

+              result.hasStringPieceField = input.ReadString(ref result.stringPieceField_);

+              break;

+            }

+            case 50: {

+              result.hasCordField = input.ReadString(ref result.cordField_);

+              break;

+            }

+            case 58:

+            case 56: {

+              input.ReadInt32Array(tag, field_name, result.repeatedPrimitiveField_);

+              break;

+            }

+            case 66: {

+              input.ReadStringArray(tag, field_name, result.repeatedStringField_);

+              break;

+            }

+            case 74:

+            case 72: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.repeatedEnumField_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(9, (ulong)(int)rawValue);

+              }

+              break;

+            }

+            case 82: {

+              input.ReadMessageArray(tag, field_name, result.repeatedMessageField_, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance, extensionRegistry);

+              break;

+            }

+            case 90: {

+              input.ReadStringArray(tag, field_name, result.repeatedStringPieceField_);

+              break;

+            }

+            case 98: {

+              input.ReadStringArray(tag, field_name, result.repeatedCordField_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasPrimitiveField {

+        get { return result.hasPrimitiveField; }

+      }

+      public int PrimitiveField {

+        get { return result.PrimitiveField; }

+        set { SetPrimitiveField(value); }

+      }

+      public Builder SetPrimitiveField(int value) {

+        PrepareBuilder();

+        result.hasPrimitiveField = true;

+        result.primitiveField_ = value;

+        return this;

+      }

+      public Builder ClearPrimitiveField() {

+        PrepareBuilder();

+        result.hasPrimitiveField = false;

+        result.primitiveField_ = 0;

+        return this;

+      }

+      

+      public bool HasStringField {

+        get { return result.hasStringField; }

+      }

+      public string StringField {

+        get { return result.StringField; }

+        set { SetStringField(value); }

+      }

+      public Builder SetStringField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasStringField = true;

+        result.stringField_ = value;

+        return this;

+      }

+      public Builder ClearStringField() {

+        PrepareBuilder();

+        result.hasStringField = false;

+        result.stringField_ = "";

+        return this;

+      }

+      

+      public bool HasEnumField {

+       get { return result.hasEnumField; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumField {

+        get { return result.EnumField; }

+        set { SetEnumField(value); }

+      }

+      public Builder SetEnumField(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.hasEnumField = true;

+        result.enumField_ = value;

+        return this;

+      }

+      public Builder ClearEnumField() {

+        PrepareBuilder();

+        result.hasEnumField = false;

+        result.enumField_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+        return this;

+      }

+      

+      public bool HasMessageField {

+       get { return result.hasMessageField; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageField {

+        get { return result.MessageField; }

+        set { SetMessageField(value); }

+      }

+      public Builder SetMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMessageField = true;

+        result.messageField_ = value;

+        return this;

+      }

+      public Builder SetMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasMessageField = true;

+        result.messageField_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasMessageField &&

+            result.messageField_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {

+            result.messageField_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.messageField_).MergeFrom(value).BuildPartial();

+        } else {

+          result.messageField_ = value;

+        }

+        result.hasMessageField = true;

+        return this;

+      }

+      public Builder ClearMessageField() {

+        PrepareBuilder();

+        result.hasMessageField = false;

+        result.messageField_ = null;

+        return this;

+      }

+      

+      public bool HasStringPieceField {

+        get { return result.hasStringPieceField; }

+      }

+      public string StringPieceField {

+        get { return result.StringPieceField; }

+        set { SetStringPieceField(value); }

+      }

+      public Builder SetStringPieceField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasStringPieceField = true;

+        result.stringPieceField_ = value;

+        return this;

+      }

+      public Builder ClearStringPieceField() {

+        PrepareBuilder();

+        result.hasStringPieceField = false;

+        result.stringPieceField_ = "";

+        return this;

+      }

+      

+      public bool HasCordField {

+        get { return result.hasCordField; }

+      }

+      public string CordField {

+        get { return result.CordField; }

+        set { SetCordField(value); }

+      }

+      public Builder SetCordField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasCordField = true;

+        result.cordField_ = value;

+        return this;

+      }

+      public Builder ClearCordField() {

+        PrepareBuilder();

+        result.hasCordField = false;

+        result.cordField_ = "";

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedPrimitiveFieldList {

+        get { return PrepareBuilder().repeatedPrimitiveField_; }

+      }

+      public int RepeatedPrimitiveFieldCount {

+        get { return result.RepeatedPrimitiveFieldCount; }

+      }

+      public int GetRepeatedPrimitiveField(int index) {

+        return result.GetRepeatedPrimitiveField(index);

+      }

+      public Builder SetRepeatedPrimitiveField(int index, int value) {

+        PrepareBuilder();

+        result.repeatedPrimitiveField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedPrimitiveField(int value) {

+        PrepareBuilder();

+        result.repeatedPrimitiveField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedPrimitiveField(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedPrimitiveField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedPrimitiveField() {

+        PrepareBuilder();

+        result.repeatedPrimitiveField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringFieldList {

+        get { return PrepareBuilder().repeatedStringField_; }

+      }

+      public int RepeatedStringFieldCount {

+        get { return result.RepeatedStringFieldCount; }

+      }

+      public string GetRepeatedStringField(int index) {

+        return result.GetRepeatedStringField(index);

+      }

+      public Builder SetRepeatedStringField(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedStringField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedStringField(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedStringField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedStringField() {

+        PrepareBuilder();

+        result.repeatedStringField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> RepeatedEnumFieldList {

+        get { return PrepareBuilder().repeatedEnumField_; }

+      }

+      public int RepeatedEnumFieldCount {

+        get { return result.RepeatedEnumFieldCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetRepeatedEnumField(int index) {

+        return result.GetRepeatedEnumField(index);

+      }

+      public Builder SetRepeatedEnumField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.repeatedEnumField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedEnumField(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.repeatedEnumField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedEnumField(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {

+        PrepareBuilder();

+        result.repeatedEnumField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedEnumField() {

+        PrepareBuilder();

+        result.repeatedEnumField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> RepeatedMessageFieldList {

+        get { return PrepareBuilder().repeatedMessageField_; }

+      }

+      public int RepeatedMessageFieldCount {

+        get { return result.RepeatedMessageFieldCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage GetRepeatedMessageField(int index) {

+        return result.GetRepeatedMessageField(index);

+      }

+      public Builder SetRepeatedMessageField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessageField_[index] = value;

+        return this;

+      }

+      public Builder SetRepeatedMessageField(int index, global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessageField_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddRepeatedMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedMessageField_.Add(value);

+        return this;

+      }

+      public Builder AddRepeatedMessageField(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.repeatedMessageField_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeRepeatedMessageField(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignMessage> values) {

+        PrepareBuilder();

+        result.repeatedMessageField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedMessageField() {

+        PrepareBuilder();

+        result.repeatedMessageField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedStringPieceFieldList {

+        get { return PrepareBuilder().repeatedStringPieceField_; }

+      }

+      public int RepeatedStringPieceFieldCount {

+        get { return result.RepeatedStringPieceFieldCount; }

+      }

+      public string GetRepeatedStringPieceField(int index) {

+        return result.GetRepeatedStringPieceField(index);

+      }

+      public Builder SetRepeatedStringPieceField(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPieceField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedStringPieceField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedStringPieceField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedStringPieceField(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedStringPieceField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedStringPieceField() {

+        PrepareBuilder();

+        result.repeatedStringPieceField_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedCordFieldList {

+        get { return PrepareBuilder().repeatedCordField_; }

+      }

+      public int RepeatedCordFieldCount {

+        get { return result.RepeatedCordFieldCount; }

+      }

+      public string GetRepeatedCordField(int index) {

+        return result.GetRepeatedCordField(index);

+      }

+      public Builder SetRepeatedCordField(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCordField_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedCordField(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedCordField_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedCordField(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedCordField_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedCordField() {

+        PrepareBuilder();

+        result.repeatedCordField_.Clear();

+        return this;

+      }

+    }

+    static TestCamelCaseFieldNames() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestFieldOrderings : pb::ExtendableMessage<TestFieldOrderings, TestFieldOrderings.Builder> {

+    private TestFieldOrderings() { }

+    private static readonly TestFieldOrderings defaultInstance = new TestFieldOrderings().MakeReadOnly();

+    private static readonly string[] _testFieldOrderingsFieldNames = new string[] { "my_float", "my_int", "my_string" };

+    private static readonly uint[] _testFieldOrderingsFieldTags = new uint[] { 813, 8, 90 };

+    public static TestFieldOrderings DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestFieldOrderings DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestFieldOrderings ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestFieldOrderings__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestFieldOrderings, TestFieldOrderings.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestFieldOrderings__FieldAccessorTable; }

+    }

+    

+    public const int MyStringFieldNumber = 11;

+    private bool hasMyString;

+    private string myString_ = "";

+    public bool HasMyString {

+      get { return hasMyString; }

+    }

+    public string MyString {

+      get { return myString_; }

+    }

+    

+    public const int MyIntFieldNumber = 1;

+    private bool hasMyInt;

+    private long myInt_;

+    public bool HasMyInt {

+      get { return hasMyInt; }

+    }

+    public long MyInt {

+      get { return myInt_; }

+    }

+    

+    public const int MyFloatFieldNumber = 101;

+    private bool hasMyFloat;

+    private float myFloat_;

+    public bool HasMyFloat {

+      get { return hasMyFloat; }

+    }

+    public float MyFloat {

+      get { return myFloat_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testFieldOrderingsFieldNames;

+      pb::ExtendableMessage<TestFieldOrderings, TestFieldOrderings.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      if (hasMyInt) {

+        output.WriteInt64(1, field_names[1], MyInt);

+      }

+      extensionWriter.WriteUntil(11, output);

+      if (hasMyString) {

+        output.WriteString(11, field_names[2], MyString);

+      }

+      extensionWriter.WriteUntil(101, output);

+      if (hasMyFloat) {

+        output.WriteFloat(101, field_names[0], MyFloat);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasMyString) {

+        size += pb::CodedOutputStream.ComputeStringSize(11, MyString);

+      }

+      if (hasMyInt) {

+        size += pb::CodedOutputStream.ComputeInt64Size(1, MyInt);

+      }

+      if (hasMyFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(101, MyFloat);

+      }

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestFieldOrderings ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestFieldOrderings ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestFieldOrderings ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestFieldOrderings MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestFieldOrderings prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestFieldOrderings, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestFieldOrderings cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestFieldOrderings result;

+      

+      private TestFieldOrderings PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestFieldOrderings original = result;

+          result = new TestFieldOrderings();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestFieldOrderings MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.Descriptor; }

+      }

+      

+      public override TestFieldOrderings DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.DefaultInstance; }

+      }

+      

+      public override TestFieldOrderings BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestFieldOrderings) {

+          return MergeFrom((TestFieldOrderings) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestFieldOrderings other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestFieldOrderings.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasMyString) {

+          MyString = other.MyString;

+        }

+        if (other.HasMyInt) {

+          MyInt = other.MyInt;

+        }

+        if (other.HasMyFloat) {

+          MyFloat = other.MyFloat;

+        }

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testFieldOrderingsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testFieldOrderingsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              result.hasMyInt = input.ReadInt64(ref result.myInt_);

+              break;

+            }

+            case 90: {

+              result.hasMyString = input.ReadString(ref result.myString_);

+              break;

+            }

+            case 813: {

+              result.hasMyFloat = input.ReadFloat(ref result.myFloat_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasMyString {

+        get { return result.hasMyString; }

+      }

+      public string MyString {

+        get { return result.MyString; }

+        set { SetMyString(value); }

+      }

+      public Builder SetMyString(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMyString = true;

+        result.myString_ = value;

+        return this;

+      }

+      public Builder ClearMyString() {

+        PrepareBuilder();

+        result.hasMyString = false;

+        result.myString_ = "";

+        return this;

+      }

+      

+      public bool HasMyInt {

+        get { return result.hasMyInt; }

+      }

+      public long MyInt {

+        get { return result.MyInt; }

+        set { SetMyInt(value); }

+      }

+      public Builder SetMyInt(long value) {

+        PrepareBuilder();

+        result.hasMyInt = true;

+        result.myInt_ = value;

+        return this;

+      }

+      public Builder ClearMyInt() {

+        PrepareBuilder();

+        result.hasMyInt = false;

+        result.myInt_ = 0L;

+        return this;

+      }

+      

+      public bool HasMyFloat {

+        get { return result.hasMyFloat; }

+      }

+      public float MyFloat {

+        get { return result.MyFloat; }

+        set { SetMyFloat(value); }

+      }

+      public Builder SetMyFloat(float value) {

+        PrepareBuilder();

+        result.hasMyFloat = true;

+        result.myFloat_ = value;

+        return this;

+      }

+      public Builder ClearMyFloat() {

+        PrepareBuilder();

+        result.hasMyFloat = false;

+        result.myFloat_ = 0F;

+        return this;

+      }

+    }

+    static TestFieldOrderings() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestExtremeDefaultValues : pb::GeneratedMessage<TestExtremeDefaultValues, TestExtremeDefaultValues.Builder> {

+    private TestExtremeDefaultValues() { }

+    private static readonly TestExtremeDefaultValues defaultInstance = new TestExtremeDefaultValues().MakeReadOnly();

+    private static readonly string[] _testExtremeDefaultValuesFieldNames = new string[] { "cpp_trigraph", "escaped_bytes", "inf_double", "inf_float", "large_float", "large_uint32", "large_uint64", "nan_double", "nan_float", "neg_inf_double", "neg_inf_float", "negative_float", "negative_one_float", "one_float", "small_float", "small_int32", "small_int64", "small_negative_float", "utf8_string", "zero_float" };

+    private static readonly uint[] _testExtremeDefaultValuesFieldTags = new uint[] { 162, 10, 113, 141, 101, 16, 24, 129, 157, 121, 149, 93, 85, 69, 77, 32, 40, 109, 50, 61 };

+    public static TestExtremeDefaultValues DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestExtremeDefaultValues DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestExtremeDefaultValues ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestExtremeDefaultValues__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestExtremeDefaultValues, TestExtremeDefaultValues.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestExtremeDefaultValues__FieldAccessorTable; }

+    }

+    

+    public const int EscapedBytesFieldNumber = 1;

+    private bool hasEscapedBytes;

+    private pb::ByteString escapedBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[0].DefaultValue;

+    public bool HasEscapedBytes {

+      get { return hasEscapedBytes; }

+    }

+    public pb::ByteString EscapedBytes {

+      get { return escapedBytes_; }

+    }

+    

+    public const int LargeUint32FieldNumber = 2;

+    private bool hasLargeUint32;

+    private uint largeUint32_ = 4294967295;

+    public bool HasLargeUint32 {

+      get { return hasLargeUint32; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint LargeUint32 {

+      get { return largeUint32_; }

+    }

+    

+    public const int LargeUint64FieldNumber = 3;

+    private bool hasLargeUint64;

+    private ulong largeUint64_ = 18446744073709551615UL;

+    public bool HasLargeUint64 {

+      get { return hasLargeUint64; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong LargeUint64 {

+      get { return largeUint64_; }

+    }

+    

+    public const int SmallInt32FieldNumber = 4;

+    private bool hasSmallInt32;

+    private int smallInt32_ = -2147483647;

+    public bool HasSmallInt32 {

+      get { return hasSmallInt32; }

+    }

+    public int SmallInt32 {

+      get { return smallInt32_; }

+    }

+    

+    public const int SmallInt64FieldNumber = 5;

+    private bool hasSmallInt64;

+    private long smallInt64_ = -9223372036854775807L;

+    public bool HasSmallInt64 {

+      get { return hasSmallInt64; }

+    }

+    public long SmallInt64 {

+      get { return smallInt64_; }

+    }

+    

+    public const int Utf8StringFieldNumber = 6;

+    private bool hasUtf8String;

+    private string utf8String_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[5].DefaultValue;

+    public bool HasUtf8String {

+      get { return hasUtf8String; }

+    }

+    public string Utf8String {

+      get { return utf8String_; }

+    }

+    

+    public const int ZeroFloatFieldNumber = 7;

+    private bool hasZeroFloat;

+    private float zeroFloat_;

+    public bool HasZeroFloat {

+      get { return hasZeroFloat; }

+    }

+    public float ZeroFloat {

+      get { return zeroFloat_; }

+    }

+    

+    public const int OneFloatFieldNumber = 8;

+    private bool hasOneFloat;

+    private float oneFloat_ = 1F;

+    public bool HasOneFloat {

+      get { return hasOneFloat; }

+    }

+    public float OneFloat {

+      get { return oneFloat_; }

+    }

+    

+    public const int SmallFloatFieldNumber = 9;

+    private bool hasSmallFloat;

+    private float smallFloat_ = 1.5F;

+    public bool HasSmallFloat {

+      get { return hasSmallFloat; }

+    }

+    public float SmallFloat {

+      get { return smallFloat_; }

+    }

+    

+    public const int NegativeOneFloatFieldNumber = 10;

+    private bool hasNegativeOneFloat;

+    private float negativeOneFloat_ = -1F;

+    public bool HasNegativeOneFloat {

+      get { return hasNegativeOneFloat; }

+    }

+    public float NegativeOneFloat {

+      get { return negativeOneFloat_; }

+    }

+    

+    public const int NegativeFloatFieldNumber = 11;

+    private bool hasNegativeFloat;

+    private float negativeFloat_ = -1.5F;

+    public bool HasNegativeFloat {

+      get { return hasNegativeFloat; }

+    }

+    public float NegativeFloat {

+      get { return negativeFloat_; }

+    }

+    

+    public const int LargeFloatFieldNumber = 12;

+    private bool hasLargeFloat;

+    private float largeFloat_ = 2E+08F;

+    public bool HasLargeFloat {

+      get { return hasLargeFloat; }

+    }

+    public float LargeFloat {

+      get { return largeFloat_; }

+    }

+    

+    public const int SmallNegativeFloatFieldNumber = 13;

+    private bool hasSmallNegativeFloat;

+    private float smallNegativeFloat_ = -8E-28F;

+    public bool HasSmallNegativeFloat {

+      get { return hasSmallNegativeFloat; }

+    }

+    public float SmallNegativeFloat {

+      get { return smallNegativeFloat_; }

+    }

+    

+    public const int InfDoubleFieldNumber = 14;

+    private bool hasInfDouble;

+    private double infDouble_ = double.PositiveInfinity;

+    public bool HasInfDouble {

+      get { return hasInfDouble; }

+    }

+    public double InfDouble {

+      get { return infDouble_; }

+    }

+    

+    public const int NegInfDoubleFieldNumber = 15;

+    private bool hasNegInfDouble;

+    private double negInfDouble_ = double.NegativeInfinity;

+    public bool HasNegInfDouble {

+      get { return hasNegInfDouble; }

+    }

+    public double NegInfDouble {

+      get { return negInfDouble_; }

+    }

+    

+    public const int NanDoubleFieldNumber = 16;

+    private bool hasNanDouble;

+    private double nanDouble_ = double.NaN;

+    public bool HasNanDouble {

+      get { return hasNanDouble; }

+    }

+    public double NanDouble {

+      get { return nanDouble_; }

+    }

+    

+    public const int InfFloatFieldNumber = 17;

+    private bool hasInfFloat;

+    private float infFloat_ = float.PositiveInfinity;

+    public bool HasInfFloat {

+      get { return hasInfFloat; }

+    }

+    public float InfFloat {

+      get { return infFloat_; }

+    }

+    

+    public const int NegInfFloatFieldNumber = 18;

+    private bool hasNegInfFloat;

+    private float negInfFloat_ = float.NegativeInfinity;

+    public bool HasNegInfFloat {

+      get { return hasNegInfFloat; }

+    }

+    public float NegInfFloat {

+      get { return negInfFloat_; }

+    }

+    

+    public const int NanFloatFieldNumber = 19;

+    private bool hasNanFloat;

+    private float nanFloat_ = float.NaN;

+    public bool HasNanFloat {

+      get { return hasNanFloat; }

+    }

+    public float NanFloat {

+      get { return nanFloat_; }

+    }

+    

+    public const int CppTrigraphFieldNumber = 20;

+    private bool hasCppTrigraph;

+    private string cppTrigraph_ = "? ? ?? ?? ??? ??/ ??-";

+    public bool HasCppTrigraph {

+      get { return hasCppTrigraph; }

+    }

+    public string CppTrigraph {

+      get { return cppTrigraph_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testExtremeDefaultValuesFieldNames;

+      if (hasEscapedBytes) {

+        output.WriteBytes(1, field_names[1], EscapedBytes);

+      }

+      if (hasLargeUint32) {

+        output.WriteUInt32(2, field_names[5], LargeUint32);

+      }

+      if (hasLargeUint64) {

+        output.WriteUInt64(3, field_names[6], LargeUint64);

+      }

+      if (hasSmallInt32) {

+        output.WriteInt32(4, field_names[15], SmallInt32);

+      }

+      if (hasSmallInt64) {

+        output.WriteInt64(5, field_names[16], SmallInt64);

+      }

+      if (hasUtf8String) {

+        output.WriteString(6, field_names[18], Utf8String);

+      }

+      if (hasZeroFloat) {

+        output.WriteFloat(7, field_names[19], ZeroFloat);

+      }

+      if (hasOneFloat) {

+        output.WriteFloat(8, field_names[13], OneFloat);

+      }

+      if (hasSmallFloat) {

+        output.WriteFloat(9, field_names[14], SmallFloat);

+      }

+      if (hasNegativeOneFloat) {

+        output.WriteFloat(10, field_names[12], NegativeOneFloat);

+      }

+      if (hasNegativeFloat) {

+        output.WriteFloat(11, field_names[11], NegativeFloat);

+      }

+      if (hasLargeFloat) {

+        output.WriteFloat(12, field_names[4], LargeFloat);

+      }

+      if (hasSmallNegativeFloat) {

+        output.WriteFloat(13, field_names[17], SmallNegativeFloat);

+      }

+      if (hasInfDouble) {

+        output.WriteDouble(14, field_names[2], InfDouble);

+      }

+      if (hasNegInfDouble) {

+        output.WriteDouble(15, field_names[9], NegInfDouble);

+      }

+      if (hasNanDouble) {

+        output.WriteDouble(16, field_names[7], NanDouble);

+      }

+      if (hasInfFloat) {

+        output.WriteFloat(17, field_names[3], InfFloat);

+      }

+      if (hasNegInfFloat) {

+        output.WriteFloat(18, field_names[10], NegInfFloat);

+      }

+      if (hasNanFloat) {

+        output.WriteFloat(19, field_names[8], NanFloat);

+      }

+      if (hasCppTrigraph) {

+        output.WriteString(20, field_names[0], CppTrigraph);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasEscapedBytes) {

+        size += pb::CodedOutputStream.ComputeBytesSize(1, EscapedBytes);

+      }

+      if (hasLargeUint32) {

+        size += pb::CodedOutputStream.ComputeUInt32Size(2, LargeUint32);

+      }

+      if (hasLargeUint64) {

+        size += pb::CodedOutputStream.ComputeUInt64Size(3, LargeUint64);

+      }

+      if (hasSmallInt32) {

+        size += pb::CodedOutputStream.ComputeInt32Size(4, SmallInt32);

+      }

+      if (hasSmallInt64) {

+        size += pb::CodedOutputStream.ComputeInt64Size(5, SmallInt64);

+      }

+      if (hasUtf8String) {

+        size += pb::CodedOutputStream.ComputeStringSize(6, Utf8String);

+      }

+      if (hasZeroFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(7, ZeroFloat);

+      }

+      if (hasOneFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(8, OneFloat);

+      }

+      if (hasSmallFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(9, SmallFloat);

+      }

+      if (hasNegativeOneFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(10, NegativeOneFloat);

+      }

+      if (hasNegativeFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(11, NegativeFloat);

+      }

+      if (hasLargeFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(12, LargeFloat);

+      }

+      if (hasSmallNegativeFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(13, SmallNegativeFloat);

+      }

+      if (hasInfDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(14, InfDouble);

+      }

+      if (hasNegInfDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(15, NegInfDouble);

+      }

+      if (hasNanDouble) {

+        size += pb::CodedOutputStream.ComputeDoubleSize(16, NanDouble);

+      }

+      if (hasInfFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(17, InfFloat);

+      }

+      if (hasNegInfFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(18, NegInfFloat);

+      }

+      if (hasNanFloat) {

+        size += pb::CodedOutputStream.ComputeFloatSize(19, NanFloat);

+      }

+      if (hasCppTrigraph) {

+        size += pb::CodedOutputStream.ComputeStringSize(20, CppTrigraph);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestExtremeDefaultValues ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestExtremeDefaultValues ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestExtremeDefaultValues MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestExtremeDefaultValues prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestExtremeDefaultValues, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestExtremeDefaultValues cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestExtremeDefaultValues result;

+      

+      private TestExtremeDefaultValues PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestExtremeDefaultValues original = result;

+          result = new TestExtremeDefaultValues();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestExtremeDefaultValues MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor; }

+      }

+      

+      public override TestExtremeDefaultValues DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.DefaultInstance; }

+      }

+      

+      public override TestExtremeDefaultValues BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestExtremeDefaultValues) {

+          return MergeFrom((TestExtremeDefaultValues) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestExtremeDefaultValues other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasEscapedBytes) {

+          EscapedBytes = other.EscapedBytes;

+        }

+        if (other.HasLargeUint32) {

+          LargeUint32 = other.LargeUint32;

+        }

+        if (other.HasLargeUint64) {

+          LargeUint64 = other.LargeUint64;

+        }

+        if (other.HasSmallInt32) {

+          SmallInt32 = other.SmallInt32;

+        }

+        if (other.HasSmallInt64) {

+          SmallInt64 = other.SmallInt64;

+        }

+        if (other.HasUtf8String) {

+          Utf8String = other.Utf8String;

+        }

+        if (other.HasZeroFloat) {

+          ZeroFloat = other.ZeroFloat;

+        }

+        if (other.HasOneFloat) {

+          OneFloat = other.OneFloat;

+        }

+        if (other.HasSmallFloat) {

+          SmallFloat = other.SmallFloat;

+        }

+        if (other.HasNegativeOneFloat) {

+          NegativeOneFloat = other.NegativeOneFloat;

+        }

+        if (other.HasNegativeFloat) {

+          NegativeFloat = other.NegativeFloat;

+        }

+        if (other.HasLargeFloat) {

+          LargeFloat = other.LargeFloat;

+        }

+        if (other.HasSmallNegativeFloat) {

+          SmallNegativeFloat = other.SmallNegativeFloat;

+        }

+        if (other.HasInfDouble) {

+          InfDouble = other.InfDouble;

+        }

+        if (other.HasNegInfDouble) {

+          NegInfDouble = other.NegInfDouble;

+        }

+        if (other.HasNanDouble) {

+          NanDouble = other.NanDouble;

+        }

+        if (other.HasInfFloat) {

+          InfFloat = other.InfFloat;

+        }

+        if (other.HasNegInfFloat) {

+          NegInfFloat = other.NegInfFloat;

+        }

+        if (other.HasNanFloat) {

+          NanFloat = other.NanFloat;

+        }

+        if (other.HasCppTrigraph) {

+          CppTrigraph = other.CppTrigraph;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testExtremeDefaultValuesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testExtremeDefaultValuesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasEscapedBytes = input.ReadBytes(ref result.escapedBytes_);

+              break;

+            }

+            case 16: {

+              result.hasLargeUint32 = input.ReadUInt32(ref result.largeUint32_);

+              break;

+            }

+            case 24: {

+              result.hasLargeUint64 = input.ReadUInt64(ref result.largeUint64_);

+              break;

+            }

+            case 32: {

+              result.hasSmallInt32 = input.ReadInt32(ref result.smallInt32_);

+              break;

+            }

+            case 40: {

+              result.hasSmallInt64 = input.ReadInt64(ref result.smallInt64_);

+              break;

+            }

+            case 50: {

+              result.hasUtf8String = input.ReadString(ref result.utf8String_);

+              break;

+            }

+            case 61: {

+              result.hasZeroFloat = input.ReadFloat(ref result.zeroFloat_);

+              break;

+            }

+            case 69: {

+              result.hasOneFloat = input.ReadFloat(ref result.oneFloat_);

+              break;

+            }

+            case 77: {

+              result.hasSmallFloat = input.ReadFloat(ref result.smallFloat_);

+              break;

+            }

+            case 85: {

+              result.hasNegativeOneFloat = input.ReadFloat(ref result.negativeOneFloat_);

+              break;

+            }

+            case 93: {

+              result.hasNegativeFloat = input.ReadFloat(ref result.negativeFloat_);

+              break;

+            }

+            case 101: {

+              result.hasLargeFloat = input.ReadFloat(ref result.largeFloat_);

+              break;

+            }

+            case 109: {

+              result.hasSmallNegativeFloat = input.ReadFloat(ref result.smallNegativeFloat_);

+              break;

+            }

+            case 113: {

+              result.hasInfDouble = input.ReadDouble(ref result.infDouble_);

+              break;

+            }

+            case 121: {

+              result.hasNegInfDouble = input.ReadDouble(ref result.negInfDouble_);

+              break;

+            }

+            case 129: {

+              result.hasNanDouble = input.ReadDouble(ref result.nanDouble_);

+              break;

+            }

+            case 141: {

+              result.hasInfFloat = input.ReadFloat(ref result.infFloat_);

+              break;

+            }

+            case 149: {

+              result.hasNegInfFloat = input.ReadFloat(ref result.negInfFloat_);

+              break;

+            }

+            case 157: {

+              result.hasNanFloat = input.ReadFloat(ref result.nanFloat_);

+              break;

+            }

+            case 162: {

+              result.hasCppTrigraph = input.ReadString(ref result.cppTrigraph_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasEscapedBytes {

+        get { return result.hasEscapedBytes; }

+      }

+      public pb::ByteString EscapedBytes {

+        get { return result.EscapedBytes; }

+        set { SetEscapedBytes(value); }

+      }

+      public Builder SetEscapedBytes(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasEscapedBytes = true;

+        result.escapedBytes_ = value;

+        return this;

+      }

+      public Builder ClearEscapedBytes() {

+        PrepareBuilder();

+        result.hasEscapedBytes = false;

+        result.escapedBytes_ = (pb::ByteString) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[0].DefaultValue;

+        return this;

+      }

+      

+      public bool HasLargeUint32 {

+        get { return result.hasLargeUint32; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint LargeUint32 {

+        get { return result.LargeUint32; }

+        set { SetLargeUint32(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetLargeUint32(uint value) {

+        PrepareBuilder();

+        result.hasLargeUint32 = true;

+        result.largeUint32_ = value;

+        return this;

+      }

+      public Builder ClearLargeUint32() {

+        PrepareBuilder();

+        result.hasLargeUint32 = false;

+        result.largeUint32_ = 4294967295;

+        return this;

+      }

+      

+      public bool HasLargeUint64 {

+        get { return result.hasLargeUint64; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong LargeUint64 {

+        get { return result.LargeUint64; }

+        set { SetLargeUint64(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetLargeUint64(ulong value) {

+        PrepareBuilder();

+        result.hasLargeUint64 = true;

+        result.largeUint64_ = value;

+        return this;

+      }

+      public Builder ClearLargeUint64() {

+        PrepareBuilder();

+        result.hasLargeUint64 = false;

+        result.largeUint64_ = 18446744073709551615UL;

+        return this;

+      }

+      

+      public bool HasSmallInt32 {

+        get { return result.hasSmallInt32; }

+      }

+      public int SmallInt32 {

+        get { return result.SmallInt32; }

+        set { SetSmallInt32(value); }

+      }

+      public Builder SetSmallInt32(int value) {

+        PrepareBuilder();

+        result.hasSmallInt32 = true;

+        result.smallInt32_ = value;

+        return this;

+      }

+      public Builder ClearSmallInt32() {

+        PrepareBuilder();

+        result.hasSmallInt32 = false;

+        result.smallInt32_ = -2147483647;

+        return this;

+      }

+      

+      public bool HasSmallInt64 {

+        get { return result.hasSmallInt64; }

+      }

+      public long SmallInt64 {

+        get { return result.SmallInt64; }

+        set { SetSmallInt64(value); }

+      }

+      public Builder SetSmallInt64(long value) {

+        PrepareBuilder();

+        result.hasSmallInt64 = true;

+        result.smallInt64_ = value;

+        return this;

+      }

+      public Builder ClearSmallInt64() {

+        PrepareBuilder();

+        result.hasSmallInt64 = false;

+        result.smallInt64_ = -9223372036854775807L;

+        return this;

+      }

+      

+      public bool HasUtf8String {

+        get { return result.hasUtf8String; }

+      }

+      public string Utf8String {

+        get { return result.Utf8String; }

+        set { SetUtf8String(value); }

+      }

+      public Builder SetUtf8String(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasUtf8String = true;

+        result.utf8String_ = value;

+        return this;

+      }

+      public Builder ClearUtf8String() {

+        PrepareBuilder();

+        result.hasUtf8String = false;

+        result.utf8String_ = (string) global::Google.ProtocolBuffers.TestProtos.TestExtremeDefaultValues.Descriptor.Fields[5].DefaultValue;

+        return this;

+      }

+      

+      public bool HasZeroFloat {

+        get { return result.hasZeroFloat; }

+      }

+      public float ZeroFloat {

+        get { return result.ZeroFloat; }

+        set { SetZeroFloat(value); }

+      }

+      public Builder SetZeroFloat(float value) {

+        PrepareBuilder();

+        result.hasZeroFloat = true;

+        result.zeroFloat_ = value;

+        return this;

+      }

+      public Builder ClearZeroFloat() {

+        PrepareBuilder();

+        result.hasZeroFloat = false;

+        result.zeroFloat_ = 0F;

+        return this;

+      }

+      

+      public bool HasOneFloat {

+        get { return result.hasOneFloat; }

+      }

+      public float OneFloat {

+        get { return result.OneFloat; }

+        set { SetOneFloat(value); }

+      }

+      public Builder SetOneFloat(float value) {

+        PrepareBuilder();

+        result.hasOneFloat = true;

+        result.oneFloat_ = value;

+        return this;

+      }

+      public Builder ClearOneFloat() {

+        PrepareBuilder();

+        result.hasOneFloat = false;

+        result.oneFloat_ = 1F;

+        return this;

+      }

+      

+      public bool HasSmallFloat {

+        get { return result.hasSmallFloat; }

+      }

+      public float SmallFloat {

+        get { return result.SmallFloat; }

+        set { SetSmallFloat(value); }

+      }

+      public Builder SetSmallFloat(float value) {

+        PrepareBuilder();

+        result.hasSmallFloat = true;

+        result.smallFloat_ = value;

+        return this;

+      }

+      public Builder ClearSmallFloat() {

+        PrepareBuilder();

+        result.hasSmallFloat = false;

+        result.smallFloat_ = 1.5F;

+        return this;

+      }

+      

+      public bool HasNegativeOneFloat {

+        get { return result.hasNegativeOneFloat; }

+      }

+      public float NegativeOneFloat {

+        get { return result.NegativeOneFloat; }

+        set { SetNegativeOneFloat(value); }

+      }

+      public Builder SetNegativeOneFloat(float value) {

+        PrepareBuilder();

+        result.hasNegativeOneFloat = true;

+        result.negativeOneFloat_ = value;

+        return this;

+      }

+      public Builder ClearNegativeOneFloat() {

+        PrepareBuilder();

+        result.hasNegativeOneFloat = false;

+        result.negativeOneFloat_ = -1F;

+        return this;

+      }

+      

+      public bool HasNegativeFloat {

+        get { return result.hasNegativeFloat; }

+      }

+      public float NegativeFloat {

+        get { return result.NegativeFloat; }

+        set { SetNegativeFloat(value); }

+      }

+      public Builder SetNegativeFloat(float value) {

+        PrepareBuilder();

+        result.hasNegativeFloat = true;

+        result.negativeFloat_ = value;

+        return this;

+      }

+      public Builder ClearNegativeFloat() {

+        PrepareBuilder();

+        result.hasNegativeFloat = false;

+        result.negativeFloat_ = -1.5F;

+        return this;

+      }

+      

+      public bool HasLargeFloat {

+        get { return result.hasLargeFloat; }

+      }

+      public float LargeFloat {

+        get { return result.LargeFloat; }

+        set { SetLargeFloat(value); }

+      }

+      public Builder SetLargeFloat(float value) {

+        PrepareBuilder();

+        result.hasLargeFloat = true;

+        result.largeFloat_ = value;

+        return this;

+      }

+      public Builder ClearLargeFloat() {

+        PrepareBuilder();

+        result.hasLargeFloat = false;

+        result.largeFloat_ = 2E+08F;

+        return this;

+      }

+      

+      public bool HasSmallNegativeFloat {

+        get { return result.hasSmallNegativeFloat; }

+      }

+      public float SmallNegativeFloat {

+        get { return result.SmallNegativeFloat; }

+        set { SetSmallNegativeFloat(value); }

+      }

+      public Builder SetSmallNegativeFloat(float value) {

+        PrepareBuilder();

+        result.hasSmallNegativeFloat = true;

+        result.smallNegativeFloat_ = value;

+        return this;

+      }

+      public Builder ClearSmallNegativeFloat() {

+        PrepareBuilder();

+        result.hasSmallNegativeFloat = false;

+        result.smallNegativeFloat_ = -8E-28F;

+        return this;

+      }

+      

+      public bool HasInfDouble {

+        get { return result.hasInfDouble; }

+      }

+      public double InfDouble {

+        get { return result.InfDouble; }

+        set { SetInfDouble(value); }

+      }

+      public Builder SetInfDouble(double value) {

+        PrepareBuilder();

+        result.hasInfDouble = true;

+        result.infDouble_ = value;

+        return this;

+      }

+      public Builder ClearInfDouble() {

+        PrepareBuilder();

+        result.hasInfDouble = false;

+        result.infDouble_ = double.PositiveInfinity;

+        return this;

+      }

+      

+      public bool HasNegInfDouble {

+        get { return result.hasNegInfDouble; }

+      }

+      public double NegInfDouble {

+        get { return result.NegInfDouble; }

+        set { SetNegInfDouble(value); }

+      }

+      public Builder SetNegInfDouble(double value) {

+        PrepareBuilder();

+        result.hasNegInfDouble = true;

+        result.negInfDouble_ = value;

+        return this;

+      }

+      public Builder ClearNegInfDouble() {

+        PrepareBuilder();

+        result.hasNegInfDouble = false;

+        result.negInfDouble_ = double.NegativeInfinity;

+        return this;

+      }

+      

+      public bool HasNanDouble {

+        get { return result.hasNanDouble; }

+      }

+      public double NanDouble {

+        get { return result.NanDouble; }

+        set { SetNanDouble(value); }

+      }

+      public Builder SetNanDouble(double value) {

+        PrepareBuilder();

+        result.hasNanDouble = true;

+        result.nanDouble_ = value;

+        return this;

+      }

+      public Builder ClearNanDouble() {

+        PrepareBuilder();

+        result.hasNanDouble = false;

+        result.nanDouble_ = double.NaN;

+        return this;

+      }

+      

+      public bool HasInfFloat {

+        get { return result.hasInfFloat; }

+      }

+      public float InfFloat {

+        get { return result.InfFloat; }

+        set { SetInfFloat(value); }

+      }

+      public Builder SetInfFloat(float value) {

+        PrepareBuilder();

+        result.hasInfFloat = true;

+        result.infFloat_ = value;

+        return this;

+      }

+      public Builder ClearInfFloat() {

+        PrepareBuilder();

+        result.hasInfFloat = false;

+        result.infFloat_ = float.PositiveInfinity;

+        return this;

+      }

+      

+      public bool HasNegInfFloat {

+        get { return result.hasNegInfFloat; }

+      }

+      public float NegInfFloat {

+        get { return result.NegInfFloat; }

+        set { SetNegInfFloat(value); }

+      }

+      public Builder SetNegInfFloat(float value) {

+        PrepareBuilder();

+        result.hasNegInfFloat = true;

+        result.negInfFloat_ = value;

+        return this;

+      }

+      public Builder ClearNegInfFloat() {

+        PrepareBuilder();

+        result.hasNegInfFloat = false;

+        result.negInfFloat_ = float.NegativeInfinity;

+        return this;

+      }

+      

+      public bool HasNanFloat {

+        get { return result.hasNanFloat; }

+      }

+      public float NanFloat {

+        get { return result.NanFloat; }

+        set { SetNanFloat(value); }

+      }

+      public Builder SetNanFloat(float value) {

+        PrepareBuilder();

+        result.hasNanFloat = true;

+        result.nanFloat_ = value;

+        return this;

+      }

+      public Builder ClearNanFloat() {

+        PrepareBuilder();

+        result.hasNanFloat = false;

+        result.nanFloat_ = float.NaN;

+        return this;

+      }

+      

+      public bool HasCppTrigraph {

+        get { return result.hasCppTrigraph; }

+      }

+      public string CppTrigraph {

+        get { return result.CppTrigraph; }

+        set { SetCppTrigraph(value); }

+      }

+      public Builder SetCppTrigraph(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasCppTrigraph = true;

+        result.cppTrigraph_ = value;

+        return this;

+      }

+      public Builder ClearCppTrigraph() {

+        PrepareBuilder();

+        result.hasCppTrigraph = false;

+        result.cppTrigraph_ = "? ? ?? ?? ??? ??/ ??-";

+        return this;

+      }

+    }

+    static TestExtremeDefaultValues() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SparseEnumMessage : pb::GeneratedMessage<SparseEnumMessage, SparseEnumMessage.Builder> {

+    private SparseEnumMessage() { }

+    private static readonly SparseEnumMessage defaultInstance = new SparseEnumMessage().MakeReadOnly();

+    private static readonly string[] _sparseEnumMessageFieldNames = new string[] { "sparse_enum" };

+    private static readonly uint[] _sparseEnumMessageFieldTags = new uint[] { 8 };

+    public static SparseEnumMessage DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SparseEnumMessage DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SparseEnumMessage ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_SparseEnumMessage__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<SparseEnumMessage, SparseEnumMessage.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_SparseEnumMessage__FieldAccessorTable; }

+    }

+    

+    public const int SparseEnumFieldNumber = 1;

+    private bool hasSparseEnum;

+    private global::Google.ProtocolBuffers.TestProtos.TestSparseEnum sparseEnum_ = global::Google.ProtocolBuffers.TestProtos.TestSparseEnum.SPARSE_A;

+    public bool HasSparseEnum {

+      get { return hasSparseEnum; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestSparseEnum SparseEnum {

+      get { return sparseEnum_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _sparseEnumMessageFieldNames;

+      if (hasSparseEnum) {

+        output.WriteEnum(1, field_names[0], (int) SparseEnum, SparseEnum);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasSparseEnum) {

+        size += pb::CodedOutputStream.ComputeEnumSize(1, (int) SparseEnum);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static SparseEnumMessage ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SparseEnumMessage ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SparseEnumMessage ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SparseEnumMessage MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SparseEnumMessage prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<SparseEnumMessage, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SparseEnumMessage cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SparseEnumMessage result;

+      

+      private SparseEnumMessage PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SparseEnumMessage original = result;

+          result = new SparseEnumMessage();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SparseEnumMessage MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.Descriptor; }

+      }

+      

+      public override SparseEnumMessage DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.DefaultInstance; }

+      }

+      

+      public override SparseEnumMessage BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is SparseEnumMessage) {

+          return MergeFrom((SparseEnumMessage) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SparseEnumMessage other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.SparseEnumMessage.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasSparseEnum) {

+          SparseEnum = other.SparseEnum;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_sparseEnumMessageFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _sparseEnumMessageFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 8: {

+              object unknown;

+              if(input.ReadEnum(ref result.sparseEnum_, out unknown)) {

+                result.hasSparseEnum = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(1, (ulong)(int)unknown);

+              }

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasSparseEnum {

+       get { return result.hasSparseEnum; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestSparseEnum SparseEnum {

+        get { return result.SparseEnum; }

+        set { SetSparseEnum(value); }

+      }

+      public Builder SetSparseEnum(global::Google.ProtocolBuffers.TestProtos.TestSparseEnum value) {

+        PrepareBuilder();

+        result.hasSparseEnum = true;

+        result.sparseEnum_ = value;

+        return this;

+      }

+      public Builder ClearSparseEnum() {

+        PrepareBuilder();

+        result.hasSparseEnum = false;

+        result.sparseEnum_ = global::Google.ProtocolBuffers.TestProtos.TestSparseEnum.SPARSE_A;

+        return this;

+      }

+    }

+    static SparseEnumMessage() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class OneString : pb::GeneratedMessage<OneString, OneString.Builder> {

+    private OneString() { }

+    private static readonly OneString defaultInstance = new OneString().MakeReadOnly();

+    private static readonly string[] _oneStringFieldNames = new string[] { "data" };

+    private static readonly uint[] _oneStringFieldTags = new uint[] { 10 };

+    public static OneString DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override OneString DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override OneString ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OneString__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<OneString, OneString.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OneString__FieldAccessorTable; }

+    }

+    

+    public const int DataFieldNumber = 1;

+    private bool hasData;

+    private string data_ = "";

+    public bool HasData {

+      get { return hasData; }

+    }

+    public string Data {

+      get { return data_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _oneStringFieldNames;

+      if (hasData) {

+        output.WriteString(1, field_names[0], Data);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasData) {

+        size += pb::CodedOutputStream.ComputeStringSize(1, Data);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static OneString ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OneString ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OneString ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OneString ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OneString ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OneString ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static OneString ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static OneString ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static OneString ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OneString ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private OneString MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(OneString prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<OneString, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(OneString cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private OneString result;

+      

+      private OneString PrepareBuilder() {

+        if (resultIsReadOnly) {

+          OneString original = result;

+          result = new OneString();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override OneString MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OneString.Descriptor; }

+      }

+      

+      public override OneString DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OneString.DefaultInstance; }

+      }

+      

+      public override OneString BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is OneString) {

+          return MergeFrom((OneString) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(OneString other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.OneString.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasData) {

+          Data = other.Data;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_oneStringFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _oneStringFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasData = input.ReadString(ref result.data_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasData {

+        get { return result.hasData; }

+      }

+      public string Data {

+        get { return result.Data; }

+        set { SetData(value); }

+      }

+      public Builder SetData(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasData = true;

+        result.data_ = value;

+        return this;

+      }

+      public Builder ClearData() {

+        PrepareBuilder();

+        result.hasData = false;

+        result.data_ = "";

+        return this;

+      }

+    }

+    static OneString() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class OneBytes : pb::GeneratedMessage<OneBytes, OneBytes.Builder> {

+    private OneBytes() { }

+    private static readonly OneBytes defaultInstance = new OneBytes().MakeReadOnly();

+    private static readonly string[] _oneBytesFieldNames = new string[] { "data" };

+    private static readonly uint[] _oneBytesFieldTags = new uint[] { 10 };

+    public static OneBytes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override OneBytes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override OneBytes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OneBytes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<OneBytes, OneBytes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_OneBytes__FieldAccessorTable; }

+    }

+    

+    public const int DataFieldNumber = 1;

+    private bool hasData;

+    private pb::ByteString data_ = pb::ByteString.Empty;

+    public bool HasData {

+      get { return hasData; }

+    }

+    public pb::ByteString Data {

+      get { return data_; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _oneBytesFieldNames;

+      if (hasData) {

+        output.WriteBytes(1, field_names[0], Data);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasData) {

+        size += pb::CodedOutputStream.ComputeBytesSize(1, Data);

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static OneBytes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static OneBytes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static OneBytes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static OneBytes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static OneBytes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private OneBytes MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(OneBytes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<OneBytes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(OneBytes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private OneBytes result;

+      

+      private OneBytes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          OneBytes original = result;

+          result = new OneBytes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override OneBytes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OneBytes.Descriptor; }

+      }

+      

+      public override OneBytes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.OneBytes.DefaultInstance; }

+      }

+      

+      public override OneBytes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is OneBytes) {

+          return MergeFrom((OneBytes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(OneBytes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.OneBytes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasData) {

+          Data = other.Data;

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_oneBytesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _oneBytesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              result.hasData = input.ReadBytes(ref result.data_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasData {

+        get { return result.hasData; }

+      }

+      public pb::ByteString Data {

+        get { return result.Data; }

+        set { SetData(value); }

+      }

+      public Builder SetData(pb::ByteString value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasData = true;

+        result.data_ = value;

+        return this;

+      }

+      public Builder ClearData() {

+        PrepareBuilder();

+        result.hasData = false;

+        result.data_ = pb::ByteString.Empty;

+        return this;

+      }

+    }

+    static OneBytes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestPackedTypes : pb::GeneratedMessage<TestPackedTypes, TestPackedTypes.Builder> {

+    private TestPackedTypes() { }

+    private static readonly TestPackedTypes defaultInstance = new TestPackedTypes().MakeReadOnly();

+    private static readonly string[] _testPackedTypesFieldNames = new string[] { "packed_bool", "packed_double", "packed_enum", "packed_fixed32", "packed_fixed64", "packed_float", "packed_int32", "packed_int64", "packed_sfixed32", "packed_sfixed64", "packed_sint32", "packed_sint64", "packed_uint32", "packed_uint64" };

+    private static readonly uint[] _testPackedTypesFieldTags = new uint[] { 818, 810, 826, 770, 778, 802, 722, 730, 786, 794, 754, 762, 738, 746 };

+    public static TestPackedTypes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestPackedTypes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestPackedTypes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestPackedTypes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestPackedTypes, TestPackedTypes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestPackedTypes__FieldAccessorTable; }

+    }

+    

+    public const int PackedInt32FieldNumber = 90;

+    private int packedInt32MemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedInt32List {

+      get { return pbc::Lists.AsReadOnly(packedInt32_); }

+    }

+    public int PackedInt32Count {

+      get { return packedInt32_.Count; }

+    }

+    public int GetPackedInt32(int index) {

+      return packedInt32_[index];

+    }

+    

+    public const int PackedInt64FieldNumber = 91;

+    private int packedInt64MemoizedSerializedSize;

+    private pbc::PopsicleList<long> packedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> PackedInt64List {

+      get { return pbc::Lists.AsReadOnly(packedInt64_); }

+    }

+    public int PackedInt64Count {

+      get { return packedInt64_.Count; }

+    }

+    public long GetPackedInt64(int index) {

+      return packedInt64_[index];

+    }

+    

+    public const int PackedUint32FieldNumber = 92;

+    private int packedUint32MemoizedSerializedSize;

+    private pbc::PopsicleList<uint> packedUint32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> PackedUint32List {

+      get { return pbc::Lists.AsReadOnly(packedUint32_); }

+    }

+    public int PackedUint32Count {

+      get { return packedUint32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetPackedUint32(int index) {

+      return packedUint32_[index];

+    }

+    

+    public const int PackedUint64FieldNumber = 93;

+    private int packedUint64MemoizedSerializedSize;

+    private pbc::PopsicleList<ulong> packedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> PackedUint64List {

+      get { return pbc::Lists.AsReadOnly(packedUint64_); }

+    }

+    public int PackedUint64Count {

+      get { return packedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetPackedUint64(int index) {

+      return packedUint64_[index];

+    }

+    

+    public const int PackedSint32FieldNumber = 94;

+    private int packedSint32MemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedSint32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedSint32List {

+      get { return pbc::Lists.AsReadOnly(packedSint32_); }

+    }

+    public int PackedSint32Count {

+      get { return packedSint32_.Count; }

+    }

+    public int GetPackedSint32(int index) {

+      return packedSint32_[index];

+    }

+    

+    public const int PackedSint64FieldNumber = 95;

+    private int packedSint64MemoizedSerializedSize;

+    private pbc::PopsicleList<long> packedSint64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> PackedSint64List {

+      get { return pbc::Lists.AsReadOnly(packedSint64_); }

+    }

+    public int PackedSint64Count {

+      get { return packedSint64_.Count; }

+    }

+    public long GetPackedSint64(int index) {

+      return packedSint64_[index];

+    }

+    

+    public const int PackedFixed32FieldNumber = 96;

+    private int packedFixed32MemoizedSerializedSize;

+    private pbc::PopsicleList<uint> packedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> PackedFixed32List {

+      get { return pbc::Lists.AsReadOnly(packedFixed32_); }

+    }

+    public int PackedFixed32Count {

+      get { return packedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetPackedFixed32(int index) {

+      return packedFixed32_[index];

+    }

+    

+    public const int PackedFixed64FieldNumber = 97;

+    private int packedFixed64MemoizedSerializedSize;

+    private pbc::PopsicleList<ulong> packedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> PackedFixed64List {

+      get { return pbc::Lists.AsReadOnly(packedFixed64_); }

+    }

+    public int PackedFixed64Count {

+      get { return packedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetPackedFixed64(int index) {

+      return packedFixed64_[index];

+    }

+    

+    public const int PackedSfixed32FieldNumber = 98;

+    private int packedSfixed32MemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedSfixed32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedSfixed32List {

+      get { return pbc::Lists.AsReadOnly(packedSfixed32_); }

+    }

+    public int PackedSfixed32Count {

+      get { return packedSfixed32_.Count; }

+    }

+    public int GetPackedSfixed32(int index) {

+      return packedSfixed32_[index];

+    }

+    

+    public const int PackedSfixed64FieldNumber = 99;

+    private int packedSfixed64MemoizedSerializedSize;

+    private pbc::PopsicleList<long> packedSfixed64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> PackedSfixed64List {

+      get { return pbc::Lists.AsReadOnly(packedSfixed64_); }

+    }

+    public int PackedSfixed64Count {

+      get { return packedSfixed64_.Count; }

+    }

+    public long GetPackedSfixed64(int index) {

+      return packedSfixed64_[index];

+    }

+    

+    public const int PackedFloatFieldNumber = 100;

+    private int packedFloatMemoizedSerializedSize;

+    private pbc::PopsicleList<float> packedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> PackedFloatList {

+      get { return pbc::Lists.AsReadOnly(packedFloat_); }

+    }

+    public int PackedFloatCount {

+      get { return packedFloat_.Count; }

+    }

+    public float GetPackedFloat(int index) {

+      return packedFloat_[index];

+    }

+    

+    public const int PackedDoubleFieldNumber = 101;

+    private int packedDoubleMemoizedSerializedSize;

+    private pbc::PopsicleList<double> packedDouble_ = new pbc::PopsicleList<double>();

+    public scg::IList<double> PackedDoubleList {

+      get { return pbc::Lists.AsReadOnly(packedDouble_); }

+    }

+    public int PackedDoubleCount {

+      get { return packedDouble_.Count; }

+    }

+    public double GetPackedDouble(int index) {

+      return packedDouble_[index];

+    }

+    

+    public const int PackedBoolFieldNumber = 102;

+    private int packedBoolMemoizedSerializedSize;

+    private pbc::PopsicleList<bool> packedBool_ = new pbc::PopsicleList<bool>();

+    public scg::IList<bool> PackedBoolList {

+      get { return pbc::Lists.AsReadOnly(packedBool_); }

+    }

+    public int PackedBoolCount {

+      get { return packedBool_.Count; }

+    }

+    public bool GetPackedBool(int index) {

+      return packedBool_[index];

+    }

+    

+    public const int PackedEnumFieldNumber = 103;

+    private int packedEnumMemoizedSerializedSize;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> packedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> PackedEnumList {

+      get { return pbc::Lists.AsReadOnly(packedEnum_); }

+    }

+    public int PackedEnumCount {

+      get { return packedEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetPackedEnum(int index) {

+      return packedEnum_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testPackedTypesFieldNames;

+      if (packedInt32_.Count > 0) {

+        output.WritePackedInt32Array(90, field_names[6], packedInt32MemoizedSerializedSize, packedInt32_);

+      }

+      if (packedInt64_.Count > 0) {

+        output.WritePackedInt64Array(91, field_names[7], packedInt64MemoizedSerializedSize, packedInt64_);

+      }

+      if (packedUint32_.Count > 0) {

+        output.WritePackedUInt32Array(92, field_names[12], packedUint32MemoizedSerializedSize, packedUint32_);

+      }

+      if (packedUint64_.Count > 0) {

+        output.WritePackedUInt64Array(93, field_names[13], packedUint64MemoizedSerializedSize, packedUint64_);

+      }

+      if (packedSint32_.Count > 0) {

+        output.WritePackedSInt32Array(94, field_names[10], packedSint32MemoizedSerializedSize, packedSint32_);

+      }

+      if (packedSint64_.Count > 0) {

+        output.WritePackedSInt64Array(95, field_names[11], packedSint64MemoizedSerializedSize, packedSint64_);

+      }

+      if (packedFixed32_.Count > 0) {

+        output.WritePackedFixed32Array(96, field_names[3], packedFixed32MemoizedSerializedSize, packedFixed32_);

+      }

+      if (packedFixed64_.Count > 0) {

+        output.WritePackedFixed64Array(97, field_names[4], packedFixed64MemoizedSerializedSize, packedFixed64_);

+      }

+      if (packedSfixed32_.Count > 0) {

+        output.WritePackedSFixed32Array(98, field_names[8], packedSfixed32MemoizedSerializedSize, packedSfixed32_);

+      }

+      if (packedSfixed64_.Count > 0) {

+        output.WritePackedSFixed64Array(99, field_names[9], packedSfixed64MemoizedSerializedSize, packedSfixed64_);

+      }

+      if (packedFloat_.Count > 0) {

+        output.WritePackedFloatArray(100, field_names[5], packedFloatMemoizedSerializedSize, packedFloat_);

+      }

+      if (packedDouble_.Count > 0) {

+        output.WritePackedDoubleArray(101, field_names[1], packedDoubleMemoizedSerializedSize, packedDouble_);

+      }

+      if (packedBool_.Count > 0) {

+        output.WritePackedBoolArray(102, field_names[0], packedBoolMemoizedSerializedSize, packedBool_);

+      }

+      if (packedEnum_.Count > 0) {

+        output.WritePackedEnumArray(103, field_names[2], packedEnumMemoizedSerializedSize, packedEnum_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        foreach (int element in PackedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedInt32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedInt32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in PackedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedInt64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedInt64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (uint element in PackedUint32List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedUint32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedUint32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in PackedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedUint64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedUint64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in PackedSint32List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedSint32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSint32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in PackedSint64List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedSint64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSint64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * packedFixed32_.Count;

+        size += dataSize;

+        if (packedFixed32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedFixed32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * packedFixed64_.Count;

+        size += dataSize;

+        if (packedFixed64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedFixed64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * packedSfixed32_.Count;

+        size += dataSize;

+        if (packedSfixed32_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSfixed32MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * packedSfixed64_.Count;

+        size += dataSize;

+        if (packedSfixed64_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedSfixed64MemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * packedFloat_.Count;

+        size += dataSize;

+        if (packedFloat_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedFloatMemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * packedDouble_.Count;

+        size += dataSize;

+        if (packedDouble_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedDoubleMemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 1 * packedBool_.Count;

+        size += dataSize;

+        if (packedBool_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedBoolMemoizedSerializedSize = dataSize;

+      }

+      {

+        int dataSize = 0;

+        if (packedEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in packedEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2;

+          size += pb::CodedOutputStream.ComputeRawVarint32Size((uint) dataSize);

+        }

+        packedEnumMemoizedSerializedSize = dataSize;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestPackedTypes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedTypes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestPackedTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestPackedTypes MakeReadOnly() {

+      packedInt32_.MakeReadOnly();

+      packedInt64_.MakeReadOnly();

+      packedUint32_.MakeReadOnly();

+      packedUint64_.MakeReadOnly();

+      packedSint32_.MakeReadOnly();

+      packedSint64_.MakeReadOnly();

+      packedFixed32_.MakeReadOnly();

+      packedFixed64_.MakeReadOnly();

+      packedSfixed32_.MakeReadOnly();

+      packedSfixed64_.MakeReadOnly();

+      packedFloat_.MakeReadOnly();

+      packedDouble_.MakeReadOnly();

+      packedBool_.MakeReadOnly();

+      packedEnum_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestPackedTypes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestPackedTypes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestPackedTypes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestPackedTypes result;

+      

+      private TestPackedTypes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestPackedTypes original = result;

+          result = new TestPackedTypes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestPackedTypes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.Descriptor; }

+      }

+      

+      public override TestPackedTypes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.DefaultInstance; }

+      }

+      

+      public override TestPackedTypes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestPackedTypes) {

+          return MergeFrom((TestPackedTypes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestPackedTypes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedTypes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.packedInt32_.Count != 0) {

+          result.packedInt32_.Add(other.packedInt32_);

+        }

+        if (other.packedInt64_.Count != 0) {

+          result.packedInt64_.Add(other.packedInt64_);

+        }

+        if (other.packedUint32_.Count != 0) {

+          result.packedUint32_.Add(other.packedUint32_);

+        }

+        if (other.packedUint64_.Count != 0) {

+          result.packedUint64_.Add(other.packedUint64_);

+        }

+        if (other.packedSint32_.Count != 0) {

+          result.packedSint32_.Add(other.packedSint32_);

+        }

+        if (other.packedSint64_.Count != 0) {

+          result.packedSint64_.Add(other.packedSint64_);

+        }

+        if (other.packedFixed32_.Count != 0) {

+          result.packedFixed32_.Add(other.packedFixed32_);

+        }

+        if (other.packedFixed64_.Count != 0) {

+          result.packedFixed64_.Add(other.packedFixed64_);

+        }

+        if (other.packedSfixed32_.Count != 0) {

+          result.packedSfixed32_.Add(other.packedSfixed32_);

+        }

+        if (other.packedSfixed64_.Count != 0) {

+          result.packedSfixed64_.Add(other.packedSfixed64_);

+        }

+        if (other.packedFloat_.Count != 0) {

+          result.packedFloat_.Add(other.packedFloat_);

+        }

+        if (other.packedDouble_.Count != 0) {

+          result.packedDouble_.Add(other.packedDouble_);

+        }

+        if (other.packedBool_.Count != 0) {

+          result.packedBool_.Add(other.packedBool_);

+        }

+        if (other.packedEnum_.Count != 0) {

+          result.packedEnum_.Add(other.packedEnum_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testPackedTypesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testPackedTypesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 722:

+            case 720: {

+              input.ReadInt32Array(tag, field_name, result.packedInt32_);

+              break;

+            }

+            case 730:

+            case 728: {

+              input.ReadInt64Array(tag, field_name, result.packedInt64_);

+              break;

+            }

+            case 738:

+            case 736: {

+              input.ReadUInt32Array(tag, field_name, result.packedUint32_);

+              break;

+            }

+            case 746:

+            case 744: {

+              input.ReadUInt64Array(tag, field_name, result.packedUint64_);

+              break;

+            }

+            case 754:

+            case 752: {

+              input.ReadSInt32Array(tag, field_name, result.packedSint32_);

+              break;

+            }

+            case 762:

+            case 760: {

+              input.ReadSInt64Array(tag, field_name, result.packedSint64_);

+              break;

+            }

+            case 770:

+            case 773: {

+              input.ReadFixed32Array(tag, field_name, result.packedFixed32_);

+              break;

+            }

+            case 778:

+            case 777: {

+              input.ReadFixed64Array(tag, field_name, result.packedFixed64_);

+              break;

+            }

+            case 786:

+            case 789: {

+              input.ReadSFixed32Array(tag, field_name, result.packedSfixed32_);

+              break;

+            }

+            case 794:

+            case 793: {

+              input.ReadSFixed64Array(tag, field_name, result.packedSfixed64_);

+              break;

+            }

+            case 802:

+            case 805: {

+              input.ReadFloatArray(tag, field_name, result.packedFloat_);

+              break;

+            }

+            case 810:

+            case 809: {

+              input.ReadDoubleArray(tag, field_name, result.packedDouble_);

+              break;

+            }

+            case 818:

+            case 816: {

+              input.ReadBoolArray(tag, field_name, result.packedBool_);

+              break;

+            }

+            case 826:

+            case 824: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.packedEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(103, (ulong)(int)rawValue);

+              }

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<int> PackedInt32List {

+        get { return PrepareBuilder().packedInt32_; }

+      }

+      public int PackedInt32Count {

+        get { return result.PackedInt32Count; }

+      }

+      public int GetPackedInt32(int index) {

+        return result.GetPackedInt32(index);

+      }

+      public Builder SetPackedInt32(int index, int value) {

+        PrepareBuilder();

+        result.packedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddPackedInt32(int value) {

+        PrepareBuilder();

+        result.packedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedInt32() {

+        PrepareBuilder();

+        result.packedInt32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> PackedInt64List {

+        get { return PrepareBuilder().packedInt64_; }

+      }

+      public int PackedInt64Count {

+        get { return result.PackedInt64Count; }

+      }

+      public long GetPackedInt64(int index) {

+        return result.GetPackedInt64(index);

+      }

+      public Builder SetPackedInt64(int index, long value) {

+        PrepareBuilder();

+        result.packedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddPackedInt64(long value) {

+        PrepareBuilder();

+        result.packedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.packedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedInt64() {

+        PrepareBuilder();

+        result.packedInt64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> PackedUint32List {

+        get { return PrepareBuilder().packedUint32_; }

+      }

+      public int PackedUint32Count {

+        get { return result.PackedUint32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetPackedUint32(int index) {

+        return result.GetPackedUint32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedUint32(int index, uint value) {

+        PrepareBuilder();

+        result.packedUint32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedUint32(uint value) {

+        PrepareBuilder();

+        result.packedUint32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedUint32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.packedUint32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedUint32() {

+        PrepareBuilder();

+        result.packedUint32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> PackedUint64List {

+        get { return PrepareBuilder().packedUint64_; }

+      }

+      public int PackedUint64Count {

+        get { return result.PackedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetPackedUint64(int index) {

+        return result.GetPackedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.packedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedUint64(ulong value) {

+        PrepareBuilder();

+        result.packedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.packedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedUint64() {

+        PrepareBuilder();

+        result.packedUint64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> PackedSint32List {

+        get { return PrepareBuilder().packedSint32_; }

+      }

+      public int PackedSint32Count {

+        get { return result.PackedSint32Count; }

+      }

+      public int GetPackedSint32(int index) {

+        return result.GetPackedSint32(index);

+      }

+      public Builder SetPackedSint32(int index, int value) {

+        PrepareBuilder();

+        result.packedSint32_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSint32(int value) {

+        PrepareBuilder();

+        result.packedSint32_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSint32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedSint32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSint32() {

+        PrepareBuilder();

+        result.packedSint32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> PackedSint64List {

+        get { return PrepareBuilder().packedSint64_; }

+      }

+      public int PackedSint64Count {

+        get { return result.PackedSint64Count; }

+      }

+      public long GetPackedSint64(int index) {

+        return result.GetPackedSint64(index);

+      }

+      public Builder SetPackedSint64(int index, long value) {

+        PrepareBuilder();

+        result.packedSint64_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSint64(long value) {

+        PrepareBuilder();

+        result.packedSint64_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSint64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.packedSint64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSint64() {

+        PrepareBuilder();

+        result.packedSint64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> PackedFixed32List {

+        get { return PrepareBuilder().packedFixed32_; }

+      }

+      public int PackedFixed32Count {

+        get { return result.PackedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetPackedFixed32(int index) {

+        return result.GetPackedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.packedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedFixed32(uint value) {

+        PrepareBuilder();

+        result.packedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.packedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedFixed32() {

+        PrepareBuilder();

+        result.packedFixed32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> PackedFixed64List {

+        get { return PrepareBuilder().packedFixed64_; }

+      }

+      public int PackedFixed64Count {

+        get { return result.PackedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetPackedFixed64(int index) {

+        return result.GetPackedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetPackedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.packedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddPackedFixed64(ulong value) {

+        PrepareBuilder();

+        result.packedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangePackedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.packedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedFixed64() {

+        PrepareBuilder();

+        result.packedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> PackedSfixed32List {

+        get { return PrepareBuilder().packedSfixed32_; }

+      }

+      public int PackedSfixed32Count {

+        get { return result.PackedSfixed32Count; }

+      }

+      public int GetPackedSfixed32(int index) {

+        return result.GetPackedSfixed32(index);

+      }

+      public Builder SetPackedSfixed32(int index, int value) {

+        PrepareBuilder();

+        result.packedSfixed32_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSfixed32(int value) {

+        PrepareBuilder();

+        result.packedSfixed32_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSfixed32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedSfixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSfixed32() {

+        PrepareBuilder();

+        result.packedSfixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> PackedSfixed64List {

+        get { return PrepareBuilder().packedSfixed64_; }

+      }

+      public int PackedSfixed64Count {

+        get { return result.PackedSfixed64Count; }

+      }

+      public long GetPackedSfixed64(int index) {

+        return result.GetPackedSfixed64(index);

+      }

+      public Builder SetPackedSfixed64(int index, long value) {

+        PrepareBuilder();

+        result.packedSfixed64_[index] = value;

+        return this;

+      }

+      public Builder AddPackedSfixed64(long value) {

+        PrepareBuilder();

+        result.packedSfixed64_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedSfixed64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.packedSfixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedSfixed64() {

+        PrepareBuilder();

+        result.packedSfixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> PackedFloatList {

+        get { return PrepareBuilder().packedFloat_; }

+      }

+      public int PackedFloatCount {

+        get { return result.PackedFloatCount; }

+      }

+      public float GetPackedFloat(int index) {

+        return result.GetPackedFloat(index);

+      }

+      public Builder SetPackedFloat(int index, float value) {

+        PrepareBuilder();

+        result.packedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddPackedFloat(float value) {

+        PrepareBuilder();

+        result.packedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.packedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedFloat() {

+        PrepareBuilder();

+        result.packedFloat_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<double> PackedDoubleList {

+        get { return PrepareBuilder().packedDouble_; }

+      }

+      public int PackedDoubleCount {

+        get { return result.PackedDoubleCount; }

+      }

+      public double GetPackedDouble(int index) {

+        return result.GetPackedDouble(index);

+      }

+      public Builder SetPackedDouble(int index, double value) {

+        PrepareBuilder();

+        result.packedDouble_[index] = value;

+        return this;

+      }

+      public Builder AddPackedDouble(double value) {

+        PrepareBuilder();

+        result.packedDouble_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedDouble(scg::IEnumerable<double> values) {

+        PrepareBuilder();

+        result.packedDouble_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedDouble() {

+        PrepareBuilder();

+        result.packedDouble_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<bool> PackedBoolList {

+        get { return PrepareBuilder().packedBool_; }

+      }

+      public int PackedBoolCount {

+        get { return result.PackedBoolCount; }

+      }

+      public bool GetPackedBool(int index) {

+        return result.GetPackedBool(index);

+      }

+      public Builder SetPackedBool(int index, bool value) {

+        PrepareBuilder();

+        result.packedBool_[index] = value;

+        return this;

+      }

+      public Builder AddPackedBool(bool value) {

+        PrepareBuilder();

+        result.packedBool_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedBool(scg::IEnumerable<bool> values) {

+        PrepareBuilder();

+        result.packedBool_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedBool() {

+        PrepareBuilder();

+        result.packedBool_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> PackedEnumList {

+        get { return PrepareBuilder().packedEnum_; }

+      }

+      public int PackedEnumCount {

+        get { return result.PackedEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetPackedEnum(int index) {

+        return result.GetPackedEnum(index);

+      }

+      public Builder SetPackedEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.packedEnum_[index] = value;

+        return this;

+      }

+      public Builder AddPackedEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.packedEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {

+        PrepareBuilder();

+        result.packedEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedEnum() {

+        PrepareBuilder();

+        result.packedEnum_.Clear();

+        return this;

+      }

+    }

+    static TestPackedTypes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestUnpackedTypes : pb::GeneratedMessage<TestUnpackedTypes, TestUnpackedTypes.Builder> {

+    private TestUnpackedTypes() { }

+    private static readonly TestUnpackedTypes defaultInstance = new TestUnpackedTypes().MakeReadOnly();

+    private static readonly string[] _testUnpackedTypesFieldNames = new string[] { "unpacked_bool", "unpacked_double", "unpacked_enum", "unpacked_fixed32", "unpacked_fixed64", "unpacked_float", "unpacked_int32", "unpacked_int64", "unpacked_sfixed32", "unpacked_sfixed64", "unpacked_sint32", "unpacked_sint64", "unpacked_uint32", "unpacked_uint64" };

+    private static readonly uint[] _testUnpackedTypesFieldTags = new uint[] { 816, 809, 824, 773, 777, 805, 720, 728, 789, 793, 752, 760, 736, 744 };

+    public static TestUnpackedTypes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestUnpackedTypes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestUnpackedTypes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestUnpackedTypes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestUnpackedTypes, TestUnpackedTypes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestUnpackedTypes__FieldAccessorTable; }

+    }

+    

+    public const int UnpackedInt32FieldNumber = 90;

+    private pbc::PopsicleList<int> unpackedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> UnpackedInt32List {

+      get { return pbc::Lists.AsReadOnly(unpackedInt32_); }

+    }

+    public int UnpackedInt32Count {

+      get { return unpackedInt32_.Count; }

+    }

+    public int GetUnpackedInt32(int index) {

+      return unpackedInt32_[index];

+    }

+    

+    public const int UnpackedInt64FieldNumber = 91;

+    private pbc::PopsicleList<long> unpackedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> UnpackedInt64List {

+      get { return pbc::Lists.AsReadOnly(unpackedInt64_); }

+    }

+    public int UnpackedInt64Count {

+      get { return unpackedInt64_.Count; }

+    }

+    public long GetUnpackedInt64(int index) {

+      return unpackedInt64_[index];

+    }

+    

+    public const int UnpackedUint32FieldNumber = 92;

+    private pbc::PopsicleList<uint> unpackedUint32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> UnpackedUint32List {

+      get { return pbc::Lists.AsReadOnly(unpackedUint32_); }

+    }

+    public int UnpackedUint32Count {

+      get { return unpackedUint32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetUnpackedUint32(int index) {

+      return unpackedUint32_[index];

+    }

+    

+    public const int UnpackedUint64FieldNumber = 93;

+    private pbc::PopsicleList<ulong> unpackedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> UnpackedUint64List {

+      get { return pbc::Lists.AsReadOnly(unpackedUint64_); }

+    }

+    public int UnpackedUint64Count {

+      get { return unpackedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetUnpackedUint64(int index) {

+      return unpackedUint64_[index];

+    }

+    

+    public const int UnpackedSint32FieldNumber = 94;

+    private pbc::PopsicleList<int> unpackedSint32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> UnpackedSint32List {

+      get { return pbc::Lists.AsReadOnly(unpackedSint32_); }

+    }

+    public int UnpackedSint32Count {

+      get { return unpackedSint32_.Count; }

+    }

+    public int GetUnpackedSint32(int index) {

+      return unpackedSint32_[index];

+    }

+    

+    public const int UnpackedSint64FieldNumber = 95;

+    private pbc::PopsicleList<long> unpackedSint64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> UnpackedSint64List {

+      get { return pbc::Lists.AsReadOnly(unpackedSint64_); }

+    }

+    public int UnpackedSint64Count {

+      get { return unpackedSint64_.Count; }

+    }

+    public long GetUnpackedSint64(int index) {

+      return unpackedSint64_[index];

+    }

+    

+    public const int UnpackedFixed32FieldNumber = 96;

+    private pbc::PopsicleList<uint> unpackedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> UnpackedFixed32List {

+      get { return pbc::Lists.AsReadOnly(unpackedFixed32_); }

+    }

+    public int UnpackedFixed32Count {

+      get { return unpackedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetUnpackedFixed32(int index) {

+      return unpackedFixed32_[index];

+    }

+    

+    public const int UnpackedFixed64FieldNumber = 97;

+    private pbc::PopsicleList<ulong> unpackedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> UnpackedFixed64List {

+      get { return pbc::Lists.AsReadOnly(unpackedFixed64_); }

+    }

+    public int UnpackedFixed64Count {

+      get { return unpackedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetUnpackedFixed64(int index) {

+      return unpackedFixed64_[index];

+    }

+    

+    public const int UnpackedSfixed32FieldNumber = 98;

+    private pbc::PopsicleList<int> unpackedSfixed32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> UnpackedSfixed32List {

+      get { return pbc::Lists.AsReadOnly(unpackedSfixed32_); }

+    }

+    public int UnpackedSfixed32Count {

+      get { return unpackedSfixed32_.Count; }

+    }

+    public int GetUnpackedSfixed32(int index) {

+      return unpackedSfixed32_[index];

+    }

+    

+    public const int UnpackedSfixed64FieldNumber = 99;

+    private pbc::PopsicleList<long> unpackedSfixed64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> UnpackedSfixed64List {

+      get { return pbc::Lists.AsReadOnly(unpackedSfixed64_); }

+    }

+    public int UnpackedSfixed64Count {

+      get { return unpackedSfixed64_.Count; }

+    }

+    public long GetUnpackedSfixed64(int index) {

+      return unpackedSfixed64_[index];

+    }

+    

+    public const int UnpackedFloatFieldNumber = 100;

+    private pbc::PopsicleList<float> unpackedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> UnpackedFloatList {

+      get { return pbc::Lists.AsReadOnly(unpackedFloat_); }

+    }

+    public int UnpackedFloatCount {

+      get { return unpackedFloat_.Count; }

+    }

+    public float GetUnpackedFloat(int index) {

+      return unpackedFloat_[index];

+    }

+    

+    public const int UnpackedDoubleFieldNumber = 101;

+    private pbc::PopsicleList<double> unpackedDouble_ = new pbc::PopsicleList<double>();

+    public scg::IList<double> UnpackedDoubleList {

+      get { return pbc::Lists.AsReadOnly(unpackedDouble_); }

+    }

+    public int UnpackedDoubleCount {

+      get { return unpackedDouble_.Count; }

+    }

+    public double GetUnpackedDouble(int index) {

+      return unpackedDouble_[index];

+    }

+    

+    public const int UnpackedBoolFieldNumber = 102;

+    private pbc::PopsicleList<bool> unpackedBool_ = new pbc::PopsicleList<bool>();

+    public scg::IList<bool> UnpackedBoolList {

+      get { return pbc::Lists.AsReadOnly(unpackedBool_); }

+    }

+    public int UnpackedBoolCount {

+      get { return unpackedBool_.Count; }

+    }

+    public bool GetUnpackedBool(int index) {

+      return unpackedBool_[index];

+    }

+    

+    public const int UnpackedEnumFieldNumber = 103;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> unpackedEnum_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> UnpackedEnumList {

+      get { return pbc::Lists.AsReadOnly(unpackedEnum_); }

+    }

+    public int UnpackedEnumCount {

+      get { return unpackedEnum_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetUnpackedEnum(int index) {

+      return unpackedEnum_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testUnpackedTypesFieldNames;

+      if (unpackedInt32_.Count > 0) {

+        output.WriteInt32Array(90, field_names[6], unpackedInt32_);

+      }

+      if (unpackedInt64_.Count > 0) {

+        output.WriteInt64Array(91, field_names[7], unpackedInt64_);

+      }

+      if (unpackedUint32_.Count > 0) {

+        output.WriteUInt32Array(92, field_names[12], unpackedUint32_);

+      }

+      if (unpackedUint64_.Count > 0) {

+        output.WriteUInt64Array(93, field_names[13], unpackedUint64_);

+      }

+      if (unpackedSint32_.Count > 0) {

+        output.WriteSInt32Array(94, field_names[10], unpackedSint32_);

+      }

+      if (unpackedSint64_.Count > 0) {

+        output.WriteSInt64Array(95, field_names[11], unpackedSint64_);

+      }

+      if (unpackedFixed32_.Count > 0) {

+        output.WriteFixed32Array(96, field_names[3], unpackedFixed32_);

+      }

+      if (unpackedFixed64_.Count > 0) {

+        output.WriteFixed64Array(97, field_names[4], unpackedFixed64_);

+      }

+      if (unpackedSfixed32_.Count > 0) {

+        output.WriteSFixed32Array(98, field_names[8], unpackedSfixed32_);

+      }

+      if (unpackedSfixed64_.Count > 0) {

+        output.WriteSFixed64Array(99, field_names[9], unpackedSfixed64_);

+      }

+      if (unpackedFloat_.Count > 0) {

+        output.WriteFloatArray(100, field_names[5], unpackedFloat_);

+      }

+      if (unpackedDouble_.Count > 0) {

+        output.WriteDoubleArray(101, field_names[1], unpackedDouble_);

+      }

+      if (unpackedBool_.Count > 0) {

+        output.WriteBoolArray(102, field_names[0], unpackedBool_);

+      }

+      if (unpackedEnum_.Count > 0) {

+        output.WriteEnumArray(103, field_names[2], unpackedEnum_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        foreach (int element in UnpackedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedInt32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in UnpackedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedInt64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (uint element in UnpackedUint32List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedUint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in UnpackedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedUint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in UnpackedSint32List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedSint32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in UnpackedSint64List) {

+          dataSize += pb::CodedOutputStream.ComputeSInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * unpackedSint64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * unpackedFixed32_.Count;

+        size += dataSize;

+        size += 2 * unpackedFixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * unpackedFixed64_.Count;

+        size += dataSize;

+        size += 2 * unpackedFixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * unpackedSfixed32_.Count;

+        size += dataSize;

+        size += 2 * unpackedSfixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * unpackedSfixed64_.Count;

+        size += dataSize;

+        size += 2 * unpackedSfixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * unpackedFloat_.Count;

+        size += dataSize;

+        size += 2 * unpackedFloat_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * unpackedDouble_.Count;

+        size += dataSize;

+        size += 2 * unpackedDouble_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 1 * unpackedBool_.Count;

+        size += dataSize;

+        size += 2 * unpackedBool_.Count;

+      }

+      {

+        int dataSize = 0;

+        if (unpackedEnum_.Count > 0) {

+          foreach (global::Google.ProtocolBuffers.TestProtos.ForeignEnum element in unpackedEnum_) {

+            dataSize += pb::CodedOutputStream.ComputeEnumSizeNoTag((int) element);

+          }

+          size += dataSize;

+          size += 2 * unpackedEnum_.Count;

+        }

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestUnpackedTypes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestUnpackedTypes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestUnpackedTypes MakeReadOnly() {

+      unpackedInt32_.MakeReadOnly();

+      unpackedInt64_.MakeReadOnly();

+      unpackedUint32_.MakeReadOnly();

+      unpackedUint64_.MakeReadOnly();

+      unpackedSint32_.MakeReadOnly();

+      unpackedSint64_.MakeReadOnly();

+      unpackedFixed32_.MakeReadOnly();

+      unpackedFixed64_.MakeReadOnly();

+      unpackedSfixed32_.MakeReadOnly();

+      unpackedSfixed64_.MakeReadOnly();

+      unpackedFloat_.MakeReadOnly();

+      unpackedDouble_.MakeReadOnly();

+      unpackedBool_.MakeReadOnly();

+      unpackedEnum_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestUnpackedTypes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestUnpackedTypes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestUnpackedTypes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestUnpackedTypes result;

+      

+      private TestUnpackedTypes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestUnpackedTypes original = result;

+          result = new TestUnpackedTypes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestUnpackedTypes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.Descriptor; }

+      }

+      

+      public override TestUnpackedTypes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.DefaultInstance; }

+      }

+      

+      public override TestUnpackedTypes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestUnpackedTypes) {

+          return MergeFrom((TestUnpackedTypes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestUnpackedTypes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestUnpackedTypes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.unpackedInt32_.Count != 0) {

+          result.unpackedInt32_.Add(other.unpackedInt32_);

+        }

+        if (other.unpackedInt64_.Count != 0) {

+          result.unpackedInt64_.Add(other.unpackedInt64_);

+        }

+        if (other.unpackedUint32_.Count != 0) {

+          result.unpackedUint32_.Add(other.unpackedUint32_);

+        }

+        if (other.unpackedUint64_.Count != 0) {

+          result.unpackedUint64_.Add(other.unpackedUint64_);

+        }

+        if (other.unpackedSint32_.Count != 0) {

+          result.unpackedSint32_.Add(other.unpackedSint32_);

+        }

+        if (other.unpackedSint64_.Count != 0) {

+          result.unpackedSint64_.Add(other.unpackedSint64_);

+        }

+        if (other.unpackedFixed32_.Count != 0) {

+          result.unpackedFixed32_.Add(other.unpackedFixed32_);

+        }

+        if (other.unpackedFixed64_.Count != 0) {

+          result.unpackedFixed64_.Add(other.unpackedFixed64_);

+        }

+        if (other.unpackedSfixed32_.Count != 0) {

+          result.unpackedSfixed32_.Add(other.unpackedSfixed32_);

+        }

+        if (other.unpackedSfixed64_.Count != 0) {

+          result.unpackedSfixed64_.Add(other.unpackedSfixed64_);

+        }

+        if (other.unpackedFloat_.Count != 0) {

+          result.unpackedFloat_.Add(other.unpackedFloat_);

+        }

+        if (other.unpackedDouble_.Count != 0) {

+          result.unpackedDouble_.Add(other.unpackedDouble_);

+        }

+        if (other.unpackedBool_.Count != 0) {

+          result.unpackedBool_.Add(other.unpackedBool_);

+        }

+        if (other.unpackedEnum_.Count != 0) {

+          result.unpackedEnum_.Add(other.unpackedEnum_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testUnpackedTypesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testUnpackedTypesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 722:

+            case 720: {

+              input.ReadInt32Array(tag, field_name, result.unpackedInt32_);

+              break;

+            }

+            case 730:

+            case 728: {

+              input.ReadInt64Array(tag, field_name, result.unpackedInt64_);

+              break;

+            }

+            case 738:

+            case 736: {

+              input.ReadUInt32Array(tag, field_name, result.unpackedUint32_);

+              break;

+            }

+            case 746:

+            case 744: {

+              input.ReadUInt64Array(tag, field_name, result.unpackedUint64_);

+              break;

+            }

+            case 754:

+            case 752: {

+              input.ReadSInt32Array(tag, field_name, result.unpackedSint32_);

+              break;

+            }

+            case 762:

+            case 760: {

+              input.ReadSInt64Array(tag, field_name, result.unpackedSint64_);

+              break;

+            }

+            case 770:

+            case 773: {

+              input.ReadFixed32Array(tag, field_name, result.unpackedFixed32_);

+              break;

+            }

+            case 778:

+            case 777: {

+              input.ReadFixed64Array(tag, field_name, result.unpackedFixed64_);

+              break;

+            }

+            case 786:

+            case 789: {

+              input.ReadSFixed32Array(tag, field_name, result.unpackedSfixed32_);

+              break;

+            }

+            case 794:

+            case 793: {

+              input.ReadSFixed64Array(tag, field_name, result.unpackedSfixed64_);

+              break;

+            }

+            case 802:

+            case 805: {

+              input.ReadFloatArray(tag, field_name, result.unpackedFloat_);

+              break;

+            }

+            case 810:

+            case 809: {

+              input.ReadDoubleArray(tag, field_name, result.unpackedDouble_);

+              break;

+            }

+            case 818:

+            case 816: {

+              input.ReadBoolArray(tag, field_name, result.unpackedBool_);

+              break;

+            }

+            case 826:

+            case 824: {

+              scg::ICollection<object> unknownItems;

+              input.ReadEnumArray<global::Google.ProtocolBuffers.TestProtos.ForeignEnum>(tag, field_name, result.unpackedEnum_, out unknownItems);

+              if (unknownItems != null) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                foreach (object rawValue in unknownItems)

+                  if (rawValue is int)

+                    unknownFields.MergeVarintField(103, (ulong)(int)rawValue);

+              }

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<int> UnpackedInt32List {

+        get { return PrepareBuilder().unpackedInt32_; }

+      }

+      public int UnpackedInt32Count {

+        get { return result.UnpackedInt32Count; }

+      }

+      public int GetUnpackedInt32(int index) {

+        return result.GetUnpackedInt32(index);

+      }

+      public Builder SetUnpackedInt32(int index, int value) {

+        PrepareBuilder();

+        result.unpackedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedInt32(int value) {

+        PrepareBuilder();

+        result.unpackedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.unpackedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedInt32() {

+        PrepareBuilder();

+        result.unpackedInt32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> UnpackedInt64List {

+        get { return PrepareBuilder().unpackedInt64_; }

+      }

+      public int UnpackedInt64Count {

+        get { return result.UnpackedInt64Count; }

+      }

+      public long GetUnpackedInt64(int index) {

+        return result.GetUnpackedInt64(index);

+      }

+      public Builder SetUnpackedInt64(int index, long value) {

+        PrepareBuilder();

+        result.unpackedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedInt64(long value) {

+        PrepareBuilder();

+        result.unpackedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.unpackedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedInt64() {

+        PrepareBuilder();

+        result.unpackedInt64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> UnpackedUint32List {

+        get { return PrepareBuilder().unpackedUint32_; }

+      }

+      public int UnpackedUint32Count {

+        get { return result.UnpackedUint32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetUnpackedUint32(int index) {

+        return result.GetUnpackedUint32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedUint32(int index, uint value) {

+        PrepareBuilder();

+        result.unpackedUint32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedUint32(uint value) {

+        PrepareBuilder();

+        result.unpackedUint32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedUint32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.unpackedUint32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedUint32() {

+        PrepareBuilder();

+        result.unpackedUint32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> UnpackedUint64List {

+        get { return PrepareBuilder().unpackedUint64_; }

+      }

+      public int UnpackedUint64Count {

+        get { return result.UnpackedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetUnpackedUint64(int index) {

+        return result.GetUnpackedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.unpackedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedUint64(ulong value) {

+        PrepareBuilder();

+        result.unpackedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.unpackedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedUint64() {

+        PrepareBuilder();

+        result.unpackedUint64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> UnpackedSint32List {

+        get { return PrepareBuilder().unpackedSint32_; }

+      }

+      public int UnpackedSint32Count {

+        get { return result.UnpackedSint32Count; }

+      }

+      public int GetUnpackedSint32(int index) {

+        return result.GetUnpackedSint32(index);

+      }

+      public Builder SetUnpackedSint32(int index, int value) {

+        PrepareBuilder();

+        result.unpackedSint32_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSint32(int value) {

+        PrepareBuilder();

+        result.unpackedSint32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSint32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.unpackedSint32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSint32() {

+        PrepareBuilder();

+        result.unpackedSint32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> UnpackedSint64List {

+        get { return PrepareBuilder().unpackedSint64_; }

+      }

+      public int UnpackedSint64Count {

+        get { return result.UnpackedSint64Count; }

+      }

+      public long GetUnpackedSint64(int index) {

+        return result.GetUnpackedSint64(index);

+      }

+      public Builder SetUnpackedSint64(int index, long value) {

+        PrepareBuilder();

+        result.unpackedSint64_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSint64(long value) {

+        PrepareBuilder();

+        result.unpackedSint64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSint64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.unpackedSint64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSint64() {

+        PrepareBuilder();

+        result.unpackedSint64_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> UnpackedFixed32List {

+        get { return PrepareBuilder().unpackedFixed32_; }

+      }

+      public int UnpackedFixed32Count {

+        get { return result.UnpackedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetUnpackedFixed32(int index) {

+        return result.GetUnpackedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.unpackedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedFixed32(uint value) {

+        PrepareBuilder();

+        result.unpackedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.unpackedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedFixed32() {

+        PrepareBuilder();

+        result.unpackedFixed32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> UnpackedFixed64List {

+        get { return PrepareBuilder().unpackedFixed64_; }

+      }

+      public int UnpackedFixed64Count {

+        get { return result.UnpackedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetUnpackedFixed64(int index) {

+        return result.GetUnpackedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetUnpackedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.unpackedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddUnpackedFixed64(ulong value) {

+        PrepareBuilder();

+        result.unpackedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeUnpackedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.unpackedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedFixed64() {

+        PrepareBuilder();

+        result.unpackedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> UnpackedSfixed32List {

+        get { return PrepareBuilder().unpackedSfixed32_; }

+      }

+      public int UnpackedSfixed32Count {

+        get { return result.UnpackedSfixed32Count; }

+      }

+      public int GetUnpackedSfixed32(int index) {

+        return result.GetUnpackedSfixed32(index);

+      }

+      public Builder SetUnpackedSfixed32(int index, int value) {

+        PrepareBuilder();

+        result.unpackedSfixed32_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSfixed32(int value) {

+        PrepareBuilder();

+        result.unpackedSfixed32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSfixed32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.unpackedSfixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSfixed32() {

+        PrepareBuilder();

+        result.unpackedSfixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> UnpackedSfixed64List {

+        get { return PrepareBuilder().unpackedSfixed64_; }

+      }

+      public int UnpackedSfixed64Count {

+        get { return result.UnpackedSfixed64Count; }

+      }

+      public long GetUnpackedSfixed64(int index) {

+        return result.GetUnpackedSfixed64(index);

+      }

+      public Builder SetUnpackedSfixed64(int index, long value) {

+        PrepareBuilder();

+        result.unpackedSfixed64_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedSfixed64(long value) {

+        PrepareBuilder();

+        result.unpackedSfixed64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedSfixed64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.unpackedSfixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedSfixed64() {

+        PrepareBuilder();

+        result.unpackedSfixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> UnpackedFloatList {

+        get { return PrepareBuilder().unpackedFloat_; }

+      }

+      public int UnpackedFloatCount {

+        get { return result.UnpackedFloatCount; }

+      }

+      public float GetUnpackedFloat(int index) {

+        return result.GetUnpackedFloat(index);

+      }

+      public Builder SetUnpackedFloat(int index, float value) {

+        PrepareBuilder();

+        result.unpackedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedFloat(float value) {

+        PrepareBuilder();

+        result.unpackedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.unpackedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedFloat() {

+        PrepareBuilder();

+        result.unpackedFloat_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<double> UnpackedDoubleList {

+        get { return PrepareBuilder().unpackedDouble_; }

+      }

+      public int UnpackedDoubleCount {

+        get { return result.UnpackedDoubleCount; }

+      }

+      public double GetUnpackedDouble(int index) {

+        return result.GetUnpackedDouble(index);

+      }

+      public Builder SetUnpackedDouble(int index, double value) {

+        PrepareBuilder();

+        result.unpackedDouble_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedDouble(double value) {

+        PrepareBuilder();

+        result.unpackedDouble_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedDouble(scg::IEnumerable<double> values) {

+        PrepareBuilder();

+        result.unpackedDouble_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedDouble() {

+        PrepareBuilder();

+        result.unpackedDouble_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<bool> UnpackedBoolList {

+        get { return PrepareBuilder().unpackedBool_; }

+      }

+      public int UnpackedBoolCount {

+        get { return result.UnpackedBoolCount; }

+      }

+      public bool GetUnpackedBool(int index) {

+        return result.GetUnpackedBool(index);

+      }

+      public Builder SetUnpackedBool(int index, bool value) {

+        PrepareBuilder();

+        result.unpackedBool_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedBool(bool value) {

+        PrepareBuilder();

+        result.unpackedBool_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedBool(scg::IEnumerable<bool> values) {

+        PrepareBuilder();

+        result.unpackedBool_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedBool() {

+        PrepareBuilder();

+        result.unpackedBool_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> UnpackedEnumList {

+        get { return PrepareBuilder().unpackedEnum_; }

+      }

+      public int UnpackedEnumCount {

+        get { return result.UnpackedEnumCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum GetUnpackedEnum(int index) {

+        return result.GetUnpackedEnum(index);

+      }

+      public Builder SetUnpackedEnum(int index, global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.unpackedEnum_[index] = value;

+        return this;

+      }

+      public Builder AddUnpackedEnum(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.unpackedEnum_.Add(value);

+        return this;

+      }

+      public Builder AddRangeUnpackedEnum(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.ForeignEnum> values) {

+        PrepareBuilder();

+        result.unpackedEnum_.Add(values);

+        return this;

+      }

+      public Builder ClearUnpackedEnum() {

+        PrepareBuilder();

+        result.unpackedEnum_.Clear();

+        return this;

+      }

+    }

+    static TestUnpackedTypes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestPackedExtensions : pb::ExtendableMessage<TestPackedExtensions, TestPackedExtensions.Builder> {

+    private TestPackedExtensions() { }

+    private static readonly TestPackedExtensions defaultInstance = new TestPackedExtensions().MakeReadOnly();

+    private static readonly string[] _testPackedExtensionsFieldNames = new string[] {  };

+    private static readonly uint[] _testPackedExtensionsFieldTags = new uint[] {  };

+    public static TestPackedExtensions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestPackedExtensions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestPackedExtensions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestPackedExtensions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestPackedExtensions, TestPackedExtensions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestPackedExtensions__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!ExtensionsAreInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testPackedExtensionsFieldNames;

+      pb::ExtendableMessage<TestPackedExtensions, TestPackedExtensions.Builder>.ExtensionWriter extensionWriter = CreateExtensionWriter(this);

+      extensionWriter.WriteUntil(536870912, output);

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += ExtensionsSerializedSize;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestPackedExtensions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestPackedExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestPackedExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestPackedExtensions MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestPackedExtensions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::ExtendableBuilder<TestPackedExtensions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestPackedExtensions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestPackedExtensions result;

+      

+      private TestPackedExtensions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestPackedExtensions original = result;

+          result = new TestPackedExtensions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestPackedExtensions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.Descriptor; }

+      }

+      

+      public override TestPackedExtensions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.DefaultInstance; }

+      }

+      

+      public override TestPackedExtensions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestPackedExtensions) {

+          return MergeFrom((TestPackedExtensions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestPackedExtensions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestPackedExtensions.DefaultInstance) return this;

+        PrepareBuilder();

+          this.MergeExtensionFields(other);

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testPackedExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testPackedExtensionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static TestPackedExtensions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestDynamicExtensions : pb::GeneratedMessage<TestDynamicExtensions, TestDynamicExtensions.Builder> {

+    private TestDynamicExtensions() { }

+    private static readonly TestDynamicExtensions defaultInstance = new TestDynamicExtensions().MakeReadOnly();

+    private static readonly string[] _testDynamicExtensionsFieldNames = new string[] { "dynamic_enum_extension", "dynamic_message_extension", "enum_extension", "message_extension", "packed_extension", "repeated_extension", "scalar_extension" };

+    private static readonly uint[] _testDynamicExtensionsFieldTags = new uint[] { 16016, 16034, 16008, 16026, 16050, 16042, 16005 };

+    public static TestDynamicExtensions DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestDynamicExtensions DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestDynamicExtensions ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDynamicExtensions__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestDynamicExtensions, TestDynamicExtensions.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDynamicExtensions__FieldAccessorTable; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      public enum DynamicEnumType {

+        DYNAMIC_FOO = 2200,

+        DYNAMIC_BAR = 2201,

+        DYNAMIC_BAZ = 2202,

+      }

+      

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class DynamicMessageType : pb::GeneratedMessage<DynamicMessageType, DynamicMessageType.Builder> {

+        private DynamicMessageType() { }

+        private static readonly DynamicMessageType defaultInstance = new DynamicMessageType().MakeReadOnly();

+        private static readonly string[] _dynamicMessageTypeFieldNames = new string[] { "dynamic_field" };

+        private static readonly uint[] _dynamicMessageTypeFieldTags = new uint[] { 16800 };

+        public static DynamicMessageType DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override DynamicMessageType DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override DynamicMessageType ThisMessage {

+          get { return this; }

+        }

+        

+        public static pbd::MessageDescriptor Descriptor {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__Descriptor; }

+        }

+        

+        protected override pb::FieldAccess.FieldAccessorTable<DynamicMessageType, DynamicMessageType.Builder> InternalFieldAccessors {

+          get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestDynamicExtensions_DynamicMessageType__FieldAccessorTable; }

+        }

+        

+        public const int DynamicFieldFieldNumber = 2100;

+        private bool hasDynamicField;

+        private int dynamicField_;

+        public bool HasDynamicField {

+          get { return hasDynamicField; }

+        }

+        public int DynamicField {

+          get { return dynamicField_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _dynamicMessageTypeFieldNames;

+          if (hasDynamicField) {

+            output.WriteInt32(2100, field_names[0], DynamicField);

+          }

+          UnknownFields.WriteTo(output);

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasDynamicField) {

+            size += pb::CodedOutputStream.ComputeInt32Size(2100, DynamicField);

+          }

+          size += UnknownFields.SerializedSize;

+          memoizedSerializedSize = size;

+          return size;

+        }

+        public static DynamicMessageType ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static DynamicMessageType ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static DynamicMessageType ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static DynamicMessageType ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private DynamicMessageType MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(DynamicMessageType prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilder<DynamicMessageType, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(DynamicMessageType cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private DynamicMessageType result;

+          

+          private DynamicMessageType PrepareBuilder() {

+            if (resultIsReadOnly) {

+              DynamicMessageType original = result;

+              result = new DynamicMessageType();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override DynamicMessageType MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override pbd::MessageDescriptor DescriptorForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Descriptor; }

+          }

+          

+          public override DynamicMessageType DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance; }

+          }

+          

+          public override DynamicMessageType BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessage other) {

+            if (other is DynamicMessageType) {

+              return MergeFrom((DynamicMessageType) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(DynamicMessageType other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasDynamicField) {

+              DynamicField = other.DynamicField;

+            }

+            this.MergeUnknownFields(other.UnknownFields);

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            pb::UnknownFieldSet.Builder unknownFields = null;

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_dynamicMessageTypeFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _dynamicMessageTypeFieldTags[field_ordinal];

+                else {

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    if (unknownFields != null) {

+                      this.UnknownFields = unknownFields.Build();

+                    }

+                    return this;

+                  }

+                  if (unknownFields == null) {

+                    unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                  }

+                  ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 16800: {

+                  result.hasDynamicField = input.ReadInt32(ref result.dynamicField_);

+                  break;

+                }

+              }

+            }

+            

+            if (unknownFields != null) {

+              this.UnknownFields = unknownFields.Build();

+            }

+            return this;

+          }

+          

+          

+          public bool HasDynamicField {

+            get { return result.hasDynamicField; }

+          }

+          public int DynamicField {

+            get { return result.DynamicField; }

+            set { SetDynamicField(value); }

+          }

+          public Builder SetDynamicField(int value) {

+            PrepareBuilder();

+            result.hasDynamicField = true;

+            result.dynamicField_ = value;

+            return this;

+          }

+          public Builder ClearDynamicField() {

+            PrepareBuilder();

+            result.hasDynamicField = false;

+            result.dynamicField_ = 0;

+            return this;

+          }

+        }

+        static DynamicMessageType() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int ScalarExtensionFieldNumber = 2000;

+    private bool hasScalarExtension;

+    private uint scalarExtension_;

+    public bool HasScalarExtension {

+      get { return hasScalarExtension; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint ScalarExtension {

+      get { return scalarExtension_; }

+    }

+    

+    public const int EnumExtensionFieldNumber = 2001;

+    private bool hasEnumExtension;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignEnum enumExtension_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+    public bool HasEnumExtension {

+      get { return hasEnumExtension; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumExtension {

+      get { return enumExtension_; }

+    }

+    

+    public const int DynamicEnumExtensionFieldNumber = 2002;

+    private bool hasDynamicEnumExtension;

+    private global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType dynamicEnumExtension_ = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType.DYNAMIC_FOO;

+    public bool HasDynamicEnumExtension {

+      get { return hasDynamicEnumExtension; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType DynamicEnumExtension {

+      get { return dynamicEnumExtension_; }

+    }

+    

+    public const int MessageExtensionFieldNumber = 2003;

+    private bool hasMessageExtension;

+    private global::Google.ProtocolBuffers.TestProtos.ForeignMessage messageExtension_;

+    public bool HasMessageExtension {

+      get { return hasMessageExtension; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageExtension {

+      get { return messageExtension_ ?? global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance; }

+    }

+    

+    public const int DynamicMessageExtensionFieldNumber = 2004;

+    private bool hasDynamicMessageExtension;

+    private global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType dynamicMessageExtension_;

+    public bool HasDynamicMessageExtension {

+      get { return hasDynamicMessageExtension; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType DynamicMessageExtension {

+      get { return dynamicMessageExtension_ ?? global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance; }

+    }

+    

+    public const int RepeatedExtensionFieldNumber = 2005;

+    private pbc::PopsicleList<string> repeatedExtension_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> RepeatedExtensionList {

+      get { return pbc::Lists.AsReadOnly(repeatedExtension_); }

+    }

+    public int RepeatedExtensionCount {

+      get { return repeatedExtension_.Count; }

+    }

+    public string GetRepeatedExtension(int index) {

+      return repeatedExtension_[index];

+    }

+    

+    public const int PackedExtensionFieldNumber = 2006;

+    private int packedExtensionMemoizedSerializedSize;

+    private pbc::PopsicleList<int> packedExtension_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> PackedExtensionList {

+      get { return pbc::Lists.AsReadOnly(packedExtension_); }

+    }

+    public int PackedExtensionCount {

+      get { return packedExtension_.Count; }

+    }

+    public int GetPackedExtension(int index) {

+      return packedExtension_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testDynamicExtensionsFieldNames;

+      if (hasScalarExtension) {

+        output.WriteFixed32(2000, field_names[6], ScalarExtension);

+      }

+      if (hasEnumExtension) {

+        output.WriteEnum(2001, field_names[2], (int) EnumExtension, EnumExtension);

+      }

+      if (hasDynamicEnumExtension) {

+        output.WriteEnum(2002, field_names[0], (int) DynamicEnumExtension, DynamicEnumExtension);

+      }

+      if (hasMessageExtension) {

+        output.WriteMessage(2003, field_names[3], MessageExtension);

+      }

+      if (hasDynamicMessageExtension) {

+        output.WriteMessage(2004, field_names[1], DynamicMessageExtension);

+      }

+      if (repeatedExtension_.Count > 0) {

+        output.WriteStringArray(2005, field_names[5], repeatedExtension_);

+      }

+      if (packedExtension_.Count > 0) {

+        output.WritePackedSInt32Array(2006, field_names[4], packedExtensionMemoizedSerializedSize, packedExtension_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      if (hasScalarExtension) {

+        size += pb::CodedOutputStream.ComputeFixed32Size(2000, ScalarExtension);

+      }

+      if (hasEnumExtension) {

+        size += pb::CodedOutputStream.ComputeEnumSize(2001, (int) EnumExtension);

+      }

+      if (hasDynamicEnumExtension) {

+        size += pb::CodedOutputStream.ComputeEnumSize(2002, (int) DynamicEnumExtension);

+      }

+      if (hasMessageExtension) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2003, MessageExtension);

+      }

+      if (hasDynamicMessageExtension) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2004, DynamicMessageExtension);

+      }

+      {

+        int dataSize = 0;

+        foreach (string element in RepeatedExtensionList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedExtension_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in PackedExtensionList) {

+          dataSize += pb::CodedOutputStream.ComputeSInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        if (packedExtension_.Count != 0) {

+          size += 2 + pb::CodedOutputStream.ComputeInt32SizeNoTag(dataSize);

+        }

+        packedExtensionMemoizedSerializedSize = dataSize;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestDynamicExtensions ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestDynamicExtensions ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestDynamicExtensions MakeReadOnly() {

+      repeatedExtension_.MakeReadOnly();

+      packedExtension_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestDynamicExtensions prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestDynamicExtensions, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestDynamicExtensions cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestDynamicExtensions result;

+      

+      private TestDynamicExtensions PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestDynamicExtensions original = result;

+          result = new TestDynamicExtensions();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestDynamicExtensions MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Descriptor; }

+      }

+      

+      public override TestDynamicExtensions DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.DefaultInstance; }

+      }

+      

+      public override TestDynamicExtensions BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestDynamicExtensions) {

+          return MergeFrom((TestDynamicExtensions) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestDynamicExtensions other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.HasScalarExtension) {

+          ScalarExtension = other.ScalarExtension;

+        }

+        if (other.HasEnumExtension) {

+          EnumExtension = other.EnumExtension;

+        }

+        if (other.HasDynamicEnumExtension) {

+          DynamicEnumExtension = other.DynamicEnumExtension;

+        }

+        if (other.HasMessageExtension) {

+          MergeMessageExtension(other.MessageExtension);

+        }

+        if (other.HasDynamicMessageExtension) {

+          MergeDynamicMessageExtension(other.DynamicMessageExtension);

+        }

+        if (other.repeatedExtension_.Count != 0) {

+          result.repeatedExtension_.Add(other.repeatedExtension_);

+        }

+        if (other.packedExtension_.Count != 0) {

+          result.packedExtension_.Add(other.packedExtension_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testDynamicExtensionsFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testDynamicExtensionsFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 16005: {

+              result.hasScalarExtension = input.ReadFixed32(ref result.scalarExtension_);

+              break;

+            }

+            case 16008: {

+              object unknown;

+              if(input.ReadEnum(ref result.enumExtension_, out unknown)) {

+                result.hasEnumExtension = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(2001, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 16016: {

+              object unknown;

+              if(input.ReadEnum(ref result.dynamicEnumExtension_, out unknown)) {

+                result.hasDynamicEnumExtension = true;

+              } else if(unknown is int) {

+                if (unknownFields == null) {

+                  unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+                }

+                unknownFields.MergeVarintField(2002, (ulong)(int)unknown);

+              }

+              break;

+            }

+            case 16026: {

+              global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder();

+              if (result.hasMessageExtension) {

+                subBuilder.MergeFrom(MessageExtension);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              MessageExtension = subBuilder.BuildPartial();

+              break;

+            }

+            case 16034: {

+              global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.CreateBuilder();

+              if (result.hasDynamicMessageExtension) {

+                subBuilder.MergeFrom(DynamicMessageExtension);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              DynamicMessageExtension = subBuilder.BuildPartial();

+              break;

+            }

+            case 16042: {

+              input.ReadStringArray(tag, field_name, result.repeatedExtension_);

+              break;

+            }

+            case 16050:

+            case 16048: {

+              input.ReadSInt32Array(tag, field_name, result.packedExtension_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      public bool HasScalarExtension {

+        get { return result.hasScalarExtension; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint ScalarExtension {

+        get { return result.ScalarExtension; }

+        set { SetScalarExtension(value); }

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetScalarExtension(uint value) {

+        PrepareBuilder();

+        result.hasScalarExtension = true;

+        result.scalarExtension_ = value;

+        return this;

+      }

+      public Builder ClearScalarExtension() {

+        PrepareBuilder();

+        result.hasScalarExtension = false;

+        result.scalarExtension_ = 0;

+        return this;

+      }

+      

+      public bool HasEnumExtension {

+       get { return result.hasEnumExtension; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignEnum EnumExtension {

+        get { return result.EnumExtension; }

+        set { SetEnumExtension(value); }

+      }

+      public Builder SetEnumExtension(global::Google.ProtocolBuffers.TestProtos.ForeignEnum value) {

+        PrepareBuilder();

+        result.hasEnumExtension = true;

+        result.enumExtension_ = value;

+        return this;

+      }

+      public Builder ClearEnumExtension() {

+        PrepareBuilder();

+        result.hasEnumExtension = false;

+        result.enumExtension_ = global::Google.ProtocolBuffers.TestProtos.ForeignEnum.FOREIGN_FOO;

+        return this;

+      }

+      

+      public bool HasDynamicEnumExtension {

+       get { return result.hasDynamicEnumExtension; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType DynamicEnumExtension {

+        get { return result.DynamicEnumExtension; }

+        set { SetDynamicEnumExtension(value); }

+      }

+      public Builder SetDynamicEnumExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType value) {

+        PrepareBuilder();

+        result.hasDynamicEnumExtension = true;

+        result.dynamicEnumExtension_ = value;

+        return this;

+      }

+      public Builder ClearDynamicEnumExtension() {

+        PrepareBuilder();

+        result.hasDynamicEnumExtension = false;

+        result.dynamicEnumExtension_ = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicEnumType.DYNAMIC_FOO;

+        return this;

+      }

+      

+      public bool HasMessageExtension {

+       get { return result.hasMessageExtension; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.ForeignMessage MessageExtension {

+        get { return result.MessageExtension; }

+        set { SetMessageExtension(value); }

+      }

+      public Builder SetMessageExtension(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasMessageExtension = true;

+        result.messageExtension_ = value;

+        return this;

+      }

+      public Builder SetMessageExtension(global::Google.ProtocolBuffers.TestProtos.ForeignMessage.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasMessageExtension = true;

+        result.messageExtension_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeMessageExtension(global::Google.ProtocolBuffers.TestProtos.ForeignMessage value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasMessageExtension &&

+            result.messageExtension_ != global::Google.ProtocolBuffers.TestProtos.ForeignMessage.DefaultInstance) {

+            result.messageExtension_ = global::Google.ProtocolBuffers.TestProtos.ForeignMessage.CreateBuilder(result.messageExtension_).MergeFrom(value).BuildPartial();

+        } else {

+          result.messageExtension_ = value;

+        }

+        result.hasMessageExtension = true;

+        return this;

+      }

+      public Builder ClearMessageExtension() {

+        PrepareBuilder();

+        result.hasMessageExtension = false;

+        result.messageExtension_ = null;

+        return this;

+      }

+      

+      public bool HasDynamicMessageExtension {

+       get { return result.hasDynamicMessageExtension; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType DynamicMessageExtension {

+        get { return result.DynamicMessageExtension; }

+        set { SetDynamicMessageExtension(value); }

+      }

+      public Builder SetDynamicMessageExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasDynamicMessageExtension = true;

+        result.dynamicMessageExtension_ = value;

+        return this;

+      }

+      public Builder SetDynamicMessageExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasDynamicMessageExtension = true;

+        result.dynamicMessageExtension_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergeDynamicMessageExtension(global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasDynamicMessageExtension &&

+            result.dynamicMessageExtension_ != global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.DefaultInstance) {

+            result.dynamicMessageExtension_ = global::Google.ProtocolBuffers.TestProtos.TestDynamicExtensions.Types.DynamicMessageType.CreateBuilder(result.dynamicMessageExtension_).MergeFrom(value).BuildPartial();

+        } else {

+          result.dynamicMessageExtension_ = value;

+        }

+        result.hasDynamicMessageExtension = true;

+        return this;

+      }

+      public Builder ClearDynamicMessageExtension() {

+        PrepareBuilder();

+        result.hasDynamicMessageExtension = false;

+        result.dynamicMessageExtension_ = null;

+        return this;

+      }

+      

+      public pbc::IPopsicleList<string> RepeatedExtensionList {

+        get { return PrepareBuilder().repeatedExtension_; }

+      }

+      public int RepeatedExtensionCount {

+        get { return result.RepeatedExtensionCount; }

+      }

+      public string GetRepeatedExtension(int index) {

+        return result.GetRepeatedExtension(index);

+      }

+      public Builder SetRepeatedExtension(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedExtension_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedExtension(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.repeatedExtension_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedExtension(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.repeatedExtension_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedExtension() {

+        PrepareBuilder();

+        result.repeatedExtension_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> PackedExtensionList {

+        get { return PrepareBuilder().packedExtension_; }

+      }

+      public int PackedExtensionCount {

+        get { return result.PackedExtensionCount; }

+      }

+      public int GetPackedExtension(int index) {

+        return result.GetPackedExtension(index);

+      }

+      public Builder SetPackedExtension(int index, int value) {

+        PrepareBuilder();

+        result.packedExtension_[index] = value;

+        return this;

+      }

+      public Builder AddPackedExtension(int value) {

+        PrepareBuilder();

+        result.packedExtension_.Add(value);

+        return this;

+      }

+      public Builder AddRangePackedExtension(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.packedExtension_.Add(values);

+        return this;

+      }

+      public Builder ClearPackedExtension() {

+        PrepareBuilder();

+        result.packedExtension_.Clear();

+        return this;

+      }

+    }

+    static TestDynamicExtensions() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class TestRepeatedScalarDifferentTagSizes : pb::GeneratedMessage<TestRepeatedScalarDifferentTagSizes, TestRepeatedScalarDifferentTagSizes.Builder> {

+    private TestRepeatedScalarDifferentTagSizes() { }

+    private static readonly TestRepeatedScalarDifferentTagSizes defaultInstance = new TestRepeatedScalarDifferentTagSizes().MakeReadOnly();

+    private static readonly string[] _testRepeatedScalarDifferentTagSizesFieldNames = new string[] { "repeated_fixed32", "repeated_fixed64", "repeated_float", "repeated_int32", "repeated_int64", "repeated_uint64" };

+    private static readonly uint[] _testRepeatedScalarDifferentTagSizesFieldTags = new uint[] { 101, 16369, 2097141, 104, 16376, 2097144 };

+    public static TestRepeatedScalarDifferentTagSizes DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override TestRepeatedScalarDifferentTagSizes DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override TestRepeatedScalarDifferentTagSizes ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<TestRepeatedScalarDifferentTagSizes, TestRepeatedScalarDifferentTagSizes.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_TestRepeatedScalarDifferentTagSizes__FieldAccessorTable; }

+    }

+    

+    public const int RepeatedFixed32FieldNumber = 12;

+    private pbc::PopsicleList<uint> repeatedFixed32_ = new pbc::PopsicleList<uint>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<uint> RepeatedFixed32List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed32_); }

+    }

+    public int RepeatedFixed32Count {

+      get { return repeatedFixed32_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public uint GetRepeatedFixed32(int index) {

+      return repeatedFixed32_[index];

+    }

+    

+    public const int RepeatedInt32FieldNumber = 13;

+    private pbc::PopsicleList<int> repeatedInt32_ = new pbc::PopsicleList<int>();

+    public scg::IList<int> RepeatedInt32List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt32_); }

+    }

+    public int RepeatedInt32Count {

+      get { return repeatedInt32_.Count; }

+    }

+    public int GetRepeatedInt32(int index) {

+      return repeatedInt32_[index];

+    }

+    

+    public const int RepeatedFixed64FieldNumber = 2046;

+    private pbc::PopsicleList<ulong> repeatedFixed64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedFixed64List {

+      get { return pbc::Lists.AsReadOnly(repeatedFixed64_); }

+    }

+    public int RepeatedFixed64Count {

+      get { return repeatedFixed64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedFixed64(int index) {

+      return repeatedFixed64_[index];

+    }

+    

+    public const int RepeatedInt64FieldNumber = 2047;

+    private pbc::PopsicleList<long> repeatedInt64_ = new pbc::PopsicleList<long>();

+    public scg::IList<long> RepeatedInt64List {

+      get { return pbc::Lists.AsReadOnly(repeatedInt64_); }

+    }

+    public int RepeatedInt64Count {

+      get { return repeatedInt64_.Count; }

+    }

+    public long GetRepeatedInt64(int index) {

+      return repeatedInt64_[index];

+    }

+    

+    public const int RepeatedFloatFieldNumber = 262142;

+    private pbc::PopsicleList<float> repeatedFloat_ = new pbc::PopsicleList<float>();

+    public scg::IList<float> RepeatedFloatList {

+      get { return pbc::Lists.AsReadOnly(repeatedFloat_); }

+    }

+    public int RepeatedFloatCount {

+      get { return repeatedFloat_.Count; }

+    }

+    public float GetRepeatedFloat(int index) {

+      return repeatedFloat_[index];

+    }

+    

+    public const int RepeatedUint64FieldNumber = 262143;

+    private pbc::PopsicleList<ulong> repeatedUint64_ = new pbc::PopsicleList<ulong>();

+    [global::System.CLSCompliant(false)]

+    public scg::IList<ulong> RepeatedUint64List {

+      get { return pbc::Lists.AsReadOnly(repeatedUint64_); }

+    }

+    public int RepeatedUint64Count {

+      get { return repeatedUint64_.Count; }

+    }

+    [global::System.CLSCompliant(false)]

+    public ulong GetRepeatedUint64(int index) {

+      return repeatedUint64_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _testRepeatedScalarDifferentTagSizesFieldNames;

+      if (repeatedFixed32_.Count > 0) {

+        output.WriteFixed32Array(12, field_names[0], repeatedFixed32_);

+      }

+      if (repeatedInt32_.Count > 0) {

+        output.WriteInt32Array(13, field_names[3], repeatedInt32_);

+      }

+      if (repeatedFixed64_.Count > 0) {

+        output.WriteFixed64Array(2046, field_names[1], repeatedFixed64_);

+      }

+      if (repeatedInt64_.Count > 0) {

+        output.WriteInt64Array(2047, field_names[4], repeatedInt64_);

+      }

+      if (repeatedFloat_.Count > 0) {

+        output.WriteFloatArray(262142, field_names[2], repeatedFloat_);

+      }

+      if (repeatedUint64_.Count > 0) {

+        output.WriteUInt64Array(262143, field_names[5], repeatedUint64_);

+      }

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFixed32_.Count;

+        size += dataSize;

+        size += 1 * repeatedFixed32_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (int element in RepeatedInt32List) {

+          dataSize += pb::CodedOutputStream.ComputeInt32SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * repeatedInt32_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 8 * repeatedFixed64_.Count;

+        size += dataSize;

+        size += 2 * repeatedFixed64_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (long element in RepeatedInt64List) {

+          dataSize += pb::CodedOutputStream.ComputeInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 2 * repeatedInt64_.Count;

+      }

+      {

+        int dataSize = 0;

+        dataSize = 4 * repeatedFloat_.Count;

+        size += dataSize;

+        size += 3 * repeatedFloat_.Count;

+      }

+      {

+        int dataSize = 0;

+        foreach (ulong element in RepeatedUint64List) {

+          dataSize += pb::CodedOutputStream.ComputeUInt64SizeNoTag(element);

+        }

+        size += dataSize;

+        size += 3 * repeatedUint64_.Count;

+      }

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static TestRepeatedScalarDifferentTagSizes ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private TestRepeatedScalarDifferentTagSizes MakeReadOnly() {

+      repeatedFixed32_.MakeReadOnly();

+      repeatedInt32_.MakeReadOnly();

+      repeatedFixed64_.MakeReadOnly();

+      repeatedInt64_.MakeReadOnly();

+      repeatedFloat_.MakeReadOnly();

+      repeatedUint64_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(TestRepeatedScalarDifferentTagSizes prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<TestRepeatedScalarDifferentTagSizes, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(TestRepeatedScalarDifferentTagSizes cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private TestRepeatedScalarDifferentTagSizes result;

+      

+      private TestRepeatedScalarDifferentTagSizes PrepareBuilder() {

+        if (resultIsReadOnly) {

+          TestRepeatedScalarDifferentTagSizes original = result;

+          result = new TestRepeatedScalarDifferentTagSizes();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override TestRepeatedScalarDifferentTagSizes MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.Descriptor; }

+      }

+      

+      public override TestRepeatedScalarDifferentTagSizes DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.DefaultInstance; }

+      }

+      

+      public override TestRepeatedScalarDifferentTagSizes BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is TestRepeatedScalarDifferentTagSizes) {

+          return MergeFrom((TestRepeatedScalarDifferentTagSizes) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(TestRepeatedScalarDifferentTagSizes other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.TestRepeatedScalarDifferentTagSizes.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.repeatedFixed32_.Count != 0) {

+          result.repeatedFixed32_.Add(other.repeatedFixed32_);

+        }

+        if (other.repeatedInt32_.Count != 0) {

+          result.repeatedInt32_.Add(other.repeatedInt32_);

+        }

+        if (other.repeatedFixed64_.Count != 0) {

+          result.repeatedFixed64_.Add(other.repeatedFixed64_);

+        }

+        if (other.repeatedInt64_.Count != 0) {

+          result.repeatedInt64_.Add(other.repeatedInt64_);

+        }

+        if (other.repeatedFloat_.Count != 0) {

+          result.repeatedFloat_.Add(other.repeatedFloat_);

+        }

+        if (other.repeatedUint64_.Count != 0) {

+          result.repeatedUint64_.Add(other.repeatedUint64_);

+        }

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_testRepeatedScalarDifferentTagSizesFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _testRepeatedScalarDifferentTagSizesFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 98:

+            case 101: {

+              input.ReadFixed32Array(tag, field_name, result.repeatedFixed32_);

+              break;

+            }

+            case 106:

+            case 104: {

+              input.ReadInt32Array(tag, field_name, result.repeatedInt32_);

+              break;

+            }

+            case 16370:

+            case 16369: {

+              input.ReadFixed64Array(tag, field_name, result.repeatedFixed64_);

+              break;

+            }

+            case 16378:

+            case 16376: {

+              input.ReadInt64Array(tag, field_name, result.repeatedInt64_);

+              break;

+            }

+            case 2097138:

+            case 2097141: {

+              input.ReadFloatArray(tag, field_name, result.repeatedFloat_);

+              break;

+            }

+            case 2097146:

+            case 2097144: {

+              input.ReadUInt64Array(tag, field_name, result.repeatedUint64_);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<uint> RepeatedFixed32List {

+        get { return PrepareBuilder().repeatedFixed32_; }

+      }

+      public int RepeatedFixed32Count {

+        get { return result.RepeatedFixed32Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public uint GetRepeatedFixed32(int index) {

+        return result.GetRepeatedFixed32(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed32(int index, uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed32(uint value) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed32(scg::IEnumerable<uint> values) {

+        PrepareBuilder();

+        result.repeatedFixed32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed32() {

+        PrepareBuilder();

+        result.repeatedFixed32_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<int> RepeatedInt32List {

+        get { return PrepareBuilder().repeatedInt32_; }

+      }

+      public int RepeatedInt32Count {

+        get { return result.RepeatedInt32Count; }

+      }

+      public int GetRepeatedInt32(int index) {

+        return result.GetRepeatedInt32(index);

+      }

+      public Builder SetRepeatedInt32(int index, int value) {

+        PrepareBuilder();

+        result.repeatedInt32_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt32(int value) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt32(scg::IEnumerable<int> values) {

+        PrepareBuilder();

+        result.repeatedInt32_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt32() {

+        PrepareBuilder();

+        result.repeatedInt32_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedFixed64List {

+        get { return PrepareBuilder().repeatedFixed64_; }

+      }

+      public int RepeatedFixed64Count {

+        get { return result.RepeatedFixed64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedFixed64(int index) {

+        return result.GetRepeatedFixed64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedFixed64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedFixed64(ulong value) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedFixed64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedFixed64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFixed64() {

+        PrepareBuilder();

+        result.repeatedFixed64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<long> RepeatedInt64List {

+        get { return PrepareBuilder().repeatedInt64_; }

+      }

+      public int RepeatedInt64Count {

+        get { return result.RepeatedInt64Count; }

+      }

+      public long GetRepeatedInt64(int index) {

+        return result.GetRepeatedInt64(index);

+      }

+      public Builder SetRepeatedInt64(int index, long value) {

+        PrepareBuilder();

+        result.repeatedInt64_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedInt64(long value) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedInt64(scg::IEnumerable<long> values) {

+        PrepareBuilder();

+        result.repeatedInt64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedInt64() {

+        PrepareBuilder();

+        result.repeatedInt64_.Clear();

+        return this;

+      }

+      

+      public pbc::IPopsicleList<float> RepeatedFloatList {

+        get { return PrepareBuilder().repeatedFloat_; }

+      }

+      public int RepeatedFloatCount {

+        get { return result.RepeatedFloatCount; }

+      }

+      public float GetRepeatedFloat(int index) {

+        return result.GetRepeatedFloat(index);

+      }

+      public Builder SetRepeatedFloat(int index, float value) {

+        PrepareBuilder();

+        result.repeatedFloat_[index] = value;

+        return this;

+      }

+      public Builder AddRepeatedFloat(float value) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(value);

+        return this;

+      }

+      public Builder AddRangeRepeatedFloat(scg::IEnumerable<float> values) {

+        PrepareBuilder();

+        result.repeatedFloat_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedFloat() {

+        PrepareBuilder();

+        result.repeatedFloat_.Clear();

+        return this;

+      }

+      

+      [global::System.CLSCompliant(false)]

+      public pbc::IPopsicleList<ulong> RepeatedUint64List {

+        get { return PrepareBuilder().repeatedUint64_; }

+      }

+      public int RepeatedUint64Count {

+        get { return result.RepeatedUint64Count; }

+      }

+      [global::System.CLSCompliant(false)]

+      public ulong GetRepeatedUint64(int index) {

+        return result.GetRepeatedUint64(index);

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder SetRepeatedUint64(int index, ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_[index] = value;

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRepeatedUint64(ulong value) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(value);

+        return this;

+      }

+      [global::System.CLSCompliant(false)]

+      public Builder AddRangeRepeatedUint64(scg::IEnumerable<ulong> values) {

+        PrepareBuilder();

+        result.repeatedUint64_.Add(values);

+        return this;

+      }

+      public Builder ClearRepeatedUint64() {

+        PrepareBuilder();

+        result.repeatedUint64_.Clear();

+        return this;

+      }

+    }

+    static TestRepeatedScalarDifferentTagSizes() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class FooRequest : pb::GeneratedMessage<FooRequest, FooRequest.Builder> {

+    private FooRequest() { }

+    private static readonly FooRequest defaultInstance = new FooRequest().MakeReadOnly();

+    private static readonly string[] _fooRequestFieldNames = new string[] {  };

+    private static readonly uint[] _fooRequestFieldTags = new uint[] {  };

+    public static FooRequest DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override FooRequest DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override FooRequest ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_FooRequest__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<FooRequest, FooRequest.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_FooRequest__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _fooRequestFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static FooRequest ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static FooRequest ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static FooRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static FooRequest ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FooRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private FooRequest MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(FooRequest prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<FooRequest, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(FooRequest cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private FooRequest result;

+      

+      private FooRequest PrepareBuilder() {

+        if (resultIsReadOnly) {

+          FooRequest original = result;

+          result = new FooRequest();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override FooRequest MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.FooRequest.Descriptor; }

+      }

+      

+      public override FooRequest DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.FooRequest.DefaultInstance; }

+      }

+      

+      public override FooRequest BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is FooRequest) {

+          return MergeFrom((FooRequest) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(FooRequest other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.FooRequest.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_fooRequestFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _fooRequestFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static FooRequest() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class FooResponse : pb::GeneratedMessage<FooResponse, FooResponse.Builder> {

+    private FooResponse() { }

+    private static readonly FooResponse defaultInstance = new FooResponse().MakeReadOnly();

+    private static readonly string[] _fooResponseFieldNames = new string[] {  };

+    private static readonly uint[] _fooResponseFieldTags = new uint[] {  };

+    public static FooResponse DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override FooResponse DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override FooResponse ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_FooResponse__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<FooResponse, FooResponse.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_FooResponse__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _fooResponseFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static FooResponse ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static FooResponse ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static FooResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static FooResponse ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static FooResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private FooResponse MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(FooResponse prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<FooResponse, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(FooResponse cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private FooResponse result;

+      

+      private FooResponse PrepareBuilder() {

+        if (resultIsReadOnly) {

+          FooResponse original = result;

+          result = new FooResponse();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override FooResponse MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.FooResponse.Descriptor; }

+      }

+      

+      public override FooResponse DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.FooResponse.DefaultInstance; }

+      }

+      

+      public override FooResponse BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is FooResponse) {

+          return MergeFrom((FooResponse) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(FooResponse other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.FooResponse.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_fooResponseFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _fooResponseFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static FooResponse() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class BarRequest : pb::GeneratedMessage<BarRequest, BarRequest.Builder> {

+    private BarRequest() { }

+    private static readonly BarRequest defaultInstance = new BarRequest().MakeReadOnly();

+    private static readonly string[] _barRequestFieldNames = new string[] {  };

+    private static readonly uint[] _barRequestFieldTags = new uint[] {  };

+    public static BarRequest DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override BarRequest DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override BarRequest ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_BarRequest__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<BarRequest, BarRequest.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_BarRequest__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _barRequestFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static BarRequest ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static BarRequest ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static BarRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static BarRequest ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BarRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private BarRequest MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(BarRequest prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<BarRequest, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(BarRequest cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private BarRequest result;

+      

+      private BarRequest PrepareBuilder() {

+        if (resultIsReadOnly) {

+          BarRequest original = result;

+          result = new BarRequest();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override BarRequest MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BarRequest.Descriptor; }

+      }

+      

+      public override BarRequest DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BarRequest.DefaultInstance; }

+      }

+      

+      public override BarRequest BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is BarRequest) {

+          return MergeFrom((BarRequest) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(BarRequest other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.BarRequest.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_barRequestFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _barRequestFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static BarRequest() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class BarResponse : pb::GeneratedMessage<BarResponse, BarResponse.Builder> {

+    private BarResponse() { }

+    private static readonly BarResponse defaultInstance = new BarResponse().MakeReadOnly();

+    private static readonly string[] _barResponseFieldNames = new string[] {  };

+    private static readonly uint[] _barResponseFieldTags = new uint[] {  };

+    public static BarResponse DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override BarResponse DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override BarResponse ThisMessage {

+      get { return this; }

+    }

+    

+    public static pbd::MessageDescriptor Descriptor {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_BarResponse__Descriptor; }

+    }

+    

+    protected override pb::FieldAccess.FieldAccessorTable<BarResponse, BarResponse.Builder> InternalFieldAccessors {

+      get { return global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.internal__static_protobuf_unittest_BarResponse__FieldAccessorTable; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _barResponseFieldNames;

+      UnknownFields.WriteTo(output);

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      size += UnknownFields.SerializedSize;

+      memoizedSerializedSize = size;

+      return size;

+    }

+    public static BarResponse ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static BarResponse ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static BarResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static BarResponse ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static BarResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private BarResponse MakeReadOnly() {

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(BarResponse prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilder<BarResponse, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(BarResponse cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private BarResponse result;

+      

+      private BarResponse PrepareBuilder() {

+        if (resultIsReadOnly) {

+          BarResponse original = result;

+          result = new BarResponse();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override BarResponse MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override pbd::MessageDescriptor DescriptorForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BarResponse.Descriptor; }

+      }

+      

+      public override BarResponse DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.BarResponse.DefaultInstance; }

+      }

+      

+      public override BarResponse BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessage other) {

+        if (other is BarResponse) {

+          return MergeFrom((BarResponse) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(BarResponse other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.BarResponse.DefaultInstance) return this;

+        PrepareBuilder();

+        this.MergeUnknownFields(other.UnknownFields);

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        pb::UnknownFieldSet.Builder unknownFields = null;

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_barResponseFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _barResponseFieldTags[field_ordinal];

+            else {

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                if (unknownFields != null) {

+                  this.UnknownFields = unknownFields.Build();

+                }

+                return this;

+              }

+              if (unknownFields == null) {

+                unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);

+              }

+              ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);

+              break;

+            }

+          }

+        }

+        

+        if (unknownFields != null) {

+          this.UnknownFields = unknownFields.Build();

+        }

+        return this;

+      }

+      

+    }

+    static BarResponse() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestProtoFile.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+  #region Services

+  /*

+  * Service generation is now disabled by default, use the following option to enable:

+  * option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;

+  */

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestRpcInteropLite.cs b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestRpcInteropLite.cs
new file mode 100644
index 0000000..189ff0d
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/TestProtos/UnitTestRpcInteropLite.cs
@@ -0,0 +1,1395 @@
+// Generated by ProtoGen, Version=2.4.1.555, Culture=neutral, PublicKeyToken=55f7125234beb589.  DO NOT EDIT!

+#pragma warning disable 1591, 0612, 3021

+#region Designer generated code

+

+using pb = global::Google.ProtocolBuffers;

+using pbc = global::Google.ProtocolBuffers.Collections;

+using pbd = global::Google.ProtocolBuffers.Descriptors;

+using scg = global::System.Collections.Generic;

+namespace Google.ProtocolBuffers.TestProtos {

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public static partial class UnitTestRpcInteropLite {

+  

+    #region Extension registration

+    public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {

+    }

+    #endregion

+    #region Static variables

+    #endregion

+    #region Extensions

+    internal static readonly object Descriptor;

+    static UnitTestRpcInteropLite() {

+      Descriptor = null;

+    }

+    #endregion

+    

+  }

+  #region Messages

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SearchRequest : pb::GeneratedMessageLite<SearchRequest, SearchRequest.Builder> {

+    private SearchRequest() { }

+    private static readonly SearchRequest defaultInstance = new SearchRequest().MakeReadOnly();

+    private static readonly string[] _searchRequestFieldNames = new string[] { "Criteria" };

+    private static readonly uint[] _searchRequestFieldTags = new uint[] { 10 };

+    public static SearchRequest DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SearchRequest DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SearchRequest ThisMessage {

+      get { return this; }

+    }

+    

+    public const int CriteriaFieldNumber = 1;

+    private pbc::PopsicleList<string> criteria_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> CriteriaList {

+      get { return pbc::Lists.AsReadOnly(criteria_); }

+    }

+    public int CriteriaCount {

+      get { return criteria_.Count; }

+    }

+    public string GetCriteria(int index) {

+      return criteria_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _searchRequestFieldNames;

+      if (criteria_.Count > 0) {

+        output.WriteStringArray(1, field_names[0], criteria_);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        foreach (string element in CriteriaList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * criteria_.Count;

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      foreach(string i in criteria_)

+        hash ^= i.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      SearchRequest other = obj as SearchRequest;

+      if (other == null) return false;

+      if(criteria_.Count != other.criteria_.Count) return false;

+      for(int ix=0; ix < criteria_.Count; ix++)

+        if(!criteria_[ix].Equals(other.criteria_[ix])) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("Criteria", criteria_, writer);

+    }

+    #endregion

+    

+    public static SearchRequest ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SearchRequest ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SearchRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SearchRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SearchRequest MakeReadOnly() {

+      criteria_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SearchRequest prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<SearchRequest, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SearchRequest cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SearchRequest result;

+      

+      private SearchRequest PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SearchRequest original = result;

+          result = new SearchRequest();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SearchRequest MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override SearchRequest DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SearchRequest.DefaultInstance; }

+      }

+      

+      public override SearchRequest BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is SearchRequest) {

+          return MergeFrom((SearchRequest) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SearchRequest other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.SearchRequest.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.criteria_.Count != 0) {

+          result.criteria_.Add(other.criteria_);

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_searchRequestFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _searchRequestFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              input.ReadStringArray(tag, field_name, result.criteria_);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<string> CriteriaList {

+        get { return PrepareBuilder().criteria_; }

+      }

+      public int CriteriaCount {

+        get { return result.CriteriaCount; }

+      }

+      public string GetCriteria(int index) {

+        return result.GetCriteria(index);

+      }

+      public Builder SetCriteria(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.criteria_[index] = value;

+        return this;

+      }

+      public Builder AddCriteria(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.criteria_.Add(value);

+        return this;

+      }

+      public Builder AddRangeCriteria(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.criteria_.Add(values);

+        return this;

+      }

+      public Builder ClearCriteria() {

+        PrepareBuilder();

+        result.criteria_.Clear();

+        return this;

+      }

+    }

+    static SearchRequest() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInteropLite.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class SearchResponse : pb::GeneratedMessageLite<SearchResponse, SearchResponse.Builder> {

+    private SearchResponse() { }

+    private static readonly SearchResponse defaultInstance = new SearchResponse().MakeReadOnly();

+    private static readonly string[] _searchResponseFieldNames = new string[] { "results" };

+    private static readonly uint[] _searchResponseFieldTags = new uint[] { 10 };

+    public static SearchResponse DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override SearchResponse DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override SearchResponse ThisMessage {

+      get { return this; }

+    }

+    

+    #region Nested types

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public static partial class Types {

+      [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+      public sealed partial class ResultItem : pb::GeneratedMessageLite<ResultItem, ResultItem.Builder> {

+        private ResultItem() { }

+        private static readonly ResultItem defaultInstance = new ResultItem().MakeReadOnly();

+        private static readonly string[] _resultItemFieldNames = new string[] { "name", "url" };

+        private static readonly uint[] _resultItemFieldTags = new uint[] { 18, 10 };

+        public static ResultItem DefaultInstance {

+          get { return defaultInstance; }

+        }

+        

+        public override ResultItem DefaultInstanceForType {

+          get { return DefaultInstance; }

+        }

+        

+        protected override ResultItem ThisMessage {

+          get { return this; }

+        }

+        

+        public const int UrlFieldNumber = 1;

+        private bool hasUrl;

+        private string url_ = "";

+        public bool HasUrl {

+          get { return hasUrl; }

+        }

+        public string Url {

+          get { return url_; }

+        }

+        

+        public const int NameFieldNumber = 2;

+        private bool hasName;

+        private string name_ = "";

+        public bool HasName {

+          get { return hasName; }

+        }

+        public string Name {

+          get { return name_; }

+        }

+        

+        public override bool IsInitialized {

+          get {

+            if (!hasUrl) return false;

+            return true;

+          }

+        }

+        

+        public override void WriteTo(pb::ICodedOutputStream output) {

+          CalcSerializedSize();

+          string[] field_names = _resultItemFieldNames;

+          if (hasUrl) {

+            output.WriteString(1, field_names[1], Url);

+          }

+          if (hasName) {

+            output.WriteString(2, field_names[0], Name);

+          }

+        }

+        

+        private int memoizedSerializedSize = -1;

+        public override int SerializedSize {

+          get {

+            int size = memoizedSerializedSize;

+            if (size != -1) return size;

+            return CalcSerializedSize();

+          }

+        }

+        

+        private int CalcSerializedSize() {

+          int size = memoizedSerializedSize;

+          if (size != -1) return size;

+          

+          size = 0;

+          if (hasUrl) {

+            size += pb::CodedOutputStream.ComputeStringSize(1, Url);

+          }

+          if (hasName) {

+            size += pb::CodedOutputStream.ComputeStringSize(2, Name);

+          }

+          memoizedSerializedSize = size;

+          return size;

+        }

+        #region Lite runtime methods

+        public override int GetHashCode() {

+          int hash = GetType().GetHashCode();

+          if (hasUrl) hash ^= url_.GetHashCode();

+          if (hasName) hash ^= name_.GetHashCode();

+          return hash;

+        }

+        

+        public override bool Equals(object obj) {

+          ResultItem other = obj as ResultItem;

+          if (other == null) return false;

+          if (hasUrl != other.hasUrl || (hasUrl && !url_.Equals(other.url_))) return false;

+          if (hasName != other.hasName || (hasName && !name_.Equals(other.name_))) return false;

+          return true;

+        }

+        

+        public override void PrintTo(global::System.IO.TextWriter writer) {

+          PrintField("url", hasUrl, url_, writer);

+          PrintField("name", hasName, name_, writer);

+        }

+        #endregion

+        

+        public static ResultItem ParseFrom(pb::ByteString data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static ResultItem ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static ResultItem ParseFrom(byte[] data) {

+          return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+        }

+        public static ResultItem ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+        }

+        public static ResultItem ParseFrom(global::System.IO.Stream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static ResultItem ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        public static ResultItem ParseDelimitedFrom(global::System.IO.Stream input) {

+          return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+        }

+        public static ResultItem ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+          return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+        }

+        public static ResultItem ParseFrom(pb::ICodedInputStream input) {

+          return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+        }

+        public static ResultItem ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+          return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+        }

+        private ResultItem MakeReadOnly() {

+          return this;

+        }

+        

+        public static Builder CreateBuilder() { return new Builder(); }

+        public override Builder ToBuilder() { return CreateBuilder(this); }

+        public override Builder CreateBuilderForType() { return new Builder(); }

+        public static Builder CreateBuilder(ResultItem prototype) {

+          return new Builder(prototype);

+        }

+        

+        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+        public sealed partial class Builder : pb::GeneratedBuilderLite<ResultItem, Builder> {

+          protected override Builder ThisBuilder {

+            get { return this; }

+          }

+          public Builder() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+          }

+          internal Builder(ResultItem cloneFrom) {

+            result = cloneFrom;

+            resultIsReadOnly = true;

+          }

+          

+          private bool resultIsReadOnly;

+          private ResultItem result;

+          

+          private ResultItem PrepareBuilder() {

+            if (resultIsReadOnly) {

+              ResultItem original = result;

+              result = new ResultItem();

+              resultIsReadOnly = false;

+              MergeFrom(original);

+            }

+            return result;

+          }

+          

+          public override bool IsInitialized {

+            get { return result.IsInitialized; }

+          }

+          

+          protected override ResultItem MessageBeingBuilt {

+            get { return PrepareBuilder(); }

+          }

+          

+          public override Builder Clear() {

+            result = DefaultInstance;

+            resultIsReadOnly = true;

+            return this;

+          }

+          

+          public override Builder Clone() {

+            if (resultIsReadOnly) {

+              return new Builder(result);

+            } else {

+              return new Builder().MergeFrom(result);

+            }

+          }

+          

+          public override ResultItem DefaultInstanceForType {

+            get { return global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem.DefaultInstance; }

+          }

+          

+          public override ResultItem BuildPartial() {

+            if (resultIsReadOnly) {

+              return result;

+            }

+            resultIsReadOnly = true;

+            return result.MakeReadOnly();

+          }

+          

+          public override Builder MergeFrom(pb::IMessageLite other) {

+            if (other is ResultItem) {

+              return MergeFrom((ResultItem) other);

+            } else {

+              base.MergeFrom(other);

+              return this;

+            }

+          }

+          

+          public override Builder MergeFrom(ResultItem other) {

+            if (other == global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem.DefaultInstance) return this;

+            PrepareBuilder();

+            if (other.HasUrl) {

+              Url = other.Url;

+            }

+            if (other.HasName) {

+              Name = other.Name;

+            }

+            return this;

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input) {

+            return MergeFrom(input, pb::ExtensionRegistry.Empty);

+          }

+          

+          public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+            PrepareBuilder();

+            uint tag;

+            string field_name;

+            while (input.ReadTag(out tag, out field_name)) {

+              if(tag == 0 && field_name != null) {

+                int field_ordinal = global::System.Array.BinarySearch(_resultItemFieldNames, field_name, global::System.StringComparer.Ordinal);

+                if(field_ordinal >= 0)

+                  tag = _resultItemFieldTags[field_ordinal];

+                else {

+                  ParseUnknownField(input, extensionRegistry, tag, field_name);

+                  continue;

+                }

+              }

+              switch (tag) {

+                case 0: {

+                  throw pb::InvalidProtocolBufferException.InvalidTag();

+                }

+                default: {

+                  if (pb::WireFormat.IsEndGroupTag(tag)) {

+                    return this;

+                  }

+                  ParseUnknownField(input, extensionRegistry, tag, field_name);

+                  break;

+                }

+                case 10: {

+                  result.hasUrl = input.ReadString(ref result.url_);

+                  break;

+                }

+                case 18: {

+                  result.hasName = input.ReadString(ref result.name_);

+                  break;

+                }

+              }

+            }

+            

+            return this;

+          }

+          

+          

+          public bool HasUrl {

+            get { return result.hasUrl; }

+          }

+          public string Url {

+            get { return result.Url; }

+            set { SetUrl(value); }

+          }

+          public Builder SetUrl(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasUrl = true;

+            result.url_ = value;

+            return this;

+          }

+          public Builder ClearUrl() {

+            PrepareBuilder();

+            result.hasUrl = false;

+            result.url_ = "";

+            return this;

+          }

+          

+          public bool HasName {

+            get { return result.hasName; }

+          }

+          public string Name {

+            get { return result.Name; }

+            set { SetName(value); }

+          }

+          public Builder SetName(string value) {

+            pb::ThrowHelper.ThrowIfNull(value, "value");

+            PrepareBuilder();

+            result.hasName = true;

+            result.name_ = value;

+            return this;

+          }

+          public Builder ClearName() {

+            PrepareBuilder();

+            result.hasName = false;

+            result.name_ = "";

+            return this;

+          }

+        }

+        static ResultItem() {

+          object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInteropLite.Descriptor, null);

+        }

+      }

+      

+    }

+    #endregion

+    

+    public const int ResultsFieldNumber = 1;

+    private pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem> results_ = new pbc::PopsicleList<global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem>();

+    public scg::IList<global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem> ResultsList {

+      get { return results_; }

+    }

+    public int ResultsCount {

+      get { return results_.Count; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem GetResults(int index) {

+      return results_[index];

+    }

+    

+    public override bool IsInitialized {

+      get {

+        foreach (global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem element in ResultsList) {

+          if (!element.IsInitialized) return false;

+        }

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _searchResponseFieldNames;

+      if (results_.Count > 0) {

+        output.WriteMessageArray(1, field_names[0], results_);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      foreach (global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem element in ResultsList) {

+        size += pb::CodedOutputStream.ComputeMessageSize(1, element);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      foreach(global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem i in results_)

+        hash ^= i.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      SearchResponse other = obj as SearchResponse;

+      if (other == null) return false;

+      if(results_.Count != other.results_.Count) return false;

+      for(int ix=0; ix < results_.Count; ix++)

+        if(!results_[ix].Equals(other.results_[ix])) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("results", results_, writer);

+    }

+    #endregion

+    

+    public static SearchResponse ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static SearchResponse ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static SearchResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static SearchResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private SearchResponse MakeReadOnly() {

+      results_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(SearchResponse prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<SearchResponse, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(SearchResponse cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private SearchResponse result;

+      

+      private SearchResponse PrepareBuilder() {

+        if (resultIsReadOnly) {

+          SearchResponse original = result;

+          result = new SearchResponse();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override SearchResponse MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override SearchResponse DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.SearchResponse.DefaultInstance; }

+      }

+      

+      public override SearchResponse BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is SearchResponse) {

+          return MergeFrom((SearchResponse) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(SearchResponse other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.SearchResponse.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.results_.Count != 0) {

+          result.results_.Add(other.results_);

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_searchResponseFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _searchResponseFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              input.ReadMessageArray(tag, field_name, result.results_, global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem.DefaultInstance, extensionRegistry);

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem> ResultsList {

+        get { return PrepareBuilder().results_; }

+      }

+      public int ResultsCount {

+        get { return result.ResultsCount; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem GetResults(int index) {

+        return result.GetResults(index);

+      }

+      public Builder SetResults(int index, global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.results_[index] = value;

+        return this;

+      }

+      public Builder SetResults(int index, global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.results_[index] = builderForValue.Build();

+        return this;

+      }

+      public Builder AddResults(global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.results_.Add(value);

+        return this;

+      }

+      public Builder AddResults(global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.results_.Add(builderForValue.Build());

+        return this;

+      }

+      public Builder AddRangeResults(scg::IEnumerable<global::Google.ProtocolBuffers.TestProtos.SearchResponse.Types.ResultItem> values) {

+        PrepareBuilder();

+        result.results_.Add(values);

+        return this;

+      }

+      public Builder ClearResults() {

+        PrepareBuilder();

+        result.results_.Clear();

+        return this;

+      }

+    }

+    static SearchResponse() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInteropLite.Descriptor, null);

+    }

+  }

+  

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public sealed partial class RefineSearchRequest : pb::GeneratedMessageLite<RefineSearchRequest, RefineSearchRequest.Builder> {

+    private RefineSearchRequest() { }

+    private static readonly RefineSearchRequest defaultInstance = new RefineSearchRequest().MakeReadOnly();

+    private static readonly string[] _refineSearchRequestFieldNames = new string[] { "Criteria", "previous_results" };

+    private static readonly uint[] _refineSearchRequestFieldTags = new uint[] { 10, 18 };

+    public static RefineSearchRequest DefaultInstance {

+      get { return defaultInstance; }

+    }

+    

+    public override RefineSearchRequest DefaultInstanceForType {

+      get { return DefaultInstance; }

+    }

+    

+    protected override RefineSearchRequest ThisMessage {

+      get { return this; }

+    }

+    

+    public const int CriteriaFieldNumber = 1;

+    private pbc::PopsicleList<string> criteria_ = new pbc::PopsicleList<string>();

+    public scg::IList<string> CriteriaList {

+      get { return pbc::Lists.AsReadOnly(criteria_); }

+    }

+    public int CriteriaCount {

+      get { return criteria_.Count; }

+    }

+    public string GetCriteria(int index) {

+      return criteria_[index];

+    }

+    

+    public const int PreviousResultsFieldNumber = 2;

+    private bool hasPreviousResults;

+    private global::Google.ProtocolBuffers.TestProtos.SearchResponse previousResults_;

+    public bool HasPreviousResults {

+      get { return hasPreviousResults; }

+    }

+    public global::Google.ProtocolBuffers.TestProtos.SearchResponse PreviousResults {

+      get { return previousResults_ ?? global::Google.ProtocolBuffers.TestProtos.SearchResponse.DefaultInstance; }

+    }

+    

+    public override bool IsInitialized {

+      get {

+        if (!hasPreviousResults) return false;

+        if (!PreviousResults.IsInitialized) return false;

+        return true;

+      }

+    }

+    

+    public override void WriteTo(pb::ICodedOutputStream output) {

+      CalcSerializedSize();

+      string[] field_names = _refineSearchRequestFieldNames;

+      if (criteria_.Count > 0) {

+        output.WriteStringArray(1, field_names[0], criteria_);

+      }

+      if (hasPreviousResults) {

+        output.WriteMessage(2, field_names[1], PreviousResults);

+      }

+    }

+    

+    private int memoizedSerializedSize = -1;

+    public override int SerializedSize {

+      get {

+        int size = memoizedSerializedSize;

+        if (size != -1) return size;

+        return CalcSerializedSize();

+      }

+    }

+    

+    private int CalcSerializedSize() {

+      int size = memoizedSerializedSize;

+      if (size != -1) return size;

+      

+      size = 0;

+      {

+        int dataSize = 0;

+        foreach (string element in CriteriaList) {

+          dataSize += pb::CodedOutputStream.ComputeStringSizeNoTag(element);

+        }

+        size += dataSize;

+        size += 1 * criteria_.Count;

+      }

+      if (hasPreviousResults) {

+        size += pb::CodedOutputStream.ComputeMessageSize(2, PreviousResults);

+      }

+      memoizedSerializedSize = size;

+      return size;

+    }

+    #region Lite runtime methods

+    public override int GetHashCode() {

+      int hash = GetType().GetHashCode();

+      foreach(string i in criteria_)

+        hash ^= i.GetHashCode();

+      if (hasPreviousResults) hash ^= previousResults_.GetHashCode();

+      return hash;

+    }

+    

+    public override bool Equals(object obj) {

+      RefineSearchRequest other = obj as RefineSearchRequest;

+      if (other == null) return false;

+      if(criteria_.Count != other.criteria_.Count) return false;

+      for(int ix=0; ix < criteria_.Count; ix++)

+        if(!criteria_[ix].Equals(other.criteria_[ix])) return false;

+      if (hasPreviousResults != other.hasPreviousResults || (hasPreviousResults && !previousResults_.Equals(other.previousResults_))) return false;

+      return true;

+    }

+    

+    public override void PrintTo(global::System.IO.TextWriter writer) {

+      PrintField("Criteria", criteria_, writer);

+      PrintField("previous_results", hasPreviousResults, previousResults_, writer);

+    }

+    #endregion

+    

+    public static RefineSearchRequest ParseFrom(pb::ByteString data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(byte[] data) {

+      return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(global::System.IO.Stream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseDelimitedFrom(global::System.IO.Stream input) {

+      return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();

+    }

+    public static RefineSearchRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {

+      return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(pb::ICodedInputStream input) {

+      return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();

+    }

+    public static RefineSearchRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+      return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();

+    }

+    private RefineSearchRequest MakeReadOnly() {

+      criteria_.MakeReadOnly();

+      return this;

+    }

+    

+    public static Builder CreateBuilder() { return new Builder(); }

+    public override Builder ToBuilder() { return CreateBuilder(this); }

+    public override Builder CreateBuilderForType() { return new Builder(); }

+    public static Builder CreateBuilder(RefineSearchRequest prototype) {

+      return new Builder(prototype);

+    }

+    

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public sealed partial class Builder : pb::GeneratedBuilderLite<RefineSearchRequest, Builder> {

+      protected override Builder ThisBuilder {

+        get { return this; }

+      }

+      public Builder() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+      }

+      internal Builder(RefineSearchRequest cloneFrom) {

+        result = cloneFrom;

+        resultIsReadOnly = true;

+      }

+      

+      private bool resultIsReadOnly;

+      private RefineSearchRequest result;

+      

+      private RefineSearchRequest PrepareBuilder() {

+        if (resultIsReadOnly) {

+          RefineSearchRequest original = result;

+          result = new RefineSearchRequest();

+          resultIsReadOnly = false;

+          MergeFrom(original);

+        }

+        return result;

+      }

+      

+      public override bool IsInitialized {

+        get { return result.IsInitialized; }

+      }

+      

+      protected override RefineSearchRequest MessageBeingBuilt {

+        get { return PrepareBuilder(); }

+      }

+      

+      public override Builder Clear() {

+        result = DefaultInstance;

+        resultIsReadOnly = true;

+        return this;

+      }

+      

+      public override Builder Clone() {

+        if (resultIsReadOnly) {

+          return new Builder(result);

+        } else {

+          return new Builder().MergeFrom(result);

+        }

+      }

+      

+      public override RefineSearchRequest DefaultInstanceForType {

+        get { return global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest.DefaultInstance; }

+      }

+      

+      public override RefineSearchRequest BuildPartial() {

+        if (resultIsReadOnly) {

+          return result;

+        }

+        resultIsReadOnly = true;

+        return result.MakeReadOnly();

+      }

+      

+      public override Builder MergeFrom(pb::IMessageLite other) {

+        if (other is RefineSearchRequest) {

+          return MergeFrom((RefineSearchRequest) other);

+        } else {

+          base.MergeFrom(other);

+          return this;

+        }

+      }

+      

+      public override Builder MergeFrom(RefineSearchRequest other) {

+        if (other == global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest.DefaultInstance) return this;

+        PrepareBuilder();

+        if (other.criteria_.Count != 0) {

+          result.criteria_.Add(other.criteria_);

+        }

+        if (other.HasPreviousResults) {

+          MergePreviousResults(other.PreviousResults);

+        }

+        return this;

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input) {

+        return MergeFrom(input, pb::ExtensionRegistry.Empty);

+      }

+      

+      public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {

+        PrepareBuilder();

+        uint tag;

+        string field_name;

+        while (input.ReadTag(out tag, out field_name)) {

+          if(tag == 0 && field_name != null) {

+            int field_ordinal = global::System.Array.BinarySearch(_refineSearchRequestFieldNames, field_name, global::System.StringComparer.Ordinal);

+            if(field_ordinal >= 0)

+              tag = _refineSearchRequestFieldTags[field_ordinal];

+            else {

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              continue;

+            }

+          }

+          switch (tag) {

+            case 0: {

+              throw pb::InvalidProtocolBufferException.InvalidTag();

+            }

+            default: {

+              if (pb::WireFormat.IsEndGroupTag(tag)) {

+                return this;

+              }

+              ParseUnknownField(input, extensionRegistry, tag, field_name);

+              break;

+            }

+            case 10: {

+              input.ReadStringArray(tag, field_name, result.criteria_);

+              break;

+            }

+            case 18: {

+              global::Google.ProtocolBuffers.TestProtos.SearchResponse.Builder subBuilder = global::Google.ProtocolBuffers.TestProtos.SearchResponse.CreateBuilder();

+              if (result.hasPreviousResults) {

+                subBuilder.MergeFrom(PreviousResults);

+              }

+              input.ReadMessage(subBuilder, extensionRegistry);

+              PreviousResults = subBuilder.BuildPartial();

+              break;

+            }

+          }

+        }

+        

+        return this;

+      }

+      

+      

+      public pbc::IPopsicleList<string> CriteriaList {

+        get { return PrepareBuilder().criteria_; }

+      }

+      public int CriteriaCount {

+        get { return result.CriteriaCount; }

+      }

+      public string GetCriteria(int index) {

+        return result.GetCriteria(index);

+      }

+      public Builder SetCriteria(int index, string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.criteria_[index] = value;

+        return this;

+      }

+      public Builder AddCriteria(string value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.criteria_.Add(value);

+        return this;

+      }

+      public Builder AddRangeCriteria(scg::IEnumerable<string> values) {

+        PrepareBuilder();

+        result.criteria_.Add(values);

+        return this;

+      }

+      public Builder ClearCriteria() {

+        PrepareBuilder();

+        result.criteria_.Clear();

+        return this;

+      }

+      

+      public bool HasPreviousResults {

+       get { return result.hasPreviousResults; }

+      }

+      public global::Google.ProtocolBuffers.TestProtos.SearchResponse PreviousResults {

+        get { return result.PreviousResults; }

+        set { SetPreviousResults(value); }

+      }

+      public Builder SetPreviousResults(global::Google.ProtocolBuffers.TestProtos.SearchResponse value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        result.hasPreviousResults = true;

+        result.previousResults_ = value;

+        return this;

+      }

+      public Builder SetPreviousResults(global::Google.ProtocolBuffers.TestProtos.SearchResponse.Builder builderForValue) {

+        pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");

+        PrepareBuilder();

+        result.hasPreviousResults = true;

+        result.previousResults_ = builderForValue.Build();

+        return this;

+      }

+      public Builder MergePreviousResults(global::Google.ProtocolBuffers.TestProtos.SearchResponse value) {

+        pb::ThrowHelper.ThrowIfNull(value, "value");

+        PrepareBuilder();

+        if (result.hasPreviousResults &&

+            result.previousResults_ != global::Google.ProtocolBuffers.TestProtos.SearchResponse.DefaultInstance) {

+            result.previousResults_ = global::Google.ProtocolBuffers.TestProtos.SearchResponse.CreateBuilder(result.previousResults_).MergeFrom(value).BuildPartial();

+        } else {

+          result.previousResults_ = value;

+        }

+        result.hasPreviousResults = true;

+        return this;

+      }

+      public Builder ClearPreviousResults() {

+        PrepareBuilder();

+        result.hasPreviousResults = false;

+        result.previousResults_ = null;

+        return this;

+      }

+    }

+    static RefineSearchRequest() {

+      object.ReferenceEquals(global::Google.ProtocolBuffers.TestProtos.UnitTestRpcInteropLite.Descriptor, null);

+    }

+  }

+  

+  #endregion

+  

+  #region Services

+  public partial interface ISearchService {

+    global::Google.ProtocolBuffers.TestProtos.SearchResponse Search(global::Google.ProtocolBuffers.TestProtos.SearchRequest searchRequest);

+    global::Google.ProtocolBuffers.TestProtos.SearchResponse RefineSearch(global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest refineSearchRequest);

+  }

+  

+  [global::System.CLSCompliant(false)]

+  [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+  public partial class SearchService : ISearchService, pb::IRpcDispatch, global::System.IDisposable {

+    private readonly bool dispose;

+    private readonly pb::IRpcDispatch dispatch;

+    public SearchService(pb::IRpcDispatch dispatch) : this(dispatch, true) {

+    }

+    public SearchService(pb::IRpcDispatch dispatch, bool dispose) {

+      pb::ThrowHelper.ThrowIfNull(this.dispatch = dispatch, "dispatch");

+      this.dispose = dispose && dispatch is global::System.IDisposable;

+    }

+    

+    public void Dispose() {

+      if (dispose) ((global::System.IDisposable)dispatch).Dispose();

+    }

+    

+    TMessage pb::IRpcDispatch.CallMethod<TMessage, TBuilder>(string method, pb::IMessageLite request, pb::IBuilderLite<TMessage, TBuilder> response) {

+      return dispatch.CallMethod(method, request, response);

+    }

+    

+    public global::Google.ProtocolBuffers.TestProtos.SearchResponse Search(global::Google.ProtocolBuffers.TestProtos.SearchRequest searchRequest) {

+       return dispatch.CallMethod("Search", searchRequest, global::Google.ProtocolBuffers.TestProtos.SearchResponse.CreateBuilder());

+    }

+    

+    public global::Google.ProtocolBuffers.TestProtos.SearchResponse RefineSearch(global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest refineSearchRequest) {

+       return dispatch.CallMethod("RefineSearch", refineSearchRequest, global::Google.ProtocolBuffers.TestProtos.SearchResponse.CreateBuilder());

+    }

+    

+    [global::System.CLSCompliant(false)]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public partial class Dispatch : pb::IRpcDispatch, global::System.IDisposable {

+      private readonly bool dispose;

+      private readonly ISearchService implementation;

+      public Dispatch(ISearchService implementation) : this(implementation, true) {

+      }

+      public Dispatch(ISearchService implementation, bool dispose) {

+        pb::ThrowHelper.ThrowIfNull(this.implementation = implementation, "implementation");

+        this.dispose = dispose && implementation is global::System.IDisposable;

+      }

+      

+      public void Dispose() {

+        if (dispose) ((global::System.IDisposable)implementation).Dispose();

+      }

+      

+      public TMessage CallMethod<TMessage, TBuilder>(string methodName, pb::IMessageLite request, pb::IBuilderLite<TMessage, TBuilder> response)

+        where TMessage : pb::IMessageLite<TMessage, TBuilder>

+        where TBuilder : pb::IBuilderLite<TMessage, TBuilder> {

+        switch(methodName) {

+          case "Search": return response.MergeFrom(implementation.Search((global::Google.ProtocolBuffers.TestProtos.SearchRequest)request)).Build();

+          case "RefineSearch": return response.MergeFrom(implementation.RefineSearch((global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest)request)).Build();

+          default: throw pb::ThrowHelper.CreateMissingMethod(typeof(ISearchService), methodName);

+        }

+      }

+    }

+    [global::System.CLSCompliant(false)]

+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]

+    public partial class ServerStub : pb::IRpcServerStub, global::System.IDisposable {

+      private readonly bool dispose;

+      private readonly pb::IRpcDispatch implementation;

+      public ServerStub(ISearchService implementation) : this(implementation, true) {

+      }

+      public ServerStub(ISearchService implementation, bool dispose) : this(new Dispatch(implementation, dispose), dispose) {

+      }

+      public ServerStub(pb::IRpcDispatch implementation) : this(implementation, true) {

+      }

+      public ServerStub(pb::IRpcDispatch implementation, bool dispose) {

+        pb::ThrowHelper.ThrowIfNull(this.implementation = implementation, "implementation");

+        this.dispose = dispose && implementation is global::System.IDisposable;

+      }

+      

+      public void Dispose() {

+        if (dispose) ((global::System.IDisposable)implementation).Dispose();

+      }

+      

+      public pb::IMessageLite CallMethod(string methodName, pb::ICodedInputStream input, pb::ExtensionRegistry registry) {

+        switch(methodName) {

+          case "Search": return implementation.CallMethod(methodName, global::Google.ProtocolBuffers.TestProtos.SearchRequest.ParseFrom(input, registry), global::Google.ProtocolBuffers.TestProtos.SearchResponse.CreateBuilder());

+          case "RefineSearch": return implementation.CallMethod(methodName, global::Google.ProtocolBuffers.TestProtos.RefineSearchRequest.ParseFrom(input, registry), global::Google.ProtocolBuffers.TestProtos.SearchResponse.CreateBuilder());

+          default: throw pb::ThrowHelper.CreateMissingMethod(typeof(ISearchService), methodName);

+        }

+      }

+    }

+  }

+  #endregion

+  

+}

+

+#endregion Designer generated code

diff --git a/csharp/src/ProtocolBuffersLite.Test/TestUtil.cs b/csharp/src/ProtocolBuffersLite.Test/TestUtil.cs
new file mode 100644
index 0000000..44c09b9
--- /dev/null
+++ b/csharp/src/ProtocolBuffersLite.Test/TestUtil.cs
@@ -0,0 +1,31 @@
+using System;

+using System.Collections.Generic;

+using System.Text;

+using Microsoft.VisualStudio.TestTools.UnitTesting;

+

+namespace Google.ProtocolBuffers

+{

+    class TestUtil

+    {

+        internal static void AssertBytesEqual(byte[] a, byte[] b)

+        {

+            if (a == null || b == null)

+            {

+                Assert.AreEqual<object>(a, b);

+            }

+            else

+            {

+                Assert.AreEqual(a.Length, b.Length, "The byte[] is not of the expected length.");

+

+                for (int i = 0; i < a.Length; i++)

+                {

+                    if (a[i] != b[i])

+                    {

+                        Assert.AreEqual(a[i], b[i], "Byte[] differs at index " + i);

+                    }

+                }

+            }

+        }

+

+    }

+}

diff --git a/csharp/src/UseVS2008.bat b/csharp/src/UseVS2008.bat
new file mode 100644
index 0000000..4cf9738
--- /dev/null
+++ b/csharp/src/UseVS2008.bat
@@ -0,0 +1,8 @@
+@ECHO OFF

+REM ---- Converts the solution to Visual Studio 2008 ----

+PUSHD %~dp0

+ECHO Microsoft Visual Studio Solution File, Format Version 10.00> Temp.sln

+ECHO # Visual Studio 2008>> Temp.sln

+type ProtocolBuffers.sln | FIND /V " Visual Studio " >> Temp.sln

+move /Y Temp.sln ProtocolBuffers.sln

+POPD

diff --git a/csharp/src/UseVS2010.bat b/csharp/src/UseVS2010.bat
new file mode 100644
index 0000000..376a08f
--- /dev/null
+++ b/csharp/src/UseVS2010.bat
@@ -0,0 +1,8 @@
+@ECHO OFF

+REM ---- Converts the solution to Visual Studio 2010 ----

+PUSHD %~dp0

+ECHO Microsoft Visual Studio Solution File, Format Version 11.00> Temp.sln

+ECHO # Visual Studio 2010>> Temp.sln

+type ProtocolBuffers.sln | FIND /V " Visual Studio " >> Temp.sln

+move /Y Temp.sln ProtocolBuffers.sln

+POPD

diff --git a/csharp/testdata/golden_message b/csharp/testdata/golden_message
new file mode 100644
index 0000000..94898e4
--- /dev/null
+++ b/csharp/testdata/golden_message
Binary files differ
diff --git a/csharp/testdata/golden_packed_fields_message b/csharp/testdata/golden_packed_fields_message
new file mode 100644
index 0000000..ee28d38
--- /dev/null
+++ b/csharp/testdata/golden_packed_fields_message
Binary files differ
diff --git a/csharp/testdata/text_format_unittest_data.txt b/csharp/testdata/text_format_unittest_data.txt
new file mode 100644
index 0000000..d3e27b7
--- /dev/null
+++ b/csharp/testdata/text_format_unittest_data.txt
@@ -0,0 +1,116 @@
+optional_int32: 101

+optional_int64: 102

+optional_uint32: 103

+optional_uint64: 104

+optional_sint32: 105

+optional_sint64: 106

+optional_fixed32: 107

+optional_fixed64: 108

+optional_sfixed32: 109

+optional_sfixed64: 110

+optional_float: 111

+optional_double: 112

+optional_bool: true

+optional_string: "115"

+optional_bytes: "116"

+OptionalGroup {

+  a: 117

+}

+optional_nested_message {

+  bb: 118

+}

+optional_foreign_message {

+  c: 119

+}

+optional_import_message {

+  d: 120

+}

+optional_nested_enum: BAZ

+optional_foreign_enum: FOREIGN_BAZ

+optional_import_enum: IMPORT_BAZ

+optional_string_piece: "124"

+optional_cord: "125"

+repeated_int32: 201

+repeated_int32: 301

+repeated_int64: 202

+repeated_int64: 302

+repeated_uint32: 203

+repeated_uint32: 303

+repeated_uint64: 204

+repeated_uint64: 304

+repeated_sint32: 205

+repeated_sint32: 305

+repeated_sint64: 206

+repeated_sint64: 306

+repeated_fixed32: 207

+repeated_fixed32: 307

+repeated_fixed64: 208

+repeated_fixed64: 308

+repeated_sfixed32: 209

+repeated_sfixed32: 309

+repeated_sfixed64: 210

+repeated_sfixed64: 310

+repeated_float: 211

+repeated_float: 311

+repeated_double: 212

+repeated_double: 312

+repeated_bool: true

+repeated_bool: false

+repeated_string: "215"

+repeated_string: "315"

+repeated_bytes: "216"

+repeated_bytes: "316"

+RepeatedGroup {

+  a: 217

+}

+RepeatedGroup {

+  a: 317

+}

+repeated_nested_message {

+  bb: 218

+}

+repeated_nested_message {

+  bb: 318

+}

+repeated_foreign_message {

+  c: 219

+}

+repeated_foreign_message {

+  c: 319

+}

+repeated_import_message {

+  d: 220

+}

+repeated_import_message {

+  d: 320

+}

+repeated_nested_enum: BAR

+repeated_nested_enum: BAZ

+repeated_foreign_enum: FOREIGN_BAR

+repeated_foreign_enum: FOREIGN_BAZ

+repeated_import_enum: IMPORT_BAR

+repeated_import_enum: IMPORT_BAZ

+repeated_string_piece: "224"

+repeated_string_piece: "324"

+repeated_cord: "225"

+repeated_cord: "325"

+default_int32: 401

+default_int64: 402

+default_uint32: 403

+default_uint64: 404

+default_sint32: 405

+default_sint64: 406

+default_fixed32: 407

+default_fixed64: 408

+default_sfixed32: 409

+default_sfixed64: 410

+default_float: 411

+default_double: 412

+default_bool: false

+default_string: "415"

+default_bytes: "416"

+default_nested_enum: FOO

+default_foreign_enum: FOREIGN_FOO

+default_import_enum: IMPORT_FOO

+default_string_piece: "424"

+default_cord: "425"

diff --git a/csharp/testdata/text_format_unittest_extensions_data.txt b/csharp/testdata/text_format_unittest_extensions_data.txt
new file mode 100644
index 0000000..4fc282c
--- /dev/null
+++ b/csharp/testdata/text_format_unittest_extensions_data.txt
@@ -0,0 +1,116 @@
+[protobuf_unittest.optional_int32_extension]: 101

+[protobuf_unittest.optional_int64_extension]: 102

+[protobuf_unittest.optional_uint32_extension]: 103

+[protobuf_unittest.optional_uint64_extension]: 104

+[protobuf_unittest.optional_sint32_extension]: 105

+[protobuf_unittest.optional_sint64_extension]: 106

+[protobuf_unittest.optional_fixed32_extension]: 107

+[protobuf_unittest.optional_fixed64_extension]: 108

+[protobuf_unittest.optional_sfixed32_extension]: 109

+[protobuf_unittest.optional_sfixed64_extension]: 110

+[protobuf_unittest.optional_float_extension]: 111

+[protobuf_unittest.optional_double_extension]: 112

+[protobuf_unittest.optional_bool_extension]: true

+[protobuf_unittest.optional_string_extension]: "115"

+[protobuf_unittest.optional_bytes_extension]: "116"

+[protobuf_unittest.optionalgroup_extension] {

+  a: 117

+}

+[protobuf_unittest.optional_nested_message_extension] {

+  bb: 118

+}

+[protobuf_unittest.optional_foreign_message_extension] {

+  c: 119

+}

+[protobuf_unittest.optional_import_message_extension] {

+  d: 120

+}

+[protobuf_unittest.optional_nested_enum_extension]: BAZ

+[protobuf_unittest.optional_foreign_enum_extension]: FOREIGN_BAZ

+[protobuf_unittest.optional_import_enum_extension]: IMPORT_BAZ

+[protobuf_unittest.optional_string_piece_extension]: "124"

+[protobuf_unittest.optional_cord_extension]: "125"

+[protobuf_unittest.repeated_int32_extension]: 201

+[protobuf_unittest.repeated_int32_extension]: 301

+[protobuf_unittest.repeated_int64_extension]: 202

+[protobuf_unittest.repeated_int64_extension]: 302

+[protobuf_unittest.repeated_uint32_extension]: 203

+[protobuf_unittest.repeated_uint32_extension]: 303

+[protobuf_unittest.repeated_uint64_extension]: 204

+[protobuf_unittest.repeated_uint64_extension]: 304

+[protobuf_unittest.repeated_sint32_extension]: 205

+[protobuf_unittest.repeated_sint32_extension]: 305

+[protobuf_unittest.repeated_sint64_extension]: 206

+[protobuf_unittest.repeated_sint64_extension]: 306

+[protobuf_unittest.repeated_fixed32_extension]: 207

+[protobuf_unittest.repeated_fixed32_extension]: 307

+[protobuf_unittest.repeated_fixed64_extension]: 208

+[protobuf_unittest.repeated_fixed64_extension]: 308

+[protobuf_unittest.repeated_sfixed32_extension]: 209

+[protobuf_unittest.repeated_sfixed32_extension]: 309

+[protobuf_unittest.repeated_sfixed64_extension]: 210

+[protobuf_unittest.repeated_sfixed64_extension]: 310

+[protobuf_unittest.repeated_float_extension]: 211

+[protobuf_unittest.repeated_float_extension]: 311

+[protobuf_unittest.repeated_double_extension]: 212

+[protobuf_unittest.repeated_double_extension]: 312

+[protobuf_unittest.repeated_bool_extension]: true

+[protobuf_unittest.repeated_bool_extension]: false

+[protobuf_unittest.repeated_string_extension]: "215"

+[protobuf_unittest.repeated_string_extension]: "315"

+[protobuf_unittest.repeated_bytes_extension]: "216"

+[protobuf_unittest.repeated_bytes_extension]: "316"

+[protobuf_unittest.repeatedgroup_extension] {

+  a: 217

+}

+[protobuf_unittest.repeatedgroup_extension] {

+  a: 317

+}

+[protobuf_unittest.repeated_nested_message_extension] {

+  bb: 218

+}

+[protobuf_unittest.repeated_nested_message_extension] {

+  bb: 318

+}

+[protobuf_unittest.repeated_foreign_message_extension] {

+  c: 219

+}

+[protobuf_unittest.repeated_foreign_message_extension] {

+  c: 319

+}

+[protobuf_unittest.repeated_import_message_extension] {

+  d: 220

+}

+[protobuf_unittest.repeated_import_message_extension] {

+  d: 320

+}

+[protobuf_unittest.repeated_nested_enum_extension]: BAR

+[protobuf_unittest.repeated_nested_enum_extension]: BAZ

+[protobuf_unittest.repeated_foreign_enum_extension]: FOREIGN_BAR

+[protobuf_unittest.repeated_foreign_enum_extension]: FOREIGN_BAZ

+[protobuf_unittest.repeated_import_enum_extension]: IMPORT_BAR

+[protobuf_unittest.repeated_import_enum_extension]: IMPORT_BAZ

+[protobuf_unittest.repeated_string_piece_extension]: "224"

+[protobuf_unittest.repeated_string_piece_extension]: "324"

+[protobuf_unittest.repeated_cord_extension]: "225"

+[protobuf_unittest.repeated_cord_extension]: "325"

+[protobuf_unittest.default_int32_extension]: 401

+[protobuf_unittest.default_int64_extension]: 402

+[protobuf_unittest.default_uint32_extension]: 403

+[protobuf_unittest.default_uint64_extension]: 404

+[protobuf_unittest.default_sint32_extension]: 405

+[protobuf_unittest.default_sint64_extension]: 406

+[protobuf_unittest.default_fixed32_extension]: 407

+[protobuf_unittest.default_fixed64_extension]: 408

+[protobuf_unittest.default_sfixed32_extension]: 409

+[protobuf_unittest.default_sfixed64_extension]: 410

+[protobuf_unittest.default_float_extension]: 411

+[protobuf_unittest.default_double_extension]: 412

+[protobuf_unittest.default_bool_extension]: false

+[protobuf_unittest.default_string_extension]: "415"

+[protobuf_unittest.default_bytes_extension]: "416"

+[protobuf_unittest.default_nested_enum_extension]: FOO

+[protobuf_unittest.default_foreign_enum_extension]: FOREIGN_FOO

+[protobuf_unittest.default_import_enum_extension]: IMPORT_FOO

+[protobuf_unittest.default_string_piece_extension]: "424"

+[protobuf_unittest.default_cord_extension]: "425"